Linux 下 iverilog 的自动化仿真

姓名:徐铭伟   学号:21011210001   学院:通信工程学院

【嵌牛导读】Linux下使用iverilog进行自动化仿真

【嵌牛鼻子】Linux下使用iverilog进行自动化仿真

【嵌牛提问】如何在linux下使用iverilog进行自动化仿真

【嵌牛正文】

文章目录

一、介绍

二、安装步骤

三、iverilog 使用

test.v

add.v

四、自动化仿真

Makefile

执行

一、介绍

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

GTKwave:一款免费的波形查看器,可以用于查看标准的 verilog VCD/EVCD,以及其他一些格式的波形文件。

二、安装步骤

iverilog 和 GTKwave 的安装非常容易,这里以 Ubuntu 16.04 为演示平台。没有换源的可以换成国内的源,这样会比较快一些。

安装 iverilog 的命令如下:

1、  sudo apt-get update

2、  sudo apt-get install iverilog

安装 GTKwave 的命令如下:

1、  sudo apt-get install gtkwave

iverilog 工具链主要包含 iverilog、vvp、gtkwave 三个工具;iverilog 和 gtkwave 的作用已经说过了这里就不再赘述了,vvp 工具的作用主要是依据 iverilog 编译出的可执行文件生成可视化的波形文件。

三、iverilog 使用

这里提供一个仿真测试:test.v 是 testbench 顶层文件,add.v 是 RTL 文件。

test.v

`timescale 1ns/1ps

module test();

reg        clk;

reg        rst_n;

reg  [7:0] data1_i;

reg  [7:0] data2_i;

wire [7:0] data_o;

  initial begin

    $dumpfile("test.vcd");

    $dumpvars;

  end


  initial begin

    clk = 0;

    forever #5 clk = ~clk;

  end

  initial begin

    rst_n = 0;

    data1_i = 0;

    data2_i = 0;

    #100

    rst_n = 1;

    repeat(20) begin

      @(posedge clk) begin

        data1_i <= data1_i + 8'd1;

        data2_i <= data2_i + 8'd2;

      end

    end

    #500

    $stop;

  end

add  u_add(

    .sclk  ( clk ),

    .rst_n  ( rst_n ),

    .data1_i( data1_i ),

    .data2_i( data2_i ),

    .data_o ( data_o )

);

endmodule


add.v

module add (

    input              sclk,

    input              rst_n,

    input      [7:0]  data1_i,

    input      [7:0]  data2_i,

    output  reg [7:0]  data_o

);

always@ (posedge sclk or negedge rst_n) begin

  if(~rst_n)

    data_o <= 8'b0;

  else

    data_o <= data1_i + data2_i;

end

endmodule

其中 test.v 中有两个值得注意的语句;系统函数 dumpfile 用来在运行仿真时生成 .vcd 波形文件;dumpvars 表示选择记录哪些信号,直接加分号结束表示记录设计中所有信号。

initial begin

    $dumpfile("test.vcd");

    $dumpvars;

end

iverilog 的使用和 GCC 比较类似,都可以用 -o 选项来指定输出文件,编译时也需要提供全部相关文件的绝对或相对路径,编译以上测试工程使用的命令如下:

iverilog -o run.out test.v add.v

编译后会生成被指定的目标可执行文件 run.out ,但此文件执行后只会在终端上显示仿真时文字信息,需要使用 vvp 工具将其可视化成 .vcd 文件。命令如下:

vvp -n run.out

其中 -n 选项表示运行完退出,以便进行下一步操作。可见执行了 vvp 命令后生成了 test.vcd 文件,可以用 GTKwave 打开并显示出波形。命令如下,回车后即可查看仿真波形。

gtkwave test.vcd

四、自动化仿真

Windows 的好处在于大部分软件都拥有完善的 UI 界面,内部操作过程也对使用者是透明的,比如 Modelsim 只需要编译后点仿真即可。而在 Linux 中,这些操作需要用命令来完成,像上面的测试工程,每次更改完代码,需要输入至少三次命令方才观察到波形,如果 Verilog 文件更多,那么编译命令将会更长。

本例使用 Makefile 来实现自动化仿真。Makefile 是什么就不再赘述了,需要了解的可以百度一下。

Makefile

Makefile 的原理很简单,就是顺序执行上面三个命令,下面先给出代码:

# This is a Makefile

##########################  Parameters  #############################

# Object Verilog Files' catalog

ObjVFile = vfile.txt

# VCD File's name(.vcd)

VcdFile  = test

# elf File's name(.out)

ElfFile  = run

#####################################################################

# read Verilog Files' catalog

FileBuf := $(shell cat $(ObjVFile))

# make all

all:

    compile visual sim

# only make compile

compile:

iverilog -o run.out $(FileBuf)

# only make visual ( make .elf file to the .vcd file )

visual:

vvp -n $(ElfFile).out

# only open the wave

sim:

gtkwave $(VcdFile).vcd

# clear middle files

clean:

rm -rf *vcd *.out

我们另外使用一个目录文件(本例中为 vfile.txt)来存储一个工程所要用到的所有 Verilog 文件,变量 ObjVFile 对应这个目录文件的路径、VcdFile 对应 testbench 中 dumpfile 命令的 .vcd 文件名称、ElfFile 对应编译预计生成的可执行文件的名称(这里默认使用 .out 的后缀,实际上随意)、变量 FileBuf 将目录文件内容读取并保存下来。

all: 对应的语句是 Makefile 的终极目标,即顺序执行编译、可视化和打开波形。

compile: 对应的语句表示编译从目录文件中读出来的所有 Verilog 文件。

visual: 对应的语句表示使用 vvp 工具依据编译后生成的可执行文件来产生波形文件。

sim: 对应的语句表示打开波形文件。

clean: 对应的语句表示删除中间文件。

目录文件 vfile.txt 文件需要符合 makefile 的换行符语法,如下所示:

./test.v \

./add.v

其中 \ 为换行符,分割每一行,使其具有可读性。./test.v 和 ./add.v 即为本工程相关的 Verilog 文件的相对路径。

执行

在终端中执行 make或 make all命令即可实现自动化仿真,直接呈现仿真后的波形。


如果不需要更改代码并想显示波形时,键入 make sim命令,即可不必重新编译工程便打开波形。

需要删除产生的中间文件则键入 make clean命令即可。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容