FPGA的Verilog打拍方式无法打拍,测试的仿真结果不打拍的解决方法。

这篇具有很好参考价值的文章主要介绍了FPGA的Verilog打拍方式无法打拍,测试的仿真结果不打拍的解决方法。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       先附上参考链接:http://t.csdn.cn/krJki

        最近做项目涉及到边缘检测,发现对输入信号打拍时仿真结果无法实现打两拍的功能。这些年多多少少都遇到过类似打拍失效的情况,因为当时项目的原因起初没有太过注意,但现在需要对周期数严格把控,就需要实时的仿真观测到到底是多少拍,由此开始了面向CSDN的学习过程,网上所讲甚少,为了方便后来的小伙伴快速解决,所以根据参考链接和测试有了以下的解决方式。

先提出解决方法:在编写测试激励文件也就是tb文件设计时:

时钟复位用阻塞赋值(=),其他信号用非阻塞赋值(<=)。

        为了更具体的看到效果,做下面的测试。简单的设计的一个.v文件,代码如下:

module Beat(
    input clk,rst,
    input   wire Flag_in,
    output  wire Flag_out
    );
 reg Flag_R0,Flag_R1;
always@(posedge clk)
    if(rst)
       begin
        Flag_R0<=1'b0;
        Flag_R1<=1'b0;
       end 
       else begin
             Flag_R0<=Flag_in;
             Flag_R1<=Flag_R0;   
            end
 assign   Flag_out    =Flag_R1;     
endmodule

        其实现的功能就是将输入的Flag_in信号打两拍然后输出给到Flag_out信号。接下来就是仿真激励文件代码如下:

`timescale 1ns / 1ps
module Beat_tb;
    reg clk,rst;
    reg    Flag_in;
    wire   Flag_out;
Beat b0(
    .clk(clk),
    .rst(rst),
    .Flag_in(Flag_in),
    .Flag_out(Flag_out)
    );    
initial
 begin
    clk =1'b1;
    rst =1'b1;
    #2
    rst =1'b0;
    forever #2 clk =!clk;
 end
 initial
 begin
    Flag_in =1'b0;
    #10
    Flag_in =1'b1;
    #20
    Flag_in =1'b0;
 end  
endmodule

        当我们对所有的输入信号都通过阻塞的方式赋值时,就会产生如下结果

vivado 对信号大一拍但是仿真出来没有打拍,FPGA开发,fpga开发,开发语言

        可以直观的看到,从输入Flag_in到Flag_R0时没有实现打拍效果的,R0到R1是可以打拍。接下来我继续测试了1、所有信号非阻塞赋值和2、时钟复位非阻塞赋值,其他信号阻塞赋值,这两种赋值组合,结果都跟上图一样无法实现打两拍操作

        最后就是正确方法的测试代码:

`timescale 1ns / 1ps
module Beat_tb;
    reg clk,rst;
    reg    Flag_in;
    wire   Flag_out;
Beat b0(
    .clk(clk),
    .rst(rst),
    .Flag_in(Flag_in),
    .Flag_out(Flag_out)
    );    
initial
 begin
    clk =1'b1;
    rst =1'b1;
    #2
    rst =1'b0;
    forever #2 clk =!clk;
 end
// always #2 clk=!clk;
 initial
 begin
    Flag_in <=1'b0;
    #10
    Flag_in <=1'b1;
    #20
    Flag_in <=1'b0;
 end  
endmodule

测试的结果如下图:

vivado 对信号大一拍但是仿真出来没有打拍,FPGA开发,fpga开发,开发语言

        可以看到利用 时钟复位用阻塞赋值(=),其他信号用非阻塞赋值(<=)的方式成功的实现了打拍的操作,输入到R0成功打了一拍。

        深究原因还是仿真中阻塞赋值和非阻塞赋值的使用原因,如果有知道其原理的大佬可以麻烦在评论区指教一下,因为本文只提出了解决方法,也是知其然,不知其所以然。文章来源地址https://www.toymoban.com/news/detail-528711.html

