verilog-CPU設計解讀課件_第1頁
verilog-CPU設計解讀課件_第2頁
verilog-CPU設計解讀課件_第3頁
verilog-CPU設計解讀課件_第4頁
verilog-CPU設計解讀課件_第5頁
已閱讀5頁,還剩83頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

CPU單片機實驗板通用計算機與單片機在硬件結構上的比較

微型計算機系統單片機系統微型計算機的組成框圖(由多個IC芯片組裝在一個主電路板上)數據RAMCPU并行I/O程序ROM定時/計數器串型端口中斷控制器擴展I/O端口系統總線(DB、AB、CB)所有基本單元都組裝在一個IC芯片上MCS-51單片機MCS-51單片機內部方框圖

時鐘電路4KROM程序存儲器256BRAM數據存儲器2X16位定時/計數器CPU處理器64KB總線擴展控制器可編程I/O端口P0-3可編程串行口MCS-51單片機外型圖(DIP-40封裝)MCS-51單片機的邏輯符號圖VCCRSTXTAL1

P0口XTAL2/EA/PSENALE

P1口P3口RXDTXD/INT0/INT1P2口T0T1/WR/RDGND87C51EPROM型AT89C51ATMELFLASH型MCS-51單片機的外形和邏輯符號cpuABDB地址譯碼器ROMRAMclockresetMICROCOMPUTERSYSTEMreadwrite單片機時序1)振蕩周期

——

指為單片機提供定時信號的振蕩源的周期,若為內部產生方式時,為石英晶體的振蕩周期。2)時鐘周期

——也稱為狀態周期,用S表示。時鐘周期是計算機中最基本的時間單位,在一個時鐘周期內,CPU完成一個最基本的動作。MCS—51單片機中一個時鐘周期為振蕩周期的2倍。3)機器周期

——完成一個基本操作(例如,取指令、存儲器讀、存儲器寫等)所需要的時間稱為機器周期。MCS—51的一個機器周期含有6個時鐘周期。4)指令周期

——完成一條指令所需要的時間稱為指令周期。MCS—5l的指令周期含1~4個機器周期不等,其中多數為單周期指令,還有2周期和4周期指令。4周期指令只有乘、除兩條指令。單片機時鐘P1P2S1振蕩周期時鐘周期機器周期機器周期指令周期XTAL2(OSC)S2S3S4S5S6S1S2S4S5S3S6P1P1P1P1P1P1P1P1P1P1P1P2P2P2P2P2P2P2P2P2P2P2若MCS-51單片機外接晶振為12MHz時,則單片機的四個周期的具體值為:振蕩周期=1/12MHz=1/12μs=0.0833μs時鐘周期=1/6μs=0.167μs機器周期=1μs指令周期=1~4μs單片機指令功能一覽表

指令機器碼功能說明數據傳送類指令

操作碼+【操作數】MOV

A,RnE8~EF

寄存器送累加器MOV

A,dirE5dir直接字節送累加器MOV

A,#data74data

立即數送累加器NOP00空操作MOV

dir,#data75dirdata立即數送直接字節MOVX

A,@DPTRE0外部RAM(16位地址)讀操作MOV

A,#55NOPMOVXA,@DPTR745500E00000000100100011ROM122333000000000100100011RAMA?DPTR0010CPU小結運算器和控制器組成按時鐘節拍工作工作的規定是指令指令由操作碼和操作數組成過程是取指令和執行指令執行指令是產生各種按一定的時序的控制信號第17章簡化的RISC_CPU設計精簡指令集(RISC)CPU的構造原理和設計方法17.1什么是CPUCPU:中央處理單元,是計算機的核心部件計算機進行信息處理分兩個步驟:將數據和程序(指令序列)輸入到計算機的存儲器中從第一條指令的地址起開始執行程序,得到所需結果,結束運行。CPU的作用:協調并控制計算機的各部件,使之有條不紊的執行程序CPU的基本功能:取指令-地址與控制信號分析指令-即指令譯碼,操作和操作控制信號執行指令-操作控制信號作用于各部件CPU的基本功能概括:能對指令進行譯碼并執行規定的動作可以進行算術和邏輯運算能與存儲器和外設交換數據提供系統所需的控制CPU的內部結構:算術邏輯運算單元(ALU)累加器程序計數器指令寄存器和譯碼器時序和控制部件RISC即精簡指令集計算機:ReducedInstructionSetComputer時序控制信號由硬件而不是微程序控制cpuABDB地址譯碼器ROMRAMclockresetMICROCOMPUTERSYSTEMreadwriteD15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0高8位低8位地址碼指令碼指令指令數目:8條地址空間:213=8K助記符操作碼功能HLT3'b000

