零基礎(chǔ)學(xué)FPGA(四)Verilog語法基基礎(chǔ)基礎(chǔ)(中)
我們接著上篇文章繼續(xù)學(xué)習(xí),上次提到了兩種賦值語句,讓我們接著往下學(xué)。
本文引用地址:http://2s4d.com/article/267552.htm1、塊語句
塊語句包括兩種,一個是順序塊,一個是并行塊。
(1)順序快
順序快就好比C語言里的大括號“{ }”,在Verilog語法中,用begin…end代替。這里只需要知道,在begin…end中間的語句是順序執(zhí)行的就行了。
(2)并行塊
并行塊可以算是一個新的知識點,與順序塊最大的不同就是并行塊中的語句是同時開始執(zhí)行的,要想控制語句的先后順序,可以加延時語句控制。這種并行塊是用fork…join語句描述。
2、條件語句
條件語句這里不說,和C語言一樣。就說一點主意事項。
在使用條件語句時,要注意語句的嚴(yán)整與封閉性。和C語言不同,舉個例子
always @(al or d)
begin
if(al==1) q=d;
end
這個例子是說,當(dāng)al上升沿到來時,d的值賦給q,那么當(dāng)al=0時又是什么情況呢,事實上,在always塊中,如果沒有給變量賦值,這個變量就會保持原值,也就是生成了一個鎖存器。為了避免這種情況的發(fā)生,我們一般這樣寫
always @(al or d)
begin
if(al==1) q=d;
else q=0;
end
同樣在case語句中也要加上default語句避免鎖存器的生成,這樣可以使設(shè)計者更加明確的設(shè)計目標(biāo),也提高了程序的可讀性。
3、case語句
case語句要注意幾點,只挑幾點重要的,其他的不說了
(1)case語句分項后的表達(dá)式的值必須相同,否則就會出現(xiàn)問題,例如上面圖片上的result。
(2)與C語言不同,與某一項case語句匹配后,就會跳出case語句,這里沒有break語句。
(3)case語句的所有表達(dá)式位寬必須相等,例如上圖都是16位整型,如果不加以說明,系統(tǒng)會以默認(rèn)值32位控制表達(dá)式位寬。
下面是case,casez,case語句的真值表
這個表其實還是很好記的
case語句,只有匹配才出“1”
casez語句除了匹配出“1”之外,另外只要遇到“z”就出“1”
case語句除了匹配出“1”之外,另外只要遇到“z”或“x”就出“1”
上圖就用到了casez語句來處理不必要考慮的值,這樣就可以靈活的設(shè)置對信號的默寫位進(jìn)行比較。
下面寫了一個小例子來練習(xí)一下
使用case語句實現(xiàn)一個四選一多路選擇器
module xiaomo(a1,a2,a3,a4,out,s1,s2);
input a1,a2,a3,a4;
input s1,s2;
reg out; //把輸出變量聲明為寄存器類型
always @(s1 or s2 or a1 or a2 or a3 or a4 or out) //任何信號的變化都會引起輸出變量的重新計算
begin
case ({s1,s2}) //位拼接運算
2'b00: out=a1;
2'b01: out=a2;
2'b10: out=a3;
2'b11: out=a4;
default: out=1'bx; //保持語句的嚴(yán)整性
endcase
end
endmodule
fpga相關(guān)文章:fpga是什么
c語言相關(guān)文章:c語言教程
評論