簡(jiǎn)單計(jì)算機(jī)系統(tǒng)基本模塊設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第1頁(yè)
簡(jiǎn)單計(jì)算機(jī)系統(tǒng)基本模塊設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第2頁(yè)
簡(jiǎn)單計(jì)算機(jī)系統(tǒng)基本模塊設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第3頁(yè)
簡(jiǎn)單計(jì)算機(jī)系統(tǒng)基本模塊設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第4頁(yè)
簡(jiǎn)單計(jì)算機(jī)系統(tǒng)基本模塊設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、簡(jiǎn)單計(jì)算機(jī)系統(tǒng)基本模塊設(shè)計(jì)實(shí)驗(yàn)報(bào)告一. 實(shí)驗(yàn)?zāi)康?. 掌握簡(jiǎn)單計(jì)算機(jī)系統(tǒng)的指令系統(tǒng)2. 掌握簡(jiǎn)單計(jì)算機(jī)基本模塊設(shè)計(jì)的方法3. 鞏固eda電路仿真和調(diào)試方法4. 掌握?qǐng)?zhí)行r型、i型、j型指令的數(shù)據(jù)通道5. 掌握alu運(yùn)算單元模塊的設(shè)計(jì)方法6. 掌握簡(jiǎn)單控制單元模塊的設(shè)計(jì)方法二. 設(shè)計(jì)思路簡(jiǎn)單的計(jì)算機(jī)系統(tǒng)的基本組成如下圖1所示。整個(gè)系統(tǒng)山寄存器組、alu、控制單元、 rom、ram、輸入設(shè)備、輸出設(shè)備以及輸入/輸出設(shè)備接口組成,各部分通過(guò)總線(xiàn)連接起來(lái), 總線(xiàn)內(nèi)部包括地址、數(shù)據(jù)、和控制等信號(hào)。|控制單元寄存器組alucpui/o端口及其映射ramromi/o 接口i/o 接口5?輸入設(shè)備輸岀設(shè)備圖1

2、計(jì)算機(jī)系統(tǒng)從輸入設(shè)備(如鍵盤(pán))輸入?yún)⒓舆\(yùn)算的操作數(shù)及加、減等運(yùn)算符,并通過(guò)輸 入設(shè)備接口將這些操作數(shù)和運(yùn)算符存放在寄存器或存儲(chǔ)系統(tǒng)中,然后通過(guò)執(zhí)行存放在存儲(chǔ)系 統(tǒng)屮的程序,實(shí)現(xiàn)運(yùn)算,并將運(yùn)算的結(jié)果通過(guò)輸出設(shè)備(如數(shù)碼管)顯示出來(lái)。整個(gè)過(guò)程的 實(shí)現(xiàn)是通過(guò)存儲(chǔ)在rom屮的程序來(lái)進(jìn)行控制的。整個(gè)系統(tǒng)的設(shè)計(jì)思路是根據(jù)計(jì)算機(jī)系統(tǒng)的組成,分別設(shè)計(jì)出相應(yīng)的模塊,最終在將各個(gè) 模塊連接起來(lái),組成整個(gè)系統(tǒng)。三. 模塊說(shuō)明1.寄存器組模塊根據(jù)指令的特點(diǎn),在r型指令小有兩個(gè)操作數(shù)來(lái)白寄存器組,作為算術(shù)邏輯單元 alu的輸入,另一個(gè)操作數(shù)是alu的輸出,需要寫(xiě)回寄存器組。所以寄存器模塊需要兩 個(gè)讀通道,1個(gè)寫(xiě)通道,至

