verilog之四位全加器的编译及仿真(用开源免费的软件——iverilog+GTKWave)
verilog之四位全加器的编译及仿真(用开源免费的软件——iverilog+GTKWave)
四位全加器的verilog的代码比比皆是,这里上一个比较简单的:

/*
4位全加器全加器需要有输入输出,需要有下级向上进位的输入,
需要有向上一位进位的输出。大家看一下,这个模块已经包含全部的输入输出信息。
大家都知道,N位加法器得出来的出来的和最多是N+1位
因此可以清晰从下面代码中看到相关信息。
然后assign用的是阻塞赋值。相加即满足相关的需求。
*/
module adder4(cout,sum,ina,inb,cin);
output[3:0] sum;
output cout;
input[3:0] ina,inb;
input cin; assign {cout,sum}=ina+inb+cin;
endmodule

在写testbeach文件之前,先普及一点testbeach的知识:
一般来讲,在数据类型声明时,和被测模块的输入端口相连的信号定义为reg类型,这样便于在initial语句和always语句块中对其进行赋值;和被测模块输出端口相连的信号定义为wire类型,便于进行检测。Testbench模块最重要的的任务就是利用各种合法的语句,产生适当的时序和数据,以完成测试,并达到覆盖率要求。
那么testbeach文件如下:

