author: hjjdebug
date: 2024年 10月 12日 星期六 10:34:13 CST
descripton: linux 下 verilog 简明开发环境附简单实例
甲: 安装软件
1. sudo apt install iverilog
该包verilog 源代码的编译器iverilog,其输出是可执行的仿真文件格式vvp格式
它可以检查源代码中的语法错误
该包还包含 verilog的命令行仿真器vvp, 它能把.vvp文件输出成图形格式.vcd
你可以查询man 手册得到它的基本用法及说明
2. sudo apt install gtkware
.vcd 文件的可视化工具
乙: 开发举例.
在linux下, 用verilog 设计一个计数器,并给出仿真图.
1. 计数器源代码
c
module basic(
input sys_clk,
input reset,
output reg[3:0] counter
);
//main code
//计数器
always@(posedge sys_clk or negedge reset)
begin
if(!reset)
counter <= 4'd0;
else
counter <= counter + 4'd1;
end
endmodule
2. test bench 测试代码
c
在这//时间精度/显示精度
`timescale 1ns/1ns
module tb_basic();
//regeister and wire
reg sys_clk;
reg reset;
wire [3:0] counter;
//initial, 输入信号激励及仿真命令
initial
begin
$dumpfile("basic.vcd");
$dumpvars(0,u_basic);
sys_clk = 1'b1;
reset = 1'b0;
#100;
reset = 1'b1;
#1000;
// $stop;
$finish;
end
//时钟激励, 25M 时钟
always #20 sys_clk=~sys_clk;
basic u_basic(
.sys_clk(sys_clk),
.reset(reset),
.counter(counter)
);
endmodule
里插入代码片
3. verilog 仿真中常用的4条命令
-
$dumpfile("test.vcd");
指示波形数据的保存文件,
如果不指定, 默认文件名称是dump.vcd
-
$dumpvars(0,test);
指定需要记录到VCD文件中的信号
第一个参数是保存该模块下几层模块数据【0表示只保存当前层,不保存子模块信号】,
第二个参数是实例化的模块名
仿真控制命令.
- $stop;
暂停仿真
- $finish;
退出仿真程序
4. Makefile
我喜欢一种简单的命令行方式, 动动手指就能达到心中所想.
所以我将一些命令的使用汇集到一个Makefile中.
这样我才能把注意力放到编写代码上而不是消耗在环境中.
Makefile 内容如下:
bash
SRC = basic.v tb_basic.v
TARGET = basic.out
# 在tb_basic.v 中指定了输出文件为basic.vcd
VCDFILE = basic.vcd
#############################################
#简化目标
all: $(TARGET)
#生成target 文件,排除源码书写错误等
$(TARGET): $(SRC)
iverilog -o $@ $^
# 生成vcd 文件, 供gtkwave 使用
$(VCDFILE) : $(TARGET)
vvp $(TARGET)
#简化目标
build: $(VCDFILE)
#简化目标,用run 目标来查看波形
run: $(VCDFILE)
gtkwave $(VCDFILE)
clean:
rm $(TARGET) $(VCDFILE)
这样我在vim中(或emacs中) 直接敲入make 就能修改错误代码.
make run 就能查看仿真波形图.