暫停SKZ3‘b001累加器為零轉移ADD3’b010加ANDD3‘b011與XORR3‘b100或LDA3‘b101取數STO3‘b110存數JMP3‘b111轉移指令集CPU的基本功能:取指令-地址與控制信號分析指令-即指令譯碼,操作和操作控制信號執行指令-操作控制信號作用于各部件CPU的基本功能概括:能對指令進行譯碼并執行規定的動作可以進行算術和邏輯運算能與存儲器和外設交換數據提供系統所需的控制CPU的內部結構:算術邏輯運算單元(ALU)累加器程序計數器指令寄存器和譯碼器時序和控制部件alu_ena累加器A指令寄存器IR算邏單元ALU數據控制地址選擇程序計數器PC控制狀態機時鐘信號ABDBhaltrdwrclkrstload_accinc_pcload_pcload_irfetchdatactl_enaCPU的結構功能圖累加器A指令寄存器IR算邏單元ALU數據控制地址選擇程序計數器PC控制狀態機時鐘信號ABDBhaltrdwrclkrstload_accfetchinc_pcload_pcload_iralu_enadatactl_enahaltload_irrdinc_pcalu_enafetchclk01234567halt指令累加器指令寄存器算邏單元數據控制地址選擇程序計數器控制狀態機時鐘信號ABDBrdload_accfetchinc_pcload_iralu_enadataload_irrdinc_pcalu_enafetchclk01234567LDA1000B000EE0110001001RAMEEload_accaddress000000011000B00000000001ROM0000020002累加器指令寄存器算邏單元數據控制地址選擇程序計數器控制狀態機時鐘信號ABDBrdload_accfetchinc_pcload_iralu_enadataload_irrdinc_pcalu_enafetchclk01234567ADD10015001EE1110001001RAM11load_accaddress000200031001500100020003ROM00040004累加器指令寄存器算邏單元數據控制地址選擇程序計數器控制狀態機時鐘信號ABDBrdload_accfetchinc_pcload_iralu_enadataload_irrdinc_pcalu_enafetchclk01234567STO1001D001EE0110001001RAMFFwraddress000400051001D00100040005ROM0006000617.3.1時鐘發生器fetch是控制信號,clk的8分頻信號alu_ena用于控制算術邏輯運算單元clk是時鐘信號reset是復位信號狀態轉移圖Idle

S117.3.1時鐘發生器

S2

S3

S4

S5

S6

S7

S8

S1

S2

S3

S4

S5

S6

S7

S8

S1

S2

S3

S4

S5

S6

S7

S8

idle//-------clk_gen.v--------`timescale1ns/1nsmodule

clk_gen(clk,reset,fetch,alu_ena);

input

clk,reset;

output

fetch,alu_ena;

wire

clk,reset;

reg

fetch,alu_ena;reg

[7:0]state;

parameter

S1=8'b00000001, S2=8'b00000010,S3=8'b00000100,S4=8'b00001000,S5=8'b00010000,S6=8'b00100000,S7=8'b01000000,S8=8'b10000000,idle=8'b00000000;17.3.1時鐘發生器always@(posedgeclk)if(reset)beginfetch<=0;alu_ena<=0;state<=idle;endelsebegin case(state) … … … …default:state<=idle; endcase endcase(state)S1:begin fetch<=1; state<=S2;endS2:state<=S3; S3:state<=S4;S4:state<=S5;S5:beginstate<=S6; fetch=0;end S6:begin state<=S7; alu_ena<=1;end S7:beginalu_ena<=0;state<=S8;endS8:state<=S1;idle:state<=S1;default:state<=idle;endcase17.3.2指令寄存器resetclkload_iropcode[2:0]ir_addr[12:0]`timescale1ns/1nsmoduleregister(opc_iraddr,data,ena,clk,rst);output[15:0]opc_iraddr;input[7:0]data;inputena,clk,rst;reg[15:0]opc_iraddr;regstate;always@(posedgeclk)beginif(rst)beginopc_iraddr<=16'b0000_0000_0000_0000;state<=1'b0;endelseif(ena)casex(state)1'b0:beginopc_iraddr[15:8]<=data;state<=1;end1'b1:beginopc_iraddr[7:0]<=data;state<=0;enddefault:beginopc_iraddr[15:0]<=16'bx;state<=1'bx;endendcase elsestate<=1'b0;endendmodule17.3.3累加器resetclkload_accalu_out[7:0]moduleaccum(accum,data,ena,clk,rst);output[7:0]accum;input[7:0]data;inputena,clk,rst;reg[7:0]accum;always@(posedgeclk)beginif(rst)accum<=8'b0000_0000;elseif(ena)accum<=data;endendmodule17.3.4算術邏輯運算器助記符操作碼功能HLT3'b000