/*
File Name : test_adder4.v
Description : The testbench of the adder_4.v
Written By : LiMing
Data : 2011/04/18 20:13 modefied : 在仿真的时候,把延时从10ns改为5ns
: cout显示为2位
*/ //test_adder4 (top-level module)
`timescale 1ns/1ns
module test_adder4; //Declare variables
wire[3:0] sum;
wire cout;
reg[3:0] ina,inb;
reg cin; //Instantiate the module adder4
adder4 adder4_1(cout,sum,ina,inb,cin); //Stimulate the inputs, Finish the stimulation at 90 time units
initial
begin
#0 ina = 4'b0001; inb = 4'b1010; cin = 1'b0;
#5 ina = 4'b0010; inb = 4'b1010; cin = 1'b1;
#5 ina = 4'b0010; inb = 4'b1110; cin = 1'b0;
#5 ina = 4'b0011; inb = 4'b1100; cin = 1'b1;
#5 ina = 4'b0111; inb = 4'b1001; cin = 1'b0;
#5 ina = 4'b0001; inb = 4'b1100; cin = 1'b1;
#5 ina = 4'b0011; inb = 4'b1100; cin = 1'b0;
#5 ina = 4'b0111; inb = 4'b1111; cin = 1'b1;
#5 $finish;
end initial
$monitor("At time %t, ina(%b) + inb(%b) + cin(%b) = sum(%b)(%2d),cout(%b)",$time, ina, inb, cin, sum, sum, cout); initial
begin
$dumpfile("test.vcd");
$dumpvars(0,test_adder4);
end
endmodule

由于是在windows的cmd下进行命令行的运行,所以有时候每次输入一个命令显得很费时间,所以我这里又写了一个(批处理文件)bat文件:go.bat

ECHO OFF
ECHO *********************************
ECHO * Batch file
ECHO *********************************
ECHO *
ECHO ON
iverilog -o test adder4.v test_adder4.v
vvp -n test -lxt2
cp test.vcd test.lxt
gtkwave test.lxt

(说明一下,我在windows下安装了gnuwin的软件,即能在windows下用gnu的一些小的实用的工具!)哈哈,这里就可以一键运行了,上面的一些命令的解释可以到我的“wndows下如何用Iverilog+GTKWave进行verilog的编译和查看仿真波形”的博文里去看看吧。。这里就不多说了。

G:\Verilog HDL\examples\Verilog135\01>go.bat G:\Verilog HDL\examples\Verilog135\01>ECHO OFF
*********************************
* Batch file
*********************************
* G:\Verilog HDL\examples\Verilog135\01>iverilog -o test adder4.v test_adder4.v G:\Verilog HDL\examples\Verilog135\01>vvp -n test -lxt2
LXT2 info: dumpfile test.vcd opened for output.
At time 0, ina(0001) + inb(1010) + cin(0) = sum(1011)(11),cout(0)
At time 5, ina(0010) + inb(1010) + cin(1) = sum(1101)(13),cout(0)
At time 10, ina(0010) + inb(1110) + cin(0) = sum(0000)( 0),cout(1)
At time 15, ina(0011) + inb(1100) + cin(1) = sum(0000)( 0),cout(1)
At time 20, ina(0111) + inb(1001) + cin(0) = sum(0000)( 0),cout(1)
At time 25, ina(0001) + inb(1100) + cin(1) = sum(1110)(14),cout(0)
At time 30, ina(0011) + inb(1100) + cin(0) = sum(1111)(15),cout(0)
At time 35, ina(0111) + inb(1111) + cin(1) = sum(0111)( 7),cout(1) G:\Verilog HDL\examples\Verilog135\01>cp test.vcd test.lxt G:\Verilog HDL\examples\Verilog135\01>gtkwave test.lxt

note:在monitor里面的(%2d)就是输出位宽为2的十进制数。其他同理哦!~~~
记下来来几张GTKWave的截图:
图一:

图二:

我想说就一般的练习,iverilog+GTKWave足以应付,感谢网上的牛人们!!
转载:https://www.cnblogs.com/CodeWorkerLiMing/archive/2012/04/18/2455945.html
verilog之四位全加器的编译及仿真(用开源免费的软件——iverilog+GTKWave)的更多相关文章
- Windows上使用iverilog+gtkwave仿真
主要参考了: https://www.cnblogs.com/lsgxeva/p/8280662.html 谢谢! ------------------------------------------ ...
- S3C6410裸奔之旅——RVDS2.2编译、仿真、调试过程 LED流水灯---转的
S3C6410裸奔之旅——RVDS2.2编译.仿真.调试过程 LED流水灯 (2012-10-13 23:56:30) 转载▼ 标签: s3c6410裸奔 ok6410 rvds2.2 rvds2.2 ...
- 全平台轻量开源verilog仿真工具iverilog+GTKWave使用教程
前言 如果你只是想检查Verilog文件的语法是否有错误,然后进行一些基本的时序仿真,那么Icarus Verilog 就是一个不错的选择.相比于各大FPGA厂商的IDE几个G的大小,Icarus V ...
- 编译安装开源免费中文分词scws
一.SCWS了解一下: SCWS 是 Simple Chinese Word Segmentation 的首字母缩写(即:简易中文分词系统). 这是一套基于词频词典的机械式中文分词引擎,它能将一整段的 ...
- 在ubuntu16.04-32bits 下编译vlc和vlc-qt开源项目
软件版本: Ubuntu14.04 32位 Qt5.4.0 32位 开源项目: vlc2.2.4: wget http://download.videolan.org/pub/v ...
- 怎么卸载用 make install 编译(源码)安装的软件?
在linux 中用 ./configure && make && make install 后,如果想删除这个软件我应该怎么删除呢?好像有一个叫"make u ...
- 末学者笔记--apache编译安装及LAMP架构上线
apache介绍 一.Apache的三种工作模式 Apache一共有3种稳定的MPM模式(多进程处理模块),它们分别是prefork.worker.event.http-2.2版本的httpd默认的m ...
- 全网首创ISE入门级教程
转眼间我已经大三了,现在成为了实验室的负责人,对于下一届学生的纳新重任就交到了我的手上,想采取不同的方法暑假尽可能对他们进行一些培训,所以制作了此教程,说实话,在网上还没有找到关于ISE的入门级使用教 ...
- 20个免费的 JavaScript 游戏引擎分享给开发者
这篇文章收集了20个免费的 JavaScript 游戏引擎分享给开发者.这些游戏引擎能够帮助游戏开发人员更快速高效的开发出各种好玩的游戏. 使用 HTML5.CSS3 和 Javascript 可以帮 ...
随机推荐
- 嵌入式mp3播放器
分四部分:按键驱动,声卡驱动,Madplay播放器移植,MP3主播放器处理 按键1:播放,按键2:停止,按键3:上一曲,按键4:下一曲 UA1341内核自带声卡驱动 .解压内核: tar zxvf l ...
- 数学图形(1.28) EPI线
貌似由双曲线组成的图形.有时会像个自行车的轮子. 相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形.该软件免费开源.QQ交流群: 367752815 #http://www.m ...
- FreeBSD与Linux十个本质上的区别
Linux的标志是一只十分可爱的小企鹅,而FreeBSD的标志是一个拿着叉子的小恶魔.你是否经常会听到人们把 Linux及 BSD 系统混为一谈?是的,我有时会经常听到一些新手,甚至于媒体都这么说.当 ...
- 使用javascript比较任意两个日期相差天数(代码)
avascript比较两个日期相差天数,可返回负值,表示后者大于前者. 该函数在IE,firefox下均通过测试. /** 比较两个日期相差的天数,可为负值 **/ function DateDiff ...
- 自用封装javascript函数
(function(){ var JHRZ_IMG_Arr = JHRZ_IMG_Arr || {}; JHRZ_IMG_Arr.loading = ["/static/images/loa ...
- CSS中:before和:after选择器的用法
在线演示这次给大家带来的是对话气泡效果,主要是演示了 :before / :after 和 border 的用法,赶快来围观吧. 阅读原文:CSS中:before和:after选择器的用法
- C#应用视频教程2.3 OPENGL虚拟仿真介绍
本节最重要的一个内容,就是让视野可以平移+旋转+缩放(就像打CS游戏一样以第一人称视角去观察物体,如果可能的话W,S,A,D四个按键控制人物移动,还有鼠标控制视角),本节最重要的一个概念就是设置观察视 ...
- win7无法启动telnet服务
右键我的电脑 —> 管理 —>服务,找到服务telnet, 右键—>属性—>依赖关系 就可以看到其他服务的依赖关系,打开相关依赖的服务即可解决服务不能启动的情况
- HTTP 头缓存Last-Modified,ETag,Expires
http://www.jdon.com/40381 Last-Modified和Expires针对浏览器,而ETag则与客户端无关,所以可适合REST架构中.两者都应用在浏览器端的区别是:Expire ...
- 如何打印加密的PDF文件?
如何打印加密的PDF文件? Pdf加密了不让打印怎么办?? 下载Foxit PDF Editor以下是下载地址:http://www.orsoon.com/Soft/4865.html 用它打开加密的 ...