基本數(shù)字邏輯單元的設(shè)計(jì)_第1頁(yè)
基本數(shù)字邏輯單元的設(shè)計(jì)_第2頁(yè)
基本數(shù)字邏輯單元的設(shè)計(jì)_第3頁(yè)
基本數(shù)字邏輯單元的設(shè)計(jì)_第4頁(yè)
基本數(shù)字邏輯單元的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩56頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基本數(shù)字邏輯單元的設(shè)計(jì)4.1組合邏輯設(shè)計(jì)

三態(tài)緩沖器和總線緩沖器

8bit單向總線緩沖器

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtri_buf8ISPORT(din:INSTD_LOGIC_VECTOR(7DOWNTO0);dout:OUTSTD_LOGIC_VECTOR(7DOWNTO0);en:INSTD_LOGIC);ENDtri_buf8;ARCHITECTUREdata_flowOFtri_buf8IS

PROCESS(en,din)

BEGINIF(en='1')THENdout<=din;ELSEdout<="ZZZZZZZZ";ENDIF;ENDPROCESS;ENDdata_flow;Endin(0)din(1)din(2)din(3)din(4)din(5)din(6)din(7)dout(0)dout(1)dout(2)dout(3)dout(4)dout(5)dout(6)dout(7)雙向總線緩沖器

用VHDL語(yǔ)言描述的雙向總線緩沖器。

endir功能1

X高阻態(tài)

00

a<=b

01b<=aadirenb

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdobl_tri_buf8ISPORT(a,b:INOUTSTD_LOGIC_VECTOR(7DOWNTO0);dir,en:INSTD_LOGIC);ENDdobl_tri_buf8;

ARCHITECTURErtlOFdobl_tri_buf8ISSIGNALaout,bout:STD_LOGIC_VECTOR(7DOWNTO0);BEGINP1:PROCESS(a,dir,en)BEGINIF((en='0')AND(dir='1'))THENbout<=a;ELSEbout<="ZZZZZZZZ";ENDIF;b<=bout;ENDPROCESSP1;

P2:PROCESS(b,dir,en)BEGINIF((en='0')AND(dir='0'))THENaout<=b;ELSEaout<="ZZZZZZZZ";ENDIFa<=aout;ENDPROCESSP2;ENDrtl;BCD碼—段選碼譯碼器。

BCD碼輸入與LED顯示器字段的對(duì)應(yīng)關(guān)系

BCD碼數(shù)字顯示段

hgfedcba0000011000000000111111100100102101001000011310110000010041001100101015100100100110610000010011171010011110008100000001001910010000其它11111111BCD-段選碼譯碼器d0d1d2d3abc.hgdefVccLIBRARYIEEE;;ENTITYseg_delISPORT(d:INSTD_LOGICVECTOR(3DOWNTO0);q:OUTBIT_VECTOR(7DOWNTO0));ENDseg_del;ARCHITECTUREseg_rtlOFseg_delISBEGINPROCESS(d)BEGINCASEdISWHEN"0000"=>q<="11000000";WHEN"0001"=>q<="11111001";

WHEN"0010"=>q<="10100100";WHEN"0011"=>q<="10110000";

WHEN"0100"=>q<="10011001";WHEN"0101"=>q<="10010010";WHEN"0110"=>q<="10000010";WHEN"0111"=>q<="11011000";WHEN"1000"=>q<="10000000";WHEN"1001"=>q<="10010000";WHENOTHERS=>q<="11111111";ENDCASE;ENDPROCESS;ENDseg-rtl;

4.1.4運(yùn)算器的設(shè)計(jì)

一位全加器的設(shè)計(jì).

LIBRARYIEEE;;ENTITYfull_adderISPORT(a,b,ci:INSTD_LOGIC;sum,cout:OUTSTD_LOGIC);ENDfull_adder;ARCHITECTURErtlOFfull_adderISBEGINsum<=aXORbXORci;cout<=(aANDb)OR(aANDci)OR(bANDci);ENDrtl;asumbcicout4位串行進(jìn)位加法器

ciabsumcociabsumcociabsumcociabsumcoS0S1S2S3COCIA0B0A1B1A2B2A3B3SUMCIABSUMCIABSUMCIABSUMCIABCI0A0B0CI1A1B1CI2A2B2CIn-1An-1Bn-1進(jìn)位產(chǎn)生邏輯S0S1S3Sn-1coutCIA[0:n-1]B[0:n-1]N位超前進(jìn)位加法器超前進(jìn)位加法器

