赞
踩
在win10环境下,使用iverilog进行简单的verilog编译仿真,使用gtkwave和WaveDrom查看仿真波形。
iverilog for windows提供了iverilog和gtkwave的捆绑安装程序,下载链接:https://bleyer.org/icarus/,下载安装后要配置环境变量。
WaveDrom是一个网页波形编辑器,链接:https://wavedrom.com/
用状态机写一个1101序列检测模块:
module test( input clk, input rst_n, input in, output out ); localparam IDLE = 1, H = 2, HH = 3, HHL = 4, HHLH = 5; reg [2:0] state; always @(posedge clk, negedge rst_n) begin if(!rst_n) state <= IDLE; else begin case(state) IDLE: state <= in ? H : IDLE; H : state <= in ? HH : IDLE; HH : state <= in ? HH : HHL; HHL : state <= in ? HHLH : IDLE; HHLH: state <= in ? H : IDLE; default: state <= IDLE; endcase end end assign out = (state == HHLH); endmodule
由于需要查看波形,所以调用系统函数$dumpfile(“wave.vcd”)将波形输出到wave.vcd文件,调用$dumpvars输出所有波形。写一个简单的tb,直接给出1101序列的激励:
`timescale 1ns/1ns module test_tb; reg clk = 1; always #10 clk = ~clk; reg rst_n = 0; reg in = 0; wire out; initial begin $dumpfile("wave.vcd"); // 指定用作dumpfile的文件 $dumpvars; // dump all vars end initial begin #20 rst_n <= 1; #20 in <= 1; #20 in <= 1; #20 in <= 0; #20 in <= 1; #20 in <= 0; #40; $display("it works"); $finish; end test inst_test ( .clk (clk), .rst_n (rst_n), .in (in), .out (out) ); endmodule
使用iverilog命令进行编译,默认输出文件名为a.out:
iverilog test.v test_tb.v
使用vvp命令对a.out执行仿真:
PS E:\WorkSpace\test> vvp a.out
VCD info: dumpfile wave.vcd opened for output.
it works
执行仿真后,波形文件输出到了wave.vcd文件中,可以用gtkwave软件和WaveDrom网页查看波形。
执行gtkwave命令查看波形:
gtkwave wave.vcd
执行后会弹出gtkwave软件,不过没有波形,要手动选择左侧的tb,然后添加想要查看的波形即可:
使用WaveDrom网页查看波形需要将vcd波形文件转化为wdrom文件,我使用sublime编辑器的verilog-Gadget插件实现该功能。
使用sublime编辑器打开wave.vcd文件,然后鼠标右键,选择VCD to WaveDrom,即可生成wdrom文件:
将这些代码复制到WaveDrom网页中,即可查看波形:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。