iverilog+gtkwave搭建轻量级verilog仿真环境

news/2024/11/14 13:01:48/文章来源:https://www.cnblogs.com/xuxuxu69/p/18396098

前言

在之前用到的仿真工具只有vivado与modelsim,vivado的笨重不用多说,可能你搭建一个工程的时间比你看波形的时间还要长,modelsim倒是稍微轻一些,但步骤也较为繁琐,虽然我在之前也意外收获了modelsim的仿真脚本模板且屡试不爽,但还是觉得稍微有些麻烦,正好之前在学习tinyrv时安装了iverilog与gtkwave,且在网上看到有搭建verilog仿真环境的教程,遂抽出一早上时间搭建该环境

注意

本文所实现的案例是一个非常简单的例子,如有更复杂的场景(如需要用到xinilx、altera等厂商的器件库),请参考我如下列出的文章

参考文章

https://developer.aliyun.com/article/1077579#:~:text=Icarus%20Ver
https://zonepg.github.io/posts/programming/ca/2021-03-25-iverilog-gtkwave/#:~:text=%E6%89%80%E4%BB%A5%E5%9C%A8%E7%BD%91%E4%B8%8A%E6%89%BE%E4%BA%86%E4%B8%80%E4%BA%9B%E8%BD%BB
https://www.cnblogs.com/quantoublog/articles/18089793#:~:text=iVerilog%E7%9A%84%E5%AE%89

环境搭建

1.下载iverilog与gtkwave

安装:https://bleyer.org/icarus/
应该是同时将二者安装好的,详细的安装步骤不再赘述
打开cmd使用以下命令可查看安装路径(注意一定得是cmd,不能随便打开某个目录的终端!):
where iverilog
where vvp
where gtkwave
如下所示:

三者的功能:

iverilog:用于编译verilog和vhdl文件,进行语法检查,生成可执行文件
vvp:根据可执行文件,生成仿真波形文件
gtkwave:用于打开仿真波形文件,图形化显示波形

2.准备工作

我这里是以一个简单的例子实现,在工程文件夹下准备如下文件:

其中:
top.v是一个简单的c程序

点击查看代码
module top(clk,a,b,y,x);
input a,clk;
input b;
output reg [2:0] y = 0;
output reg [2:0] x = 0;
always @(posedge clk)beginy = a + b;x	= y + a;end
endmodule
top_tb.v是top.v的testbench
点击查看代码
`timescale 1ns/1ps
module top_tb();reg a,b,clk;
wire [2:0] y;
wire [2:0] x;
always #10 clk = ~clk;initial begina = 0;b = 1;clk = 0;#210a = 1;#200b = 0;#20000$stop;
end/*iverilog */
initial
begin            $dumpfile("wave.vcd"); //生成的vcd文件名称$dumpvars(0, top_tb);    //tb模块名称
end
/*iverilog */top u_top(.a(a),.b(b),.clk(clk),.y(y),.x(x);
endmodule
run.bat是可执行脚本,包含如下信息:
点击查看代码
% Start compiling %
iverilog -o wave %*
% Generating wave file %
vvp -n wave -lxt2
% Opening wave file %
gtkwave wave.vcd
上面命令不再赘述,需要了解的自行gpt~ **需要注意的是,在你的tb中一定要加入如下代码,方便仿真波形的生成!**
点击查看代码
/*iverilog */
initial
begin            $dumpfile("wave.vcd"); //生成的vcd文件名称$dumpvars(0, top_tb);    //tb模块名称
end
/*iverilog */

3.仿真波形

打开该目录的终端,运行如下命令:
.\run.bat .\top.v .\top_tb.v
就是执行脚本文件与本案例的两个文件

运行后直接回打开gtkwave并读入vcd,接着选中信号append进去就好了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/792028.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大厂为啥都发苹果电脑?哪个系统是开发之王?

大家到底用哪个操作系统来学编程呢?大家好,我是程序员鱼皮。最近秋招火热进行中,今年大厂为了抢人才,各出奇招。比如腾讯校招支持 24 届应届生投递,京东校招开放 1.8 万个岗位、同时将校招生薪酬再次大幅上调!大厂除了薪资福利待遇能打之外,资源和配套设施也会更齐全一些…

Minesweeper++

好久之前的冷饭,来炒一下。 代码链接本文来自博客园,作者:haozexu,转载请注明原文链接:https://www.cnblogs.com/haozexu/p/18396085

如何在 Cursor 中使用驭码CodeRider?

驭码CodeRider 是极狐GitLab 公司自研发布的 AIGC 产品,可以用来进行 AI 编程和 DevOps 流程处理。本文分享如何在 Cursor 中使用驭码CodeRider。 Cursor 是近期比较火爆的一款 AI 代码编辑器,通过将 AI 能力引入软件研发来提升软件研发效率。而驭码CodeRider 除了具备 AI 编…

04 Windows批处理中的条件执行

if 命令在所有编程语言中都很常见,它只会在条件为真时执行一行或多行代码,而只有在条件为假时才会执行另一段代码。 其基本原理很简单,但是在批处理中,条件子句为true或false的实体与其他语言中的类似子句有很大不同。大多数比较操作符都是批处理所独有的,在本文中,我们将…

在centos上安装docker

第一步,安装docker,因为我是在centos上面安装的docker,这里就细讲centos的安装步骤 1:官方建议Linux内核为3.10及以上 ,我们可以查看一下自己的Linux内核uname -r2:启用centos-extras存储库 该存储库默认情况下是处于启用状态的,如果之前禁用过,需要重新启用它yum repo…

iLogtail 开源两周年:社区使用调查报告

尽管收集到的有效问卷数量可能未达到传统统计显著性的门槛,但这批反馈却异常宝贵,为我们的策略制定与优化提供了第一手的洞察力。这些见解不仅直接源自实际应用场景,还蕴含了用户对于提升 iLogtail 功能体验、文档丰富度及社区互动多样性的真切期待,为后续的社区建设与发展…

CogVideoX huggingface 接口说明文档

https://huggingface.co/docs/diffusers/api/pipelines/cogvideox 预览

回归树模型 0基础小白也能懂(附代码)

回归树其实是将输入空间划分为$M$个单元,每个区域的输出值是该区域内所有点$y$值的平均数回归树模型 0基础小白也能懂(附代码) 啥是回归树模型 大家在前面的部分学习到了使用决策树进行分类,实际决策树也可以用作回归任务,我们叫作回归树。而回归树的结构还是树形结构,但…

如何通过API接口实现库存的精准掌控

https://img2024.cnblogs.com/blog/3506472/202409/3506472-20240904105309327-1011277110.png在电子商务的快速发展中,库存管理已成为衡量企业运营效率的关键指标。随着消费者对快速配送和商品可用性的期望不断提高,电商企业必须找到更智能、更高效的库存管理方法。电商库存…

manim边学边做--曲线类

manim中曲线,除了前面介绍的圆弧类曲线,也可以绘制任意的曲线。 manim中提供的CubicBezier模块,可以利用三次贝塞尔曲线的方式绘制任意曲线。 关于贝塞尔曲线的介绍,可以参考:https://en.wikipedia.org/wiki/B%C3%A9zier_curve。 本文主要介绍贝塞尔曲线和两种带箭头的曲线…