一、前言
畢業論文答辯結束,閑下來寫篇文章。芯片研發人員都在Linux系統下借助各種EDA工具和代碼語言完成工作,因此提高代碼開發效率,熟練運用開發工具是十分必要的。本文講述VIM編輯神器的verilogHDL自定義模板調用以及VCS仿真軟件的基本使用方式。
二、VIM編輯器自定義模板調用
在之前的博文中談到過GVIM編輯器中可以通過調用模板來生成重復性代碼,但沒有介紹自定義模板的方式。關於VIM的安裝與配置詳細內容,見參考文獻1。這里主要用到VIM的用戶配置文件:.vimrc(若沒有新建該文件並編輯),我們在用戶目錄下使用ls -al命令可以看到該文件:
使用VIM編輯器打開VIM配置文件,以下部分是在文件底部自行添加的命令:
:ab Shixu always@(posedge clk or negedge rst_n)begin<Enter>if(~rst_n)begin<Enter><Enter>end<Enter>else begin<Enter><Enter>end<Enter>end
:ab Zuhe always@(*)begin<Enter><Enter>end
:ab Counter always@(posedge clk or negedge rst_n)begin<Enter>if(~rst_n)begin<Enter>cnt <= 0;<Enter>end<Enter>else if(add_cnt)begin<Enter>if(end_cnt)<Enter>cnt <= 0;<Enter>else<Enter>cnt <= cnt + 1'b1;<Enter>end<Enter>end<Enter><Enter>assign add_cnt = ;<Enter>assign end_cnt = add_cnt && cnt == - 1;
:ab Width_func function integer clogb2 (input integer bit_depth);<Enter>begin<Enter>for(clogb2=0;bit_depth>0;clogb2=clogb2+1)<Enter>bit_depth = bit_depth >> 1;<Enter>end<Enter>endfunction<Enter>
:ab Clock initial begin<Enter>clk = 0;<Enter>forever begin<Enter>#(CYC/2.0);<Enter>clk=~clk;<Enter>end<Enter>end<Enter>
:ab Reset initial begin<Enter>rst_n = 1;<Enter>#1;<Enter>rst_n = 0;<Enter>#(RST_TIM*CYC) rst_n = 1;<Enter>end<Enter>
自定義模板的格式為 :ab <com> <code>
其中com是調用指令,code是當前指令生成的代碼。我們新建一個.v文件測試下就能看出模板調用的妙處了。
編輯(插入)模式下,輸入Shixu后按下回車生成:
輸入Zuhe后按下回車生成:
輸入Counter后按下回車生成:
這三個是最常用到的代碼,三者相互組合可以完成很多功能了。但若狀態或工作模式較多,一般采用狀態機完成。輸入FSM后按下回車生成:
在設計時,經常要根據數值范圍設定變量的位寬。此時經常用到一個位寬計算到函數。輸入Width_func后按下回車生成:
在設計文件里常用的重復性代碼基本就這些了,可以根據自己的coding style靈活調整。接下來說說testbench部分。輸入Test后按下回車生成:
里邊包括了testbench中的時鍾和復位相關的參數與信號定義。實際上時鍾和復位信號的產生也是可以復用的。輸入Clock_rst后按下回車生成:
自定義模板還沒有靈活到可以生成模塊例化代碼,這一部分功能得借助其他腳本語言完成了,筆者還沒有嘗試過。
三、VCS軟件仿真
光說這個軟件沒什么意思,我們來舉個栗子~設計一個計數器,輸出位寬固定32位。當使能信號拉高則開始從0計數直到最大值后再次從0開始遞增。設計代碼counter.v:
測試代碼 counter_tb.v:
VCS仿真大體分為三步:編譯、仿真以及調試。編譯命令:vcs *.v -debug_all 命令行界面會顯示些信息:
之后文件夾內會生成simv文件,執行該文件進行仿真。./simv -gui 這里使用-gui選項打開DVE圖形界面。
接下來的操作和常用的Modelsim差不多了。把要觀測的信號添加到波形窗口:
點擊左上角按鈕運行仿真:
按下紅色箭頭所指位置觀察全局波形:
按住鼠標左鍵拖動來局部放大數據波形,計數器與輸出從0到19周期性遞增,功能正確。
復雜的操作后續用到再學。
參考文獻
1 vim 的安裝及配置 - QIYUEXIN - 博客園 https://www.cnblogs.com/qiyuexin/p/6398606.html
2 VCS使用學習 - IC_SOC_ARM - CSDN博客 https://blog.csdn.net/ic_soc_arm_robin/article/details/44262063
3 VCS-DVE - 百度文庫 https://wenku.baidu.com/view/f5f7ce8f69eae009591becc1.html
4 數字芯片實驗室的個人空間 - 嗶哩嗶哩 ( ゜- ゜)つロ 乾杯~ Bilibili https://space.bilibili.com/87907395/channel/detail?cid=64692