------------2020.12.24------------windows10------------

绪论

  • 一个好用的编辑器,就好比斧头之于伐木工,锋利的、自动化的,能极大的提高工作效率
  • 能编辑verilog代码的工具有很多:notepad++SublimeVSCode、Vivado、Quartus等等。
  • 其中的VSCode就目前而言,未必是完美的编辑器,但一定是充满魅力的、有着无限潜力的。
  • 语法高亮、自动补全、自动检错、自动排版、版本管理,只有你想不到,没有vscode做不到。

第0章 熟悉VSCode

下载、安装、安装中文插件、首选项-设置、文件比较、快捷键、主题、编码、用户代码片段、配置python环境、git版本管理 等。

请参见:

ljgibbs:VSCode 布道指南 V1.0 (一)​zhuanlan.zhihu.com
480fc7a4bba6afe241a084c81140e774.png
ljgibbs:VSCode 布道指南 V1.0 (二)​zhuanlan.zhihu.com
480fc7a4bba6afe241a084c81140e774.png

好的,到这里,你已经熟悉了VSCode。但想愉快的书写verilog代码却并不轻松。

下面我们让我们新建一个文件夹"folder",并在vscode中打开这个文件夹;然后新建一个"src"文件夹存放源代码,写两个简单的verilog代码"code.v"和"tb_code.v":

dd8830b4164c772007098777da6852e4.png

30a14ba43a480f39fe5cb417b29c4ee8.png

第一章 VSCode+iverilog+GTKWave

首先,在扩展里搜索"verilog",找到下载人数最多的这个插件:Verilog-HDL/System...

ec51d88d47c4c7061eb17d0f92acbd69.png

点一下“安装”按钮即可完成安装,此时我们发现code.v里面的代码有了颜色,但它并没有自动检错的功能。

e6603c113064b9c5b02aed265ca66be0.png

这时候,我们需要阅读这个插件的说明了解插件的用途,并按照说明配置这个插件。

520f03e514c6072f6e6212a9ff520729.png

这样的英文说明可能对于您来说并不友好,您可以点击插件的名字前往"VS Code Marketplace":

插件的官网:

Visual Studio Marketplace​marketplace.visualstudio.com
5dc743cc8338d4e4de55f0f8d1b0b3e5.png

1fc9799e5723a72a086c584a09b3aa14.png

1997c071c51dac1cf57d1f8fe02c5da4.png

这个时候chrome浏览器的网页翻译就能帮助您很多。

并且您还可以去插件的GitHub官网去寻求更多帮助。

91669f3beeda1ac93a3af2f1a7107b5d.png

您可能需要花些时间才能理解这个英文说明,但长话短说,首先我们需要安装ctags

0f1544064b0855e6c47700daf8886f6d.png

并将ctags添加到环境变量path,例如 新建 D:ctags(根据你的实际情况)

0284addfebd875bd9abd58f667042730.png

然后打开这个插件的设置(小齿轮图标)

2cf27ad42ebc8cc1033ffc2b368b5db8.png

是的,这里不用修改,直接填默认的catgs就行

b00a710f2d15f34e3f72339cfc16f1b3.png

这个时候,我们可以右键-转到定义,来验证是否成功安装ctags

93dc7d4421a8c12f4cfab266c36b4541.png

接下来,我们需要在设置里面选择一个合适的Linter,通常选择免费开源的iverilog,它的作用是编译文件,有了它才能实现自动检错。

e83f7f10452619bca6060d6481e203d7.png

我们需要去iverilog官网安装iverilog(iverilog附带gtkwave,而且安装的时候自己就添加了环境变量)。相信这对成功安装了ctags的你而言并不难。

全平台轻量开源verilog仿真工具iverilog+GTKWave使用教程 - whik - 博客园​www.cnblogs.com
3eed940c1d6aec10a1df25911c239192.png

vscode的插件,调用iverilog编译,生成.o文件。vvp命令可以生成.vcd文件,gtkwave可以直接打开.vcd文件查看波形。

下面通过自动检错功能,来验证您是否成功安装了iverilog:

