我是靠谱客的博主 疯狂跳跳糖,最近开发中收集的这篇文章主要介绍Verilog中上升沿触发的理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在HDLBits中有一道题,

对于8位向量中的每一位,检测输入信号何时从一个时钟周期的0变化到下一个时钟周期的1(正边缘检测)。输出位应该在发生0到1转换后的周期,如下示意图所示:10.png

给出的答案为:

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中上升沿触发的理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部