3、少需要3個(gè)寄存器。本次實(shí)驗(yàn)設(shè)計(jì)的寄存器組中共含冇4個(gè) 寄存器,因此 需要讀寫(xiě)通道各需要兩位輸入,用nl, n2, nd分別輸入讀通道1,讀通道2,寫(xiě)通道的寄存器號(hào),信號(hào)為“00”“01”“10”“11”分別對(duì)應(yīng)寄存器r0,rl,r2, r3o為了能夠控制寄存器的讀寫(xiě),需要設(shè)置一個(gè)寫(xiě)允許信號(hào),當(dāng)該信號(hào)為1 時(shí),在clk的上升沿將輸入數(shù)據(jù)di寫(xiě)入nd對(duì)應(yīng)的寄存器,為0時(shí)禁止對(duì)寄存器進(jìn)行 寫(xiě)操作,只能進(jìn)行讀操作,將n1對(duì)應(yīng)的寄存器中的內(nèi)容從q1輸出,將n2對(duì)應(yīng)的寄存 器的內(nèi)容從q2輸出。寄存器組模塊由1個(gè)2-4譯碼器,2個(gè)8位4選1數(shù)據(jù)選擇器和4個(gè)寄存器組成, 這三個(gè)基本單位可以ill quartu

4、sll的mega wizard生成。sel4 1一 dataox7.o一 data1x7.0l一 data2刈7.0 data3 刈 7.0sel1.0result7.oaclrq70clockdata7.oenablereginstlinst3其中寄存器(reg)還有一個(gè)杲步清零端和一個(gè)使能端,將寫(xiě)通道的輸入nd作為2-4 譯碼器的輸入信號(hào),譯出的4個(gè)信號(hào)分別與輸入reg_we相與作為reg的enable信號(hào), nl, n2信號(hào)分別作為兩個(gè)數(shù)據(jù)選擇器的sei信號(hào),4個(gè)寄存器的輸出作為數(shù)據(jù)選擇器的 數(shù)據(jù)輸入,兩個(gè)數(shù)據(jù)選擇器的輸出分別為qi, q2。按照上述邏輯構(gòu)成的寄存器組電路寄存器組模塊信號(hào)

5、說(shuō)明:輸入信號(hào):n11.o:讀通道1的寄存器號(hào)n21.0j:讀通道2的寄存器號(hào)nd1.o:寫(xiě)通道的寄存器號(hào)di7.0j:寫(xiě)通道的輸入數(shù)據(jù)clk:時(shí)鐘脈沖信號(hào),上升沿冇效reg_we:寫(xiě)允許,為1吋,在clk上升沿,將數(shù)據(jù)di寫(xiě)入nd指定的寄存器; 為“0”時(shí),禁止對(duì)寄存器陣列進(jìn)行寫(xiě)操作。rst:異步復(fù)位信號(hào),清空所有寄存器的內(nèi)容輸出信號(hào):q1 7.0:輸出nl 1 .0指定寄存器的內(nèi)容q27.o:輸出n21.0指定寄存器的內(nèi)容仿真結(jié)果:clk11iii r1111 di18)(0r70田n1廠(chǎng) _0el n20x2x0a nd0()(0田qi18)(0el q2<ox18dc8x0reg

6、-wereset仿真完成的操作是先向r0寫(xiě)入數(shù)據(jù)18后讀出,然后再向r2寫(xiě)入數(shù)據(jù)8后讀出, 最后執(zhí)行了一個(gè)清零操作2. ram數(shù)據(jù)存儲(chǔ)系統(tǒng)模塊ram數(shù)據(jù)存儲(chǔ)系統(tǒng)容最為256x8,即有256個(gè)存儲(chǔ)單元,地址編碼順序?yàn)?x000xff, 每個(gè)單元可以存放8位二進(jìn)制信息,利用quartusll生成相應(yīng)的模塊如下:ram模塊信號(hào)說(shuō)明如下:輸入信號(hào):address7.o:需要進(jìn)行讀/寫(xiě)操作ram單元的地址data7.o:待寫(xiě)入ram中的數(shù)據(jù)wren:寫(xiě)允許信號(hào),為1時(shí)寫(xiě);為0則讀clock:時(shí)鐘脈沖信號(hào),上升沿將數(shù)據(jù)寫(xiě)入或讀出aclr:異步復(fù)位信號(hào),對(duì)q7.o進(jìn)行清0輸岀信號(hào):q7.o:輸出addres

7、s 7.0指定的ram單元的內(nèi)容仿真結(jié)果如下:ulr1i1田 tddrtsiti)-: 6 )【0】clocks data 田qvreni n r1 11 11 11 1_:14xx8x0:0廠(chǎng)14x8 )ox1波形完成的操作是先向地址1寫(xiě)入14,然后讀出地址1里的數(shù),乂向地址6寫(xiě)入數(shù)據(jù)8, 然后讀出地址6里的數(shù)據(jù),最后執(zhí)行了 一個(gè)清零操作。3. i/o端口及其映射模塊i/o端口是輸入/輸出接口電路中用來(lái)存放輸入輸出設(shè)備的數(shù)據(jù)緩沖器。計(jì)算機(jī)系統(tǒng) 通過(guò)讀寫(xiě)i/o端口的數(shù)據(jù),實(shí)現(xiàn)與外部設(shè)備的數(shù)據(jù)傳送。為了實(shí)現(xiàn)i/o的雙向讀寫(xiě),需 要設(shè)計(jì)基木的三態(tài)門(mén)單元。指令系統(tǒng)屮沒(méi)有肓接對(duì)i/o端口的操作指令,為