(请注意,只有按下了Ctrl+S 保存按钮,才会检错,其他时候不会检错)

abe54470f5228bad9b68714f36cc2c62.png

按下 Ctrl+~ 查看报错信息

但是,即使你代码全部正确,你会发现它依然有报错:

6f8ff07f57c2f9934436da41bd399534.png

报错信息:Unknown module type

这是因为"编译"都是单个文件编译的,多个文件编译需要"链接",虽然都是iverilog一个人完成任务,但你至少要用命令告诉iverilog一些参数。显然vscode的这个Verilog-HDL/System...插件并没有这么智能。我们只能看这个插件的说明、去github询问插件开发者、去看iverilog的官方文档,看看如何设置配置文件来抑制此类错误。

iverilog的文档还是比较难找的......

Icarus Verilog​iverilog.fandom.com
cfd2cbaad6ebb9b2c8b75f43d7f473af.png

我们查阅到资料,使用"-i"命令可以抑制此类错误,即iverilog编译器不再检查模块实例化的时候引用的模块是否已经定义,不论正确与错误都不报错。显然这是权宜之计,但我也没有更好的办法。

打开Verilog-HDL/System...的设置界面,添加"-i"命令参数。

4d9a38fd9dbc3b83afa4ab5936ccccfe.png

这个时候打开tb_code.v文件,按ctrl+s保存,发现检错功能正常。

16d691a8c22668ad7b8145fe8008212a.png

下面我们摆脱vscode编辑器的束缚,在CMD敲命令行代码,调用iverilog编译生成.o文件,然后用vvp命令生成.vcd波形文件(需要在testbench仿真模块"tb_code"里添加下面的代码,不然不会生成.vcd文件),然后用gtkwave打开.vcd波形文件查看波形。

/* 生成vcd波形文件,用iverilog+GTKwave进行仿真所需的临时的vcd波形文件 */
initial begin
	$dumpfile("./build/wave.vcd");  // 指定VCD文件的名字为wave.vcd,仿真信息将记录到此文件
	$dumpvars(0, tb_code );  // 指定层次数为0,则tb_code 模块及其下面各层次的所有信号将被记录
	#10000 $finish;
end

网上找资料也会看到有人在激励模块(仿真模块)添加这样的代码:

initial begin
	$dumpfile("wave.vcd");  // 指定VCD文件的名字为wave.vcd,仿真信息将记录到此文件
	$dumpvars(0, tb_code );  // 指定层次数为0,则tb_code 模块及其下面各层次的所有信号将被记录
end

我个人是因为希望把编译仿真生成的文件都放到"build"文件夹里,源代码都放到"src"文件夹里,所以我用的是"$dumpfile("./build/wave.vcd");"。

但是很多插件只能支持网上的那种最简单的写法,不然找不到.vcd文件。

还有就是"#10000 $finish;"是怕你一直仿真停不下来,按ctrl+c可强制结束。

然后我们在vscode按下" Ctrl+~ "打开cmd终端(或者点击开始菜单,搜索cmd,但是要cd到工程文件夹)

62b8d2c718ffec5db209e39d1c8830a9.png

输入:

md build
iverilog -o ./build/a.out ./src/tb_code.v ./src/code.v
vvp -n ./build/a.out
gtkwave ./build/wave.vcd

这几个命令很好理解。

"md build"创建build文件夹用于存放编译仿真生成的文件

./src/或者说是.src 源代码source都放在了src文件夹里,"."(点)的意思是当前位置,也就是这个位置:

1d98533c1922c3e7ced7e431472c7a64.png

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

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

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

"vvp a.out"命令是生成.vcd波形文件,需要在testbench仿真模块(激励模块)添加几行代码(前面有说)

vvp 的“ -n ”参数其实没啥用,因为在仿真模块里,"$finish"是结束仿真的意思,可是有的时候会用到"$stop"暂停仿真 ,暂停的话其实就没有结束,你需要输入"finish"才能结束,你输入"exit"、"exit()"、"ctrl+c"、"ESC"、"stop"、":exit"全都没有用!当然继续仿真100ns我其实不太清楚,在vivado却很方便。"-n"的意思就是把"$stop"当成"$finish"处理了,权宜之计,更多的仿真功能我也不太会。

