1. 程式人生 > >Verilog語法遺漏點

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];//歸約或運算子

  如果是^,相當於………………………………………………………………..//歸約異或運算子

 

例項引數過載方式,這個是為了輸入埠寬度進行靈活配置的方式(遇到再看)

 

8 關於[email protected]

()敏感列表

[email protected](posedge clk)

[email protected](signal)

關於電平敏感,表示電平發生變化就執行塊內的內容。