




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、EDA與VHDL實驗報告16位CPU設(shè)計0/1916位cpu設(shè)計一、頂層系統(tǒng)設(shè)計1.1組成結(jié)構(gòu)CPU的結(jié)構(gòu)如圖所示。這是一個采用單總線系統(tǒng)架構(gòu)的復(fù)雜指令系統(tǒng)結(jié)構(gòu)的16位CPU。處理器包含了各種基本器件模塊。他們是8個16位的寄存器reg0reg7、一個運算器ALU、一個移位寄存器Shifter、一個程序計數(shù)器PortCnt、一個指令寄存器InstrReg、一個比較器Comp、一個地址寄存器Addreg、和一個控制單元Control。這些模塊公共用一組16位的三臺數(shù)據(jù)總線。數(shù)據(jù)總線Data(15+.O)RegOOpReg工作寄存器VReg2艮哪RegArray寄存器陣歹!ALUAluselCom
2、p算術(shù)邏輯單元比較器Reg7Shifter移位運算器hiftselCqProgCntOutReg輸岀寄存器InstrRegdRegOOpReg工作寄存器VReg2艮哪RegArray寄存器陣歹!ALUAluselComp算術(shù)邏輯單元比較器Reg7Shifter移位運算器hiftselCqProgCntOutReg輸岀寄存器InstrRegd扌旨令寄存器pompseipOulControl揑制器A們由一組地址地址寄存老Pro頂層地址應(yīng)線號互相Addr(15.O)12J指令系、刁計I使處理VMA在計處理器時首先要確定Cpu具有哪些功能,并針對這些功能采用哪些指令,然后確定指令的格式。為了使計的CP
3、U具有基本的運算功能,指令將計成以下形式,可以分為如下幾類.裝載指令:指令從其他寄存器或存儲器裝載數(shù)據(jù)或是立刻賦值。存儲指令:指令存儲寄存器的值寫到存儲器分支指令:指令使處理器轉(zhuǎn)到其它地址,一些分支指令為條件轉(zhuǎn)移,另外一些為無條件轉(zhuǎn)移移位指令:這些指令用移位寄存器單元執(zhí)行移位操作,實現(xiàn)數(shù)據(jù)傳遞1.2.1指令格式所有的指令都包含五位操作碼。單字節(jié)指令在低6位指令中包含兩個3位寄存器,一個是源操作數(shù)寄存器,另一個是目的操作數(shù)寄存器。雙字節(jié)指令中,第一個字節(jié)中包含目標寄存器的地址,第二個字節(jié)中包含了指令地址或者操作數(shù)。指令格式如下:(1)單字指令指令的高五位是操作碼,低六位是源操作數(shù)寄存器和目的操作
4、數(shù)寄存器。指令碼格式如下Opcode操作碼源操作數(shù)目的操作數(shù)1514131211543210(2)雙字指令第一個字中包含目標寄存器的地址,第二個字中包含了指令地址或者操作數(shù)1.2.2指令操作碼操作碼功能表操作碼指令功能00000NOP空操作00001LOAD裝載數(shù)據(jù)到寄存器00010STORE將寄存器的數(shù)據(jù)存入存儲器00011MOVE在寄存器之間傳送操作數(shù)00100LOAD1將立即數(shù)裝入寄存器00101BRANCHI轉(zhuǎn)移到由立即數(shù)指定的地址00110BRANCHGTI大于是轉(zhuǎn)移到立即數(shù)指定的地址00111INC加1指令01000DEC減1指令01001AND兩個寄存器與操作01010OR兩個寄
5、存器或操作01011XOR兩個寄存器異或操作01100NOT寄存器求反01101ADD兩個寄存器加運算01110SUB兩個寄存器減運算01111ZERO寄存器清零10000BRANCHLTI小于時轉(zhuǎn)移到由立即數(shù)指定的地址10001BRANCHLT小于時轉(zhuǎn)移10010BRANCHNEQ不等于時轉(zhuǎn)移10011BRANCHQI轉(zhuǎn)移到立即數(shù)指定的地址10100BRANCHGT大于時轉(zhuǎn)移10101BRANCH無條件轉(zhuǎn)移10110BRANCHEQ等于時轉(zhuǎn)移10111BRANCHQI等于時轉(zhuǎn)移到立即地址11000BRANCHELTEI小于等于時轉(zhuǎn)移到立即地址11001BRANCHLTE小于等于時轉(zhuǎn)移1101
6、0SHL向左邏輯移位11011SHR向右邏輯移位11100ROTR循環(huán)右移11101ROTL循環(huán)左移1.3.頂層結(jié)構(gòu)的VHDL設(shè)計CPU原件的VHDL描述CPU_LIB.VHDL用來說明連接各個原件之間的信號類型。描述了多個用于規(guī)定運算器功能、移位寄存操作和用于CPU控制的狀態(tài)的類型。CPU_LIB.VHDLlibraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_arith.all;packagecpu_libistypet_shiftis(shftpass,shl,shr,rotl,rotr);subtypet_aluisunsign
7、ed(3downto0);constantalupass:unsigned(3downto0):0000;constantandOp:unsigned(3downto0):0001;constantorOp:unsigned(3downto0):0010;constantnotOp:unsignde(3downto0):0011;constantxorOp:unsigned(3downto0):0100;constantplus:unsignde(3downto0):0101;constantalusub:unsigned(3downto0):0110;constantinc:unsignde
8、(3downto0):0111;constantdec:unsigned(3downto0):1000;constantzero:unsignde(3downto0):1001;typet_compis(eq,neq,gt,gte,lt,lte);typestateis(reset1,reset2,reset3,reset4,reset5,reset6,execute,nop,load,store,move,load2,load3,load4,store2,store3,store4,move2,move3,move4,incPc,bgtI3,bgtI4,bgtI5,bgtI6,bgtI7,b
9、gtI8,bgtI9,bgtI10,braI2,braI3,braI4,braI5,braI6,loadI2,loadI3,loadI4,loadI5,loadI6,inc3,inc4);subtypebit16isstd_logic_vector(15downto0);endcpu_lib;二、CPU部件設(shè)計2.1.算術(shù)邏輯單元ALUALU實體結(jié)構(gòu)如下:alua15.Oc15.Ob15.0sel3.OinstVHDL代碼:libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_unsigned.all;usework.cpu_lib.
10、all;entityaluisport(a,b:inbit16;sel:int_alu;c:outbit16);endalu;architecturertlofaluisbeginaluproc:process(a,b,sel)begincaseseliswhenalupass=cccccccccccifa=bthencompout=1after1ns;elsecompoutifa/=bthencompout=1after1ns;elsecompoutifabthencompout=1after1ns;elsecompoutifa=bthencompout=1after1ns;elsecomp
11、outifabthencompout=1after1ns;elsecompoutifa=bthencompout=1after1ns;elsecompout=0after1ns;endif;endcase;endprocess;endrtl;比較器RTL圖Selector。sel.gte;sB15.0ACIN1EqualOSELECTORLESS_THANLessThan2sel.ltsel.lteLESS_THANsel.eq比較器RTL圖Selector。sel.gte;s0田aH5A001T田bHE2D8/34cumpcmtB035sei.eqA036sei.gtA137sei.gteA
12、038MasterTimeBar:N:=UT|HValtLEst15.85ns0田aH5A001T田bHE2D8/34cumpcmtB035sei.eqA036sei.gtA137sei.gteA038sei.ItA039sei.A040sei.neqA0p控制器:CONTROL1-15.85ns.2比較器時序IStart:26.42nsInterval:10.57ns10.0ns20.0rLS30.0ns40.0ns50.0ns60.0ns仿真結(jié)果Pointer:fuG5A00(1C28):E2DI(FB19)(A218)(AAD8X4A50)(54D915.85nsJ包含實體控制器提供必要
13、的信號連線,使得數(shù)據(jù)流完全通過CPU,達到預(yù)期的功能。結(jié)構(gòu)體-一個狀態(tài)機,這個狀態(tài)機根據(jù)當前的狀態(tài)和輸入的信號值,輸出更新后的狀態(tài)。之中,號ready和CPU輸入信號有:指令信號instrReg15.O、比較器輸出狀態(tài)、存儲器就緒信復(fù)位信號reset。輸出信號時對指令instrReg15.O譯碼以后,對CPU所有組成部件按指令要求進行操作所需的控制信號。VHDL程序:libraryieee;useIEEE.std_logic_1164.all;usework.cpu_lib.all;entitycontrolisport(clock,reset,ready,compout:inarchitec
14、turertlofcontrolissignalcurrent_state,next_state:state;beginnxtstateproc:process(current_state,instrReg,compout,ready)beginbeginstd_logic;instrReg:inbit16;progCntrWr,progCntrRd,addrRegWraddrRegRd,outRegWr,outRegRd:outstd_logic;shiftSel:outt_shift;aluSel:outt_alu;compSel:outt_comp;opRegRd,opRegWr,ins
15、trWr,regRd,regWr,rw,vma:outstd_logic;regSel:outt_reg);progCntrWr=0;progCntrRd=0;addrRegWr=0;addrRegRd=0;outRegWr=0;outRegRd=0;shiftSel=shftpass;aluSel=alupass;compSel=eq;opRegRd=0;opRegWr=0;endcontrol;progCntrWr=0;progCntrRd=0;addrRegWr=0;addrRegRd=0;outRegWr=0;outRegRd=0;shiftSel=shftpass;aluSel=al
16、upass;compSel=eq;opRegRd=0;opRegWr=0;instrWr=0;regSel=000;regRd=0;regWr=0;rw=0;instrWr=0;regSel=000;regRd=0;regWr=0;rw=0;vmaaluSel=zeroafter1ns;shiftSel=shftpass;next_statealuSel=zero;shiftSel=shftpass;outRegWr=1;next_stateoutregRd=1;next_stateoutRegRd=1;addrRegRd=1;progCntrWr=1;next_stateregSel=ins
17、trReg(2owdnto0);regRd=1;next_stateregSel=instrReg(5owdnto3);regRd=1;aluSel=alupass;shiftSel=shftpass;next_stateprogCntrRd=1;alusel=inc;shiftsel=shftpass;next_stateprogcntrRd=1;alusel=inc;shiftsel=shftpass;next_stateaddrRegWr=1;next_state=addrRegWr=1;next_statevma=1;rw=0;next_statevma=1;downto3);Bran
18、chGTImmdownto0);regRd=1;next_stateregSel=instrReg(2regRd=1;alusel=inc;shiftsel=shftpass;next_statenext_state=incPc;rw=O;fready=1theninstrWr=1;next_state=execute;elsenext_statecaseinstrReg(15owhto11)iswhenOOOOO=next_stateregSel=instrReg(5owhto3);regRd=1;regSelregSel=instrReg(5downto3);regRd=1;0);3);3
19、);3);next_statevma=1;rw=0;next_statevma=1;rw=0;regSel=instrReg(2downtoregWr=1;next_stateregsel=instrReg(o2wntdo0)regRd=1;addrRegWr=1;next_stateregSel=instrReg(5downtoregRd=1;next_stateregSel=instrReg(5downtoregRd=1;vma=1;rw=1;next_stateregSel=instrReg(5downtoregRd=1;aluSel=alupass;shiftSel=shftpass;
20、outRegRd=1;next_stateoutRegRd=1;next_stateoutRegRd=1;regSel=instrReg(2downtoaddrRegWr=1;0);regWr=1;next_stateprogcntrRd=1;alusel=inc;shiftsel=shftpass;outRegWr=1;next_stateoutregRd=1;next_stateoutregRd=1;progcntrWr=1;addrRegWr=1;next_statevma=1;rw=0;next_statevma=1;rw=0;ifready=1thenregSel=instrReg(
21、2odwnto0);regWr=1;next_state=incPc;elsenext_stateprogcntrRd=1;alusel=inc;shiftsel=shftpass;outregWr=1;next_stateoutregRd=1;next_stateoutregRd=1;progcntrWr=1;addrRegWr=1;next_statevma=1;rw=0;next_statevma=rwifprogCntrWr=1;0;ready=1;next_state=1=then0);0);=next_stateif;regsel=instrReg(o5wntdoregRd=1;o
22、pRegWr=1;next_stateopRegRd=1;regSel=instrReg(2regRd=compselnext_statewhenbgtI4opRegRd=1;gt;bgtI4;=1afterregSel=instrReg(2regRd=1;compsel=gt;ifcompout=13);=1;downtodownto1ns;downtothennexstatebgtI5;next_stateif;progcntrRd=alusel=incshiftSel=shftpass;next_stateprogcntrRdalusel=shiftSel=1;incPc;1;=1;in
23、c;shftpass;outregWr=1;next_stateutregRd=1;next_stateoutregRd=1;progcntrWr=1;addrregWr=1;next_statevma=1;rw=0;next_statevma=1;rw=0;ifready=1thenprogcntrWrnext_state=loadPc;elsenext_stateregSel=instrReg(20);regRd=1;alusel=inc;shiftsel=shftpass;outregWr=1;next_stateoutregRd=1;next_stateoutregRd=1;regse
24、l=instrReg(o2wntdo0);regWr=1;next_stateprogcntrRd=1;next_stateprogcntrRd=addrRegWr=1;next_statevma=1;rw=0;next_statevma=1;rw=0;ifready=1theninstrWr=1;next_state=execute;elsenext_stateprogcntrRd=1;1alusel=inc;shiftsel=shftpass;next_stateprogcntrRd=rw=0;ifready=1theninstrWr=alusel=inc;shiftsel=shftpas
25、s;outregWr=1;next_stateoutregRd=1;1;next_state=execute;elsenext_statenext_state=endcase;endprocess;controlffProc:process(clock,reset)incPc;next_stateoutregRd=progcntrWr=1;addrregWr=1;next_statevma=1;rw=0;next_stateIbegin1;ifreset=1thencurrentstateafter1ns;-elsifclockeventandclock=Tthencurrentstate=n
26、extstateafter1ns;_endif;endprocess;endrtl;=reset1vmaclk【PREa15.0clk【PREENA15.0圖2.4.1寄存器Reg的實體結(jié)構(gòu)與RTL圖REG的VHDL程序:libraryIEEE;USEIEEE.std_logic_1164.all;usework.cpu_lib.all;entityregisport(a:inbit16;clk:instd_logic;q:outbit16);endreg;architecturert1ofregisbeginregproc:processbeginwaituntilclkeventandcl
27、k=1;q=aafter1ns;endprocess;Endrt1;2.4.2.寄存器陣列AYRREGAR在執(zhí)行指令時,寄存器中存儲指令所處理的立即數(shù),可對寄存器進行讀或?qū)懖僮?。寄存器組相當于一個8x16位的RAM。當向REGARRAY的一個單元寫數(shù)據(jù)時,首先輸入sel作為單元地址,但elk上升沿到來時,輸入數(shù)據(jù)就被寫入到該單元中。當從REGARRAY的一個地址單元中讀出數(shù)據(jù)時,首先輸入sel作為讀單元的地址,然后使輸出允許控制信號en為1,這時數(shù)據(jù)就會在端口Q輸出。寄存器陣列有兩個獨立進程,第一個進程模擬RAM存儲數(shù)據(jù),此進程中包含一個局部變量RAMDATA,它將存儲的數(shù)據(jù)寫到實體REGAR
28、RAY,這時如果elk上升沿到來,則根據(jù)SEL選定的單元地址輸入新的值。這個進程還將單元地址傳給信號TEMP-DATA,使數(shù)據(jù)傳到下一個進程。寄存器陣列VHDL程序LIBRARYIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_unsigned.all;usework.cpu_lib.all;entityregarrayisport(data:inbit16;sel:int_reg;en,clk:instd_logic;q:outbit16);endregarray;architecturertlofregarrayistypet_ramisa
29、rray(0to7)ofbit16;signaltemp_data:bit16;beginprocess(clk,sel)variableramdata:t_ram;beginifclkeventandclk=1thenramdata(conv_integer(sel):=data;endif;temp_data=ramdata(conv_integer(sel)after1ns;endprocess;process(en,temp_data)beginifen=1thenq=temp_dataafter1ns;elseq1田sei5田data22en2.5.1繹多位寄存器圖2.4.2寄存器陣
30、列實體結(jié)構(gòu)(上)與RTL圖(下)時序仿真TOC o 1-5 h z0ps&40.0ns1.28us1.92us2.5&us3.2us3.84us4.48us5.12us5.76usiiiiiiiii16.75rLSiiiiiiiiiiiiiiiiiiii;1111111111f1111iiiriiiiiriiiiIinr6r-1iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii1111111111f1111iiiriiiiiriiiiIinr6r-1iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiIi:DETSX446AXizzz和8碟3D5CX57C3來02FT;tD53D*5548194C6|:DET5丫44EA廠旳廠嵌扎)C頁比5TC3X02FXD53DX5548X94CE廠實體移位寄存器SHIFT在CPU中實現(xiàn)移位和循環(huán)操作。SHIFT的輸入總線為16位,輸出總線也是16位,輸
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同視角下的企業(yè)戰(zhàn)略布局與實施
- 合同工困境:收入遠低于正式工
- 醫(yī)療設(shè)備登記抵押借款合同5篇
- 2025年合作經(jīng)營稅務(wù)籌劃合同要點分析
- 2025年土地抵押借款合同范本6篇
- 2025年事業(yè)單位合同違約責(zé)任認定標準
- 2025年哀思追憶服務(wù)合同模式
- 2025年供應(yīng)商合作協(xié)議合同書
- 2025年酒店環(huán)保服務(wù)合同樣本
- 2025年標準版設(shè)計師雇傭合同
- 8.2干旱的寶地-塔里木盆地課件2023-2024學(xué)年人教版地理八年級下冊
- 電匯憑證打印模板(建行)
- 數(shù)據(jù)分析與可視化實踐第三版全套教學(xué)課件
- 《壓力性尿失禁》課件
- 拈花灣策劃方案
- 甲狀旁腺疾病學(xué)習(xí)課件
- 消防隊消防產(chǎn)品培訓(xùn)課件
- 石油天然氣行業(yè)安全生產(chǎn)標準化建設(shè)
- 數(shù)據(jù)分析與應(yīng)用培訓(xùn)課件
- 手術(shù)講解模板:分段診刮術(shù)課件
- 焊材抽檢記錄表
評論
0/150
提交評論