Verilog实现任意时钟周期延时的方法

这篇具有很好参考价值的文章主要介绍了Verilog实现任意时钟周期延时的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法一:非阻塞赋值延时打拍

这个方法是最简单的实现延时的方法,缺点是如果延时的周期比较长的话,要写的东西也会变得很多

always @ (posedge clk) begin
     d1 <= d;
     d2 <= d1;
     .......
     dout <= dn;
end

通过这种方式可以把信号延时n个周期。

方法二:移位寄存器延时

这个方法也比较简单,实现起来也很容易,缺点是消耗的资源比较大

//延时N个时钟周期
parameter N=4;
reg [N-1:0] temp;

always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
	    temp <= 0;
        end
    else if(in1) begin
        temp[N-1:0] <= {temp[N-2:0],in1};
    end
    else begin
        temp[N-1:0] <= {temp[N-2:0],1'b0};
    end
end
assign out1 = temp[N-1];

方法三:计数器实现任意周期延时

该方法较为节省资源,能实现任意周期的延时

parameter delay_per = 8'h4;//延时周期数
reg flag;
reg [7:0] delay_count;

always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        flag <= 0;
        end
    else if(in1)begin
        flag <= 1;
        end
    else if(delay_count == delay_per)begin
        flag <= 0;
        end
end

always @(posedge clk or negedge rst_n) begin
    if(!rst_n)begin
        delay_count <= 0;
        out1 <= 0;
        end
    else if(delay_count == delay_per && flag == 1'b1)begin
        delay_count <= 0;
        out1 <= 1;
        end
    else if(flag == 1'b1)begin
        delay_count <= delay_count + 1'b1;
        out1 <= 0;
        end
    else begin
        delay_count <= 0;
        out1 <= 0;
    end
end

小结

文章介绍了三种实现信号周期延时的方法,但需要注意的是,在方法三中,如果信号间隔的周期数小于延时的周期,这种方法就不太合适了。此时推荐使用方法二,或者使用FIFO来实现信号延时。文章来源地址https://www.toymoban.com/news/detail-510081.html

到了这里,关于Verilog实现任意时钟周期延时的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Verilog】握手信号实现跨时钟域数据传输-handshake

    handshake握手电路 跨时钟域处理是个很庞大并且在设计中很常出现的问题 握手(handshake)是用来处理信号跨时钟域传递的一个有效的方法 使用握手协议方式处理跨时钟域数据传输,只需要对双方的握手信号(req和ack)分别使用脉冲检测方法进行同步 req与ack就和TCP传输之前的三次

    2024年02月05日
    浏览(38)
  • 「Verilog学习笔记」使用握手信号实现跨时钟域数据传输

    专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网

    2024年02月04日
    浏览(47)
  • Verilog-实现时钟分频(1KHZ、奇、偶分频,占空比为50%)

    代码如下 1khz分频代码 1khz分频-testbench 仿真图如下 通过计数器实现,进行N倍偶数分频,通过时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,以此循环下去。(占空比为50%) ,以下代码实现8分频,可根据实际需求改变参数输出需要的时钟。 代码如下 偶

    2024年02月08日
    浏览(51)
  • 【实验室学习】时钟分频器,2、3、4、8分频 verilog实现

    记录时钟分频器的Verilog代码编写,主要掌握分频器设计思路 2、4、8分频设计较为容易: 2分频—设计一个1位的寄存器,当原时钟上升沿时取反即可 代码展示: 4分频与8分频—设计一个两位的计数器,4分频只需在计数器计数到00B或者10B时跳变电平即可,8分频只需在计数器计

    2024年02月11日
    浏览(44)
  • Verilog实现Gating clock(时钟门控技术)的原理和实现。可以画门级电路图。

    参考文献: 参考1-常见的锁存器结构,点击 参考2-clock gating整理,点击 时钟门控技术 ,是一种非常简单和有效的功耗控制方法,它的基本原理是通过关闭芯片上暂时用不到的功能和它的时钟,从而实现节省电流消耗的目的。 参考文献:

    2024年02月12日
    浏览(39)
  • FPGA小脚丫开发板实现数字时钟,具备调时、整点报时、闹钟功能(含verilog代码)

    一、实现功能 1. 能正常完成时钟的时、分、秒走时; 2. 使用 LED 闪烁或者改变颜色等方式实现秒的指示,要求闪烁频率或者颜色切换频率为 1Hz ; 3. 使用两位七段数码管显示时和分,其切换方式为:默认显示“分钟”,按住 K4 键显示“小时”,按下 K3 显示秒针; 4. 关上开关

    2024年02月11日
    浏览(61)
  • 紫光同创FPGA纯verilog代码实现图像缩放,两种插值算法任意尺寸缩放,提供3套PDS工程源码

    FPGA高端项目:紫光同创系列FPGA纯verilog图像缩放工程解决方案 提供3套工程源码和技术支持 “苟利国家生死以,岂因祸福避趋之!”大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于高精尖半导体的制造领域,于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初

    2024年02月08日
    浏览(59)
  • 音频延时测试方法与实现

    音频延时测试方法有以下几种 1、使用专业的测试设备,通过专业的音频测试仪器可以准确测量音频延时,如常见声学分析仪、信号发生器、声卡+Smaart(介绍测试延时方法链接:https://blog.csdn.net/weixin_48408892/article/details/127318158?spm=1001.2014.3001.5501)等等。 2、手动测量:可以通过

    2024年02月11日
    浏览(34)
  • RabbitMQ实现延时消息的两种方法

    1、死信队列 1.1消息什么时候变为死信(dead-letter) 消息被否定接收,消费者使用basic.reject 或者 basic.nack并且requeue 重回队列属性设为false。 消息在队列里得时间超过了该消息设置的过期时间(TTL)。 消息队列到达了它的最大长度,之后再收到的消息。 1.2死信队列的原理 当一个

    2024年02月10日
    浏览(42)
  • verilog的非阻塞赋值、延拍和电路延时

    1.时序电路使用非阻塞赋值,always块中的语句顺序无影响; 2.非阻塞赋值中d和out的新值在本次上升沿计算之后,下一次上升沿才会生效; 阻塞赋值会使信号变化立即生效 3.实际电路中,下一次上升沿值生效时会有一定触发器延时(上一拍采数时,往左边偏一点采值)。

    2024年03月24日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包