Verilog語法遺漏點
1 關於引數定義
Parameter:parameter只能定義在埠生命的前面,如
Input[whith:0] a;
Parameter whith=4;
這樣的引數定義出現在宣告的後面會報錯
2 關於always塊
always塊不僅可以描述時序邏輯,也可以描述組合邏輯
如wire a,b; assign a=b
與reg a; wire b; [email protected](b) a=b; 可見,always塊內允許阻塞賦值
不過需要注意的是
always中,等號左邊的變數必須是reg型,而不能是wire型,無論是組合邏輯還是時序邏輯均成立,但是最終變數a被綜合成了連線,而不是暫存器!!!!
3 關於if else
If…else…語句,只能依附於always等程式模組不能單獨使用,如果想單獨使用,用三目運算子代替
4 不定態X表示不可推斷電平,高阻態Z相當於斷路狀態
5 REG型量不一定被綜合成暫存器
Verilog中,塊內被賦值的變數,都必須是暫存器reg型別!!如上述2中的介紹,但是reg型變數不一定被綜合成暫存器,組合邏輯中被綜合成互連,不完全組合邏輯中,描述成鎖存器。所以暫存器變數不一定被綜合成暫存器。
6 歸約運算子
歸約運算子是一種單目運算子;被運算元具有一定的位寬,操作的結果都是1位。
如wire[3:0]bus 4’hf;
Wire result = &bus;
上述賦值相當於assign result=bus[0]&bus[1]&bus[2]&bus[3];//歸約與運算子
如果是|,相當於assign result bus[0]| bus[1]|bus[2]|bus[3];//歸約或運算子
如果是^,相當於………………………………………………………………..//歸約異或運算子
7 例項引數過載方式,這個是為了輸入埠寬度進行靈活配置的方式(遇到再看)
8 關於[email protected]
[email protected](posedge clk)
[email protected](signal)
關於電平敏感,表示電平發生變化就執行塊內的內容。