"gtkwave wave.vcd"意思就是用gtkwave.exe打开.vcd文件,当然你也可以用其他的软件打开。然后就可以看到波形了

183a2be30a8d03b94a23a50085208938.png

当然,你也可以右键.vcd文件,在资源管理器中显示

03be50538148223c2e3f32c19d542e01.png

然后双击打开,或者选择打开方式gtkwave.exe

当然如果你安装了这个插件WaveTrave

05190a17e9c0cf197ee67a3c75f51b72.png

你甚至可以在vscode中直接双击打开你得.vcd文件,是不是很酷呢~

69d8521f3141e83689012578f7a32b54.png

只不过这个插件似乎要收费呢?...

当然有一些插件自动编译和仿真,但是我更推荐大家自己写命令(可以把命令保存在"代码片段"里面,很方便快速,方便修改更加灵活),而vscode有几个自动编译仿真的插件,我感觉挺憨憨的。当然这只是权宜之计,随着设计变得更大,它们会散布在数十个甚至数百个文件中。(你不可能iverilog命令后面跟着几百个文件名字,这些文件还在不同的文件夹内)。当设计是如此复杂时,就需要更高级的源代码管理技术。(简称其他高级设计管理技术)。当然,我个人感觉这个时候直接用vivado、quartus好了,用什么vscode。

As designs get even larger, they become spread across many dozens or even hundreds of files. When designs are that complex, more advanced source code management techniques become necessary. These are described in later chapters, along with other advanced design management techniques supported by Icarus Verilog.

第二章 自动生成例化,自动生成testbench

是的,您第一章安装的第一个插件Verilog-HDL/System...就有自动例化功能

按F1或者Ctrl+Shift+P,输入

verilog:instantiate

非常的好用,但是不够完美。

当然还有一个插件Verilog_Testbench,直接把整个testbench仿真模块(激励模块)的框架(例子)给你写好,而且非常的智能,你所需要的仅仅是复制。

c88e66e69fcdc016ac4fbb8065c45b61.png

它有自动例化、自动生成testbench功能,但您在安装这个插件的时候可能会遇到不小的困难。

第一点,它需要您的电脑安装python3以上,并且添加环境变量。您可以在cmd输入python命令来检查是否成功。

第二点,您可能只能得到乱码的输出,为此您需要获取额外的帮助在该插件的GitHub上。

请参阅博客

Vscode自动生成verilog例化 - 小翁同学 - 博客园​www.cnblogs.com
4400749086611bbf421bbf0542fe485a.png
python--“chardet”安装方式_CS_Hoyun的博客-CSDN博客_chardet安装​blog.csdn.net
37b8d351942f334224ca624ba981413f.png

第三章 自动排版、自动格式化

安装插件Verilog Format

f41b0ca330c180b43165c6fa4d26f41d.png

首先,您需要去Visual Studio Marketplace阅读说明,发现您需要去该插件的GitHub下载并安装verilog-format-WIN.zip,

b2b5671389fd7521cd0de957cee61534.png

然后去设置选项里面正确填写刚刚安装的“.exe”路径和配置文件“.properties”的路径。

57b50937addaf9ae92415dd1aabc2fc2.png

然后你就可以右键格式化文档了

d9fc48b3689b9bb28f147578ed9a5744.png

但是你会被链接到一个下载Java的网页...

是的,你需要手动安装 jdk-8u271-windows-x64

注意是8u271版本哦

这里的下载过程、安装过程、添加环境变量过程都非常复杂

请参阅博客

windows系统安装Java(详细版) - Windows_XP - 博客园​www.cnblogs.com

最后,你右键格式化,发现中文注释会乱码......

然后你百思不得其解,网上的帮助也少的可怜。

然后你只能去github向作者寻求帮助

14ba21c7da55fbd240f8a8eeaaaeb685.png

