如何用VS code开发FPGA的程序,iverilog使用说明

目录

前言

一、VS code开发环境搭建

二、安装verilog和iverilog插件

三、准备FPGA程序测试代码

四、编译代码并查看波形

五、代码解读对比仿真波形

前言

        之前一直用FPGA厂家自带的开发环境,但是针对一些体量不大,想要方便严重算法的时候,就像用一个建议的开发环境,网上找了找,发现很多工程师喜欢用VS code开发FPGA。用VSCode编辑verilog代码、iverilog编译、自动例化、自动补全、自动格式化等常用插件。


一、VS code开发环境搭建

        首先需要搭建FPGA开发环境,网上论坛里的资料多来自于哔哩哔哩的视频,地址:RTL & FPGA开发中VSCode编辑器以及好用的几个插件_哔哩哔哩_bilibili   内容是:RTL & FPGA开发中VSCode编辑器以及好用的几个插件;

课程资料下载地址,里面有个《VScode编辑器的软件安装.pdf》,一步步操作即可。

链接:https://pan.baidu.com/s/1NZxgxncxkJa79LOYncfrKQ  提取码:4oxl

关于VS code开发环境的介绍,也 可以参考知乎的帖子:浮沉野马 - 知乎

二、安装verilog和iverilog插件

第一步:搜索下图的插件添加即可,iverilog附带gtkwave,插件的功能可以看介绍,下载完成后,还需进行以下配置,可以看知乎的帖子。

第二步:在扩展里搜索"verilog",找到下载人数最多的这个插件:Verilog-HDL/System,点一下“安装”按钮即可完成安装,此时我们发现代码有了颜色(如上图所示),但它并没有自动检错的功能。

第三步:将ctags添加到环境变量path,例如 新建 D:\ctags(根据你的实际情况),其他两个参照下图设定。

第四步:检测安装和配置是否成功,故意改错代码,需要保存后,是否会显示代码故障,测试结果如下图所示:

按下 Ctrl+~ 查看报错信息,如果iverilog没有起到作用,可以在终端中输入iverilog,再次启动iverilog功能。

三、准备FPGA程序测试代码

新建一个文件,添加FPGA代码,并在vscode中打开这个文件夹,写两个简单的verilog代码"test.v"和"tb_test.v",具体代码可以查看第四部分内容。

Testbech文件(顶层文件)添加必要代码:

需要在testbench仿真模块"tb_test"里添加下面的代码,不然不会生成.vcd文件,然后用gtkwave打开.vcd波形文件查看波形。

/* 生成vcd波形文件,用iverilog+GTKwave进行仿真所需的临时的vcd波形文件 */

initial begin

    $dumpfile("./build/wavets.vcd");   // 指定VCD文件的名字为wavets.vcd,仿真信息将记录到此文件

    $dumpvars(0, tb_testa );  // 指定层次数为0,则tb_testa模块及其下面各层次的所有信号将被记录

    #100000 $finish;

end

上述代码解释如下:

本人希望把编译仿真生成的文件都放到"build"文件夹里,源代码都放到"src"文件夹里,所以我用的是"$dumpfile("./build/wavets.vcd");",但是很多插件只能支持网上的那种最简单的写法,不然找不到.vcd文件。

"#100000 $finish;" 经过100000ps(100us)后结束,也就是仿真时间;

注意:如果一直仿真停不下来,按ctrl+c可强制结束,终端无法返回时,输入finish就可结果仿真;

添加完的样子样式如图所示:

四、编译代码并查看波形

在终端里敲命令行代码,利用iverilog编译,生成.o文件。利用vvp命令可以生成.vcd文件,gtkwave可以直接打开.vcd文件查看波形。

下面是iverilog的终端控制方法,可以编译verilog文件,方便后续调试,建议大家好好学习。

输入:

第一个命令:md build

第二个命令:iverilog -o ./build/test.out  tb_test.v test.v

第三个命令:vvp -n ./build/test.out

第四个命令:gtkwave ./build/wavets.vcd

下面显示解释上述命令:

第一个命令:"md build"创建build文件夹,用于存放编译仿真生成的文件,linux命令;

第二个命令:"."(点)的意思是当前位置,也就是这个位置,如果代码文件放置在src下面,则需要./src/或者说是.\src\ 源代码。

iverilog作用是编译文件,比如设计模块的代码和仿真模块的代码都在一个test.v文件里,那么编译这个文件只需要命令"iverilog test.v"

可是如果设计模块代码写在了test.v文件里,仿真模块的代码写在了tb_test.v文件里,那么只需要把所有的文件名字全都缀在后面即可"iverilog test.v tb_test.v"

iverilog的参数"-o <path>"是可以省略的,"-o"命令指定编译后生成的.out文件的名字,如果不指定会生成默认的名字,这里我们"-o ./build/test.out"命令生成的是build文件夹下的test.out文件。

第三个命令:"vvp ./build/test.out"命令是生成.vcd波形文件,需要在testbench仿真模块(激励模块)添加几行代码,FPGA的仿真方法,这里就不多说了。如果用强大的仿真,推荐modelsim。

第四个命令:"gtkwave wave.vcd"意思就是用gtkwave.exe打开.vcd文件;

五、代码解读对比仿真波形

test.v和tb_test.v程序代码如下,比较简单,就是时钟sclk的计数,当cnt[10]为1时,置位odata;反之,复位odata。

module testa(
input	   wire	            sclk,
input	wire 							rst,
output	reg   odata
	);

reg [10:0]	cnt;
always @(posedge sclk) begin
	if(~rst) begin
		odata <= 1'b0;
		cnt <= 0;
	end
	else begin
		cnt <= cnt + 1;
		if(cnt[10]) begin
			odata <= 1'b1;
		end
		else begin
			odata <= 1'b0;
		end
	end
end
// -----------------------------------------------------------------------------
`timescale  1ns / 1ps

module tb_testa;

// testa Parameters
parameter PERIOD  = 10;


// testa Inputs
reg   sclk   = 0 ;
reg   rst_n  = 0 ;

// testa Outputs
wire  odata;

initial
begin
   $dumpfile("./build/wavets.vcd");
    $dumpvars(0, tb_testa);
   #100000 $finish;
end

initial
begin
    forever #(PERIOD/2)  sclk=~sclk;
end

initial
begin
    #(PERIOD*2) rst_n  =  1;
end

testa  u_testa (
    .sclk                    ( sclk    ),
    .rst                     ( rst_n     ),

    .odata                   ( odata   )
);

endmodule

仿真结果如下,GTKWave的软件就不多介绍了,喜欢用的可以自己研究,个人觉得比modsim的仿真差很多,用不习惯。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340