1、 說明微信
之前老是沒有記錄的習慣,致使遇到問題時總得從新回憶與摸索,大大下降了學習效率,從今天開始決定改掉這個壞毛病,認真記錄本身的Verilog學習之路,但願本身能一直堅持下去。編輯器
2、 軟件資源與硬件資源工具
軟件資源說明:學習
一、UltraEdit:本博客全部的Verilog代碼所有都在UltraEdit中編輯, UltraEdit具備語法高亮與自動補全(設置方法在本文最後面)功能,並且界面美觀,絕對是寫代碼的利器。spa
下載連接:3d
https://pan.baidu.com/s/15aiPB5Mq0zEY51ftmzFwhA 密碼:ebztblog
二、ISE14.7或Vivado2016.3:本博客的FPGA選擇的是Xilinx的,因此選擇Xilinx集成開發套件,原本以前一直在用7系列的FPGA,可是目前手頭只有一塊Spartan-6系列的二手開發板,因此代碼的驗證都在Spartan-6上驗證,但好在FPGA的結構基本相似,Verilog的代碼基本能夠通用。資源
ISE14.7安裝包與破解包下載連接:開發
https://pan.baidu.com/s/1CVGNKZ9tr7dpcDmq3ZhM8Q 密碼:zyd2input
三、ModelSim-win64-10.4-se:仿真工具使用ModelSim 10.4版本,其餘版本也能夠,無過多要求。
下載連接:
https://pan.baidu.com/s/1N8nOHDla1G8jx4Q_DGRHcg 密碼:371g
四、Windows-7 64-bit系統:建議你們在Windows-7 64-bit系統作開發 ,Windows-7 64-bit系統對以上軟件的兼容性都比較好。個人筆記本電腦用的是Windows-8.1系統,安裝ISE14.7之後導入ModelSim仿真庫,選擇庫目錄的時候出現了卡住的狀況,這種就是ISE14.7與WIndows-8.1不太兼容致使的,解決辦法以下。
解決Windows-8.1與ISE14.7不兼容的辦法:
找到ISE安裝目錄的中的nt64文件夾,個人ISE的安裝目錄在D盤,因此nt64的路徑以下D:\Xilinx\14.7\ISE_DS\ISE\lib\nt64,而後把nt64文件夾中的libPortability.dll文件名改爲libPortability.dll.org,再把libPortabilityNOSH.dll重命名爲libPortability.dll。這樣能夠有效解決一部分兼容性的問題。
五、更多軟件資源能夠關注文末的微信公衆號並輸入關鍵字「軟件安裝包」獲取
硬件資源說明:
一、目前手頭只有一塊二手的黑金AX545開發板,FPGA的型號是:XC6SLX45-2CSG324,因此代碼都會在這個板子上進行驗證。對於其餘型號的FPGA只要理解原理了應該也不難上手。
3、 Verilog命名規範與格式說明
Verilog語言並無固定的命名規範與編寫格式,每一個人根據本身的喜愛而定就好了,我本身比較喜歡下面規範與格式。這裏先寫一部分,後面若是有補充的在加上。
Verilog命名規範:
一、全部輸入端口以大寫I加下劃線開始,而後後面內容的一概用小寫,信號比較長的話,後面的小寫用下劃線隔開。如:
input I_clk;
input I_led_mode;
若是輸入端口低電平有效的話就在末尾加下劃線和小寫n,如:
input I_rst_n;
二、全部輸出端口以大寫O加下劃線開始,而後後面內容的一概用小寫,信號比較長的話,後面的小寫用下劃線隔開。如:
output O_led;
output O_led_mode;
三、全部reg變量以大寫R加下劃線開始,而後後面內容的一概用小寫,信號比較長的話,後面的小寫用下劃線隔開。如:
reg R_cnt;
reg R_cnt_100ms;
四、全部wire變量以大寫W加下劃線開始,而後後面內容的一概用小寫,信號比較長的話,後面的小寫用下劃線隔開。如:
wire W_cnt;
wire W_led_mode;
五、全部常量(parameter變量)以大寫C加下劃線開始,而後後面內容的一概用大寫以示與變量的區別,信號比較長的話,後面的大寫用下劃線隔開。如:
parameter C_IDLE;
parameter C_FLASH_READ;
六、命名必定要有意義,看着變量名就大概能猜出它的做用,並適當採用縮寫,下面幾個縮寫是寫代碼過程當中比較經常使用的縮寫。
‘rd’代替‘read’
‘wr’代替‘write’
‘cnt’代替‘count’
‘rst’代替‘reset’
‘addr’代替‘address’
Verilog編寫格式:
一、always塊的begin…end換行寫,如:
always @(posedge I_clk or negedge I_rst_n)
begin
…
end
二、if…else if…else語句的begin…end換行並空一個Tab鍵(記得設置一個Tab爲4個空格)寫,若是if或者else下面只有一條語句那麼就省略begin…end如:
if
begin
…
end
else if
begin
…
end
else
…
三、case…endcase語句中的條件後面若是隻有一條語句,則直接在冒號後面寫語句,default必定要寫上,即便裏面什麼語句也沒有。最好用UltraEdit的列模式功能把那些冒號和分號都上下對齊。如
case(...)
C_IDEL : …… ;
C_FLASH : …… ;
default : ;
endcase
case…endcase語句中的條件後面若是有多條語句,則直接在冒號後面換行加Tab鍵寫begin…end。一樣用UltraEdit的列模式功能把那些冒號和分號都上下對齊。
case(R_state)
C_IDEL :
begin
…… ;
end
C_ FLASH :
begin
…… ;
end
default :
begin
…… ;
end
endcase
四、例化模塊的時候例化名就是在模塊名前面加一個大寫的U和下劃線,而且用UE的列模式功能把括號和逗號都對齊。如:
led_work U_ led_work
(
. I_clk (I_clk ),
. I_rst_n (I_rst_n ),
.O_led_mode (O_led_mode ),
.O_led_out (O_ led_out )
);
附、 UltraEdit設置方法
下載上文的UltraEdit壓縮包並解壓,裏面有兩個文件,一個是UE的安裝包,一個是語法高亮文件
雙擊exe文件安裝好了之後打開UE會提示選擇風格,我比較喜歡黑暗風格,選完風格之後在菜單欄找到高級選項卡,而後在高級選項卡下載找到配置菜單
單擊配置菜單,彈出以下界面
接着在上面的界面中找到自動完成功能並選中,而後按照下圖進行設置
接着在找到自動換行/製表符設置,按照以下方式設置
最後找到編輯器顯示下面的語法加亮,選擇安裝包中的wordfile.uew配置文件就OK了,以下圖所示
歡迎關注個人公衆號:FPGA之禪