首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏数字IC经典电路设计

    异步复位同步释放(verilog代码|Testbench|仿真结果)

    图片 数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码Testbench、仿真波形 同步复位的典型代码描述如下: module sync_reset( input rst_n, //同步复位信号 input clk, //时钟 input 异步复位的典型代码描述如下: module async_reset( input rst_n, //异步复位信号 input clk, //时钟 input 异步复位、同步释放的典型代码描述如下: module areset_srelease( input rst_n, //异步复位信号 input clk, / : 图片 Testbench代码描述如下: `timescale 1ns/1ps module areset_srelease_tb(); reg rst_n; reg clk

    7.7K61编辑于 2023-05-23
  • 来自专栏数字IC经典电路设计

    跨时钟域传输总结(包含verilog代码|Testbench|仿真结果)

    图片 图片 1.3 单比特“握手协议”verilog代码 verilog代码 //单比特快到慢“握手协议” module cdc_sbit_handshake( input aclk, // 具体代码可参考链接:Verilog 跨时钟域传输:慢到快 verilog代码 //同步模块工作时钟为 100MHz 的模块 //异步数据对来自工作时钟为 20MHz 的模块 module delay_sample 图片 这一部分具体可以查看链接:FPGA学习笔记——跨时钟域(CDC)设计之多bit信号同步 verilog代码 module data_driver( input clk_a, 代码|Testbench|仿真结果),对异步FIFO介绍很详细并且总结了若干重要问题。 verilog代码 //深度为8,数据位宽为8的异步FIFO module async_fifo #( parameter DATA_DEPTH = 8, //深度为8 parameter

    9K76编辑于 2023-06-08
  • 来自专栏FPGA探索者

    工科生的浪漫521——Verilog任意字符显示、TestBench仿真、verilog波形祝福

    波形显示效果 实现效果: 显示原理: verilog仿真时,输出多位位宽的数据,通过不同时刻的高电平数据来构成字的形状。 所需软件 (1)字模软件,PCtoLCD; (2)Vivado或者Modelsim等能运行verilog TestBench仿真的工具; 3. 取模的操作步骤 首先取字模,设置字体大小是16x16,即一个汉字占16行16列,一个数字或者字母、空格占16行8列,由此可以设置verilog输出数据的位宽是16,恰好对应16行数据。 (3)取模走向 顺向,高位在前,低位在后,正好和verilog输出一致,verilog定义输出reg [15:0] data即可。 (4)输出数制 十六进制。 显然,verilog只要设置一个[15:0] data,每个clk输出一列,就完成了扫描输出。 4. Verilog代码 不需要设置例化模块,只需要一个TestBench即可。

    1.9K30编辑于 2022-10-05
  • 来自专栏数字IC经典电路设计

    序列模三检测器(状态机法设计原理|verilog代码|Testbench|仿真结果)

    --- --- 数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码Testbench 图片 根据状态转移图写出对应的verilog代码2.2 verilog代码 //使用状态机设计模三序列检测器 module sequence_modulus3_detector( input S1:S3; default:next_state = IDLE; //养成良好代码风格,不能遗漏,防生成latch,也可以通过赋初值避免 endcase end = S3) begin mod3 <= 1'b1; end else begin mod3 <= 1'b0; end end endmodule 2.3 Testbench 不定期检查、补充、纠错,欢迎随时交流纠错 最后修改日期:2023.4.29 软件版本: 仿真软件:Modelsim 10.6c 绘图软件:亿图图示 描述语言:verilog

    5.2K30编辑于 2023-05-18
  • 来自专栏数字IC经典电路设计

    自然二进制数与格雷码的相互转换(verilog代码|Testbench|仿真结果)

    图片 --- --- 数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码Testbench 图片 如图所示,根据图示可以写出的代码。 2.2 verilog代码 //自然二进制数转格雷码 module bin2gray #( parameter width = 4 //定义数据的位宽参数为4 )( input 图片 如图所示,根据图示可以写出的代码。 2.2 verilog代码 //格雷码转自然二进制数 module gray2bin #( parameter width = 4 //定义数据的位宽参数为4 )( input

    5.2K50编辑于 2023-05-18
  • 来自专栏数字IC经典电路设计

    边沿检测(上升沿检测、下降沿检测、双边沿检测|verilog代码|Testbench|RTL电路图|仿真结果)

    数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码Testbench、仿真波形。 ~din_r & din; assign down_edge = din_r & ~din; assign both_edge = din_r ^ din; 二、上升沿检测、下降沿检测、双边沿检测 Verilog 代码 module edge_detector( input clk, input rst_n, input din, output up_edge, output ~din_r & din; assign down_edge = din_r & ~din; assign both_edge = din_r ^ din; endmodule RTL电路 图片 Testbench

    8.7K51编辑于 2023-05-24
  • 来自专栏数字IC经典电路设计

    毛刺消除与输入消抖(单边毛刺滤除、双边毛刺滤除、输入防抖|verilog代码|Testbench|仿真结果)

    数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码Testbench、仿真波形。 用格雷码替代二进制代码消除竞争冒险,确保每一时刻只有一个代码变化 1.2 从硬件描述的角度消除毛刺(单边毛刺) 如何消除毛刺呢?常采用的方法两级寄存器打拍子然后做逻辑运算。 代码描述、testbench、仿真结果。 verilog代码描述如下: //消除高电平毛刺 module burr_remove( input rst_n, //异步复位信号 input clk, 1.2 从硬件描述角度消除抖动(双边毛刺) verilog代码描述如下: //消除双边毛刺 module glitch_filter( input clk, input rst_n,

    6.7K23编辑于 2023-05-26
  • 来自专栏数字IC经典电路设计

    异步FIFO设计原理与设计方法以及重要问题汇总(包含verilog代码|Testbench|仿真结果)

    ------数字IC经典电路设计经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码Testbench、仿真波形 三、异步FIFO设计实例(verilog代码与实例)要求:实现深度为8,数据位宽为8的异步FIFO,确保数据满足先入先出。 3.1 verilog代码//深度为8,数据位宽为8的异步FIFOmodule async_fifo #( parameter DATA_DEPTH = 8,//深度为8 parameter wr_ptr_gray_r2) begin fifo_empty <= 1; end else begin fifo_empty <= 0; endendendmodule3.2 Testbench

    7K52编辑于 2023-06-05
  • 来自专栏全栈程序员必看

    同步fifo的verilog代码_verilog 异步复位

    Cummings的《Simulation and Synthesis Techniques for Asynchronous FIFO Design》,经过自己的一些改变,理论部分为转载,代码自己完成。 换一种描述方法: verilog代码实现就一句:assign gray_code = (bin_code>>1) ^ bin_code; 使用gray码解决了一个问题,但同时也带来另一个问题, ]),rd_addr_gray_d2[addr_width-2:0]}) ;//高两位不同 assign empty = ( rd_addr_gray == wr_addr_gray_d2 ); 五、Verilog

    1.1K20编辑于 2022-09-21
  • 来自专栏数字IC经典电路设计

    (单端口RAM、伪双端口RAM、真双端口RAM|verilog代码|Testbench|仿真结果)

    图片 数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码Testbench、仿真波形 2.2 verilog代码 实现一个深度为16、位宽为4的单端口RAM。 3.2 verilog代码 实现一个深度为16、位宽为4的真双端口RAM。 4.2 verilog代码 实现一个深度为16、位宽为4的伪双端口RAM。 (2)寄存器数据ram_data 图片 在Testbench中,我们借用for循环,在时钟上升沿时触发使得写入的数据data_a存储到RAM寄存器ram_data中,如上图所示 (3)写数据 图片 在90ns

    10.1K40编辑于 2023-05-31
  • 来自专栏数字IC经典电路设计

    序列检测器(两种设计方法和四种检测模式|verilog代码|Testbench|仿真结果)

    图片 --- --- 数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码Testbench 第二步:根据流程转换分析画出状态机的状态转移图,如下图所示: 图片 第三步:根据状态机转移图用经典三段式(或者二段式)写出verilog代码 2.12 verilog代码 //使用状态机设计检测“1001 2.22 verilog代码 //使用移位寄存器设计检测“1001”的序列检测器 //可重叠检测序列“1001” module sequence_detect02( input clk, 第二步:根据流程转换分析画出状态机的状态转移图,如下图所示: 图片 第三步:根据状态机转移图用经典三段式(或者二段式)写出verilog代码 3.12verilog代码 //使用状态机设计检测“1001 第二步:根据流程转换分析画出状态机的状态转移图,如下图所示 图片 第三步:根据状态机转移图用经典三段式(或者二段式)写出verilog代码 3.22verilog代码 //使用状态机设计检测“1001”

    6.6K54编辑于 2023-05-18
  • 来自专栏瓜大三哥

    Verilog代码设计风格

    1.信号命名规则 信号命名规则在团队开发中占据着重要地位,统一、有序的命名能大幅减少设计人员之间的冗余工作,还可便于团队成员代码的查错和验证。 Verilog HDL 语言关键字与其它任何字符串之间都应当保留一个空格。如: always @ ( ...... ) 使用大括号和小括号时,前括号的后边和后括号的前边应当留有一个空格。 DataOut + 4'b0001; end //end always 模块 不同层次之间的语句使用Tab 键进行缩进,每加深一层缩进一个Tab;在endmodule,endtask,endcase 等标记一个代码块结束的关键词后面要加上一行注释说明这个代码块的名称 4.模块调用规范 如3.2.2 节所述,在Verilog 中,有两种模块调用的方法,一种是位置映射法,严格按照模块定义的端口顺序来连接,不用注明原模块定义时规定的端口名,其语法为: 被调用模块名 用户自定义调用名 因此,在良好的代码中,严禁使用位置调用法,全部采用信号映射法。

    1.8K80发布于 2018-02-24
  • 来自专栏OpenFPGA

    FPGA中仿真概念

    考虑Verilog RTL由示例9.2中所示的非阻塞赋值组成。 使用非阻塞的上述Verilog代码的仿真结果如波形9.2所示。 考虑下面示例9.3中所示的Verilog代码。 波形9.3给出了具有赋值延迟的阻塞赋值的仿真结果。 考虑下面示例9.5中所示的Verilog代码。 波形9.5给出了具有赋值间延迟的非阻塞赋值的仿真结果。 示例9.7使用Verilog HDL的四位环形计数器 示例9.8描述了环形计数器的testbench,并将激励施加到DUV上。 上述testbench产生波形9.7所示的结果。 示例9.8 Verilog环形计数器的testbench 波形9.7环形计数器的仿真结果

    71330编辑于 2022-04-14
  • 来自专栏OpenFPGA

    Testbench编写指南(1)基本组成与示例

    TestBench可以用VHDL或Verilog、SystemVerilog编写,本文以Verilog HDL为例。 FPGA设计必须采用Verilog中可综合的部分子集,但TestBench没有限制,任何行为级语法都可以使用。本文将先介绍TestBench中基本的组成部分。 ---- 生成时钟信号   使用系统时钟的设计在TestBench中必须要生成时钟信号,该功能实现起来也非常简单,示例代码如下: parameter ClockPeriod = 10; //方法1 initial ---- 显示结果   Verilog中可以使用display和display和display和monitor系统任务来显示仿真结果,示例代码如下: initial begin $timeformat 将激励分散到多个逻辑块中:Verilog中的每个initial块都是并行的,相对于仿真时刻0开始运行。将不相关的激励分散到独立的块中,在编写、维护和更新testbench代码时会更有效率。

    3K20发布于 2020-06-30
  • 来自专栏FPGA开源工作室

    Vivado加上VsCode让你的生活更美好

    还好有人已经在VsCode编写过自动生成Testbench的脚本了,感谢。 ? 扩展商店搜索Verilog_TestBench,安装过后,任意编写一段verilog程序。 如果你只需要例化模块,复制这一部分进你的代码中就可以了。到这里,VsCode已经能够给你的工程带来及其舒适的体验了。 } set-alias ll Get-ChildItemColor $env:TestBenchPath="C:\Users\22306\.vscode\extensions\truecrab.verilog-testbench-instance 最后修改powershell的profile文件,不过与windows的略有不同,这里贴上代码。 #以后要 使用 ll 而不是 ls了。 set-alias ll Get-ChildItemColor $env:TestBenchPath="/home/princeling/.vscode/extensions/truecrab.verilog-testbench-instance

    7.7K20发布于 2019-10-29
  • 来自专栏龙进的专栏

    vivado使用vscode来编辑代码

    配置代码高亮和自动补全 在插件选项卡中输入ext:sv,就可以搜索到下面的插件: 我安装的是第一个,然后,安装之后,代码高亮和自动补全就有了: 实现代码自动纠错 这就需要把vivado安装目录下的bin 最后,在vscode里面进行设置: 然后,在搜索框里输入verilog,然后,把下面的复选框选中xvlog 最后就是重启vscode,那就能看到自动的代码纠错功能啦~ 自动生成TestBench( 仅适用于Verilog) 在敲代码的时候, 写testbench费时费力,用VSCode能自动生成TestBench,解放生产力。 在弹出的窗口中输入 pip install chardet 然后,重新打开vscode,在vscode中安装插件Verilog_TestBench 接着在写好的代码文件内,按住键盘的ctrl+shift +p,在弹出的窗口中输入testbench 于是在vscode下方的终端里,就出现了tb文件的代码,把它复制出来(VSCode的终端里面,复制就是选中文本之后,直接右键),加到新的测试文件里面就好了!

    3.1K20编辑于 2022-10-31
  • 来自专栏数字IC经典电路设计

    奇偶校验器设计(奇偶校验与奇偶检测,XOR法和计数器法|verilog代码|Testbench|仿真结果)

    图片 --- --- 数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码Testbench 2.2 verilog代码 //使用XOR法设计奇偶校验器 module parity_checker01( input clk, input rst_n {data_in[7:0],odd_bit} : {data_in[7:0],even_bit}; endmodule 2.3 Testbench `timescale 3.2 verilog代码 //使用计数器法设计奇偶校验器 module parity_checker02( input clk, input rst_n {data_in[7:0],odd_bit} : {data_in[7:0],even_bit}; endmodule 3.3 Testbench `timescale

    5.8K40编辑于 2023-05-18
  • 来自专栏全栈程序员必看

    verilog调用vhdl模块_verilog和vhdl哪个更好

    一、 用Verilog文件调用VHDL 以Verilog文件为顶层文件,调用VHDL模块,testbenchVerilog文件。 4、编写testbench文件,FPGA_VHDL.vt,设置时钟周期为20ns,延时50ns后reset=1,aa=0,bb=1,每16个时钟,ss信号翻转一次; 5、仿真,调用出Modelsim ,选择testbench文件编译,设置仿真时长100us,执行仿真,仿真波形如下: 结论:时钟周期为20ns,reset在50ns时置高,计数cnter到15后回0,到零后ss电平翻转,当ss 4、生成testbench仿真测试文件FPGA_VHDL_top.vht,给变量赋值,定义时钟周期为20ns;reset初始值为0,在50ns后为1;aa,bb分别为0和1,ss每16个时钟信号翻转一次 三、测试总结 1、Verilog调用VHDL比较简单,需要把VHDL的实体(entity)当成一个verilog模块(module),按verilog的格式调用。

    3K50编辑于 2022-11-08
  • 来自专栏数字IC经典电路设计

    序列发生器(两类序列、三种设计方法和两种发生模式|verilog代码|Testbench|仿真结果)

    图片 --- --- 数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码Testbench 2.1.2 Verilog代码 //使用状态机设计发生“1001”的序列发生器 //可非重叠发生序列“1001” module sequence_generator01( input clk 2.2.2 Verilog代码 //使用移位寄存器设计发生“1001”的序列发生器 //可非重叠发生序列“1001” module sequence_generator02( input 2.3.2 Verilog代码 //使用计数器设计发生“1001”的序列发生器 //可非重叠发生序列“1001” module sequence_generator03( input clk 4.2 verilog代码 //使用XOR—Shift算法设计伪随机序列发生器 module sequence_generator05( input clk, input rst_n

    4.9K30编辑于 2023-05-18
  • 来自专栏瓜大三哥

    如何写一个仿真文件——testbench

    testbench作用是什么? testbench就是对写的FPGA文件进行测试的文件。 任何设计都是有输入输出的,testbench的作用就是给这个设计输入,然后观察输出是否符合我们的预期,这就是testbench的功能。 常用testbench语法 1.精度问题 编译器指令用以控制编译和预处理verilog代码,他们通过重音符号[`]来指明。重音符号常位于键盘的左上角。 比如之前定义了timescale 1ns / 10ps;当指定如下代码中的延时, #5 y = a & b; 表明实际上的延时为5ns(即5*1ns)。 **$fopen的语法为: [mcd_names] = $fopen("[file_name]"); 至此,testbench文件的语法部分就告一段落,但是小编提醒:学verilog要知道verilog

    6.2K42发布于 2020-05-07
领券