(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...