學習verilog必走的3個階段
// 入門篇: (秋幹勿燥,冬去春來)
01. 建立專案
02. verilog
a). nand/nor/and/or;
b). assignment;
c). always;
04. 選設device
05. settings:
a). 加減檔案;
b). 設定top module檔案;
c). 設定classic timing時序**主時鐘fmax;(可以不設)
06. 編譯(直接選按鈕)
07. **(直接選按鈕)
a). 建立.vwf波形檔案,
b). 新增netlist節點,
c). 設定激勵波形;
d). 設定**波形檔案
e). 閱讀並判斷**結果的正確性
// 初級篇: (固知其然, 方得真經)
11. setting:
a). 選擇並使用functional / timing**;
b). 選擇時序分析方法: classic timing / timequest;
c). 閱讀**幫助,選擇其他設定;
d). 閱讀編譯報表, 理解tsu, tpd, th, tco
e). 設定各種獨立時鐘
12. pin assignment
a). 各輸入輸出引腳的location分配;
b). 接入但未用引腳的特別處理;
c). 多電平的選設(若有多為io的供電);
13. 閱讀並理解專案資料夾下各種副檔名檔案的基本功能;
3a). *.v, *.qpf, *.pin, *.vwf, *.qof
3b). 瀏覽*.qsf,完全理解各部分的意義.
3c). 掌握*.sof檔案的生成方法, 了解其它各種生成檔案的使用場合.
14. **
a). 生成功能**網表.
b). ctrl + 滾輪縮放或 ctrl+shift+space 縮放;
c). ctrl + alt + space 全屏切換;
d). 處理**中inout埠的時鐘衝突warning.
15. verilog:
a). 充分理解reg與output的相關性和區別.
b). 掌握dff的直接引用方法.
c). 充分了解可綜合語句與不可綜合語句的區別及其不同使用場合;
d). 閱讀coding_and_synthesis_with_
e). inout埠的寫法;
f). instantiate引數帶點引用方法;
g). function, task 的使用,其與module引用的區別.
h). 優化程式,設法消除時序**中的毛刺.
16. programmer
a). jtag驅動與設定,
b). programmer內check項選擇
c). 熔絲/加密的使用方法與保護程度.
// 中級篇: (四海朋彼,可游天下)
21). verilog:
a). 熟練dff, dffe的使用技巧;消除latch使用恐懼症.
b). 理解並熟練掌握同步、非同步復位的寫法.
c). 閱讀晶元datasheet中的關於時序的波形圖和列表.
d). for 迴圈體跳出方法, for語句的宜使用原則
e). 了解非同步電路的讀寫觸發特點和時序要求
f). 充分領悟"埠只有線型"
22. settings
a). 設定派生時鐘(倍頻等),
b). 充分理解setting下所有設定欄目及其選項的意義與可預見結果.
23. simulation
a). 設定並生成正確無誤的時序**圖
24). 選擇classic timing (fast model) 選單進行時序分析;
22). 點選timequest按鈕進行時序分析, 生成*.sdc檔案;
a). 直接修改*.sdc原檔案,精確定義當輸入觸發被看作時鐘時的時鐘頻率,
b). 消除各種與時鐘相關的warning
24). 在assignment edit中增加tsu, th等時序約束條件;
a). 觀察再編譯後報表的區別;
b). 理解multicyle clock及其他各選項的意義.
25). 設法消除一切不甚理解的warning, 消除一切可能被消除的毛刺.
26). 硬體驗證(led, 示波器)
a). 功能**必須正確無誤;
b). 引腳位置分配複驗正確,
c). 雜腳處理停當;
d). vccio分配處理正確.
// 高階篇: (敬業執越,方堪重負)
31). 使用megawizard, 引入除法模組並成功進行時序**
a). 16位被除數numer,8位除數denum,8位商quotient,8位餘數remain, 時序**正確性論證
b). 鎖相環電路的理解、數字鎖相環實現方法及lpm_pll引用.
c). ip core的呼叫,明確生成方法
32). 使用floorplan & chip editor
a). 觀察各引腳的fan-in,fan-out,
b). 熟練進行訊號追蹤, 手動進行部分邏輯單元的優化調整
c). 注意雖然在floorplan介面拖拉有效,但還是建議到assignmeng edit中輸入/確信
初學小結:
一:基本
verilog中的變數有線網型別和暫存器型別。線網型變數綜合成wire,而暫存器可能綜合成wire,鎖存器和觸發器。
二:verilog語句結構到門級的對映
1、連續性賦值:assign
連續性賦值語句邏輯結構上就是將等式右邊的驅動左邊的結點。因些連續性賦值的目標結點總是綜合成由組合邏輯驅動的結點。assign語句中的延時綜合時都將忽視。
2、過程性賦值:
過程性賦值只出現在always語句中。
阻塞賦值和非阻塞賦值就該賦值本身是沒有區別的,只是對後面的語句有不同的影響。
建議設計組合邏輯電路時用阻塞賦值,設計時序電路時用非阻塞賦值。
過程性賦值的賦值物件有可能綜合成wire,latch,和flip-flop,取決於具體狀況。如,時鐘控制下的非阻塞賦值綜合成flip-flop。
過程性賦值語句中的任何延時在綜合時都將忽略。
建議同乙個變數單一地使用阻塞或者非阻塞賦值。
3、邏輯操作符:
邏輯操作符對應於硬體中已有的邏輯門
4、算術操作符:
verilog中將reg視為無符號數,而integer視為有符號數。因此,進行有符號操作時使用integer,使用無符號操作時使用reg。
5、進製:
通常會將進行運算操作的結果比原運算元擴充套件一位,用來存放進製或者借位。如:
wire [3:0] a,b;
wire [4:0] c;
assign c=a+b;
c的最高位用來存放進製。
6、關係運算子:
關係運算子:<,>,<=,>=
和算術操作符一樣,可以進行有符號和無符號運算,取決於資料型別是reg ,net還是integer。
7、相等運算子:==,!=
注意:===和!==是不可綜合的。
可以進行有符號或無符號操作,取決於資料型別
8、移位運算子:
左移,右移,右邊運算元可以是常數或者是變數,二者綜合出來的結果不同。
9、部分選擇:
部分選擇索引必須是常量。
10、bit選擇:
bit選擇中的索引可以用變數,這樣將綜合成多路(復用)器。
11、敏感表:
always過程中,所有被讀取的資料,即等號右邊的變數都要應放在敏感表中,不然,綜合時不能正確地對映到所用的門。
12、if:
如果變數沒有在if語句的每個分支中進行賦值,將會產生latch。如果if語句中產生了latch,則if的條件中最好不要用到算術操作。case語句類似。case的條款可以是變數。
如果乙個變數在同乙個if條件分支中先贖值然後讀取,則不會產生latch。如果先讀取,後贖值,則會產生latch。
13、迴圈:
只有for-loop語句是可以綜合的。
14、設計時序電路時,建議變數在always語句中賦值,而在該always語句外使用,使綜合時能準確地匹配。建議不要使用區域性變數。
15、不能在多個always塊中對同乙個變數贖值
16、函式
函式代表乙個組合邏輯,所有內部定義的變數都是臨時的,這些變數綜合後為wire。
17、任務:
任務可能是組合邏輯或者時序邏輯,取決於何種情況下呼叫任務。
18、z:
z會綜合成乙個三態門,必須在條件語句中賦值
19、引數化設計:
優點:引數可過載,不需要多次定義模組
四:模組優化
1、資源共享:
當程序涉及到共用alu時,要考慮資源分配問題。可以共享的操作符主要有:關係操作符、加減乘除操作符。通常乘和加不共用alu,乘除通常在其內部共用。
2、共用表示式:
如:c=a+b;
d=g+(a+b);
兩者雖然有共用的a+b,但是有些綜合工具不能識別.可以將第二句改為:d=g+c;這樣只需兩個加法器.
3、轉移**:
如迴圈語句中沒有發生變化的語句移出迴圈.
4、避免latch:
兩種方法:1、在每乙個if分支中對變數賦值。2、在每乙個if語句中都對變數賦初值。
5:模組:
綜合生成的儲存器如rom或ram不是一種好方法。最好用庫自帶的儲存器模組。
五、驗證:
1、敏感表:
在always語句中,如果敏感表不含時鐘,最好將所有的被讀取的訊號都放在敏感表中。
2、非同步復位:
建議不要在非同步時對變數讀取,即非同步復位時,對訊號贖以常數值。
FPGA牛人的經驗談
作者嵌入式玩耍者 我相信 如果有夢想,就會實現!在ic工業中有許多不同的領域,ic設計者的特徵也會有些不同。在a領域的乙個好的ic設計者也許會花很長時間去熟悉b領域的知識。在我們職業生涯的開始,我們應該問我們自己一些問題,我們想要成為怎樣的ic設計者?消費?pc外圍?通訊?微處理器或dsp?等等?i...
FPGA工作原理
作者 關鍵字 採用這種結構的pld晶元我們也可以稱之為fpga 如altera的acex,apex系列,xilinx的spartan,virtex系列等。查詢表 look up table 簡稱為lut,lut本質上就是乙個ram。目前fpga中多使用4輸入的lut,所以每乙個lut可以看成乙個有4...
FPGA工作原理
一.查詢表 look up table 的原理與結構 採用這種結構的pld晶元我們也可以稱之為fpga 如altera的acex,apex系列,xilinx的spartan,virtex系列等。查詢表 look up table 簡稱為lut,lut本質上就是乙個ram。目前fpga中多使用4輸入的...