暫停SKZ3‘b001累加器為零轉移ADD3’b010加ANDD3‘b011與XORR3‘b100或LDA3‘b101取數STO3‘b110存數JMP3‘b111轉移`timescale1ns/1nsmodulealu(alu_out,zero,data,accum,alu_ena,opcode,clk);output[7:0]alu_out;outputzero;input[7:0]data,accum;input[2:0]opcode;inputalu_ena,clk;reg[7:0]alu_out;parameterHLT=3'b000,SKZ=3'b001,ADD=3'b010,ANDD=3'b011,XORR=3'b100,LDA=3'b101,STO=3'b110,JMP=3'b111;

assignzero=!accum;always@(posedgeclk)if(alu_ena)begincasex(opcode)HLT:alu_out<=accum;SKZ:alu_out<=accum;ADD:alu_out<=data+accum;ANDD:alu_out<=data&accum;XORR:alu_out<=data^accum;LDA:alu_out<=data;STO:alu_out<=accum;JMP:alu_out<=accum;default:alu_out<=8'bxxxx_xxxx;endcaseend

endmodule17.3.5數據控制器data[7:0]alu_out[7:0]datactl_enamoduledatactl(data,in,data_ena);output[7:0]data;input[7:0]in;inputdata_ena;assigndata=(data_ena)?in:8'bz;endmodule17.3.6地址多路器moduleadr(addr,fetch,pc_addr,ir_addr);inputfetch;input[12:0]pc_addr,ir_addr;output[12:0]addr;assignaddr=fetch?pc_addr:ir_addr;endmodule17.3.7程序計數器modulecounter(pc_addr,ir_addr,load,clk,rst);inputload,clk,rst;input[12:0]ir_addr;output[12:0]pc_addr;reg[12:0]pc_addr;always@(posedgeclkorposedgerst) if(rst)pc_addr<=13'b0_0000_0000_0000;elseif(load)pc_addr<=ir_addr;elsepc_addr<=pc_addr+1;endmodule17.3.8狀態控制器`timescale1ns/1nsmodulemachinectl(ena,fetch,rst,clk);inputfetch,rst,clk;outputena;regena;always@(posedgeclk)beginif(rst)ena<=0;elseif(fetch)ena<=1;endendmodule17.3.8狀態控制器狀態控制器兩部分:狀態機(machine)狀態控制器machinectl rst有效,ena=0, 狀態機停止工作。17.3.8狀態控制器000001010011100101110111狀態機是CPU的核心部件,用于產生控制信號:啟動、停止某些部件CPU執行讀指令來讀寫接口、存儲器狀態變量state的值,是指令周期已經過的時鐘數指令周期中8個時鐘完成的操作第0個時鐘:rd和load_ir為高電平,ROM中高八位指令代碼-->指令寄存器第1個時鐘:rd和load_ir為高電平,inc_pc加1,故PC+1,ROM中低八位指令代碼-->指令寄存器第2個時鐘:空操作第3個時鐘:PC+1,指向下一條指令;若HLT指令,halt=1;其它指令控制線輸出為0指令周期中8個時鐘完成的操作第4個時鐘:若ANDADDXORLDA,讀相應地址數據;若JMP,目的地址-->PC;若STO,輸出累加器數據。第5個時鐘:若ANDADDXOR,進行相應運算;若LDA,數據-->運算器-->累加器;若JMP,鎖存目的地址;若STO,數據到地址處。第6個時鐘:空操作第7個時鐘:若SKZ指令,PC+1跳過一條指令;否則PC無變化`timescale1ns/1nsmodulemachine(inc_pc,load_acc,load_pc,rd,wr,load_ir,datactl_ena,halt,clk,zero,ena,opcode);outputinc_pc,load_acc,load_pc,rd,wr,load_ir;outputdatactl_ena,halt;inputclk,zero,ena;input[2:0]opcode;reginc_pc,load_acc,load_pc,rd,wr,load_ir;regdatactl_ena,halt;reg[2:0]state;parameterHLT=3'B000,SKZ=3'b001,ADD=3'b010,ANDD=3'b011,XORR=3'b100,LDA=3'b101,STO=3'b110,JMP=3'b111;

always@(negedgeclk)beginif(!ena)beginstate<=3'b000;{inc_pc,load_acc,load_pc,rd}<=4'b0000;{wr,load_ir,datactl_ena,halt}<=4'b0000;endelsectl_cycle;end

//-------beginoftaskctl_cycle-------taskctl_cycle;begincasex(state)3'b000:begin{inc_pc,load_acc,load_pc,rd}<=4'b0001;{wr,load_ir,datactl_ena,halt}<=4'b0100;state<=3'b001;end3'b001:begin{inc_pc,load_acc,load_pc,rd}<=4'b1001;{wr,load_ir,datactl_ena,halt}<=4'b0100;state<=3'b010;end

3'b010:begin{inc_pc,load_acc,load_pc,rd}<=4'b0000;{wr,load_ir,datactl_ena,halt}<=4'b0000;state<=3'b011;end

3'b011:beginif(opcode==HLT)begin{inc_pc,load_acc,load_pc,rd}<=4'b1000;{wr,load_ir,datactl_ena,halt}<=4'b0001;state<=3'b100;endelsebegin{inc_pc,load_acc,load_pc,rd}<=4'b1000;{wr,load_ir,datactl_ena,halt}<=4'b0000;state<=3'b100;endend3'b100:beginif(opcode==JMP)begin{inc_pc,load_acc,load_pc,rd}<=4'b0010;{wr,load_ir,datactl_ena,halt}<=4'b0000;endelseif(opcode==ADD||opcode==ANDD||opcode==XORR||opcode==LDA)begin{inc_pc,load_acc,load_pc,rd}<=4'b0001;{wr,load_ir,datactl_ena,halt}<=4'b0000;endelseif(opcode==STO)begin{inc_pc,load_acc,load_pc,rd}<=4'b0000;{wr,load_ir,datactl_ena,halt}<=4'b0010;endelsebegin{inc_pc,load_acc,load_pc,rd}<=4'b0000;{wr,load_ir,datactl_ena,halt}<=4'b0000;endstate<=3'b101;end

3'b101:begin//operationif(opcode==ADD||opcode==ANDD||opcode==XORR||opcode==LDA)begin{inc_pc,load_acc,load_pc,rd}<=4'b0101;{wr,load_ir,datactl_ena,halt}<=4'b0000;endelseif(opcode==SKZ&&zero==1)begin{inc_pc,load_acc,load_pc,rd}<=4'b1000;{wr,load_ir,datactl_ena,halt}<=4'b0000;endelseif(opcode==JMP)begin{inc_pc,load_acc,load_pc,rd}<=4'b1010;{wr,load_ir,datactl_ena,halt}<=4'b0000;endelseif(opcode==STO)begin{inc_pc,load_acc,load_pc,rd}<=4'b0000;{wr,load_ir,datactl_ena,halt}<=4'b1010;endelsebegin{inc_pc,load_acc,load_pc,rd}<=4'b0000;{wr,load_ir,datactl_ena,halt}<=4'b0000;endstate<=3'b110;end

3'b110://idlebeginif(opcode==STO)begin{inc_pc,load_acc,load_pc,rd}<=4'b0000;{wr,load_ir,datactl_ena,halt}<=4'b0010;endelseif(opcode==ADD||opcode==ANDD||opcode==XORR||opcode==LDA)begin{inc_pc,load_acc,load_pc,rd}<=4'b0001;{wr,load_ir,datactl_ena,halt}<=4'b0000;endelsebegin{inc_pc,load_acc,load_pc,rd}<=4'b0000;{wr,load_ir,datactl_ena,halt}<=4'b0000;endstate<=3'b111;end

3'b111:beginif(opcode==SKZ&&zero==1)begin{inc_pc,load_acc,load_pc,rd}<=4'b1000;{wr,load_ir,datactl_ena,halt}<=4'b0000;endelsebegin{inc_pc,load_acc,load_pc,rd}<=4'b0000;{wr,load_ir,datactl_ena,halt}<=4'b0000;endstate<=3'b000;enddefault:begin{inc_pc,load_acc,load_pc,rd}<=4'b0000;{wr,load_ir,datactl_ena,halt}<=4'b0000;state<=3'b000;endendcaseendendtask//-----------endoftaskctl_cycle--------------

endmodulecpuABDB地址譯碼器ROMRAMclockresetMICROCOMPUTERSYSTEMreadwrite17.3.9外圍模塊(地址譯碼器)moduleaddr_decode(addr,rom_sel,ram_sel);outputrom_sel,ram_sel;input[12:0]addr;regrom_sel,ram_sel;always@(addr)casex(addr)13'b1_1xxx_xxxx_xxxx:{rom_sel,ram_sel}<=2'b01;13'b0_xxxx_xxxx_xxxx:{rom_sel,ram_sel}<=2'b10;13'b1_0xxx_xxxx_xxxx:{rom_sel,ram_sel}<=2'b10;default:{rom_sel,ram_sel}<=2'b00;endcaseendmodule17.3.9外圍模塊(RAM)moduleaddr_decode(addr,rom_sel,ram_sel);outputrom_sel,ram_sel;input[12:0]addr;regrom_sel,ram_sel;always@(addr)casex(addr)13'b1_1xxx_xxxx_xxxx:{rom_sel,ram_sel}<=2'b01;13'b0_xxxx_xxxx_xxxx:{rom_sel,ram_sel}<=2'b10;13'b1_0xxx_xxxx_xxxx:{rom_sel,ram_sel}<=2'b10;default:{rom_sel,ram_sel}<=2'b00;endcaseendmodule17.3.9外圍模塊(ROM)modulerom(data,addr,read,ena);output[7:0]data;input[12:0]addr;inputena,read;reg[7:0]mem[13'h1fff:0];assigndata=(read&&ena)?mem[addr]:8'hzz;endmodule17.4RISC_CPU操作和時序主要操作:系統的復位和啟動操作總線讀操作總線寫操作17.4.1系統的復位和啟動操作復位狀態reset=1:CPU內部寄存器全為零數據總線為高阻狀態地址總線為0000H所有控制信號為無效狀態啟動狀態reset=0:fetch上升沿啟動CPU開始工作從ROM的000處讀指令并執行17.4.2總線讀操作復位狀態reset=1:CPU內部寄存器全為零數據總線為高阻狀態地址總線為0000H所有控制信號為無效狀態啟動狀態reset=0:fetch上升沿啟動CPU開始工作從ROM的000處讀指令并執行D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0高8位低8位地址碼指令碼17.5RISC_CPU尋址方式和指令系統指令數目:8條地址空間:213=8K17.5RISC_CPU尋址方式和指令系統直接尋址方式數據放在存儲器中,尋址單元的地址由指令直接給出。LDA010FH8EH00H77H56HEDHFFHFFH00H010FH010EH010DH010CH56H1010000100001111地址碼指令碼17.5RISC_CPU尋址方式和指令系統HLT:停機操作該操作空一個指令周期,即8個時鐘SKZ:為零跳過下一條語句累加器結果為零,跳過下一語句;累加器結果不為零,順序執行。ADD:相加累加器的值+地址所知的存儲器中的數據,結果送回累加器。17.5RISC_CPU尋址方式和指令系統ANDD:相與累加器的值&地址所知的存儲器中的數據,結果送回累加器。XORR:相異或累加器的值^地址所知的存儲器中的數據,結果送回累加器。LDA:讀數據地址所知的存儲器中的數據送累加器。17.5RISC_CPU尋址方式和指令系統STO:寫數據累加器中的數據送地址所指的存儲器中JMP:無條件跳轉語句該操作跳轉至指令給出的目的地址,繼續執行。累加器指令寄存器算邏單元數據控制地址選擇程序計數器控制狀態機時鐘信號ABDBrdload_accfetchinc_pcload_iralu_enadataload_irrdinc_pcalu_enafetchclk01234567LDA1000B000EE0110001001RAMEEload_accaddress000000011000B00000000001ROM0000020002累加器指令寄存器算邏單元數據控制地址選擇程序計數器控制狀態機時鐘信號ABDBrdload_accfetchinc_pcload_iralu_enadataload_irrdinc_pcalu_enafetchclk01234567ADD10015001EE1110001001RAM11load_accaddress000200031001500100020003ROM00040004累加器指令寄存器算邏單元數據控制地址選擇程序計數器控制狀態機時鐘信號ABDBrdload_accfetchinc_pcload_iralu_enadataload_irrdinc_pcalu_enafetchclk01234567STO1001D001EE0110001001RAMFFwraddress000400051001D00100040005ROM00060006@00111_00000//00BEGIN:JMPTEST_JMP0011_1100000_00000//02HLT0000_0000000_00000//04HLT0000_0000101_11000//06JMP_OK:LDADATA_10000_0000001_00000//08SKZ0000_0000000_00000//0AHLT0000_0000101_11000//0CLDADATA_20000_0001001_00000//0ESKZ0000_0000111_00000//10JMPSKZ_OK0001_0100000_00000//12HLT0000_0000110_11000//14SKZ_OK:STOTEMP0000_0010101_11000//16LDADTAT_10000_0000110_11000//18STOTEMP0000_0010101_11000//1ALDATEMP0000_0010001_00000//1CSKZ0000_0000000_00000//1EHLT0000_0000100_11000//20XORRDTAT_20000_0001001_00000//22SKZ0000_0000000_00000//24HLT0000_0000111_00000//26JMPXORR_OK0010_0100100_11000//28XORR_OK:XORRDATA_20000_0001001_00000//2ASKZ0000_0000000_00000//2CHLT0000_0000000_00000//2EEDN:HLT0000_0000111_00000//30JMPBEGIN0000_0000@3C111_00000//3CTST_JMP:JMPJMP_OK0000_0110000_00000//3EHLTROM@0000000000//1800DATA_111111111//1801DATA_210101010//1802TEMP

RAM17.6RISC_CPU模塊的調試cpuABDB地址譯碼器ROMRAMclockresetreadwrite`include"clk_gen.v"`include"register.v"`include"accum.v"`include"adr.v"`include"alu.v"`include"machine.v"`include"machinectl.v"`include"counter.v"`include"datactl.v"`timescale1ns/1nsmodulecpu(clk,reset,halt,rd,wr,addr,data,opcode,fetch,ir_addr,pc_addr);inputclk,reset;outputrd,wr,halt;output[12:0]addr;output[2:0]opcode;outputfetch;output[12:0]ir_addr,pc_addr;inout[7:0]data;wireclk,reset,halt;wire[7:0]data;wire[12:0]addr;wirerd,wr,wirefetch,alu_ena;wire[2:0]opcode;wire[12:0]ir_addr,pc_addr;wire[7:0]alu_out,accum;wirezero,inc_pc,load_acc,load_pc,load_ir,data_ena,contrl_ena;endmodulemodulecpu(clk,reset,halt,rd,wr,addr,data,opcode,fetch,ir_addr,pc_addr);

clk_genm_clkgen(.clk(clk),.reset(reset),.fetch(fetch),.alu_ena(alu_ena));registerm_register(.data(data),.ena(load_ir),.rst(reset),.clk(clk),.opc_iraddr({opcode,ir_addr}));accumm_accum(.data(alu_out),.ena(load_acc),.clk(clk),.rst(reset),.accum(accum));alum_alu(.data(data),.accum(accum),.clk(clk),.alu_ena(alu_ena),.opcode(opcode),.alu_out(alu_out),.zero(zero));machinectlm_machinectl(.clk(clk),.rst(reset),.fetch(fetch),.ena(contrl_ena));machinem_machine(.inc_pc(inc_pc),.load_acc(load_acc),.load_pc(load_pc),.rd(rd),.wr(wr),.load_ir(load_ir),.clk(clk),.datactl_ena(data_ena),.halt(halt),.zero(zero),.ena(contrl_ena),.opcode(opcode));datactlm_datactl(.in(alu_out),.data_ena(data_ena),.data(data));adrm_adr(.fetch(fetch),.ir_addr(ir_addr),.pc_addr(pc_addr),.addr(addr));counterm_counter(.clk(inc_pc),.rst(reset),.ir_addr(ir_addr),.load(load_pc),.pc_addr(pc_addr));

endmodule`include"cpu.v"`include"ram.v"`include"rom.v"`include"addr_decode.v"`timescale1ns/1ns`definePERIOD100moduletopcpu;regreset_req,clock;integertest;reg[(3*8):0]mnemonic;reg[12:0]PC_addr,IR_addr;wire[7:0]data;wire[12:0]addr;wirerd,wr,halt,ram_sel,rom_sel;wire[2:0]opcode;wirefetch;wire[12:0]ir_addr,pc_addr;……..endmodulemoduletopcpu;regreset_req,clock;…….cput_cpu(.clk(clock),.reset(reset_req),.halt(halt),.rd(rd),.wr(wr),.addr(addr),.data(data),.opcode(opcode),.fetch(fetch),.ir_addr(ir_addr),.pc_addr(pc_addr));ramt_ram(.addr(addr[9:0]),.read(rd),.write(wr),.ena(ram_sel),.d

溫馨提示

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

評論

0/150

提交評論