各位加法器產(chǎn)生進(jìn)位的邏輯表達(dá)式為:定義為進(jìn)位生成函數(shù),定義為進(jìn)位傳遞函數(shù),則全加器的各位和為:4位超前進(jìn)位加法器LIBRARYIEEE;USEIEEESTD_LOGIC_1164.ALL;ENTITYadder4ISPORT(a,b:INSTD_LOGIC_VECTOR(3DOWNTO0)ci:INSTD_LOGIC;sum:OUTSTD_LOGIC_VECTOR(3DOWNTO0);cout:OUTSTD_LOGIC);ENDadde4r;ARCHITECTURErtl_adder4OFadder4ISSIGNALg,p,c:STD_LOGIC_VECTOR(3DOWNTO0);BEGINp(0)<=a(0)ORb(0);p(1)<=a(1)ORb(1);p(2)<=a(2)ORb(2);g(0)<=a(0)ANDb(0);a[3:0]b[3:0]ciSum[3:0]coutg(1)<=a(1)ANDb(1);g(2)<=a(2)ANDb(2);g(3)<=a(3)ANDb(3);c(0)<=g(0)OR(p(0)ANDci);c(1)<=g(1)OR(p(1)ANDg(0))OR(p(1)ANDp(0)ANDci);c(2)<=g(2)OR(p(2)ANDg(1))OR(p(2)ANDp(1)ANDg(0))OR(p(2)ANDp(1)ANDp(0)ANDci);c(3)<=g(3)OR(p(3)ANDg(2))OR(p(3)ANDp(2)ANDg(1))OR(p(3)ANDp(2)ANDp(1)ANDg(0))OR(p(3)ANDp(2)ANDp(1)ANDp(0)ANDci);cout=c(3);sum(0)<=a(0)XORb(0)XORci;sum(1)<=a(1)XORb(1)XORc(0);sum(2)<=a(2)XORb(2)XORc(1);sum(3)<=a(3)XORb(3)XORc(2);ENDrtl_adder4;2.移位器

8bit移位器。D7D6D5D4D3D2D1D0d7d6d5d4d3d2d1d0右移d0左移d7d6d5d4d3d2d1d0d7d6d5d4d3d2d1d0d7Irsrsldataa_outdata_inil

8bit移位器的VHDL程序。

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYshifterISPROT(data_in:INSTD_LOGIC_VECTOR(7DOWNTO0);sr,sl,ir,il:INSTD_LOGIC;data_out:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDshifter;ARCHITECTUREAlgOFshifterISBEGINPROCESS(sr,sl,data_in,ir,il)VARIABLEcon:STD_LOGIC_VECTOR(0TO1);

BEGINcon:=sr&sl;CASEconISWHEN"00"=>data_out<=data_in;WHEN"01"=>data_out<=data_in(6DOWNTO0)&il;--左移 WHEN“10”=>data_out<=ir&data_in(7DOWNTO1);--右移 WHEN"11"=>data_out<=data_in;ENDCASE;ENDPROCESS;ENDAlg;3.求補(bǔ)器

LIBRARYIEEE;;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYcomplementIS

PORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);

b:UTSTD_LOGIC_VECTOR(7DOWNTO0));ENDcomplement;ARCHITECTURErtlOFcomplementISBEGINb<=NOTa+”00000001”;ENDrtl;4.乘法器。

部分積右移8bit乘法器的設(shè)計(jì)。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYmultISPORT(ai,bi:INSTD_LOGIC_VECTOR(7DOWNTO0);Product:OUTSTD_LOGIC_VECTOR(15DOWNTO0);done:OUTSTD_LOGIC);ENDmult;

ARCHITECTUREshift_multOFmultISBEGINPROCESS(ai,bi)VARIABLEa,b,m:STD_LOGIC_VECTOR(8DOWNTO0);VARIABLEcount:INTEGER;

BEGINa:='0'&ai;b:='0'&bi;count:=0;m:="00000000";done<='0';WHILEcount<8LOOPIFa(0)='1'THENm:=m+bi;ENDIF;a:=m(0)&a(7DOWNTO1);m:='0'&m(7DOWNTO1);count:=count+1;ENDLOOP;product<=m(7DOWNTO0)&a(8DOWNTO1);done<='1';ENDPROCESS;ENDshift_mult;

