一:基本的型別
verilog中的變數有線網型別和暫存器型別。線網型變數綜合成wire,而暫存器可能綜合成wire,鎖存器和觸發器。
二:verilog語句結構到門級的對映
1、連續性賦值:assign
連續性賦值語句邏輯結構上就是將等式右邊的驅動左邊的結點。因些連續性賦值的目標結點總是綜合成由組合邏輯驅動的結點。assign語句中的延時綜合時都將忽視。
2、過程性賦值:
過程性賦值只出現在always語句中。
阻塞賦值和非阻塞賦值就該賦值本身是沒有區別的,只是對後面的語句有不同的影響。
建議設計組合邏輯電路時用阻塞賦值,設計時序電路時用非阻塞賦值。
建議同乙個變數單一地使用阻塞或者非阻塞賦值。
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、非同步復位:
建議不要在非同步時對變數讀取,即非同步復位時,對訊號贖以常數值。
對於在quartus不支援的verilog語句,如某些系統任務以及**驗證語句可在modelsim中執行,強烈建議quartus+modelsim聯合使用。
一些的總結
大學的教育模式是先教你原理,在教你怎麼用工具 而缺少樂趣,一般大牛 的思維模式都是這樣 先知道原理 在用工具 其實對於普通人來講,一般都是 知道原來還有這種利用方式?到 我要用工具來提高效率 廣用效率還不行 我要知道原理 誒好像現在工具滿足不了我的需要了,我要自己新增規則 新增的規則 以及滿足不了我...
BOM 的一些總結
一 window物件 1 window 物件是整個瀏覽器的核心,所有物件和集合都以某種方式回接到window物件。2 如果頁面使用的框架集合,每個框架都由他自己的window物件表示,存放在 frames 集合中,在這個集合中,可用數字 由0開始,從左到右,逐行的 或名字對框架進行索引。3 乙個更加...
FastReport的一些總結
1 問題 中文memo時常在執行時不能正確顯示。但用檔案載入後的memo沒有問題。由於fastreport預設把報表檔案儲存在dfm裡面,我看了下dfm,fastreport的memo編碼是以utf8存的。估計還是字符集的問題。所以解決方法是 直接loadfromfile.2 fastreport中...