新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 牛人業(yè)話 > 零基礎(chǔ)學(xué)FPGA(四)Verilog語(yǔ)法基基礎(chǔ)基礎(chǔ)(中)

零基礎(chǔ)學(xué)FPGA(四)Verilog語(yǔ)法基基礎(chǔ)基礎(chǔ)(中)

作者: 時(shí)間:2014-12-31 來(lái)源:網(wǎng)絡(luò) 收藏

  我們接著上篇文章繼續(xù)學(xué)習(xí),上次提到了兩種賦值語(yǔ)句,讓我們接著往下學(xué)。

本文引用地址:http://m.butianyuan.cn/article/267552.htm

  1、塊語(yǔ)句

  塊語(yǔ)句包括兩種,一個(gè)是順序塊,一個(gè)是并行塊。

  (1)順序快

  順序快就好比C語(yǔ)言里的大括號(hào)“{ }”,在語(yǔ)法中,用begin…end代替。這里只需要知道,在begin…end中間的語(yǔ)句是順序執(zhí)行的就行了。

  (2)并行塊

  并行塊可以算是一個(gè)新的知識(shí)點(diǎn),與順序塊最大的不同就是并行塊中的語(yǔ)句是同時(shí)開始執(zhí)行的,要想控制語(yǔ)句的先后順序,可以加延時(shí)語(yǔ)句控制。這種并行塊是用fork…join語(yǔ)句描述。

  2、條件語(yǔ)句

  條件語(yǔ)句這里不說(shuō),和C語(yǔ)言一樣。就說(shuō)一點(diǎn)主意事項(xiàng)。

  在使用條件語(yǔ)句時(shí),要注意語(yǔ)句的嚴(yán)整與封閉性。和C語(yǔ)言不同,舉個(gè)例子

  always @(al or d)

  begin

  if(al==1) q=d;

  end

  這個(gè)例子是說(shuō),當(dāng)al上升沿到來(lái)時(shí),d的值賦給q,那么當(dāng)al=0時(shí)又是什么情況呢,事實(shí)上,在always塊中,如果沒(méi)有給變量賦值,這個(gè)變量就會(huì)保持原值,也就是生成了一個(gè)鎖存器。為了避免這種情況的發(fā)生,我們一般這樣寫

  always @(al or d)

  begin

  if(al==1) q=d;

  else q=0;

  end

  同樣在case語(yǔ)句中也要加上default語(yǔ)句避免鎖存器的生成,這樣可以使設(shè)計(jì)者更加明確的設(shè)計(jì)目標(biāo),也提高了程序的可讀性。

  3、case語(yǔ)句

  

360桌面截圖20140226225540.jpg

 

  case語(yǔ)句要注意幾點(diǎn),只挑幾點(diǎn)重要的,其他的不說(shuō)了

  (1)case語(yǔ)句分項(xiàng)后的表達(dá)式的值必須相同,否則就會(huì)出現(xiàn)問(wèn)題,例如上面圖片上的result。

  (2)與C語(yǔ)言不同,與某一項(xiàng)case語(yǔ)句匹配后,就會(huì)跳出case語(yǔ)句,這里沒(méi)有break語(yǔ)句。

  (3)case語(yǔ)句的所有表達(dá)式位寬必須相等,例如上圖都是16位整型,如果不加以說(shuō)明,系統(tǒng)會(huì)以默認(rèn)值32位控制表達(dá)式位寬。

  下面是case,casez,case語(yǔ)句的真值表

  

360桌面截圖20140226230246.jpg

 

  這個(gè)表其實(shí)還是很好記的

  case語(yǔ)句,只有匹配才出“1”

  casez語(yǔ)句除了匹配出“1”之外,另外只要遇到“z”就出“1”

  case語(yǔ)句除了匹配出“1”之外,另外只要遇到“z”或“x”就出“1”

  

360桌面截圖20140226231114.jpg

 

  上圖就用到了casez語(yǔ)句來(lái)處理不必要考慮的值,這樣就可以靈活的設(shè)置對(duì)信號(hào)的默寫位進(jìn)行比較。

  下面寫了一個(gè)小例子來(lái)練習(xí)一下

  使用case語(yǔ)句實(shí)現(xiàn)一個(gè)四選一多路選擇器

  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) //任何信號(hào)的變化都會(huì)引起輸出變量的重新計(jì)算

  begin

  case ({s1,s2}) //位拼接運(yùn)算

  2'b00: out=a1;

  2'b01: out=a2;

  2'b10: out=a3;

  2'b11: out=a4;

  default: out=1'bx; //保持語(yǔ)句的嚴(yán)整性

  endcase

  end

  endmodule

fpga相關(guān)文章:fpga是什么


c語(yǔ)言相關(guān)文章:c語(yǔ)言教程



上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: FPGA Verilog

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