Verilog學習小白筆記(四)

2018.10.06
書目:verilog HDL數字設計與綜合第二版 夏宇聞
第七章

一、結構化過程語句
1、initial語句:在整個仿真過程中只執行一次,如果一個模塊包含若干initial則他們並行從仿真時刻0執行
2、initial語句由begin開始end結束,如果只有一條語句可不使用begin和end
3、always語句:從仿真0順序執行其中的語句,最後一條執行完後再從第一條執行,循環往復

二、過程賦值語句
1、過程賦值語句左值可以爲reg、整數型、實數型、時間寄存器變量、存儲器單元、以及他們的位選、拼接、域選
2、過程賦值語句:阻塞賦值和非阻塞賦值
3、阻塞賦值語句:串行塊中阻塞賦值語句按順序執行、不會阻塞其後並行塊語句執行,用“=”賦值
4、非阻塞賦值語句:允許賦值調度,不會阻塞位於同一個順序塊中其後語句的執行,使用“<=”賦值
5、二者不要再同一個always語句中使用

三、時序控制
1、基於延遲的時序控制:常規延遲控制、賦值內嵌延遲控制、零延遲控制
2、常規延遲控制:#10 a=0
3、賦值內嵌延遲控制 y=#5 x+z 相當於將表達式的值保存在臨時變量中,五個時鐘後賦值給y
4、零延遲控制:可以確保同時執行的語句中該句最後執行,當有多個零延遲語句時也不確定哪一個先執行
5、基於事件的時序控制:常規事件控制、命名事件控制、OR事件控制、電平敏感時序控制,事件指寄存器或線網變量發生變化
6、常規事件控制:@(clock)q=d clock變化即賦值
7、命名事件控制:關鍵詞event控制,事件觸發用->表示,判斷是否發生用@識別
event received_data
always@(posedge clock)
begin
if(last_data_packet) ->received_datae;
end
always@(received_data) data_buf={data_pkt[0],data_pkt[0]}
8、OR事件控制:always@(reset or d),也可以用“,”來代替or
9、@和@()對其後語句塊中的所有輸入變量變化敏感
10、電平敏感時序控制:在某條件爲真是執行,用wait啓用:always wait(……)#20 count =count +1;

四、條件語句
1、if() true_statement;
2、if() true_statement;else false_statement;
3、if() true_statement1;
else if() true_statement2;
else default_statement;
4、如果判斷後執行語句爲多句,則用begin end 包括

五、多路分支語句
1、case語句:關鍵詞case,endcase和default
case(expression)
alternative1:statament1;
alternative2:statament2;
alternative3:statament3;
……
default:default_statemnet
endcase
2、casex和casez分別將x和z作爲無關值,只比較其餘位

六、循環語句
1、循環語句只可以在always和initial中使用,循環語句可已包含延遲表達式
2、while(expression)
begin
……
end
3、for(初始條件;判斷終止條件是否爲真;改變控制變量的過程賦值語句)
for(count=0;count<128;count=count+1)
4、repeat循環的次數必須是一個常量,變量,信號的值,如果爲變量和信號,則循環次數爲他們的初始值
5、forever循環,永久循環直到$finish爲止,如需退出,可使用disable語句

七、順序塊和並行塊
1、順序塊:begin和end包括的語句塊,順序執行
2、並行塊:fork和join聲明,語句併發執行,執行順序由各自延遲決定,且延遲是相對於語句塊開始執行的時間
reg x,y;
reg [1:0] z,w;
initial
fork
x=1’b0; 0時刻完成
#5 y=1’b1; 5時刻
#10 z={x,y};10時刻
#20 w={y,x};20時刻
join
3、嵌套塊、命名塊和命名塊禁用
4、塊可以嵌套使用,順序塊和並行塊可以混合在一起使用
5、塊可以有自己的名字,成爲命名塊,可以聲明局部變量,可以利用其層次名引用訪問,可以被禁用
module top;
initial
begin:block1
integer i;//可以通過top.block1.i被其他模塊訪問
……
end

initial
fork:block2
reg i;//可以通過top.block2.i被其他模塊訪問
……
join
6、生成塊:generate-endgenerate指定生成實例範圍,可以是模塊、用戶自定義原語、門級原語、連續賦值語句、initial和always塊
7、創建生成語句:循環生成、條件生成、case生成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章