1.always@后面內(nèi)容是敏感變量,always@(*)里面的敏感變量為*,意思是說敏感變量由綜合器根據(jù)always里面的輸入變量自動添加,也就是所有變量都是敏感列表,不用自己考慮。2.如果沒有@,那就是不會滿足特定條件才執(zhí)行,而是執(zhí)行完一次后立馬執(zhí)行下一次,一直重復(fù)執(zhí)行,比如testbench里面產(chǎn)生50Mhz的時鐘就(假設(shè)時間尺度是1ns)可以寫成
always #25 CLK_50Mhz = ~CLK_50Mhz;
一般always@(*)是指里面的語句是組合邏輯的。*代替了敏感變量。
而一般時序邏輯要寫成
always@(posedge clk or negedge rst)
時鐘信號clk上升沿或者復(fù)位信號rst下降沿的時候執(zhí)行always塊內(nèi)的代碼。
assign 用于描述組合邏輯always@(敏感事件列表) 用于描述時序邏輯敏感事件 上升沿 posedge,下降沿 negedge,或電平敏感事件列表中可以包含多個敏感事件,但不可以同時包括電平敏感事件和邊沿敏感事件,也不可以同時包括同一個信號的上升沿和下降沿,這兩個事件可以合并為一個電平敏感事件。在新的verilog2001中“,”和“or”都可以用來分割敏感事件了,可以用“*”代表所有輸入信號,這可以防止遺漏。合法的寫法:
always@ *
always@ (posedge clk1,negedge clk2)
always@ (a or b)
所有的assign 和 always 塊都是并行發(fā)生的!并行塊、順序塊將要并行執(zhí)行的語句寫在`timescale 100ns/100ns //定義仿真基本周期為100ns
always #1 clk=~clk //#1代表一個仿真周期即100ns
將要順序執(zhí)行的語句寫在fork
//語句并行執(zhí)行
join
并行塊和順序塊都可以寫在initial 或 always@ 之后,也就是說寫在塊中的語句是時序邏輯的對assign之后不能加塊,實現(xiàn)組合邏輯只能用逐句的使用assign組合邏輯如果不考慮門的延時的話當然可以理解為瞬時執(zhí)行的,因此沒有并行和順序之分,并行和順序是針對時序邏輯來說的。值得注意的是所有的時序塊都是并行執(zhí)行的。initial塊只在信號進入模塊后執(zhí)行1次而always塊是由敏感事件作為中斷來觸發(fā)執(zhí)行的。begin
//語句順序執(zhí)行
end
2:assign 組合邏輯和always@(*)組合邏輯verilog描述組合邏輯一般常用的有兩種:assign賦值語句和always@(*)語句。兩者之間的差別有: 1. 被assign賦值的信號定義為wire型,被always@(*)結(jié)構(gòu)塊下的信號定義為reg型,值得注意的是,這里的reg并不是一個真正的觸發(fā)器,只有敏感列表為上升沿觸發(fā)的寫法才會綜合為觸發(fā)器,在仿真時才具有觸發(fā)器的特性。 2. 另外一個區(qū)別則是更細微的差別:舉個例子,
在這種情況下,做仿真時a將會正常為0, 但是b卻是不定態(tài)。這是為什么?verilog規(guī)定,always@(*)中的*是指該always塊內(nèi)的所有輸入信號的變化為敏感列表,也就是仿真時只有當always@(*)塊內(nèi)的輸入信號產(chǎn)生變化,該塊內(nèi)描述的信號才會產(chǎn)生變化,而像always@(*) b = 1'b0;這種寫法由于1'b0一直沒有變化,所以b的信號狀態(tài)一直沒有改變,由于b是組合邏輯輸出,所以復(fù)位時沒有明確的值(不定態(tài)),而又因為always@(*)塊內(nèi)沒有敏感信號變化,因此b的信號狀態(tài)一直保持為不定態(tài)。事實上該語句的綜合結(jié)果有可能跟assign一樣(本人沒有去嘗試),但是在功能仿真時就差之千里了。wire a;
reg b;
assign a = 1'b0;
always@(*)
b = 1'b0;
原文標題:Verilog 里面,always,assign和always@(*)區(qū)別
文章出處:【微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
電平
+關(guān)注
關(guān)注
5文章
361瀏覽量
40119 -
組合邏輯
+關(guān)注
關(guān)注
0文章
48瀏覽量
10105 -
代碼
+關(guān)注
關(guān)注
30文章
4857瀏覽量
69527
原文標題:Verilog 里面,always,assign和always@(*)區(qū)別
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
soc中的組合邏輯和時序邏輯應(yīng)用說明
明德?lián)P點撥FPGA高手進階 第五章 verilog快速掌握---5.3 組合邏輯
【技巧分享】時序邏輯和組合邏輯的區(qū)別和使用
在FPGA中何時用組合邏輯或時序邏輯
組合邏輯電路的分析與設(shè)計-邏輯代數(shù)

組合邏輯電路的設(shè)計

FPGA中組合邏輯和時序邏輯的區(qū)別
Verilog進行組合邏輯設(shè)計時有哪些注意事項

你們知道always,assign和always@(*)之間的區(qū)別嗎
組合邏輯電路和時序邏輯電路的區(qū)別和聯(lián)系

評論