前言:

本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析、代码及波形,所有代码均经过本人验证。

目录如下:

1.数字IC手撕代码-分频器(任意偶数分频)

2.数字IC手撕代码-分频器(任意奇数分频)

3.数字IC手撕代码-分频器(任意小数分频)

4.数字IC手撕代码-异步复位同步释放

5.数字IC手撕代码-边沿检测(上升沿、下降沿、双边沿)

6.数字IC手撕代码-序列检测(状态机写法)

7.数字IC手撕代码-序列检测(移位寄存器写法)

8.数字IC手撕代码-半加器、全加器

9.数字IC手撕代码-串转并、并转串

10.数字IC手撕代码-数据位宽转换器(宽-窄,窄-宽转换)

11.数字IC手撕代码-有限状态机FSM-饮料机

12.数字IC手撕代码-握手信号(READY-VALID)

13.数字IC手撕代码-流水握手(利用握手解决流水线断流、反压问题)

14.数字IC手撕代码-泰凌微笔试真题

15.数字IC手撕代码-平头哥技术终面手撕真题

16.数字IC手撕代码-兆易创新笔试真题

17.数字IC手撕代码-乐鑫科技笔试真题(4倍频)

18.数字IC手撕代码-双端口RAM(dual-port-RAM)

...持续更新

更多手撕代码题可以前往 数字IC手撕代码--题库


目录

题目描述

解决思路

代码

testbench

波形


题目描述

有一随机产生的pulse,其最小脉宽大于5ns。现有一时钟周期为20ns的时钟,他们的关系如下图所示,请写出计算该脉冲个数的verilog代码。

解决思路

这道题的解决思路就是将pulse信号转换到clk域来进行处理。

首先,每次检测到pulse的上升沿,我们就对Q1进行取反。这是在pulse域下改变Q1的值。

always @(posedge pulse)beginQ1 <= ~Q1;
end

其次,在每一次的时钟上升沿,我们对Q1数据进行打两拍。将Q1赋给Q2,将Q2赋给Q3,然后检测pulse的信号为:edge_dect = Q2 ^ Q3;

always @(posedge clk)beginif(!rstn)beginQ1 <= 1'b0;Q2 <= 1'b0;Q3 <= 1'b0;endelse beginQ2 <= Q1;Q3 <= Q2;end
end

最后,对edge_dect 进行计数,数字就是pulse的个数。

这样做的原理其实就是延长pulse的宽度,让pulse能够被clk采样,接着再利用双边沿检测的方法(打两拍取异或,edge_dect = Q2 ^ Q3)得到clk域的pulse,再对其进行计数即可。

约束:这种方法使用的前提是相邻两个pulse之间的距离要大于clk一个时钟周期,否则会出现漏采样的现象。

针对本题pulse之间的距离均大于一个clk周期,所以可以采用该方案。

ps:如果有人有更好的方案相邻1ns的两个5ns pulse都能检测到的话,可以在评论区讲解自己的方法。(倍频方法就算了)

代码

module GigaDevice#(
)(input            clk       ,input            rstn      ,input            pulse     ,output reg [4:0] count
);reg Q1,Q2,Q3;
always @(posedge pulse)beginQ1 <= ~Q1;
endalways @(posedge clk)beginif(!rstn)beginQ1 <= 1'b0;Q2 <= 1'b0;Q3 <= 1'b0;endelse beginQ2 <= Q1;Q3 <= Q2;end
endwire edge_dect;
assign edge_dect = Q2 ^ Q3;always @(posedge clk)beginif(!rstn)begincount <= 1'd0; endelse if(edge_dect) begincount <= count + 1'b1;end
endendmodule

testbench

module GigaDevice_tb();
reg clk,rstn,pulse;always #10 clk = ~clk;initial beginclk <= 1'b0;rstn <= 1'b0;pulse <= 1'b0;#20rstn <= 1'b1;#500$stop();
end
initial begin#33 pulse <= 1'b1;#7  pulse <= 1'b0;  //40#42 pulse <= 1'b1;#5  pulse <= 1'b0;#3#27 pulse <= 1'b1;#18 pulse <= 1'b0;#5#33 pulse <= 1'b1;#5  pulse <= 1'b0;
end
wire [4:0] count;GigaDevice u_GigaDevice(.clk    (clk)     ,.rstn   (rstn)    ,.pulse  (pulse)   ,.count  (count)
);
endmodule

波形


更多手撕代码题可以前往 数字IC手撕代码--题库

数字IC手撕代码-兆易创新笔试真题相关推荐

  1. 数字IC手撕代码-乐鑫科技笔试真题(4倍频)

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  2. 数字IC手撕代码-泰凌微笔试真题

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  3. 数字IC手撕代码-流水握手(利用握手解决流水线断流、反压问题)

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  4. 数字IC手撕代码-同步FIFO

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  5. 数字IC手撕代码-边沿检测(上升沿、下降沿、双边沿)

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  6. 数字IC手撕代码---百题斩

    前言: 本篇导览目录,用来索引笔者写的其他手撕代码文章 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC ...

  7. 数字IC手撕代码-有限状态机FSM-饮料机

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  8. 数字IC手撕代码--小米科技(除法器设计)

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  9. 数字IC手撕代码-平头哥技术终面手撕真题

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

最新文章

  1. deepin更新失败_检查更新失败
  2. 企业网络推广“卡壳”了?如何更有效提升SEO排名?
  3. Lightoj 1123 - Trail Maintenance(最小增量生成树)
  4. linux字符设备驱动的 ioctl 幻数
  5. 养鹿专辑二:恋鹿篇之枕着老婆的梦编程
  6. android7.0 蓝牙定位,BluetoothAdapter在Android6.0/7.0+以上startDiscovery不能发现蓝牙设备问题...
  7. “CSDN开发助手”:【必备插件 · 安装与使用教程】
  8. (44)FPGA时序逻辑与组合逻辑(组合逻辑)
  9. 为U盘装备Ubuntu工作学习两不误
  10. linux之systemctl命令
  11. ROM与RAM混合设计
  12. w7系统事件日志服务器,win7系统事件日志服务4201错误的解决方法
  13. 计算器程序java开方运算_模拟计算器java程序
  14. search函数和search_n()函数
  15. “Windows已经阻止此软件因为无法验证发行者”解决办法
  16. 串口通信-电脑控制单片机点亮LED
  17. 路由器绑定mac地址
  18. metasploit port 详细使用方法
  19. 中山大学计算机考研专业课考什么,2017年中山大学0812计算机科学与技术考研专业目录及考试科目...
  20. JAVA中的抽象类与接口

热门文章

  1. 2022年“研究生科研素养提升”系列公益讲座在线测评题目
  2. Openlayers 快速上手教程
  3. 安装了winRAR 但压缩文件没有显示winRAR图标
  4. 计算机三级网络技术最全知识点总结三
  5. C#学习笔记:子类于父类的构造函数的关系【By Myself】
  6. ipad协议最新替代
  7. 解决导出为Excel时文件名乱码的问题。
  8. 秒杀品牌数据线的开博尔USB3.1Gen2 Type-C数据线评测
  9. 基于机器视觉的机器人智能制造实践应用研究
  10. 一篇文章教你正确解锁 代理ip 的使用方式,包含两个实战案例