新聞中心

        EEPW首頁 > 嵌入式系統 > 牛人業話 > 零基礎學FPGA(四)Verilog語法基基礎基礎(中)

        零基礎學FPGA(四)Verilog語法基基礎基礎(中)

        作者: 時間:2014-12-31 來源:網絡 收藏

          我們接著上篇文章繼續學習,上次提到了兩種賦值語句,讓我們接著往下學。

        本文引用地址:http://www.104case.com/article/267552.htm

          1、塊語句

          塊語句包括兩種,一個是順序塊,一個是并行塊。

          (1)順序快

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

          (2)并行塊

          并行塊可以算是一個新的知識點,與順序塊最大的不同就是并行塊中的語句是同時開始執行的,要想控制語句的先后順序,可以加延時語句控制。這種并行塊是用fork…join語句描述。

          2、條件語句

          條件語句這里不說,和C語言一樣。就說一點主意事項。

          在使用條件語句時,要注意語句的嚴整與封閉性。和C語言不同,舉個例子

          always @(al or d)

          begin

          if(al==1) q=d;

          end

          這個例子是說,當al上升沿到來時,d的值賦給q,那么當al=0時又是什么情況呢,事實上,在always塊中,如果沒有給變量賦值,這個變量就會保持原值,也就是生成了一個鎖存器。為了避免這種情況的發生,我們一般這樣寫

          always @(al or d)

          begin

          if(al==1) q=d;

          else q=0;

          end

          同樣在case語句中也要加上default語句避免鎖存器的生成,這樣可以使設計者更加明確的設計目標,也提高了程序的可讀性。

          3、case語句

          

        360桌面截圖20140226225540.jpg

         

          case語句要注意幾點,只挑幾點重要的,其他的不說了

          (1)case語句分項后的表達式的值必須相同,否則就會出現問題,例如上面圖片上的result。

          (2)與C語言不同,與某一項case語句匹配后,就會跳出case語句,這里沒有break語句。

          (3)case語句的所有表達式位寬必須相等,例如上圖都是16位整型,如果不加以說明,系統會以默認值32位控制表達式位寬。

          下面是case,casez,case語句的真值表

          

        360桌面截圖20140226230246.jpg

         

          這個表其實還是很好記的

          case語句,只有匹配才出“1”

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

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

          

        360桌面截圖20140226231114.jpg

         

          上圖就用到了casez語句來處理不必要考慮的值,這樣就可以靈活的設置對信號的默寫位進行比較。

          下面寫了一個小例子來練習一下

          使用case語句實現一個四選一多路選擇器

          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; //保持語句的嚴整性

          endcase

          end

          endmodule

        fpga相關文章:fpga是什么


        c語言相關文章:c語言教程



        上一頁 1 2 3 下一頁

        關鍵詞: FPGA Verilog

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 昔阳县| 娱乐| 河西区| 长岛县| 武邑县| 岳普湖县| 长宁县| 阿拉善盟| 留坝县| 安泽县| 漳浦县| 新野县| 贵阳市| 江津市| 泸溪县| 长沙县| 长沙市| 上犹县| 德惠市| 精河县| 连山| 巴塘县| 横峰县| 宁安市| 札达县| 巩义市| 肃宁县| 邛崃市| 铜陵市| 简阳市| 乌兰察布市| 五峰| 宝丰县| 安塞县| 阜平县| 抚顺县| 福州市| 炎陵县| 英德市| 平乐县| 鹤峰县|