linux 下 verilog 简明开发环境附简单实例


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条命令


  1. $dumpfile("test.vcd");

    指示波形数据的保存文件,

    如果不指定, 默认文件名称是dump.vcd

  2. $dumpvars(0,test);

    指定需要记录到VCD文件中的信号

    第一个参数是保存该模块下几层模块数据【0表示只保存当前层,不保存子模块信号】,

    第二个参数是实例化的模块名

仿真控制命令.

  1. $stop;

暂停仿真

  1. $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 就能查看仿真波形图.

5. 仿真结果图

相关推荐
OpenPomeloxCommunity11 小时前
Linux 同步机制之 spinlock 设计与实现(二):ARM32实现
linux
爱莉希雅&&&11 小时前
Rocky Linux 10.1 + K8s 1.36.3 离线集群部署笔记(Kubernetes)
linux·笔记·docker·kubernetes·calico
三84411 小时前
基于 NFS 共享存储的 Nginx Web 服务部署项目
linux·运维·服务器
逻极11 小时前
Shell脚本实战:从“能跑”到“高效”的3个关键跃升
linux·服务器·shell·脚本
ARM|X86+FPGA工业主板厂家11 小时前
Linux+Xenomai 实时系统在机器人中的应用
linux·运维·机器人
唔6612 小时前
Linux工具使用情况buildroot
linux·运维·服务器
云泽80812 小时前
Linux 核心机制详解(三):文件系统权限与共享安全——从删除规则到粘滞位防护
linux·运维·安全
码农阿豪12 小时前
Prometheus怎么监控另一台Linux服务器?Node Exporter配置教程
linux·服务器·prometheus
紫霄芯语12 小时前
观察者模式在FPGA中断系统的实战重构
观察者模式·fpga开发·重构
xywww16812 小时前
Claude Opus 5 API 接入实战:国内项目上线前的网络、Key、限流和排错清单
大数据·linux·网络·数据库·云计算·aws