版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第8章CPU結構及其設計8.1專用處理器頂層系統(tǒng)設計8.2專用處理器的設計實現(xiàn)8.3專用處理器的仿真驗證8.4小結8.1專用處理器頂層系統(tǒng)設計1專用處理器的組成結構2專用處理器的功能3指令系統(tǒng)的設計專用處理器的組成結構圖8-1
專用處理器結構框圖專用處理器的功能設計要求:
本專用處理器可通過編程來完成自然數(shù)求和的功能,并將計算結果存儲于數(shù)據(jù)存儲器RAM中。
例如完成:0+1+2+…+10=?。完成該功能的算法用C語言表示,如例8-1。【例8-1】C語言描述的功能inttotal=0;for(inti=10;i!=0;i--)total+=i;nextinstructions...指令系統(tǒng)的設計
圖8-2簡單指令集指令系統(tǒng)的設計
【例8-2】匯編語言描述
0MOVR0,#0;//total=01MOVR1,#10;//i=102MOVR2,#1;//常數(shù)13MOVR3,#0;//常數(shù)0Loop:JZR1,NEXT;//如果i=0,則完成
5ADDR0,R1;//total+=i6SUBR1,R2;//i--7JZR3,Loop//不為零則跳轉
NEXT:MOV10H,R0//將結果存放在RAM的地址10H處
HERE:HALT//停在這里【例8-3】機器碼描述memory[0]=10'b0011_00_0000;//MOVR0,#0;memory[1]=10'b0011_01_1010;//MOVR1,#10;memory[2]=10'b0011_10_0001;//MOVR2,#1;memory[3]=10'b0011_11_0000;//MOVR3,#0;memory[4]=10'b0110_01_1000;//JZR1,NEXT;memory[5]=10'b0100_00_0100;//ADDR0,R1;memory[6]=10'b0101_01_1000;//SUBR1,R2;memory[7]=10'b0110_11_0100;//JZR3,Loopmemory[8]=10'b1000_00_1010;//MOV10H,R0memory[9]=10'b1111_00_1001;//haltfor(i=10;i<(2**N);i=i+1)//存儲器其余地址存放0memory[i]=0;8.2專用處理器的設計實現(xiàn)頂層系統(tǒng)設計基本部件設計頂層系統(tǒng)設計圖8-3專用處理器實現(xiàn)框圖頂層系統(tǒng)設計圖8-4數(shù)據(jù)路徑部分實現(xiàn)框圖基本部件設計【例8-4】ALU:數(shù)據(jù)邏輯單元modulealu(clk,en,sel,in1,in2,out,alu_zero);inputen,clk;input[1:0]sel;input[7:0]in1,in2;outputreg[7:0]out;outputregalu_zero;always@(posedgeclk)begin if(en) case(sel) 2'b00:out=in1; 2'b01:if(in1==0)alu_zero=1;elsealu_zero=0; 2'b10:out=in1+in2; 2'b11:out=in1-in2; endcaseendendmodule基本部件設計【例8-5】寄存器moduleregister(clk,en,in,out);inputclk,en;input[7:0]in;outputreg[7:0]out;reg[7:0]val;always@(posedgeclk)val<=in;always@(en,val)beginif(en==1'b1)out<=val;endendmodule基本部件設計【例8-6】通用寄存器文件:本設計包含4個通用寄存器modulerf(rst,clk,r_w,enb,in,sel,out);inputrst,clk,enb,r_w;input[7:0]in;input[1:0]sel;outputreg[7:0]out;reg[7:0]reg_file[0:3];integeri;always@(posedgerst,posedgeclk)beginif(rst)beginfor(i=0;i<3;i=i+1)reg_file[i]=0;endelsebeginif(enb==1)beginif(r_w==0)//寫registerbegincase(sel)2'b00:reg_file[0]<=in;2'b01:reg_file[1]<=in;2'b10:reg_file[2]<=in;2'b11:reg_file[3]<=in;endcaseendelse//讀registercase(sel)2'b00:out<=reg_file[0];2'b01:out<=reg_file[1];2'b10:out<=reg_file[2];2'b11:out<=reg_file[3];endcaseendendend基本部件設計【例8-7】二選一多路選擇器,用于選擇立即數(shù)或者寄存器數(shù)據(jù)endmodulemodulemux21(sel,in1,in2,out);inputsel;input[7:0]in1,in2;output[7:0]out;assignout=(sel)?in2:in1;endmodule基本部件設計【例8-8】數(shù)據(jù)路徑頂層文件moduledp(rst,clk,r_wf,en_rf,en_reg,en_alu,en_imm,sel_rf,sel_alu,sel_mux,imm,alu_zero,reg_sel,reg_out);inputrst,clk,r_wf,en_rf,en_reg,en_alu,en_imm;input[7:0]imm;input[1:0]sel_rf,sel_alu;inputsel_mux;outputreg[1:0]reg_sel;outputreg[7:0]reg_out;outputalu_zero;wire[7:0]op1,op2,alu_out,out_imm,out_rf;registerregister0(.clk(clk),.en(en_reg),.in(op1),.out(op2));registerregister1(.clk(clk),.en(en_imm),.in(imm),.out(out_imm));mux21mux0(.sel(sel_mux),.in1(out_imm),.in2(out_rf),.out(op1));alualu0(.clk(clk),.en(en_alu),.sel(sel_alu),.in1(op1),.in2(op2),.out(alu_out),.alu_zero(alu_zero));rfrf0(.rst(rst),.clk(clk),.r_w(r_wf),.enb(en_rf),.in(alu_out),.sel(sel_rf),.out(out_rf));always@(posedgeclk)beginreg_sel<=sel_rf;reg_out<=alu_out;endendmodule基本部件設計【例8-9】程序存儲器//指令為10位:高4位為指令碼;中間兩位為寄存器;低4位為立即數(shù)modulerom(clk,rst,rd,rom_data,rom_addr);parameterM=10,N=4;//4根地址線,10位數(shù)據(jù)的存儲器inputclk,rst,rd;//rd讀使能信號input[N-1:0]rom_addr;outputreg[M-1:0]rom_data;reg[M-1:0]memory[0:2**N];//4根地址線,8位數(shù)據(jù)的存儲器always@(posedgeclk,posedgerst) if(rst) begin:init//該順序塊用于初始化ROM值
integeri; memory[0]=10'b0011_00_0000;//MOVR0,#0; memory[1]=10'b0011_01_1010;//MOVR1,#10; memory[2]=10'b0011_10_0001;//MOVR2,#1; memory[3]=10'b0011_11_0000;//MOVR3,#0; memory[4]=10'b0110_01_1000;//JZR1,NEXT;
memory[5]=10'b0100_00_0100;//ADDR0,R1; memory[6]=10'b0101_01_1000;//SUBR1,R2;
memory[7]=10'b0110_11_0100;//JZR3,Loop memory[8]=10'b1000_00_1010;//MOV10H,R0 memory[9]=10'b1111_00_1001;//halt for(i=10;i<(2**N);i=i+1)//存儲器其余地址存放0 memory[i]=0; end else begin:read//該順序塊用于讀取ROM值
if(rd)rom_data=memory[rom_addr]; endendmodule基本部件設計【例8-10】數(shù)據(jù)存儲器moduleram(clk,rd,wr,cs,addr,datain,dataout);parameterM=8,N=4;//4根地址線,8位數(shù)據(jù)inputrd,wr,cs,clk;input[N-1:0]addr;input[M-1:0]datain;output[M-1:0]dataout;reg[M-1:0]memory[0:2**N];//4根地址線,8位數(shù)據(jù)的存儲器reg[M-1:0]temp;assigndataout=temp;always@(posedgeclk)begin:p0 if(cs) if(rd)temp<=memory[addr]; elseif(wr)memory[addr]<=datain; elsetemp<='bz;endendmodule基本部件設計【例8-11】控制器代碼見下面的鏈接基本部件設計【例8-12】頂層系統(tǒng)
modulecpu(clk,rst,start,reg_sel,reg_out,alu_zero,wr_ram_out,cs_ram_out,addr_ram_out);//modulecpu(clk,rst,start,reg_sel,reg_out,alu_zero);inputclk,rst,start;output[1:0]reg_sel;output[7:0]reg_out;outputalu_zero;wire[7:0]imm,reg_out;wire[1:0]sel_rf,sel_alu,reg_sel;wiresel_mux;wirer_wf,en_rf,en_reg,en_alu,en_imm,alu_zero;regclk1,clk2;wire[3:0]PC;//ROM接口信號wireROM_en;wire[9:0]IR;wirewr_ram,cs_ram;//RAM接口信號wire[3:0]addr_ram;outputwr_ram_out,cs_ram_out;//RAM接口信號output[3:0]addr_ram_out;assignwr_ram_out=wr_ram,cs_ram_out=cs_ram,addr_ram_out=addr_ram;always@(posedgeclk)begin clk2<=clk1;clk1<=~clk2;//二分頻
enddpdatapath(rst,clk2,r_wf,en_rf,en_reg,en_alu,en_imm,sel_rf,sel_alu,sel_mux,imm,alu_zero,reg_sel,reg_out);romrom_instruction(clk2,rst,ROM_en,IR,PC);ramram_data(clk1,,wr_ram,cs_ram,addr_ram,reg_out,);ctrlcontrol(rst,start,clk1,alu_zero,r_wf,en_rf,en_reg,en_alu,en_imm,sel_rf,sel_alu,sel_mux,imm,PC,IR,ROM_en,wr_ram,cs_ram,addr_ram);//ctrlcontrol(rst,start,clk1,alu_zero,r_wf,en_rf,en_reg,en_alu,en_imm,sel_rf,sel_alu,sel_mux,imm,PC,IR,ROM_en);endmodule8.3專用處理器的仿真驗證圖8-11放大的仿真輸出波形8.3專用處理器的仿真驗證圖8-12仿真輸出波形8.3專用處理器的仿真驗證圖8-13復位和第一條指令的執(zhí)行8.3專用處理器的仿真驗證【例8-12】用于說明復位和第一條指令的代碼
if(rst)beginstate<=s0;//復位:上電初始化狀態(tài)機初態(tài)
PC<=0;//復位:初始化PC值
endelsebegincase(state)s0://(步驟1)初始狀態(tài)
beginPC=0;//初始化程序計數(shù)器
if(start==1'b1)//start為啟動算法信號
state<=s1;elsestate<=s0;end8.3專用處理器的仿真驗證s1://(步驟2)取指令
beginROM_en<=1;//使能ROM輸出
state<=s2;ends2:beginOPCODE=IR[9:6];//將指令分開存儲在不同信號中
register=IR[5:4];address=IR[3:0];state<=s3;ends3://(步驟3)使PC增1beginPC=PC+4'b1;state<=s4;end8.3專用處理器的仿真驗證s4://(步驟4)指令譯碼
begincase(OPCODE)loadi://譯碼后該指令為取立即數(shù)
state<=s5;add:state<=s6;sub:state<=s7;jz:state<=s8;store:state<=s10;halt:state<=done;default:state<=s1;endcaseend8.3專用處理器的仿真驗證s5:begin//(步驟5)裝載立即數(shù)進入通用寄存器
imm=address;//將立即數(shù)交給imm信號
e
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年常德學院馬克思主義基本原理概論期末考試模擬題帶答案解析(奪冠)
- 2025年方正縣幼兒園教師招教考試備考題庫及答案解析(奪冠)
- 2025年福建?。?0所)馬克思主義基本原理概論期末考試模擬題含答案解析(奪冠)
- 2025年包頭市職工大學馬克思主義基本原理概論期末考試模擬題及答案解析(奪冠)
- 2025年安徽師范大學馬克思主義基本原理概論期末考試模擬題附答案解析(奪冠)
- 2025年固陽縣幼兒園教師招教考試備考題庫帶答案解析(必刷)
- 2026年山東省農(nóng)村信用社聯(lián)合社信息科技類應屆畢業(yè)生校園招聘備考試題(面向南開大學)附答案解析
- 食堂消防安全手冊模板
- 2025年西安市西京小學教務主任招聘備考考試題庫及答案解析
- 心電圖判斷房室傳導阻滯部位課件
- 叩擊排痰課件
- 2025年征信報告模板樣板個人版模版信用報告詳細版(可修改編輯)
- 復用醫(yī)療器械預處理課件
- 【《銅電解陽極泥處理各工序及工藝分析案例》7400字】
- 第五課 共同保衛(wèi)偉大祖國 課件-《中華民族大團結》七年級全一冊
- 車間安全生產(chǎn)獎懲制度
- 化工設備新員工培訓課件
- 分包工程監(jiān)理方案(3篇)
- 2025北師大版暑假八升九年級數(shù)學銜接講義 第04講 因式分解(思維導圖+3知識點+8考點+復習提升)(原卷)
- 全面解讀產(chǎn)后各種疼痛
- 行政單位預算管理課件
評論
0/150
提交評論