在wsl环境中配置和开发verilog(一种比较新颖的verilog开发指南)

WSL是windows中自带的linux子系统,笔者在若干月前首次接触其便爱不释手,verilog作为一种硬件解释语言,可否像c语言那样被游刃有余的编译和运行呢,笔者这次大胆的尝试在WSL环境+VSCODE+Iverilog开发verilog。

首先默认按照了WSL和VSCODE,WSL安装可以自行在网上搜索帖子。

随后在WSL的ubuntu系统的命令行中输入如下指令:

bash 复制代码
sudo apt-get install iverilog 
sudo apt-get install gtkwave 

这是安装iverilog编译器和gtwake图形显示软件。

随后打开Vscode采用SSH连接到WSL,新建一个文件夹,在其中打开终端。

为了仿真和测试你的Verilog设计,通常需要一个testbench文件(例如testbench.v)。Testbench不是编译Verilog代码所必需的,但是没有它,你将无法进行仿真来验证你的设计是否按预期工作。

以下是为什么需要testbench的原因:

  1. 激励生成:Testbench提供了一个环境,你可以在这个环境中生成激励信号来模拟实际硬件的工作条件。

  2. 行为验证:通过在testbench中对设计模块的输入进行操作,并观察输出,你可以验证设计的行为是否符合预期。

  3. 波形观察:Testbench允许你将仿真的信号输出到波形文件中,这样你可以使用波形查看器来分析信号随时间的变化。

  4. 调试:如果设计不按预期工作,testbench可以帮助你调试问题,因为它允许你逐步通过仿真来检查各个信号的状态。

编译Verilog代码本身不需要testbench,编译过程只是将Verilog代码转换成仿真器可以理解的格式。但是,为了进行仿真,你需要一个testbench来:

  • 实例化你的设计模块。

  • 提供激励。

  • 观察和验证输出。

在文件夹中将下面两份代码用vim filename的方法新建并编辑:

bash 复制代码
module adder(clk, rst_n, a, b, c);
    input [3:0] a, b; // 输入a和b为4位宽
    output [7:0] c;   // 输出c为8位宽
    input clk, rst_n;
    
    reg [7:0] c_reg;
    
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) 
            c_reg <= 8'h0;
        else 
            c_reg <= a + b;
    end
    
    assign c = c_reg;
endmodule

上面的代码命名为adder_rtl.v,这是我们写的模块代码,实现加法器功能

bash 复制代码
`timescale 1ns / 1ps
​
module my_testbench;
​
// Inputs
reg clk;
reg reset;
​
// Outputs
wire out;
​
// Instantiate the Unit Under Test (UUT)
adder uut (
    .clk(clk), 
    .rst_n(reset), 
    .a(4'b0010), 
    .b(4'b0011), 
    .c(out)
);
initial begin
    // Initialize Inputs
    clk = 0;
    reset = 0;
​
    // Wait 100 ns for global reset to finish
    #100;
    
    // Add stimulus here
    reset = 1;
    #10;
    reset = 0;
​
    forever #5 clk = ~clk; // Toggle clock every 5ns
end
​
// Monitor the outputs
initial begin
    $monitor("At time %t, output is %b",$time, out);
end
​
// Dump the waveforms
initial begin
    $dumpfile("my_module.vcd");
    $dumpvars(0, my_testbench);
end
​
endmodule

上面的文件命名为my_testbench.v,是测试代码,有点类似于嵌入式开发中的main.c,在其中实例化我们写的加法器模块。 后面在终端中输入如下指令首先编译生成.out文件,再生成波形文件,再用波形查看软件gtkwave来观察波形。

bash 复制代码
iverilog -o my_simulation.out my_module.v my_testbench.v
vvp my_simulation.out
gtkwave my_module.vcd
​

my_module.vcd是在my_testbench.v中规定的生成波形文件,要用vvp来加工生成的.out文件来生成波形文件。下面是生成的波形观察窗口,里面显示了verilog的若干波形。

相关推荐
飞速移动的代码菌5 小时前
【DataWhale】快乐学习大模型 | 202507,Task08笔记
笔记·学习
不在了情绪6 小时前
[ The Missing Semester of Your CS Education ] 学习笔记 Vim篇
笔记·学习·vim
遇见尚硅谷7 小时前
C语言:20250728学习(指针)
c语言·开发语言·数据结构·c++·笔记·学习·算法
这就是佬们吗9 小时前
初识 docker [上]
java·开发语言·笔记·docker·容器
Star在努力10 小时前
15-C语言:第15天笔记
c语言·笔记·算法
老虎062711 小时前
JavaWeb(苍穹外卖)--学习笔记14
笔记·学习
范纹杉想快点毕业12 小时前
Zynq SOC FPGA嵌入式裸机设计和开发教程自学笔记:硬件编程原理、基于SDK库函数编程、软件固化
网络·笔记·stm32·单片机·嵌入式硬件·tcp/ip·fpga开发
Warren9813 小时前
Java Collections工具类
java·开发语言·笔记·python·学习·oracle·硬件工程
五行缺弦15 小时前
Java 笔记 serialVersionUID
java·开发语言·笔记
破碎的南瓜15 小时前
OSPF笔记
网络·笔记·智能路由器