为了高效开发VHDL/Verilog,使用的编辑器一般会有很多的插件便于用户的开发,比如自动生成测试文件的插件(我当初也发过相关的脚本),语法的检测,模块的联想自动补充,这些插件提供的都属于通用的功能,那么如何设计自己定制化的模板和代码片段联想呢?Vscode提供了自己的接口,这个接口使用json写的。
Vscode提供非常方便的接口来供用户自己实现这些小的功能,相比较我之前发的生成TB脚本,这篇文章要讲的更加简单。我以VHDL的json文件为例(实现Verilog的联想一致)
模板的开头,实现调用文件名,调用当前年份,开始写代码的时间
代码如下:
{ "VHDL module": { // "scope": "VHDL", "prefix": "VHDL Aries", "body": [ "------------------------------------------------------------------------------------------------", "--", "-- Coding: UTF-8", "-- @File : $TM_FILENAME", "-- @Version : 1.0", "-- @Author : AriesOpenFPGA", "-- @Email : 2577802337@qq.com", "-- @License : (C)Copyright 2019-$CURRENT_YEAR,AriesOpenFPGA", "-- @Time : $CURRENT_YEAR/$CURRENT_MONTH/$CURRENT_DATE $CURRENT_HOUR:$CURRENT_MINUTE:$CURRENT_SECOND", "-- Description:", "--", "------------------------------------------------------------------------------------------------", " ", "library ieee;", "use ieee.std_logic_1164.all;", "", "", "entity $TM_FILENAME_BASE$1 is", "tgeneric (width :positive := 8);t-- ", "tport (", "ttclk : in std_logic;", "ttrst : in std_logic;", "ttDate_i : in std_logic_vector (width-1 downto 0);", "ttDate_o : out std_logic_vector (width-1 downto 0)", "t);", "end $TM_FILENAME_BASE$1;", "", "architecture rtl$2 of $TM_FILENAME_BASE$1 is", "signal", "signal", "", "begin", "end rtl$2;", ], "description": "VHDL module" },
部分命令:
调取文件名(包含扩展):
$TM_FILENAME
调取时间命令代码:
$CURRENT_YEAR/$CURRENT_MONTH/$CURRENT_DATE $CURRENT_HOUR:$CURRENT_MINUTE:$CURRENT_SECOND
调用文件名(不包含扩展)
$TM_FILENAME_BASE
光标定位处(主要为了方便修改文件内不同处的相同文本,摁Tab切换光标位置):
$1(第一处光标) $2(第二处光标)
例如:VHDL的实体名会多次在不同地方出现(如视频中所示)。
空格(有几个t就空几空格):
tt
有其它命令需求,请读者自行查阅资料。
如何插入到Vscode?
打开文件-首选项-用户片段
可以选择全局的文件,如下图提示,也可以选择为特定拓展名设置代码片段,我上面选的是全局,选择完会给一个简单的例子教你怎么做,然后就可以根据自己的需求写代码了。
总结
根据自己的习惯可以定义规范化的代码风格,比如,很多人都会写自己的模块库,每次例化可能都要重新敲一遍,但有这种联想的功能,只需要自己先写好json便可以在文件中非常快速的调用自己的子模块,当然这仅限于是自己写的接口。如果需要对别人的代码进行例化(命名规则和自己完全不同)或生成TB,则需要使用脚本文件,我之前发过关于Python 生成Verilog测试文件的脚本,感兴趣可以看看。
没有回复内容