4.1.5算術(shù)邏輯運(yùn)算單元

本例是一個(gè)8bit的ALU,能夠完成8種運(yùn)算,即加(add),帶進(jìn)位加(addc),減sub,帶借位減法(subc),邏輯非、與、或和邏輯異或。alucoder程序包定義指令碼。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEalucoderISCONSTANTadd:STD_LOGIC_VECTOR(2DOWNTO0):="000";CONSTANTaddc:STD_LOGIC_VECTOR(2DOWNTO0):="001";CONSTANTsub:STD_LOGIC_VECTOR(2DOWNTO0):="010";CONSTANTsubc:STD_LOGIC_VECTOR(2DOWNTO0):="011";CONSTANTnot:STD_LOGIC_VECTOR(2DOWNTO0):="100";CONSTANTand:STD_LOGIC_VECTOR(2DOWNTO0):="101";CONSTANTor:STD_LOGIC_VECTOR(2DOWNTO0):="110";CONSTANTxor:STD_LOGIC_VECTOR(2DOWNTO0):="111"ENDalucoder;ALU運(yùn)算模塊設(shè)計(jì)。LIBRARYIEEE;;;;;USEWORK.alucoder.ALL;ALUsalu_comand

cyAcccoutover

ENTITYaluISPORT(s:INSTD_LOGIC_VECTOR(7DOWNTO0);cy:INSTD_LOGIC;alu_comand:INSTD_LOGIC_VECTOR(2DOWNTO0);Acc:INOUTSTD_LOGIC_VECTOR(7DOWNTO0);cout,over:BUFFERSTD_LOGIC);ENDalu;ARCHITECTUREalgOFaluISSIGNALr1,s1,f1:STD_LOGIC_VECTOR(8DOWNTO0);BEGINr1<='0'&Acc;s1<='0'&s;PROCESS(r1,s1,cy,alu_comand)BEGINCASEalu_comandISWHENadd=>f1<=r1+s1;WHENaddc=>IFcy='0'THENf1<=r1+s1;ELSEf1<=r1+s1+1;ENDIF;WHENsub=>f1<=r1+NOT(s1)+1;WHENsubc=>IFcy='0'THENf1<=r1+NOT(s1)+1;ELSEf1<=r1+NOT(s1);ENDIF;WHENnot=>f1<=NOT(r1);WHENand=>f1<=r1ANDs1;WHENor=>f1<=r1ORs1;WHENXOR=>f1<=r1XORs1;WHENOTHERS=>f1<="-";ENDCASE;ENDPROCESS;Acc<=f1(7DOWNTO0);cout<=f1(8);over<=f1(8)XORf1(7);ENDalu;

時(shí)序邏輯電路設(shè)計(jì)

4.2.1觸發(fā)器

1.D觸發(fā)器

