数字IC手撕代码-边沿检测(上升沿、下降沿、双边沿)
前言:
本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析、代码及波形,所有代码均经过本人验证。
目录如下:
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
上升边沿 边沿检测波形
下降边沿 边沿检测波形
双边沿 边沿检测波形
边沿检测
在使用FIFO进行数据读写的时候,我们会用到边沿检测,比如当FIFO内的数据被读空了,这样 empty 信号就会从0→1,产生一个上升沿,当这个上升沿到来的时候代表FIFO内孔,我们就可以对FIFO进行一个写操作(把写使能拉高,往FIFO写数据),所以边沿检测是十分常用的东西,下面我们来讲讲边沿检测的原理、代码以及对应仿真。
原理
比如我们要检测信号 signal 的上升沿,我们使用两个寄存器,级联记录 signal 的值,这样由于寄存器延迟一拍的特性,第二个寄存器永远会延迟第一个寄存器。
当 signal 上升沿到来时,会有:第一个寄存器检测为高,第二个寄存器检测为低。
这样,我们只要把第二个寄存器取反,然后和第一个寄存器做与运算,这样当计算的数值为 1 时,就检测到了上升边沿。
代码
module edge_det(input clk ,input rstn ,input signal ,output signal_edge
);reg reg1,reg2;always @(posedge clk or negedge rstn)beginif(!rstn)beginreg1 <= 1'b0;reg2 <= 1'b0;endelse beginreg1 <= signal;reg2 <= reg1;end
endassign signal_edge = (~reg2) & reg1;endmodule
testbench
module edge_det_tb();reg clk,rstn;
reg signal;wire signal_edge;always #10 clk = ~clk;initial beginclk <= 1'b0;rstn <= 1'b0;signal <= 1'b0;#50rstn <= 1'b1;#100signal <= 1'b1;
end edge_det u_edge_det (.clk (clk) ,.rstn (rstn) ,.signal (signal) ,.signal_edge (signal_edge));endmodule
上升边沿 边沿检测波形
从图中我们可以看到,跟我们预料的一样,当上升沿到来的时候,reg1和 reg2 信号错一拍,这样利用这个特性,让signal_edge = ~reg2 & reg1 就能检测到上升边沿。
检测下降沿也是一个道理,代码完全一致,就是把最后边沿检测信号改为:
assign signal_edge = ~reg1 & reg2;
下降边沿 边沿检测波形
双边沿 边沿检测波形
双边沿检测,就是上升沿和下降沿,检测信号都要输出一次高电平。这我们可以用异或实现,同样是只需要在上升沿检测的代码里改最后一条赋值语句即可,改为:
assign signal_edge = reg1 ^reg2 ;
结果和我们设计的一致。
数字IC手撕代码-边沿检测(上升沿、下降沿、双边沿)相关推荐
- 数字IC手撕代码-兆易创新笔试真题
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-流水握手(利用握手解决流水线断流、反压问题)
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-乐鑫科技笔试真题(4倍频)
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-同步FIFO
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码---百题斩
前言: 本篇导览目录,用来索引笔者写的其他手撕代码文章 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC ...
- 数字IC手撕代码-有限状态机FSM-饮料机
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码--小米科技(除法器设计)
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-泰凌微笔试真题
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-平头哥技术终面手撕真题
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
最新文章
- bean ref的bean可以做判断吗_Spring Boot @Condition 注解,组合条件你知道吗
- JavaScript之substring()方法讲解
- 大咖来信 | 微软中国CTO韦青:低代码/无代码时代来了,写代码的你准备好了吗?...
- dp凸优化/wqs二分学习笔记(洛谷4383 [八省联考2018]林克卡特树lct)
- Oracle EBS常用数据表
- 小菜学习Lucene.Net(更新3.0.3版本使用)
- GG and MM(every sg 游戏)
- Linux下的gpio,gpiod
- 友勤签约中芝软件系统(上海)有限公司Oracle Crystal Ball Suite软件项目
- LTP 语义依存分析
- OSPF之Stub区域
- 【原创】小时候特别喜欢玩的强手棋游戏
- SPSS李克特五点计分调查问卷的选项如何设置?【SPSS 066期】
- oracle ora 3136,关于ORA-3136的处理思路
- 超级!超级!超级好用的视频标注工具
- 塔望3W消费战略全案|牛小范:即食牛排如何打造品牌「高级感」
- 食君之禄 忠君之事 奈何哉!
- 关于ssh登录时卡顿30s左右的问题调试处理
- k8S中的MySQL如何扩容_Kubernetes 中进行 PVC 的扩容 互联网技术圈 互联网技术圈
- 荣耀7x Android8,荣耀7X升级安卓8.0