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