8、了實(shí)現(xiàn)用指 令對(duì)i/o的控制,盂要設(shè)計(jì)一個(gè)映射模塊,將指令系統(tǒng)中對(duì)ram存儲(chǔ)單元0x00-0x07 的讀寫(xiě)轉(zhuǎn)換成為對(duì)i/o對(duì)應(yīng)地址的讀寫(xiě)。還需要一個(gè)數(shù)據(jù)選擇器將8個(gè)i/o端口的輸入 選擇輸出。三態(tài)門(mén)由quartusll牛成,如卜-圖所示:8位8選1數(shù)據(jù)選擇器也由quartusll牛成,如下圖所示:sel_8_dataox7.oresult7.o一datalx7.odata2x7.odata3x7.odata4x7.odata5x7.odata6x7.odata7x7.osel2.oinst33映射模塊用vhdl語(yǔ)言寫(xiě)成,代碼如下:library ieee;use ieee.std logic

9、1164.all;use ieee.std logic arith.all;use ieee.std_logic_unsigned.all;entity orm isport ( address : in std_l0gic_vect0r(7 downto 0); we : in std logic;sei : out std_l0gic_vect0r(2 downto 0); i : out std_l0gic_vect0r(7 downto 0);endorm;architecture behave of orm isbeginprocess (address ,we)beginif we

10、='l,thencase address iswhen "00000000,=> l<="00000001,'when n00000001"=> l<="00000010,;when "00000010"=> l<="00000100"when "00000011"=> lv二”00001000”;when "00000100"=> l<="00010000m;when "0000010

11、1"=> lv二”00100000”;when ,00000110"=> l<="01000000,;when "00000111"=> lv二”10000000”; when others=> null;end case;else null;end if;end process;end behave;信號(hào)說(shuō)明:輸入:address7.o:指令中的地址we:寫(xiě)控制信號(hào),為高電平時(shí)將地址譯成對(duì)應(yīng)端口的寫(xiě)有效控制信號(hào)07.0:對(duì)應(yīng)于8個(gè)i/o端口的寫(xiě)控制信號(hào)sel2.o:取address的低3位作為數(shù)據(jù)選擇器的選擇信號(hào)

12、三個(gè)部分z間的連接規(guī)則:將映射模塊給出的寫(xiě)控制信號(hào)分別作為8個(gè)三態(tài)門(mén)的寫(xiě)控制信號(hào),讀信號(hào)作為8 個(gè)三態(tài)門(mén)的讀控制信號(hào),sei作為數(shù)據(jù)選擇器的選擇信號(hào)。根據(jù)以上邏輯連接的i/o模 塊原理圖如下: -ia*封裝后電路圖如下:io_portdin7.odout7.0iaddr7.oi007.0reio17.01weq27.o1q37.o1io47.0io57.0io67.0q77.oinstli/o端口及其映射模塊信號(hào)說(shuō)明:輸入信號(hào):addr7.0j:地址輸入信號(hào)din7.o:寫(xiě)入i/o端口中的數(shù)據(jù)信號(hào)re:讀控制信號(hào),高電平有效we:寫(xiě)控制信號(hào),高電平有效輸出信號(hào)dout7.0j:讀i/o端口時(shí)輸

13、出的數(shù)據(jù)信號(hào)ioead: i/o端口讀控制信號(hào),高電平有效,讀0x000x07存儲(chǔ)單元時(shí)有 效io_write: 1/0端口寫(xiě)控制信號(hào),高電平冇效,寫(xiě)0x000x07存儲(chǔ)單元時(shí)冇 效輸入/輸出信號(hào)1007.0:雙向i/o端口 0的數(shù)據(jù)信號(hào)1017.,0:雙向i/o端口 1的數(shù)據(jù)信號(hào)1027.,0:雙向i/o端口 2的數(shù)據(jù)信號(hào)io37.0:雙向i/o端i丨3的數(shù)據(jù)信號(hào)1047.0:雙向i/o端口 4的數(shù)據(jù)信號(hào)1057.0:雙向i/o端口 5的數(shù)據(jù)信號(hào)1067.0:雙向i/o端口 6的數(shù)據(jù)信號(hào)1077.0:雙向i/o端口 7的數(shù)據(jù)信號(hào)仿真結(jié)果如下:仿真波形截圖如卜一,第一幅圖可以看出在向3號(hào)i/o

14、寫(xiě)入6,然后乂從3號(hào)i/o讀 出2,第二幅圖是結(jié)果+ addr田din田 dout田100s"ioi0 102田103s 104田105田106 107i o_readio write(3xeh(6x2(0x廠(chǎng)(0x廠(chǎng)廠(chǎng)_廠(chǎng)r廠(chǎng)廠(chǎng)rewei o readresuj4. rom程序存儲(chǔ)模塊rom程序存儲(chǔ)系統(tǒng)容屋為256x16,共有256個(gè)存儲(chǔ)單元,地址為oxoooxff,每個(gè) 單元可存放16位二進(jìn)制信息。由quartusti生成如下模塊:ipm rom 256 16address7.o> clockq15.oinst2輸入信號(hào):addrcss7.o: rom單元的地址clock:

15、時(shí)鐘脈沖信號(hào),在時(shí)鐘的上升沿,將選中的rom單元內(nèi)容輸出 輸出信號(hào):q15.o:輸岀address 7.0指定的rom單元的內(nèi)容5. 8位算術(shù)邏輯運(yùn)算器alu模塊8位計(jì)算器能完成的運(yùn)算有7種:”與”、”或'、”比較”、”不帶進(jìn)位加”、”不帶借 位減”、”帶進(jìn)位加”、”帶借位減”,運(yùn)算關(guān)系如下表所示cs3.o運(yùn)算001與010或011不帶進(jìn)位加100不帶進(jìn)位減101帶進(jìn)位加110帶進(jìn)位減111比較根據(jù)以上運(yùn)算關(guān)系,編寫(xiě)vhdl語(yǔ)言代碼如下:library ieee;use ieee.std logic 1164.all;use ieee.std logic arith.all;use i

16、eee.std_logic_unsigned.all;entity alu isport( cs : in std_l0gic_vect0r(2 downto 0);data_a,data_b : in std_l0gic_vect0r(7 downto 0); carryjn : in std_logic;s : out std_l0gic_vect0r(7 downto 0); zerozcarry_out,overflow : out std_logic);end alu;architecture behave of alu isbeginprocess(cs,data_a,data_b

17、,carryjn)variable temp_a,temp_b,pius_temp,temp_carry : std_l0gic_vect0r(8 downto 0);variable s_temp,temp,tempi: std_l0gic_vect0r(7 downto 0);variable t: std_l0gic_vect0r(2 downto 0);begincase cs iswhen "001"=>s_temp:=data_a and data_b;s<=s_temp; carry_out<=,0'overflow<='

18、;0,;when "010"=>s_temp:=data_a or data_b;s<=s_temp; carry_out<=,0,;overflow<='0,;whentemp_a:='o'&data_a;temp_b:o'&data_b; plus_temp:=temp_a+temp_b;s_temp:=plus_temp(7 downto 0);s<=s_temp;carry_out<=plus_temp(8); t:=data_a(7)&data_b(7)&plus_

19、temp(7);if t=u001" or t="lll" then overflowed 1'else overflow<=*0'end if;when "100n=>if data_a<data_b then carry_out<='0'else carry_out<='l'end if;s_temp:=data_a data_b;s<=s_temp;temp:=data_a+data_b;t:=data_a(7)&data_b(7)&temp( 7)

20、;if t="100h or t="100" then overflow<='l'else overflow<=*0'end if;when "101"=>temp_a:='o'&data_a;temp_b:=,o,&data_b;temp_carry:二”00000000“&carry_in; p i u s_te mp:=tem p_a+te m p_b+te m p_ca r ry;s_temp:=plus_temp(7 downto 0);s<=s_

21、temp;carry_out<=plus_temp(8); t:=data_a(7)&data_b(7)&plus_temp(7);if t="001" or t="lll" then overflow<='l'else overflow<='0'end if;when "110"=>if data_a<data_b then carry_out<=,0,;else if data_a=data_b thenif carry_in='o'

22、; then carry_out<='0'else carry_out<='l'end if;else carry_out<='l*;end if;end if;templ:="0000000"&carry_in;s_temp:=data_a-data_b-("00000001"-templ);s<=s_temp;temp:=data_a+data_b+("00000001"-templ);t:=data_a(7)&data_b(7)&temp(7

23、);if t="100h or t=h010" then overflow<='l'else overflow<='0'end if;when ,111"=>if data_a<data_b then s_temp:=”00000001”;else s_temp:=,00000000"end if;s<=s_temp;carry_out<='0,; overflow<='0'when others=>null;end case;if s_temp=&q