LIBRARYIEEE;;ENTITYdffISPORT(d,clk:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDdff;

ARCHITECTURErtl_ifOFdffISBEGINPROCESS(clk)BEGIN

IF(clk'EVENT'ANDclk=1)THENq<=d;ENDIF;ENDPROCESS;ENDrtl_if;結(jié)構(gòu)體的另一種描述如下:ARCHITECTURErtl_waitOFdffISBEGINPROCESSBEGINWAITUNTILclk'EVENTANDclk=1;q<=d;ENDPROCESS;ENDrtl_wait;4.2.3寄存器

D0~D7:8位并行數(shù)據(jù)輸入端。SI:串行數(shù)據(jù)輸入端。Q7:串行數(shù)據(jù)輸出端。Q0~Q6:內(nèi)部寄存器數(shù)據(jù)輸出端。clk:時(shí)鐘。ckin:時(shí)鐘信號(hào)禁止,只有當(dāng)其無(wú)效時(shí),移位寄存器才在時(shí)鐘的觸發(fā)下進(jìn)行移位操作。S/L:移位(shift)/裝入(load)。當(dāng)此端為高電平時(shí),可執(zhí)行移位操作,當(dāng)此端為低電平時(shí),讀入D0~D7端的并行數(shù)據(jù)。CLR:異步清零。D[7:0]SIS/LQ7clkckinclr

串/并入、串出移位寄存器

LIBRARYIEEE;;ENTITYshifterISPORT(clr,si,ckin,clk:INSTD_LOGIC;d:INSTD_LOGIC_VECTOR(7DOWNTO0);q:OUTSTD_LOGIC);sl:INBIT);ENDshifter;ATCHITECTURErtl_shifterOFshifterISSIGNALtemp8:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(clr,sl,ckin,clk)IF(clr='0')THENtemp8<="00000000";q<=temp8(7);ELSIF(clk'EVENT)AND(clk='1')AND(ckin='0')THENIF(sl='0')THENtemp8<=d;--裝入數(shù)據(jù)q<=d(7);ELSEq<=temp8(7);temp8(7)<=temp8(6);temp8(6)<=temp8(5);temp8(5)<=temp8(4);temp8(4)<=temp8(3);temp8(3)<=temp8(2);temp8(2)<=temp8(1);temp8(1)<=temp8(0);temp8(0)<=si;ENDIF;ENDIF;ENDPROCESS;ENDrtl_shifter;4.2.4計(jì)數(shù)器

8位異步計(jì)數(shù)器的設(shè)計(jì)

Q/QDclkQ/QDclkQ/QDclkQ/QDclkdclkclrcount_in(0)count_in(1)count_in(8)Q0Q1Q2Q7計(jì)數(shù)器的頂層設(shè)計(jì)LIBRARYIEEE;;ENTITYriplecountISPORT(clk,clr:INSTD_LOGIC;count:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDriplecount;

ARCHITECTURErtl_riplecountOFriplecountISSIGNALcount_in:STD_LOGIC_VECTOR(8DOWNTO0);COMPONENTdfftPORT(clk,clr,d:INSTD_LOGIC;Q:OUTSTD_LOGIC;Qn:BUFFERSTD_LOGIC);ENDCOMPONENT;--調(diào)用當(dāng)前庫(kù)中的同名實(shí)體作為元件BEGINcount_in(0)<=clk;genl:FOR:IN0TO7GENERATEU:dfftPORTMAP(clk=>count_in(i),clr=>clr;d=>count_in(i+1),,Q=>count(i);Qn=>count_in(i+1));ENDGENERATE;ENDrt_riplecountl;--單個(gè)觸發(fā)器性能描述LIBRARYIEEE;;ENTITYdfftISPORT(clk,clr,d:INSTD_LOGIC;Q:OUTSTD_LOGIC;Qn:BUFFERSTD_LOGIC);ENDdfft;ARCHITECTURErtldOFdfftISBEGIN

PROCESS(clk,clr)BEGINIF(clr='0')THENQ<='0';Qn<='1';ELSIF(clk'EVENTANDclk='1')THENQ<=d;Qn<=NOTd;ENDIF;ENDPROCESS;ENDrtld;4.3存儲(chǔ)器

4.3.1概述

存儲(chǔ)器單元實(shí)際上是時(shí)序邏輯電路的一種。按存儲(chǔ)器的使用類型可分為只讀存儲(chǔ)器(ROM)和隨機(jī)存取存儲(chǔ)器(RAM),兩者的功能有較大的區(qū)別,因此在描述上也有所不同。存儲(chǔ)器是許多存儲(chǔ)單元的集合,按單元號(hào)順序排列。每個(gè)單元由若干二進(jìn)制位構(gòu)成,以表示存儲(chǔ)單元中存放的數(shù)值。這種結(jié)構(gòu)和數(shù)組的結(jié)構(gòu)非常相似,故在VHDL語(yǔ)言中,通常由數(shù)組描述存儲(chǔ)器。

TYPEmemoryISARRAY(INTEGERRANGE<>)OFINTEGER;TYPEwordISSTD_LOGIC_VECTOR(k-1DOWNTO0);TYPEmemoryISARRAY(0TOw-1)OFword;4.3.3隨機(jī)存儲(chǔ)器RAM

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;;ENTITYram4kISGENERIC(k:INTEGER:=8;w:INTEGER:=12;rd_del,wr_del:TIME);PORT(WR,RD,CS:INSTD_LOGIC;Adr:INSTD_LOGIC_VECTOR(w-1DOWNTO0);D:INOUTSTD_LOGIC_VECTOR(k-1DOWNTO0));ENDram4k;WRRDCSAdr[11:0]Dout[7:0]ARCHITECTUREbehavram4kOFram4kISTYPEmemoryISARRAY(0TO2**w-1)OFSTD_LOGIC_VECTOR(k-1DOWNTO0);SIGNALsram:memory;SIGNALAdr_in:INTEGER;BEGINAdr_in<=CONV_INEGER(Adr);--位矢量轉(zhuǎn)換成整數(shù)PROCESS(WR,RD,CS)BEGINIFCS='0'THENIFRD='0'THEND<=sram(Adr_in)AFTERrd_del;ELSIFWR='0'THENsram(Adr_in)<=DAFTERwr_del;ENDIF;

ELSED<=(OTHERS’Z’)AFTERrd_del;ENDIF;ENDPROCESS;

ENDbehav;

4.3.2只讀存儲(chǔ)器ROM

在用VHDL語(yǔ)言描述ROM時(shí),ROM的內(nèi)容應(yīng)在仿真時(shí)先讀到ROM中,這就是ROM的初始化。存儲(chǔ)器的初始化要依賴于外部文件的讀取,即由TEXTIO對(duì)ROM進(jìn)行初始化。下面是對(duì)ROM進(jìn)行初始化的實(shí)例。

VARIABLEstartup:BOOLEAN:=TRUE;VARIABLEl:LINE;--LINE是在TEXTIO程序包定義的存取類型VARIABLEj:INTEGER;VARIABLErom:memory;FILEromin:TEXTISIN"rom2k.in";--TEXT是在TEXTIO程序包定義的文件類型初始化程序:

IFstartupTHENFORjINrom‘RANGELOOP--利用數(shù)據(jù)區(qū)間屬性函數(shù)獲得數(shù)組的上下限READLINE(romin,l);--從文件romin中讀入一行放入l

中。READ(l,rom(j));--從l中讀入一個(gè)數(shù)據(jù)放入rom中ENDLOOP;ENDIF;

G1G2Adr[11;0]Dout[7:0]只讀存儲(chǔ)器ROM的VHDL程序。

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;;ENTITYrom4kISPORT(G1,G2:INSTD_LOGIC;Adr:INSTD_LOGIC_VECTOR(11DOWNTO0);dout:OUTSTD_LOGIC_VECTOR(7DOENTO0);ENDrom4k;ARCHITECTUREbehav_rom4kOFrom4kISTYPEwordISSTD_LOGIC_VECTOR(7DOWNTO0);TYPEmemoryISARRAY(0TO4095)OFword;SIGNALadr_in:INTEGERRANGE0TO4095;VARIBLErom:memory;VARIBLEstartup:BOOLEAN:=TURE;VARIBLEl:LINE;

VARIBLEj:INTEGER;FILEromin:TEXTISIN“rom2k.in”;--文件類說(shuō)明.BEGINPROCESS(G1,G2)BEGINIFstartupTHENFORjINrom'RANGELOOPREADLINE(romin,l);READ(l,rom(j));ENDLOOP;startup:=FALSE;ENDIF;adr_in<=CONV_INTEGER(Adr);--將位矢量轉(zhuǎn)換成整數(shù).IF(G1='1'ANDG2='1')THENdout<=rom(adr_in);ELSEdout<="ZZZZZZZZ”;ENDIF;ENDPROCESS;ENDbehav_rom2k;先進(jìn)后出堆棧

先進(jìn)后出堆棧是處理程序中斷的常用數(shù)據(jù)結(jié)構(gòu),其數(shù)據(jù)存放結(jié)構(gòu)和RAM是一致的,但存儲(chǔ)方式有所不同。先進(jìn)后出堆棧由2個(gè)功能塊組成,即存儲(chǔ)器體和堆棧指針SP,進(jìn)堆時(shí)SP+1→SP指向下一個(gè)存儲(chǔ)單元;出堆時(shí)SP-1→SP,并把SP所指示的存儲(chǔ)單元的內(nèi)容輸出。

din[7:0]pushpopclkresetDout[7:0]256字節(jié)先進(jìn)后出堆棧的VHDL程序。LIBRARYIEEE;;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYstackISGENERIC(w:INTEGER:=256;k:INTEGER:=8);PORT(clk,reset,push,pop:INSTD_LOGICdin:INSTD_LOGIC_VECTOR(k-1DOWNTO0);dout:OUTSTD_LOGIC_VECTOR(k-1DOWNTO0));ENDstack;ARCHITECTUREbehav_stackOFstackISTYPEmemoryISARRAY(0TOw-1)OFSTD_LOGIC_VECTOR(k-1DOWNTO0);SIGNALram:MEMORY;SIRNALsp:INTEGERRANGE0TOw-1;BEGINdout<=ram(sp);P1:PROCESS(clk)BEGINIF(clk'EVENTANDclk='1')THENIF(push='0')THENram(sp)<=din;ENDIF;ENDIF;ENDPROCESSP1;數(shù)據(jù)堆棧寫

P2:PROCESS(clk,reset)BEGINIF(reset='1')THENsp<=0;ELSIF(clk'EVENTANDclk='0'ANDpush=’0’)THENsp<=sp+1;--在clk的后沿sp+1ElSIF(clk'EVENTANDclk='1'ANDpop=’0’)THENsp<=sp-1;--sp指針修改ENDIF;ENDPROCESSP2;ENDbehav_stack;

加減計(jì)數(shù)器操作4.4有限狀態(tài)機(jī)

有限狀態(tài)機(jī)是時(shí)序電路的通用模型,任何時(shí)序電路都可以表示為有限狀態(tài)機(jī)。對(duì)于大部分?jǐn)?shù)字電子系統(tǒng),都可以劃分為控制單元和數(shù)據(jù)單元兩個(gè)組成部分,控制單元的主體是一個(gè)有限狀態(tài)機(jī),它接收外部信號(hào)和數(shù)據(jù)單元產(chǎn)生的狀態(tài)的信息,產(chǎn)生各種控制信號(hào),決定何時(shí)進(jìn)行何種數(shù)據(jù)處理。有限狀態(tài)機(jī)分為兩類:Moore型和Mealy型。

次態(tài)邏輯狀態(tài)寄存器輸出邏輯輸入次態(tài)現(xiàn)態(tài)輸出狀態(tài)機(jī)的設(shè)計(jì)步驟

定義狀態(tài)機(jī)的各狀態(tài)。適當(dāng)?shù)卮_定狀態(tài)機(jī)的工作狀態(tài),是狀態(tài)機(jī)設(shè)計(jì)的基礎(chǔ),需要充分利用設(shè)計(jì)者的設(shè)計(jì)經(jīng)驗(yàn)。

建立狀態(tài)轉(zhuǎn)換圖。構(gòu)造狀態(tài)轉(zhuǎn)換圖時(shí),通常從一個(gè)比較容易的狀態(tài)開(kāi)始。例如系統(tǒng)的初始狀態(tài)、復(fù)位狀態(tài)或空閑狀態(tài)等,都是很好的起始狀態(tài)。為每個(gè)狀態(tài)標(biāo)出轉(zhuǎn)換的條件,相應(yīng)的輸入、輸出信號(hào)。建立狀態(tài)機(jī)進(jìn)程。在VHDL程序中,通常用進(jìn)程描述有限狀態(tài)機(jī)。由于次態(tài)是現(xiàn)態(tài)及輸入信號(hào)的函數(shù),因此,往往將現(xiàn)態(tài)和輸入信號(hào)作為進(jìn)程的敏感信號(hào)。

進(jìn)程中定義狀態(tài)的轉(zhuǎn)移。所有的狀態(tài)均可表達(dá)為CASE_WHEN結(jié)構(gòu)中的一條CASE語(yǔ)句,利用CASEWHEN語(yǔ)句IF_THEN_ELSE語(yǔ)句實(shí)現(xiàn)狀態(tài)的轉(zhuǎn)移。

存儲(chǔ)器控制器的設(shè)計(jì)

存儲(chǔ)器控制器的輸入信號(hào)是微處理器的就緒ready和讀寫信號(hào)read_write。當(dāng)上電復(fù)位或者ready有效時(shí),存儲(chǔ)器控制器開(kāi)始工作,并在下一個(gè)時(shí)鐘周期判斷本次作業(yè)任務(wù)是讀存儲(chǔ)器還是寫存儲(chǔ)器,當(dāng)read_write=‘1’時(shí)為讀操作,使OE和CS信號(hào)有效,read_write=‘0’時(shí)為寫操作,WE和CS信號(hào)有效。當(dāng)ready信號(hào)再次有效時(shí),結(jié)束本次讀寫操作,并使控制器返回到初始狀態(tài)。

存儲(chǔ)器控制器readyread-w

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論