首页 > 其他分享 >iverilog+gtkwave搭建轻量级verilog仿真环境

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

时间:2024-09-04 11:14:05浏览次数:8  
标签:仿真 clk top iverilog gtkwave tb 轻量级

前言

在之前用到的仿真工具只有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)
    begin
      y = 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 begin
    a = 0;
    b = 1;
	clk = 0;
    #210
    a = 1;
    #200
    b = 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进去就好了

标签:仿真,clk,top,iverilog,gtkwave,tb,轻量级
From: https://www.cnblogs.com/xuxuxu69/p/18396098

相关文章

  • HivisionIDPhotos :一款开源的轻量级且高效的AI证件照制作工具
    HivisionIDPhotos是一款开源的轻量级且高效的AI证件照制作工具,它通过AI算法实现了对多种用户拍照场景的识别、抠图以及证件照生成。这款工具能够根据不同的尺寸规格生成标准证件照和排版照,适用于护照、签证等多种用途。HivisionIDPhotos的主要特点包括轻量级抠图、生成标准证......
  • Postman完美平替!免费开源、轻量级、快速且美观的 API 调试工具Hoppscotch
    Hoppscotch:开源API的智能伙伴,让开发更简单、更高效。 - 精选真开源,释放新价值。概览Hoppscotch是一个开源的API开发工具,它为开发者提供了一个全面而直观的平台来构建、测试和监控API。作为一个开源项目,它具有高度的可定制性和灵活性,允许用户根据自己的需求进行调整。Hoppscotc......
  • Salt Function Flow:深度研发经验的沉淀,打造轻量级高效流程编排框架
    在开发者的世界里,业务流程编排是一个既复杂又关键的环节。如何高效地管理和编排这些流程,直接影响着系统的性能和可维护性。本次介绍一款基于大量研发实践经验而打造的流程编排框架——SaltFunctionFlow。它不仅轻量、强大,更是将多年实践中的最佳经验沉淀于其中,为开发者提......
  • 一个.NET开源、现代、轻量级的文本编辑器
    前言今天大姚给大家分享一个.NET开源、免费(MITLicense)、现代、轻量级、具有极简主义设计的文本编辑器:Notepads。项目特点设计:采用Fluent设计语言,内置选项卡系统。性能:启动迅速,占用资源少。兼容性:支持从命令行或PowerShell启动。功能丰富:支持多行手写、Markdown实时预览、差异查看......
  • 基于live555开发的多线程RTSPServer轻量级流媒体服务器EasyRTSPServer开源代码及其调
    EasyRTSPServer参考live555testProg中的testOnDemandRTSPServer示例程序,将一个live555testOnDemandRTSPServer封装在一个类中,例如,我们称为ClassEasyRTSPServer,在EasyRTSPServer_Create接口调用时,我们新建一个EasyRTSPServer对象,再通过调用EasyRTSPServer_Startup接口,将EasyRTSP......
  • 在Android开发中,如何使用SharedPreferences(简称SP)一个轻量级的数据存储方式
    目录全局SharedPreferences工具类代码说明:如何使用这个工具类?在Android开发中,SharedPreferences(简称SP)是一个轻量级的数据存储方式,常用于保存应用的配置信息或少量的数据。为了便于在全局使用,可以将其封装到一个工具类中。以下是一个带有详细中文注释的全局SharedPrefere......
  • lima 轻量级虚拟机docker替代方案 (macos平台)
    引言由于某些原因,我的mac电脑的docker出了问题,无法使用docker,想到有没有类似windos上的终端虚拟机,可以直接使用命令行,经过一凡寻找,终于找到了一个替代方案我来为大家介绍一款免费、自由、开源的DockerforMac替代品,containerd&Lima。你只需要执行以下命令即可快速体验......
  • Java并发编程 - 基础(悲观锁与synchronized)(偏向锁、轻量级锁、锁优化)
    Java并发编程中的悲观锁和synchronized关键字,以及Java内存模型中的锁优化机制(如偏向锁、轻量级锁)都是非常重要的概念。下面将详细介绍这些内容。悲观锁(PessimisticLocking)悲观锁假设数据会发生冲突,因此在读取数据时就加锁,以防止其他线程修改数据。这种方式虽然能保......
  • Ruby在嵌入式系统:轻量级语言的灵活应用
    标题:Ruby在嵌入式系统:轻量级语言的灵活应用摘要在嵌入式系统开发领域,编程语言的选择至关重要,它直接影响到系统的性能、内存占用以及开发效率。Ruby,作为一种灵活且富有表现力的语言,其在嵌入式系统中的应用并不常见,但这并不意味着它没有一席之地。本文将探讨Ruby及其轻量级......
  • synchronized轻量级锁原理和实战(四)
    引入轻量级锁的目的多线程竞争不激烈的情况下,通过CAS机制竞争减少重量级锁产生的性能消耗.重量级锁使用了操作系统底层的互斥锁,会导致线程在用户态和核心态之间切换.带来性能上的损耗.轻量级锁的核心原理轻量级锁存在的目的本身就是为了减少线程从内核态和用户态的切换,从......