新聞中心

        EEPW首頁 > 嵌入式系統 > 牛人業話 > 不同的verilog代碼風格看RTL視圖之三

        不同的verilog代碼風格看RTL視圖之三

        作者: 時間:2015-02-06 來源:網絡 收藏

          我們來做一個4選一的Mux的實驗,首先是利用if…else語句來做,如下。

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

          (由輸入xsel來選擇輸出的路數xin0,xin1,xin2,xin3其一,輸出yout)

          Ex3:

          input clk;

          input xin0,xin1,xin2,xin3;

          input[1:0] xsel;

          output yout;

          reg youtr;

          always @ (posedge clk)

          if(xsel == 2'b00) youtr <= xin0;

          else if(xsel == 2'b01) youtr <= xin1;

          else if(xsel == 2'b10) youtr <= xin2;

          else youtr <= xin3;

          assign yout = youtr;

          綜合后的視圖如下:

          

        點擊看大圖

         

          上面的視圖里,可以看出有三個等于比較器,然后在觸發器前會有三個2選1的選擇器。和我們的代碼是一樣的,第一個if語句的優先級是最高的(這里所謂的優先級最高不是軟件意義上的高優先級,由于HDL設計的并行性,判斷語句綜合后不是先后進行判斷,而是在同一時刻進行判斷,也就是說if和后面的if else 或者else其實是同時進行判斷的),看紅線連接的網絡,如果它的等于比較器的邏輯值為1,那么決定了最后一個2選1mux的值必定是和xin0連接的而與前面的結果無關。依次類推,如果它的等于比較器的值為0,那么最后的輸出就由前面的邏輯來決定。其實,綜合出來這樣的結果和我們的設想還是有出入的,一個4選1mux何必如此復雜呢。

          下面就看用case語句來做這個4選1mcu吧。

          input clk;

          input xin0,xin1,xin2,xin3;

          input[1:0] xsel;

          output yout;

          reg youtr;

          always @ (posedge clk)

          case (xsel)

          2'b00: youtr <= xin0;

          2'b01: youtr <= xin1;

          2'b10: youtr <= xin2;

          default: youtr <= xin3;

          endcase

          assign yout = youtr;

          它的視圖如下:

          

        點擊看大圖

         

          呵呵,上面應該就是我們所要的,4選1的mux,一目了然。Case與if的用法還是應該根據具體的情況而定,但是盡量多用case往往會更簡化硬件電路。



        關鍵詞: verilog RTL

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 邓州市| 特克斯县| 舞阳县| 玉树县| 天全县| 中山市| 芷江| 时尚| 邵武市| 株洲市| 武功县| 靖州| 吴忠市| 奎屯市| 肃南| 葵青区| 静乐县| 昌吉市| 科技| 祁东县| 丰城市| 大兴区| 六盘水市| 郸城县| 清徐县| 宾川县| 建阳市| 棋牌| 常宁市| 阜康市| 集安市| 雅安市| 灵台县| 嘉兴市| 双桥区| 哈巴河县| 香河县| 锡林浩特市| 宕昌县| 社会| 襄垣县|