概述
在HDLBits中有一道题,
对于8位向量中的每一位,检测输入信号何时从一个时钟周期的0变化到下一个时钟周期的1(正边缘检测)。输出位应该在发生0到1转换后的周期,如下示意图所示:
给出的答案为:
module top_module (
input clk,
input [7:0] in,
output reg [7:0] temp_in,
output reg [7:0] pedge
);
always @(posedge clk) begin
temp_in <= in;
pedge <= ~temp_in & in;
end
endmodule
从题目的图上来看,input in[7:0]的0-1变化是和clk上升沿同步,但其实图上表达的是,in[7:0]比clk上升沿延迟一段时间从0突变为1,为验证input in[7:0]和clk同步和不同步时输出的波形,做了仿真
当in相较于clk晚一个步长时,仿真和题目所给波形一致,表明题目的input和clk不是同步的,always@(posedge clk) temp_in<=in,表示的是,在clk上升沿发生时,把in在上升沿时的向量大小赋值给temp_in,而计算pedge=(~temp_in)&in,时,temp_in的值是前一clk上升沿触发时in的值,即非阻塞赋值的特性。
具体分析前几个clk周期,在第二个上升沿到来时,temp_in被赋值为0,在第三个上升沿到来时,temp_in被赋值为2,且此时pedge=(~0000)&0010,因此,pedge在第三个上升沿时输出是2。
仿真input in[7:0]和clk同步时输出波形,
在第二个上升沿时,input in[7:0]和clk同时变为高电平,此时verilog的做法是
always@(posedge clk) temp_in<=in,默认in已在clk上升沿时跳变为高电平,因此,temp_in被赋值为2,此时,pedge=(~0000)&0010,因此表现为没有clk延迟,和in变化同步。
最后
以上就是疯狂跳跳糖为你收集整理的Verilog中上升沿触发的理解的全部内容,希望文章能够帮你解决Verilog中上升沿触发的理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复