24、uot;00000000, then zero<='l' else zero<='0' end if;end process;end behave;封裝后得到:alucs2.os?.oidata_a7.ozerodata_b7.ocarry _outcarrynov erf lowinst輸入信號(hào):data_a7.0> data_b7.o:參與操作的兩個(gè)8位二進(jìn)制數(shù)cs2.o:存放7種運(yùn)算操作的編碼,編碼規(guī)則自定carryjn:參與運(yùn)算的進(jìn)/借位值 輸出信號(hào):s7.o:操作后的8位結(jié)果存放在中,zero:零標(biāo)志 當(dāng) s7.o為 0 時(shí),zero

25、= 1;否則 zero=0;carry_out:進(jìn)位/借位標(biāo)志 當(dāng)加法運(yùn)算過(guò)程最高位有進(jìn)位時(shí),carry_out= 1;否則carry_out=0;當(dāng)減法運(yùn)算最高位產(chǎn)生借位時(shí),carry_out=0;否則,carry_out= 1 overrow:溢出標(biāo)志把參加、減運(yùn)算的過(guò)程看作是符號(hào)數(shù)運(yùn)算吋,當(dāng)結(jié)果產(chǎn)生溢出時(shí), overrow= 1;否則,overrow=0,表示未溢出。仿真結(jié)果:上圖第一幅波形執(zhí)行的操作是兩個(gè)數(shù)的與、或、不帶進(jìn)位加、不帶進(jìn)位減4種操作,第二幅 執(zhí)行兩個(gè)數(shù)的帶進(jìn)位加、帶進(jìn)位減、比較3種運(yùn)算,由圖可見(jiàn)電路邏輯正確6.標(biāo)志寄存器模塊標(biāo)志寄存器與寄存器組中的寄存器功能相似,均可用于

