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

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于VHDL邏輯電路設(shè)計與應(yīng)用

          基于VHDL邏輯電路設(shè)計與應(yīng)用

          作者: 時間:2018-07-27 來源:網(wǎng)絡(luò) 收藏

          1、引言

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

          電子產(chǎn)品隨著技術(shù)的進步,更新?lián)Q代速度可謂日新月異。I'輝lectronicDesignAutomatic)技術(shù)的應(yīng)用很好地適應(yīng)了這一特點。通過設(shè)計和編程,由可編程邏輯器件CPLD/FPGAn-構(gòu)成的數(shù)字電路,取代了常規(guī)的組合和時序邏輯電路,實現(xiàn)了單片化,使體積、重量、功耗減小,提高了可靠性。

          目前技術(shù)在一般的數(shù)字系統(tǒng)、數(shù)字信號處理系統(tǒng)等領(lǐng)域獲得廣泛應(yīng)用,它將成為今后電子設(shè)計的主流。語言作為可編程邏輯器件的標(biāo)準(zhǔn)語言描述能力強,覆蓋面廣,抽象能力強,應(yīng)用越來越廣泛。語言具有多層次描述系統(tǒng)硬件功能的能力,可以從系統(tǒng)的數(shù)學(xué)模型直到門級電路,其高層次的行為描述可以與低層次的RTL描述和結(jié)構(gòu)描述混合使用;設(shè)計者可以實現(xiàn)從文本編輯、功能仿真、邏輯綜合、布局布線、時序仿真到編程下載整個開發(fā)過程,大大減輕了設(shè)計人員的工作強度,提高了設(shè)計質(zhì)量,減少了出錯的機會。下面介紹如何在美國ALTERA公司的MAX+PLUSH平臺上應(yīng)用實現(xiàn)

          2、設(shè)計原理

          多位的工作原理閻是從最低位開始逐位相加并向高位進位,基于這個原理,采用移位加法實現(xiàn)串行加法器。設(shè)兩個無符號數(shù)A=a-tart...ao和B=b.-,b,^...bo,兩者相加產(chǎn)生的和SUM=S-lS-:...So,其工作原理如圖1所示,由三個移位寄存器和一個加法器有限狀態(tài)機組成,其中三個寄存器用來存放A,B和Sum數(shù)據(jù)。其工作原理是,假定輸人移位寄存器有并行加載功能,首先把A,B的值加載到寄存器,然后在每一個時鐘周期,通過加法器有限狀態(tài)機將相應(yīng)的一位相加,在時鐘周期的結(jié)尾處將這一位相加結(jié)果移到Sum寄存器。三個寄存器都采用同步正邊沿觸發(fā)器,所有變化都在時鐘正邊沿之后很快發(fā)生,這時三個寄存器的內(nèi)容都向右移,將已得到的和位移到Sum,并把兩個加數(shù)寄存器的下一個位a與b:送給加法器有限狀態(tài)機。

          加法器有限狀態(tài)機的工作原理:由兩個狀態(tài)M和N分別表示進位值0和10狀態(tài)圖如圖2所示,采用有限狀態(tài)機的Mealy模型。由于每一位相加,都是由全加器構(gòu)成的,因此根據(jù)狀態(tài)圖可寫出次態(tài)全加器的邏輯表達(dá)式:

          Y=ab+ay+by

          s=a+b+y

          其中y為進位輸人,a和b為兩個輸人數(shù)據(jù),Y為進位輸出,s為全加器的和。串行加法器可以實現(xiàn)任意位數(shù)據(jù)加法的簡單電路。

          3、基于VHDL串行加法器的實現(xiàn)

          串行加法器的VHDL描述由移位寄存器和加法器有限狀態(tài)機組成??梢园岩莆患拇嫫髯鳛橐粋€子電路,在主程序中可以多次調(diào)用。

          3.1移位寄存器實現(xiàn)

          下面是4位移位寄存器的VHDL代碼,采用FOR LOOP結(jié)構(gòu)來實現(xiàn),源程序如下:

          LIBRARYIEEE;

          USEIEEE.STD-LOGIC-1164.ALL;

          ENTITYshiftIS GENERIC(n:INTEGER:=4);

          PORT(r:INSTD-LOGIC-VECTOR(n-1DOWNTO0);

          1,e,w:INSTD-LOGIC;

          clk:INSTD_LOGIC;

          q:BUFFERSTD-LOGIC-VECTOR(n-1DOWNTO0));

          ENDshift;

          ARCHITECTUREbehaOFshiftIS

          BEGIN

          PROCESS

          BEGIN

          WATTUNTILclk'EVENTANDclk='1';

          IFe='1'THEN

          IF1='l'THEN

          q=r,

          ELSE

          gebit:FORiIN0TOn-2LOOP

          q(i)=q(i+l);

          END LOOP;

          q(n-1)=w;

          ENDIF;

          ENDIF;

          ENDPROCESS;

          ENDbeha;

          若要實現(xiàn)更多位移位寄存器,則只要修改n值即可。程序中r是輸人信號,clk是時鐘信號,e是使能端。當(dāng)1='1’時對移位寄存器并行加載,卜'0’時,寄存器處于右移狀態(tài),串行數(shù)據(jù)從輸人端w移人寄存器的最高位。仿真結(jié)果如圖3所示。

          3.2串行加法器的VHDL設(shè)計

          八位串行加法器VHDL代碼如下:

          LIBRARYIEEE;

          USEIEEE.STDLOGIC-1164.ALL;

          ENTITY adderIS

          GENERIC(length:INTEGER:=8);

          PORT(erset:INSTDLOGIC;

          clk:INSTD-LOGIC;

          a,b:INSTD-LOGIC-VECTOR(length-1DOWNTO0);

          co:outSTD-LOGIC;

          sum:BUFFERSTD-LOGIC-VECTOR(length一1DOWNTO0));

          ENDadder;

          ARCHITECTUREbehaOFadderIS COMPONENTshift

          GENERIC(n:INTEGER:=4);

          PORT(r:INSTD-LOGIC-VECTOR(n-1DOWNTO1,e,w:INSTD-LOGIC;

          elk:INSTD-LOGIC;

          q:BUFFERSTD-LOGIC-VECTOR(n-1DOWNTO0));

          ENDCOMPONENT;

          SIGNALga,gb,null-in:STD_LOGIC-VECTOR(length-1DOWNTO0);

          SIGNALs,low,high,run:STD-LOGIC;

          SIGNALcount:INTEGERRANGE0TOlength;

          TYPEstate-typeIS(M,N);

          SIGNALy:state-type;

          BEGIN

          low='0';

          high二,1';

          shiftA:shiftGENERICMAP(n=>length)PORTMAP(a,erset,high,low,clk,ga);

          shiftB:shiftGENERICMAP(n=>length)PORTMAP(b,reset,high,low,clk,gb);

          adderFSM:PROCESS(erset,clk)BEGIN

          IFerset='l'THEN

          y=M;

          ELSIFelk'EVENTANDclk='1'THEN

          CASEyIS

          WHENM=>IF(qa(0),1'ANDqb(0)='1')THENy=N;

          ELSE

          y=M;

          ENDIF;

          WHENN=>

          IF(ga(0)='0'ANDqb(0)='0')THENy-M;

          ELSE

          y=N;

          ENDIF;

          ENDCASE;

          ENDIF;

          ENDPROCESSadderFSM;

          WITHySELECT

          s-ga(0)XORqb(0)WHENM,

          NOT(ga(0)XORqb(0))WHENN;

          Null_in二(OTHERS=>'0');

          shiftsum:shiftGENERICMAP(n=>length)

          PORTMAP(nulin,erset,run,s,clk,sum);

          stop:PROCESS

          BEGIN

          WAITUNTIL(elk'EVENTANDclk='1');

          IFerset='1'THEN

          count=length;

          E,ISIFrun='l'THEN

          count=count-1;

          ENDIF;

          ENDPROCESS;

          run='0'WHENcount-OELSE'1';

          co一out:PROCESS

          BEGIN

          WAITUNTIL(clk-EVENTANDclk='1');

          IFy=MTHEN

          co=,0';

          EISE

          co=,1';

          ENDIF;

          ENDPROCESScoout;

          ENDbeha;

          程序中采用三個進程描述:adderFSM進程描述加法器有限狀態(tài)機;stop進程描述減法計數(shù)器,用來決定加法器什么時候由于n位所要求的和出現(xiàn)在輸出移位寄存器而停止;co-out描述進位co輸出。

          程序經(jīng)Max+PlusII中的Compiler編譯,再通過Simulator和Timinganalyzer工具分別進行功能仿真和時序仿真,仿真結(jié)果如圖4所示,其中reset是輸人控制端,clk是時鐘信號,a和b是輸人數(shù)據(jù),sum是和數(shù),co是進位,y表示有限狀態(tài)機的狀態(tài)。仿真正確后,可通過計算機并口上的Byteblaster下載電纜將生成的配置文件直接下載到芯片MAXEPM7128SLC84-15進行驗證,測試結(jié)果與實際相符。

          4、結(jié)束語

          本文通過串行加法器VHDL設(shè)計表明,VHDL在邏輯電路的設(shè)計中具有以下優(yōu)點:

          (1)VHDL語言硬件描述能力強、設(shè)計方法靈活;(2)設(shè)計者只需掌握VHDL語言及相關(guān)設(shè)計軟件的使用,而不需考慮較多的硬件結(jié)構(gòu)就可以設(shè)計所需要的數(shù)字系統(tǒng);(3)隨時可對設(shè)計內(nèi)容進行仿真,查驗系統(tǒng)功能;(4)程序可移植性強、易于修改;因此,隨著集成電路技術(shù)的高速發(fā)展,作為當(dāng)代電子設(shè)計人員,HDL已成為設(shè)計數(shù)字硬件時常用的一種重要手段。



          關(guān)鍵詞: EDA VHDL 串行加法器

          評論


          相關(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); })();