verilog 不可綜合語句 總結 彙總

2021-07-23 12:23:18 字數 3788 閱讀 4402

(1)

所有綜合工具都支援的結構:

always

,assign

,begin,

end,

case

,wire

,tri,

aupply0

,supply1

,reg

,integer,

default

,for,

function

,and,

nand,or

,nor

,xor

,xnor

,buf

,not

,bufif0

,bufif1

,notif0

,notif1,if

,inout,

input

,instantitation,

module

,negedge

,posedge

,operators

,output

,parameter。(

2)所有綜合工具都不支援的結構

:time,

defparam

,$finish

,fork

,join

,initial

,delays

,udp

,wait。(

3)有些工具支援有些工具不支援的結構

:ca***,

casez

,wand

,triand

,wor

,trior

,real

,disable

,forever

,arrays

,memories

,repeat

,task

,while

建立

可綜合模型的原則

要保證verilog hdl

賦值語句的可綜合性,在建模時應注意以下要點:(1

)不使用

initial。(

2)不使用

#10。(3

)不使用迴圈次數不確定的迴圈語句,如

forever

、while等。(

4)不使用使用者自定義原語(

udp元件)。(5

)盡量使用同步方式設計電路。(6

)除非是關鍵路徑的設計,一般不採用呼叫門級元件來描述設計的方法,建議採用行為語句來完成設計。(7

)用always

過程塊描述組合邏輯,應在敏感訊號列表中列出所有的輸入訊號。(8

)所有的內部暫存器都應該能夠被復位,在使用

fpga

實現設計時,應盡量使用器件的全域性復位端作為系統總的復位。(9

)對時序邏輯描述和建模,應盡量使用非阻塞賦值方式。對組合邏輯描述和建模,既可以用阻塞賦值,也可以用非阻塞賦值。但在同乙個過程塊中,最好不要同時用阻塞賦值和非阻塞賦值。(10

)不能在乙個以上的

always

過程塊中對同乙個變數賦值。而對同乙個賦值物件不能既使用阻塞式賦值,又使用非阻塞式賦值。(11

)如果不打算把變數推導成鎖存器,那麼必須在

if語句或

case

語句的所有條件分支中都對變數明確地賦值。(12

)避免混合使用上公升沿和下降沿觸發的觸發器。(13

)同乙個變數的賦值不能受多個時鐘控制,也不能受兩種不同的時鐘條件(或者不同的時鐘沿)控制。(14

)避免在

case

語句的分支項中使用x值或

z值。

不可綜合verilog語句

2009-04-14 19:33

1、

initial

只能在

test bench

中使用,不能綜合。(我用

ise9.1

綜合時,有的簡單的

initial

也可以綜合,不知道為什麼)

2、

events

event在同步

test bench

時更有用,不能綜合。

3、

real

不支援

real

資料型別的綜合。

4、

time

不支援

time

資料型別的綜合。

5、

force

和release

不支援

force

和release

的綜合。

6、

assign

和deassign

不支援對reg 資料型別的assign或deassign進行綜合,支援對wire資料型別的assign或deassign進行綜合。

7、

fork join

不可綜合,可以使用非塊語句達到同樣的效果。

8、

primitives

支援門級原語的綜合,不支援非門級原語的綜合。

9、

table

不支援

udp

和table

的綜合。

10、敏感列表裡同時帶有

posedge

和negedge

如:always @(posedge clk or negedge clk) begin...end

這個always塊不可綜合。

11、

同乙個reg變數被多個

always

塊驅動

12、延時

#開頭的延時不可綜合成硬體電路延時,綜合工具會忽略所有延時**,但不會報錯。

如:a=#10 b;

這裡的#10是用於**時的延時,在綜合的時候綜合工具會忽略它。也就是說,在綜合的時候上式等同於a=b;

13、與x、

z的比較

可能會有人喜歡在條件表示式中把資料和x(或z)進行比較,殊不知這是不可綜合的,綜合工具同樣會忽略。所以要確保訊號只有兩個狀態:0或1。

如:1 module synthesis_compare_xz (a,b);

2 output a;

3 input b;

4 reg a;

5  

6 always @ (b)

7 begin

8   if ((b == 1'bz) || (b == 1'bx)) begin

9     a = 1;

10   end else begin

11     a = 0;

12   end

13 end

14  

15 endmodule

verilog 不可綜合語句

礎知識 verilog 不可綜合語句 1 所有綜合工具都支援的結構 always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,...

Verilog可綜合不可綜合語句

1 所有綜合工具都支援的結構 always,assign,begin,end,case,wire,tri,generate,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0...

verilog中的可綜合與不可綜合語句

1 所有綜合工具都支援的結構 always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,n...