Icarus Verilog

news2024/12/25 14:25:12

Icarus Verilog 是一个Verilog仿真工具,以编译器的形式工作,将以verilog编写的源代码编译为某种目标格式。如果要进行仿真的话,可以生成一个vvp的中间格式,由其所附带的vvp命令执行。

https://github.com/steveicarus/iverilog

Icarus Verilog编译器主要包含三个工具:

iverilog:用于编译verilog和vhdl文件,进行语法检查,生成可执行文件。

vvp:根据可执行文件,生成仿真波形文件。

gtkwave:用于打开仿真波形文件,图形化显示波形。

 参数-o:[-o filename] 用于指定生成文件的名称。如果不指定,默认生成文件名为a.out

iverilog -o test test.v

参数-y:[-y dir] 用于指定包含文件夹,如果top.v中调用了其他的.v模块,top.v会编译提示。找不到调用的模块,需要指定调用模块所在文件夹的路径,支持相对路径和绝对路径。

iverilog -y D:/test/demo led_demo_tb.v

参数-I:[-I includedir]如果程序使用`include语句包含了头文件路径,可以通过-i参数指定文件路径,使用方法和-y参数一致。

参数-tvhdl:把verilog文件转换为VHDL文件

testbench文件中有几行iverilog编译器专用的语句,如果不加的话无法生成vcd文件

initial
begin            
    $dumpfile("wave.vcd");        //生成的vcd文件名称
    $dumpvars(0, led_demo_tb);    //tb模块名称
end

prbs4.v

module prbs4(clk, rst_n, out, out_invalid_n);
	input clk;
	input rst_n;
	output reg out;
	output reg out_invalid_n;
	
	reg [3:0] a;
	
	always@(posedge clk or negedge rst_n) begin
		if(!rst_n) begin
			a <= 4'b1000;
		end
		else begin
			a[3] <= a[3]^a[0];
			a[2] <= a[3];
			a[1] <= a[2];
			a[0] <= a[1];
		end
	end
	
	always@(posedge clk or negedge rst_n) begin
		if(!rst_n) begin
			out <= 1'b0;
			out_invalid_n <= 1'b0;
		end
		else begin
			out <= a[0];
			out_invalid_n <= 1'b1;
		end
	end
	
endmodule

prbs4_tb.v

`timescale 1ns / 1ps

module prbs4_tb();

reg clk;
reg rst_n;
wire out;
wire out_valid_n;

integer i;

prbs4 uut(clk, rst_n, out, out_valid_n);
initial begin
	$dumpfile("prbs4.vcd");
	$dumpvars(0, prbs4_tb);
end

initial begin
	rst_n = 1'b0;
	#20 rst_n = 1'b1;
end

initial begin
	clk = 0;
	for(i=0; i<45; i=i+1) begin
		#1 clk = 1;
		#1 clk = 0;
	end
	$display("test complete");
end

endmodule

(1)编译

cmd输入:

iverilog -o prbs4 prbs4.v prbs4_tb.v

得到 

 (2)生成波形文件

cmd输入:

vvp -n prbs4 -lxt2

得到

(3)打开波形文件

cmd输入:

gtkwave prbs4.vcd

得到

参考

https://blog.csdn.net/zkwlyz163988/article/details/123437329 

https://blog.csdn.net/u013353078/article/details/122720947

https://blog.csdn.net/whik1194/article/details/114703141

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试官:请设计一个能支撑百万连接的系统架构!

目录 1、到底什么是连接&#xff1f;2、为什么每次发送请求都要建立连接&#xff1f;3、长连接模式下需要耗费大量资源4、Kafka遇到的问题&#xff1a;应对大量客户端连接5、Kafka的架构实践&#xff1a;Reactor多路复用6、优化后的架构是如何支撑大量连接的 这篇文章&#x…

SQL Server 全文索引的应用

在公司项目中提出了一个需求&#xff1a; 搜索包含指定关键词的数据。得到这需求后&#xff0c;站在技术角度考虑第一时间就联想到使用SQL里面“like”查询语句。进一步分析需求后&#xff0c;发现“Like”查询满足不到实际的要求。 示例&#xff1a; ---------------------…

【Ajax】接口与接口测试工具PostMan

一、接口接口的概念使用 Ajax 请求数据时&#xff0c;被请求的 URL 地址&#xff0c;就叫做数据接口&#xff08;简称接口&#xff09;。同时&#xff0c;每个接口必须有请求方式。例如&#xff1a;http://www.liulongbin.top:3006/api/getbooks 获取图书列表的接口(GET请求)ht…

【4 - 降维算法PCA和SVD - 案例部分】菜菜sklearn机器学习

课程地址&#xff1a;《菜菜的机器学习sklearn课堂》_哔哩哔哩_bilibili 第一期&#xff1a;sklearn入门 & 决策树在sklearn中的实现第二期&#xff1a;随机森林在sklearn中的实现第三期&#xff1a;sklearn中的数据预处理和特征工程第四期&#xff1a;sklearn中的降维算法…

为何香港的IB状元特别多?

今年IB预科课程&#xff08;The International Baccalaureate Diploma Programme&#xff0c;IBDP&#xff09;公开考试放榜&#xff0c;香港的学校又是大丰收的一年&#xff01;因为香港今年一共有九十三名IB状元&#xff0c;即IB的总分为四十五分满分&#xff0c;而他们全部取…

Linux 环境部署 Nexus 服务

一 私服是什么&#xff1f; 一个特殊的远程仓库&#xff0c;它是架设在局域网内的仓库服务&#xff0c;供局域网内的开发人员使用。 当Maven需要下载构建的使用&#xff0c; 它先从私服请求&#xff0c;如果私服上没有的话&#xff0c;则从外部的远程仓库下载&#xff0c;然后…

