搭建 Verilog 仿真环境

对于 Verilog 的初学者,有一个仿真环境是必要的。这就好比是刚开始接触 C 语言,连 C 语言的开发环境都没有,怎么学习 C 语言呢,难道靠大脑模拟运行吗?

本文介绍如何在 Linux 操作系统(以 Ubuntu 为例)下搭建一个轻量级的 RTL 仿真环境。

安装软件

要安装 2 个软件

sudo apt-get install iverilog

sudo apt-get install gtkwave

准备代码

安装好后可以做个实验。

先准备两个文件

count.v

module count4(out,reset,clk); output[3:0] out; input reset,clk; reg[3:0] out; always @(posedge clk) begin if (reset)  out<=0;       //同步复位 else       out<=out+1;   //计数 end
endmodule

tb_count.v

`timescale 1ns/1ns module coun4_tp; reg clk, reset;             //测试输入信号定义为 reg 型 wire[3:0] out;              //测试输出信号定义为 wire 型 parameter DELY=100; count4 mycount(out,reset,clk);      //调用测试对象 always #(DELY/2) clk = ~clk;     //产生时钟波形 initial begin                //激励信号定义 clk=0; reset=0; #DELY    reset=1; #DELY    reset=0; #(DELY*20) $finish;  //  initial 块执行一次,inital 块里面是顺序执行的end //定义结果显示格式   initial $monitor($time,,"clk=%d reset=%d out=%d", clk, reset, out);     //注意这里的 ,, 代表空参数,空参数在输出时显示为空格。   initial begin$dumpfile("test.vcd"); // 指定 VCD 文件的名字为 test.vcd ,仿真信息将记录到此文件$dumpvars(0, coun4_tp); //指定层次数为0,则 coun4_tp 模块及其下面各层次的所有信号将被记录end
endmodule

代码中有几处要解释:

$dumpfile$dumpvar 是 verilog 语言中的两个系统任务。

$dumpfile 系统任务:为所要创建的 VCD 文件指定文件名。

VCD 文件是在对设计进行的仿真过程中,记录各种信号取值变化情况的信息记录文件。EDA 工具通过读取
VCD 格式的文件,显示图形化的仿真波形,所以,可以把 VCD 文件简单视为波形记录文件。

$dumpvar 系统任务:指定需要记录到 VCD 文件中的信号,可以指定某一模块层次上的所有信号,也可以单独指定某一个信号。
典型语法为

$dumpvar(level, module_name);

参数 level 为一个整数,用于指定层次数,参数 module_name 则指定要记录的模块。

举例:

initial$dumpvar (0, top);     //指定层次数为0,则top模块及其下面各层次的所有信号将被记录
initial$dumpvar (1, top);     //记录模块实例top以下一层的信号//层次数为1,即记录top模块这一层次的信号//对于top模块中调用的更深层次的模块实例,则不记录其信号变化
initial$dumpvar (2, top);     //记录模块实例top以下两层的信号//即top模块及其下一层的信号将被记录

代码就讲到这里,我们看看怎么仿真。

如何仿真

$ iverilog -o testname count.v tb_count.v

-o 选项用来指定输出的文件名,这里是 testname,你可以换成别的

这样之后,就会生成可执行文件 testname

我们运行它,就会生成 .vcd 波形文件

$ ./testname
VCD info: dumpfile test.vcd opened for output.0 clk=0 reset=0 out= x50 clk=1 reset=0 out= x100 clk=0 reset=1 out= x150 clk=1 reset=1 out= 0200 clk=0 reset=0 out= 0250 clk=1 reset=0 out= 1300 clk=0 reset=0 out= 1350 clk=1 reset=0 out= 2400 clk=0 reset=0 out= 2450 clk=1 reset=0 out= 3500 clk=0 reset=0 out= 3550 clk=1 reset=0 out= 4600 clk=0 reset=0 out= 4650 clk=1 reset=0 out= 5700 clk=0 reset=0 out= 5750 clk=1 reset=0 out= 6800 clk=0 reset=0 out= 6850 clk=1 reset=0 out= 7900 clk=0 reset=0 out= 7950 clk=1 reset=0 out= 81000 clk=0 reset=0 out= 81050 clk=1 reset=0 out= 91100 clk=0 reset=0 out= 91150 clk=1 reset=0 out=101200 clk=0 reset=0 out=101250 clk=1 reset=0 out=111300 clk=0 reset=0 out=111350 clk=1 reset=0 out=121400 clk=0 reset=0 out=121450 clk=1 reset=0 out=131500 clk=0 reset=0 out=131550 clk=1 reset=0 out=141600 clk=0 reset=0 out=141650 clk=1 reset=0 out=151700 clk=0 reset=0 out=151750 clk=1 reset=0 out= 01800 clk=0 reset=0 out= 01850 clk=1 reset=0 out= 11900 clk=0 reset=0 out= 11950 clk=1 reset=0 out= 22000 clk=0 reset=0 out= 22050 clk=1 reset=0 out= 32100 clk=0 reset=0 out= 32150 clk=1 reset=0 out= 42200 clk=0 reset=0 out= 4

这时候,又会多出一个 test.vcd 文件

使用 gtkwave 命令查看 .vcd 文件

$ gtkwave test.vcd

要把信号拖动到 Signals 里面

如果觉得前面敲那些命令太麻烦,可以来一个简单的 Makefile

TGT =main
SRC =$(wildcard *.v)
CC =iverilog$(TGT): $(SRC)$(CC) -o $@ $^./$(TGT)gtkwave test.vcd  # 代码中指定 VCD 文件的名字为 test.vcd
clean:$(RM) $(TGT) test.vcd

参考资料

【1】verilog的 $dumpfile$dumpvar 系统任务详解

【2】搭建verilog学习环境

搭建 Verilog 仿真环境相关推荐

  1. 记一下终于用iverilog搭建好仿真环境

    动机 一开始准备在linux系统里仿真的,看了非常多的教程,写的已经非常详细了,但是我这脑子还招架不住啊,最后转向在windows进行仿真,过程跟linux中其实是一样的,但是我电脑的linux系统始 ...

  2. 一生一芯 预学习阶段 搭建verilator仿真环境 之 示例:双控开关

    一生一芯 预学习阶段 搭建verilator仿真环境 之 示例:双控开关 1.前言 一生一芯预学习 中需要安装4.210版本Verilator,通过git方式下载所需要版本. 2.步骤 1.官网链接: ...

  3. 机架搭建_【新阁教育】穷学上位机系列——搭建STEP7仿真环境

    经常有学员问我,学习上位机要不要买PLC硬件? 我一般的回答是:富则自行购买,穷则搭建仿真. PLC硬件,对于学习上位机来说,是锦上添花的事,经济条件允许,有则更好,条件不允许,新阁教育告诉您也可以通 ...

  4. XTDorne平台搭建无人机仿真环境时遇到的问题及解决

    XTDorne平台搭建无人机仿真环境时遇到的问题及解决 PX4安装过程中遇到的问题及解决 PX4安装过程中遇到的问题及解决 执行make px4_sitl_default gazebo遇到的问题 问题 ...

  5. 【回答问题】ChatGPT上线了!如何使用控制算法或动力学模型控制PreScan搭建的仿真环境及相关车辆的运动状态?

    PreScan是一款仿真软件,可以用来模拟汽车在不同条件下的运动状态.要使用控制算法或动力学模型来控制PreScan搭建的仿真环境和相关车辆的运动状态,需要进行以下步骤: 在PreScan中建立汽车的 ...

  6. 信捷plc485通信上位机_【新阁教育】穷学上位机系列——搭建STEP7仿真环境

    经常有学员问我,学习上位机要不要买PLC硬件? 我一般的回答是:富则自行购买,穷则搭建仿真. PLC硬件,对于学习上位机来说,是锦上添花的事,经济条件允许,有则更好,条件不允许,新阁教育告诉您也可以通 ...

  7. 基于eclipse搭建LittleVGL仿真环境

    基于eclipse搭建LittleVGL仿真环境 环境 Windows 10 64位 工具 Eclipse IDE for C/C++ 4.15 --开发IDE SDL2 --提供仿真显示 MinGW ...

  8. Modbus通信从入门到精通_2_Modbus TCP通信详解及仿真(搭建ModbusTCP仿真环境:创建虚拟PLC并进行ModbusTCP通讯;寄存器与PLC中映射关系;适合理解如何编写上位机)

    本篇将会以西门子PLC软件搭建ModbusTCP仿真环境,并通过仿真环境,介绍基础知识及模拟实际应用中写一个简单的通信读取PLC数据方法,并简介了编写上位机的方法. 文章目录 1. 搭建ModbusT ...

  9. 【rotors】多旋翼无人机仿真(一)——搭建rotors仿真环境

    [rotors]多旋翼无人机仿真(一)--搭建rotors仿真环境 [rotors]多旋翼无人机仿真(二)--设置飞行轨迹 [rotors]多旋翼无人机仿真(三)--SE3控制 [rotors]多旋翼 ...

最新文章

  1. 住房要注意用电安全-记录一下失火
  2. Segment Routing — SR-MPLS
  3. zabbix 2.2自动安装脚本
  4. 一些常用的CSS hack代码
  5. 洛谷 - P3379 【模板】最近公共祖先(LCA)(RMQ求LCA/Tarjan求LCA)
  6. MySQL找出锁等待
  7. POJ 1276 Cash Machine
  8. 利用Flex 和 PHP 生产 PDF.
  9. Jetty 9 正式版发布!
  10. 助力春运 重庆机场今晨新增一架飞机入列
  11. 推荐 4 个开源小程序
  12. 相机下载_SonyPMCARE, 反向工程索尼PlayMemories相机应用
  13. com词根词缀_词根词缀记忆大全---经典详细的总结
  14. html图片原始比例_html图片如何按屏幕大小等比例缩放?
  15. 固定偏置放大电路为何不能保证静态工作点的稳定性?
  16. mac上chrome插件安装
  17. 计算机用户怎么配置漫游,Windows下漫游用户配置和强制漫游用户配置详细过程...
  18. WFP 学习(一)——构架把握
  19. 微信公众帐号第三方服务平台源码
  20. 对象存储2:数据存储类型-文件存储、块存储、对象存储详解

热门文章

  1. k8s之kubebuilder简单理解
  2. Spring常问的面试
  3. 微信小程序支付最容易犯的坑notify_url(支付回调)
  4. iis 防火墙防止恶意ip攻击
  5. 在windows上搭建Apache+Trac+Subversion
  6. [转载]通过Arcgis Server向MXD中添加图层
  7. ubuntu软件的卸载和安装
  8. VS.NET 控件命名规范(备忘)
  9. Deeplearning 入门篇
  10. c++ try catch