到了这里,关于FPGA的Verilog打拍方式无法打拍,测试的仿真结果不打拍的解决方法。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 数字分频器设计(偶数分频、奇数分频、小数分频、半整数分频、状态机分频|verilog代码|Testbench|仿真结果)

    数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字I

    2024年02月08日
    浏览(45)
  • 奇偶校验器设计(奇偶校验与奇偶检测,XOR法和计数器法|verilog代码|Testbench|仿真结果)

    数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字I

    2024年02月11日
    浏览(50)
  • FPGA设计——verilog实现乒乓操作并modelsim仿真

    乒乓操作是FPGA设计中常用的一种技巧,它通过数据流控制实现按节拍相互配合的切换,来提高数据处理效率,达到无缝缓冲和处理的效果。本文针对乒乓操作进行学习总结。 完整工程 一、原理图如下 : 1、二选一控制器来对缓冲模块1和2进行选择。 2、数据缓冲模块一般就是

    2023年04月08日
    浏览(48)
  • FPGA学习笔记:verilog基础代码与modelsim仿真(三)

    1. 分频器——偶分频 方法1: verilog代码实现: modelsim仿真波形图: 方法2(推荐): 比起方法一直接使用计数器定义一个新的时钟波形,方法二使用flag_out作为分频变量从而实现分频器的功能。虽然二者都使用了计数器,但方法二显然更符合“分频”的定义,且此方法在告诉

    2024年02月06日
    浏览(52)
  • FPGA(Verilog)实现uart传输协议传输数据(含仿真)

    目录 实现功能: 1.接收uart串行数据,输出并行数据(1byte)。 2.输入并行数据(1byte),输出uart串行数据。 3.完成uart传输的1次环回。 uart协议的1帧数据传输 模块封装-port设置 Verilog代码实现 1.uart接收模块:接收串行数据,输出并行数据和其有效标志。 仿真结果: 2.uart发送模块:接收

    2024年04月16日
    浏览(45)
  • Verilog代码生成FPGA仿真波形文件(VCD)介绍

    Verilog代码生成FPGA仿真波形文件(VCD)介绍 在FPGA设计中,我们需要对设计的电路进行仿真以检查其正确性。VCD(Value Change Dump)文件是一种常用的仿真波形文件格式,可以记录电路仿真过程中各个信号的变化情况。本文将介绍如何使用Verilog代码来生成VCD文件。 首先,我们需

    2024年02月06日
    浏览(46)
  • 基于FPGA的音乐喷泉控制Verilog代码Quartus仿真

    名称:基于FPGA的音乐喷泉控制Verilog代码Quartus仿真(文末获取) 软件:Quartus 语言:Verilog 代码功能: 基于FPGA的音乐喷泉控制 1、具有启动控制按键,按下后开始 2、喷泉具有6个喷嘴,可以手动切换三种工作模式 3、输入的音乐信号分为低音、中音、高音 4、将输入的音转换为

    2024年02月22日
    浏览(48)
  • 基于FPGA的MSK调制波形Verilog代码Quartus仿真

    名称:基于FPGA的MSK调制波形Verilog代码Quartus仿真(文末获取) 软件:Quartus 语言:Verilog 代码功能: 基于FPGA的MSK调制波形 1、输入调制原始数据,输出MSK调制波形 2、包括差分编码模块,MSK调制模块,DDS模块,有符号乘法器模块等 1. 工程文件 2. 程序文件 3. 程序编译 4. RTL图

    2024年02月20日
    浏览(39)
  • FPGA_学习_04_Verilog基础语法和Modelsem仿真

    前言:对于以前学过C/C++/C#的作者来讲,Verilog的基础语法算是 特别简单 的。本文主要介绍Verilog的基础语法和Modelsem仿真。 FPGA开发是以模块为基础的,每个可 综合 的.v文件都是一个模块,模块由 module 和 endmodule 来声明。在这两个的内部,完成模块功能的实现。 在Vi

    2024年02月05日
    浏览(47)
  • 基于FPGA和Verilog实现的9层电梯控制器仿真设计

    资源下载地址:https://download.csdn.net/download/sheziqiong/85628810 资源下载地址:https://download.csdn.net/download/sheziqiong/85628810 电梯最少可以往返于0—9层楼。 乘客要去的楼层数A可手动输入并显示,按取消键可清除本次输入。 可自动显示电梯运行的楼层数B 当AB时,电梯上升; 当AB时,

    2024年02月02日
    浏览(70)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包