26、存放信息,不同的是標(biāo)志寄 存器用于存放算術(shù)、邏輯運(yùn)算過(guò)程和結(jié)果的一些標(biāo)志信息,如進(jìn)/借位carry>零標(biāo)志位 zero、溢出標(biāo)志位overflow等。編寫(xiě)的vhdl語(yǔ)言如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std logic unsigned.all;entity flag isport( flagin : in std_l0gic_vect0r(7 downto 0);clk : in std_logic;reset: in std_logic;flagout:

27、 out std_l0gic_vect0r(7 downto 0) );end flag;architecture behave of flag isbeginprocess(clk,reset)variable temp : std_l0gic_vect0r(7 downto 0); beginifreset='l'thentemp:=,00000000,'flagout<="00000000,'elseflagout<=temp;if clk'event and clk=1 thentemp:=flagin;end if;end

28、 if;end process;end behave;封裝后如f:flagiflagin7.oflagout7.0clkresetinstl標(biāo)志寄存器模塊信號(hào)說(shuō)明:輸入信號(hào):flagin7.o:寫(xiě)人標(biāo)志寄存器的數(shù)據(jù),如carry、zero> overflow等信息, 每個(gè)標(biāo)志占j位,共3位,其他5位暫時(shí)無(wú)用。clk:寫(xiě)時(shí)鐘脈沖信號(hào),上升沿時(shí),將flagin上的數(shù)據(jù)寫(xiě)入flagout中reset:界步復(fù)位信號(hào),對(duì)標(biāo)志寄存器內(nèi)容清零flagout7.0=0 輸出信號(hào):flagout7.0j:標(biāo)志寄存器的數(shù)據(jù)仿真結(jié)果如下: nnjuinjuuuuuuirlnjinjuuuuijirlruuuu