算力服务亟待破局,超聚变向新而行

“超聚变已独立活下来。”超聚变产品线总裁范瑞琦在2023新品发布会上透露。自从一年多前从华为体系独立&#xff0c;超聚变公司的未来就颇受业界关注。一方面&#xff0c;算力产业蒸蒸日上&#xff0c;各方尤为关注超聚变的产业定位以及发展算力产业的着力点&#xff1b;另一方…

mysql存储过程的流程控制

本文来说下mysql存储过程的流程控制语句 文章目录流程控制概述IF语句CASE语句LOOP语句LEAVE语句ITERATE语句REPEAT语句WHILE语句本文小结流程控制概述 存储过程中可以使用流程控制来控制语句的执行。 MySQL中可以使用IF语句、CASE语句、LOOP语句、LEAVE语句、ITERATE语句、REPE…

Cesium设置模型朝向速度矢量方向

Cesium设置模型朝向速度矢量方向 文章目录Cesium设置模型朝向速度矢量方向1. 需求场景2. 技术路线2.1 VelocityOrientationProperty2.2 VelocityVectorProperty3. 参考链接1. 需求场景 现有一段飞机起飞、爬升的轨迹数据&#xff0c;需要在Cesium中模拟出飞行过程动画&#xf…

Lesson 3. 线性回归的手动实现(3.3 线性回归手动实现与模型局限 3.4 机器学习模型结果可信度理论与交叉验证基础)

文章目录一、线性回归手动实现与模型局限1. 线性回归的手动实现2. 线性回归模型局限3. 线性回归的决定系数二、机器学习模型结果可信度理论与交叉验证基础1. 机器学习模型结果可信度理论基础与数据集划分1.1 机器学习模型结果可信度基础理论1.2 数据集切分方法1.3 线性回归手动…

图的关键路径(AOE网络)

文章目录AOE网概念性质研究的问题关键路径概念求解的方法注意事项AOE网 概念 用顶点表示事件, 边弧表示活动, 边弧上的权值表示活动持续的时间, 这样的带权有向无环图叫AOE网. AOE网常用于估算工程完成时间. AOE网和AOV网都是有向无环图, 不同之处在于它们的边和顶点所代表的…

【青训营】Go的高质量编程

Go的高质量编程 本文内容总结自字节跳动青年训练营 第五届 后端组 什么是高质量&#xff1f; 各种边界条件是否完备异常情况能正常处理&#xff0c;稳定性有保障易读易维护 Go语言开发者Dave Cheney指出&#xff0c;编程需要遵循以下原则&#xff1a; 简单性 消除多余的复…

Docker安装和卸载教程

1、安装前先卸载系统上原有的Docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine2、安装需要的yum-utils包 需要安装 yum-utils包&#xff08;该包提供了 yum-c…

研一寒假C++复习笔记--程序的内存模型

目录 1--内存分区模型 2--代码区 3--全局区 4--栈区 5--堆区 6--new操作符 1--内存分区模型 执行C程序时&#xff0c;内存可划分为4个区域&#xff0c;不同区域存放的数据&#xff0c;具有不同的生命周期&#xff1b; ① 代码区&#xff1a;存放函数的二进制代码&#x…

nvcc 编译并行程序时报错gcc: error trying to exec ‘cc1plus‘: execvp: 没有那个文件或目录

一、nvcc 编译程序时报错 gcc: error trying to exec cc1plus: execvp: 没有那个文件或目录 cc1plus 是gcc编译工具链中用到的一个程序 报错非常直白&#xff0c;就是说gcc在执行时找不到这个程序 二、问题解决方法 1.确定是否正确安装gcc、g 如果系统中没有正确安装gcc…

elementUI组件下拉框属性的一些配合使用

文章目录1、单选带搜索功能&#xff08;自定义搜索&#xff09;2、下拉多选远程搜索3、下拉多选有默认选项4、下拉多选默认禁用只提供大致思路&#xff0c;大量玩法等你开发【doge】 1、单选带搜索功能&#xff08;自定义搜索&#xff09; 例如&#xff0c;我需要实现一个功能…

关于学习的一些建议

本文的主要讲的内容如图&#x1f447; 文末附有整个Java的学习路线、能力提升和学习建议的思维导图。 快过新年了&#xff01;在过去的一年里&#xff0c;你们收获了什么呢&#xff1f;在未来的一年里&#xff0c;你们有什么新目标吗&#xff1f; 1.定目标 过去的我往往喜欢…

初识 Django

初识 Django参考描述优劣 Django&#xff08;部分&#xff09;优势功能完备&#xff0c;开箱即用开发效率高Admin 管理后台安全ORM可扩展劣势性能模板过渡封装获取长期支持版&#xff08;Long Time Support&#xff0c;LTS&#xff09;PIP官网获取检测MVC 与 MVTMVC 架构MTV 架…

力扣sql基础篇(十一)

力扣sql基础篇(十一) 1 每件商品的最新订单 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 SELECT p.product_name,o1.product_id,o1.order_id,o1.order_date FROM Orders o1 INNER JOIN ( SELECT pro…

Android自定义绘制1-1 Plus

上一个文章是看着扔物线的视频写的。写玩之后&#xff0c;发现他的文章还有很多内容。尴尬。 接着写呗。 自定义绘制知识的4个级别 1.Canvas的drawXXX()系列方法以及Paint类的一些常见方法。 canvas的drawXXX()是自定义绘制的最基本操作。掌握了这些方法&#xff0c;才知道…