<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 實現(xiàn)拆分大組合邏輯的方法

          實現(xiàn)拆分大組合邏輯的方法

          作者: 時間:2010-06-20 來源:網(wǎng)絡(luò) 收藏
          圖1是很多為了提高系統(tǒng)時鐘采用的,但是沒有提供具體如何的實例。我覺得實例才是重要的。但我不明白在寫代碼時,如何知道這樣寫會被綜合成一個很大的,一些簡單的可以想到(比如大的計數(shù)器應(yīng)該分成多個來做),但是更復(fù)雜的實在是不好理解。

          圖1


          可以通過流水線的方式分拆,這也是一種提高芯片速度的一種方式。 在邏輯中間插入寄存器,設(shè)計成流水。 很典型的例子就是調(diào)度器,如果做64調(diào)度器,可能中間的延時太長,不能滿足系統(tǒng)速度要求,這時候就可以做成一級16調(diào)度,一級4調(diào)度,來完成64調(diào)度的功能。

          本文引用地址:http://www.ex-cimer.com/article/151791.htm


          用加法器做例子,設(shè)輸入ABCD輸出OUT 上半部分就是: out = A+B+C+D;
          下半部分就是:
          always @(posedge clk)
          begin
          sumreg1 = sum1;
          sumreg2 = sum2;
          sumreg3 = sum3; end
          assign sum1 = A+B;
          assign sum2 = C+D;
          assign sum3 = sumrge1+sumreg2;
          assign OUT = sumreg3;
          通常建議使用下半部分的算法,如果可以使用流水線。


          通常是這樣的,沒有例子看起來是不好理解,但是一有具體的例子就非常清楚了。我也來學(xué)著給個計數(shù)器的例子計數(shù)255,如果用一個寄存器來計那么需要開的深度為8的,如果為兩個那么只需容量為4的兩個寄存器,所需的邏輯較小,不知道對不對。
          reg[3:0]ad1;
          reg[3:0]ad2;
          always @(posedge clk)
          if(!rest)
          begin
          out=0;
          ad1=0;
          ad2=0;
          end
          else
          if(ad1==15)
          begin
          ad2=ad2+1;
          ad1=0;
          end
          else
          if (ad2==15)
          begin out=1;
          end
          else
          ad1=ad1+1;
          ad1加滿后去觸發(fā)ad2加。


          always @(posedge clk)
          if (reset)
          counter0 = 0;
          else
          counter0 = counter0 + 1;
          always @(posedge clk)
          begin
          counterreg0 = counter0;
          if (counterreg0 == 4'b1111)
          outreg0 = 1;
          else
          outreg0 = 0;
          end
          assign counter1 = counterreg1 + outreg0;
          always @(posedge clk)
          begin
          counterreg1 = counter1;
          if (counterreg1 == 4'b1111)
          out = 1;
          else
          out = 0;
          end


          lflhust 寫的程序沒有達到邏輯拆分的目的, 原因很簡單, 那個程序綜合后生成的電路的流水線深度還是1。 zf0579那個程序的流水線深度才是2,達到了拆分的目的。 作邏輯的出發(fā)點不是寫HDL代碼,而是在寫代碼前腦子里面要有 你需要的邏輯的電路結(jié)構(gòu)。

          作邏輯的出發(fā)點不是寫HDL代碼,而是在寫代碼前腦子里面要有。你需要的邏輯的電路結(jié)構(gòu)。



          關(guān)鍵詞: 方法 邏輯 組合 拆分 實現(xiàn)

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();