29、uinjijuuuuulnjuuuuuuuinjin s flagin柯 x"而x )ckq 0【"門(mén)門(mén)門(mén)1 100s flagoutreset由仿真波形可見(jiàn)寄存器的讀寫(xiě)以及清零功能都完成了。7. 控制器單元模塊控制單元的邏輯如下: 當(dāng)op3.o為“0000"或“1000"時(shí),執(zhí)行and或andi; 當(dāng)op3.0為“0001 ”或“ 1001 ”時(shí),執(zhí)行or或ori; 當(dāng)op3.o為“001(f或t01(f或“1011”或“1100”時(shí),執(zhí)行add或addi或lw、sw屮需要的不帶 進(jìn)位加法操作; 當(dāng)op3.0為“0011”或“1101”或“1110”吋

30、,執(zhí)行sub或subi或分支指令bnc、bcq中需要的不 帶進(jìn)位減法操作; 當(dāng)op3.0為“0100”時(shí),執(zhí)行sit (小于則置1)比較操作;當(dāng)op3.0為“01心時(shí),執(zhí)行addc帶進(jìn)位加法操作;當(dāng)op3.0為“0101”時(shí),執(zhí)行subc帶借位減法操作; 當(dāng)op3.o為”1000“或”1001”或t010”或”1011”或”1100”或t101”或t110”時(shí),立即數(shù)指令 控制信號(hào)alusrcb為“1”,其他情況alusrcb為“(t; 當(dāng) o p3.o為 ”0000“ 或”0001 ”或”0010”或”0011 ”或“0100”或”0101 ”或”0110”或” 1000”或 t001”或”

31、1010”或t011”時(shí),寫(xiě)寄存器控制信號(hào)writereg為t,其他情況writereg為o; 為op3.0為“1100"時(shí),寫(xiě)存儲(chǔ)器控制信號(hào)writemem為“1”,否則為“(f;當(dāng)op3.o為“1011”時(shí),memtoreg為t,否則為“0"; 當(dāng)op3.o為“0000”或“0001”或“0010"或“0011”或“0100” 或”010!'或"0110"時(shí),目的寄存 器控制信號(hào)regdes為“1”,目的寄存器是rd;其他情況則為“(f,目的寄存器是rt;當(dāng)op3.,0為t 111叩寸,跳轉(zhuǎn)指令控制信號(hào)jump為t,其他情況為“0”

32、; 當(dāng)op3.0為“1101”且zero為“1”時(shí),或者當(dāng)op3.o為“11 kfuzero為“(t時(shí),分支跳轉(zhuǎn)控 制信號(hào)branch為“廠(chǎng);其他情況卜'branch為“0”。 當(dāng)op3.o為“001(f或“0011”或“0110”或“0101”或“1010"時(shí),標(biāo)志寫(xiě)信號(hào)wrflag為”廠(chǎng); 其他情況wrflag為0。根據(jù)以上邏輯寫(xiě)出vhdl語(yǔ)言程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std logic unsigned.all;entity ct

33、rlunit isport( op : in std_l0gic_vect0r(3 downto 0);zero : in std_logic;jump,branch : out std_logic;aluc: out std_l0gic_vect0r(2 downto 0);alusrcb,writemem,writereg,memtoreg,regdes,wrflag : out std_logic );end ctrlunit;architecture behave of ctrlunit isbeginprocess(op,zero)variable temp : std_l0gic_

34、vect0r(7 downto 0);begincase op iswhen "0000"=> aluc<="001"when h1000"=> aluc<="oo1u;when ”0001”二aluc<="010,'when "1001m=> aluc<=h010"when "0010"=> alucv二”011“;when ”2010”=> alucv二”011”;when二alucv二”011“;when "

35、1100,=>aluc<=,011"when "0011"=> aluc<="100n;when "1101"=> aluloo"when ”1110”二alucv二”100“;when "0100h=> aluc<="111"whenaluc<="101n;when "0101m=>aluc<="110"when othersalucv二”000:end case;if op>7 and

36、op<15 then alusrcb<='1'else alusrcb<=*0'end if;if0p<12 thenif 0p=7 then writereg<='o'else writereg<='1'end if;else writereg<=,0,;end if;if op="hoo" then writemem<='1'else writemem<='o*;end if;if op二t011” then memtoreg<=,

37、1'else memtoreg<=,0,;end if;if op<7 then regdes<='1'else regdes<='o,;end if;if op="0111" then jump<='r;else jump<='o'end if;ifop="1101, thenif zero二 1 then branch®'else branch<='o'end if;else ifop=,1110" thenif zer

38、o=,0, then branchv二t;else branchv二o;end if;else branch<='0'end if;end if;if op=,0010n or op="ooh" or op=“0110“ or op="0101" or op="1010h thenwrflag<='1,;else wrflag<='0'end if;end process;end behave;程序解釋距離: 當(dāng) op3.0為”1000“或”1001”或”1010”或”1011”或”11

39、00”或”1101“或t110”吋,立即數(shù)指 令控制信號(hào)alusrcb為t”,其他情況alusrcb為“0”;在程序中是按如卜-語(yǔ)句實(shí)現(xiàn)的:if op>7 and op<15 then alusrcb<=,1,;else alusrcb<='0,;end if;封裝后如下:仿真波形(部分):zeros aluc alusrcb branch jw memtoregregdes wrflag writehef4 writereg圖中執(zhí)行了&程序指針計(jì)數(shù)器pc模塊計(jì)算機(jī)指令保存在程序存儲(chǔ)器rom中。cpu執(zhí)行指令時(shí),首先要把指令從指令存儲(chǔ)器 屮取出來(lái)。為了取指令,在計(jì)算機(jī)屮除了有保存指令的存儲(chǔ)器外,還需要有保存計(jì)算機(jī) 指令地址的器

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論