Q:用Verilog HDL实现1bit信号边沿检测功能,输出一个周期宽度的脉冲信号。
这里是微信公众号的链接:Verilog笔面试常考代码精选10题
A:
一、原理
脉冲边沿的特性:两侧电平发生了变化,如上图所示一个脉冲,既有上升沿还有下降沿。
如果检测的是下降沿,也就是按键检测,应该是从高电平变低电平。
思路:设计两个或多个一位的寄存器,用来接收被检测的信号,系统时钟来一次记一次输入信号,如果用了两个寄存器直接异或就可以了。
如果不为0,则发生了边沿,再拼接,拼接顺序假定是{先进reg,后进reg},则若先进reg=1,后进位0,则是下降沿,即{先进reg,后进reg}=2’b10。
同理相反{先进reg,后进reg}=2’b01,则为上升沿。如果用了多个寄存器则可以更好地检测,防止干扰脉冲
二、代码实现
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24module Edge_Detect( input clk, input rst_n, input data, output pos_edge, // 上升沿 output neg_edge, // 下降沿 output data_edge // 上升沿或下降沿 ); reg [1:0] data_r; always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin data_r <= 2'b00; end else begin data_r <= {data_r[0], data}; end end assign pos_edge = ~data_r[1] & data_r[0]; assign neg_edge = data_r[1] & ~data_r[0]; assign data_edge = pos_edge | neg_edge; endmodule
最后
以上就是平淡手链最近收集整理的关于Verilog HDL 笔试 & 面试常考代码精选(一)的全部内容,更多相关Verilog内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复