是的,您的jdk-8u271-windows-x64默认编码并不是UTF-8

请参阅博客:

将JDK默认编码设置为UTF-8 - 你啊347 - 博客园​www.cnblogs.com
87c17839556a8e2a210a066f44cf3619.png

好的,这把可以正常自动格式化排版了,但是排版排的比较丑,不是我想要的。怎么办呢,看说明,编辑配置文件,发现配置文件无效!

其实因为这个插件有个小bug,作者漏了一个"s",见GitHub大神解答

https://github.com/ericsonj/vscode-verilogformar/issues/1​github.com

第四章 其他编码问题

你得CMD默认编码不是UTF-8

解决 VS Code输出字符串乱码问题​blog.csdn.net
f893694b71c8d2dccf77be3c3dd35990.png

你的电脑默认编码不是UTF-8

vscode输出窗口中文乱码 | AMAHV​blog.amahv.cn
fa06ea995e1281c622338933ebe35e18.png

第五章 其他插件

TabOut帮助您无需点击鼠标即可跳出括号

cde1a9cb13dfcad2d6121260187efd00.png

Better Comments可以让你得注释有突出颜色的标记,例如 标记 todo

ab9dfc0c4c5a5ca5241b2ab681e95c2c.png

Rainbow Brackets可以使得您的括号拥有更清楚的色彩

4b97062b28d13e1ccced7ac9fc79c9cc.png

Verilog Snippet可以提供更多的自动补全。

b55f8442bacc9c01171c9312cbab8334.png

虽然Verilog-HDL/System...自带部分自自动补全,并且Verilog Snippet显得更加冗余,但后者的自动补全功能更丰富些

c6c5bbc3f554e65e918bf2007bdebe64.png

我们可以前往Verilog-HDL/System...插件的安装位置修改插件的配置

C:Users用户名.vscodeextensionsmshr-h.veriloghdl-1.3.6snippets

因为Verilog-HDL/System...与Verilog Snippet俩插件,有些代码片段是重复的。

其实关于自动补全,您可以前往"文件-首选项-用户片段",来添加您自己的代码,虽然这个操作目前还是比较麻烦的。

6b56fae2dd576926cd3d5133d073afe4.png

3caa1fb2beaba83724c745b2636a368c.png

560e223db449bf772b4bedf534f952e8.png

2f9d454db88923d4f2dd976c222a2f64.png

33ffc42cbb250112909d86c994d14989.png

vscode可能自带了设置同步(不确定)

cb49fcf4677de3b484e72d02e544ae7a.png

你最好还需要一个插件用于设置同步Settings Sync

bfd138af123a9ce107f69ed02db299b5.png

无论如何你都需要一个github账号,后者还需要你手动创建一个Gist(类似于文件夹,存放设置和配置的地方),甚至可能需要手动创建一个token(类似密码,不是谁都可以访问你的GitHub的)(也可能用不着手动复制粘贴token,你只需要登录一下你的github并授权),具体的请自行百度吧,万一配置丢了我可不敢负责QAQ。

第六章 总结

最近也在尝试Sublime Text 3,发现和vscode大同小异。

我装了Sublime一些基础功能(比如语法高亮、自动检错、ctags转到定义、设置同步、代码片段)的插件,但是更高效的自动化插件(比如一键格式化排版,一键自动生成testbench)我就不是很清楚了。

iverilog+GTKwave编译仿真,其实和用什么的编辑器(vscode编辑器、sublime编辑器)没什么太大关系,只不过自动检错的时候需要用到iverilog。iverilog+GTKwave编译仿真只需要在cmd终端输入简单的几行命令,又快又方便面,比vivado和quartus方便多了,正所谓:开源的能解决90%的工作,付费的能解决100%的工作,但你只需要付出10%的license。

但是我感觉,免费的插件靠的是热情,可能不是完美的,但具有高度的可拓展性,你可以调教成为最适合自己的。

最后,工具而已,洗洗睡了。明天开始正式学习verilog基础语法,踏上FPGA征途的第一步。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