計(jì)算機(jī)組成原理課設(shè)論文_第1頁
計(jì)算機(jī)組成原理課設(shè)論文_第2頁
計(jì)算機(jī)組成原理課設(shè)論文_第3頁
計(jì)算機(jī)組成原理課設(shè)論文_第4頁
計(jì)算機(jī)組成原理課設(shè)論文_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、計(jì)算機(jī)組成原理課程設(shè)計(jì)題 目: 計(jì)算機(jī)原理課程設(shè)計(jì) 學(xué) 院: 計(jì)算機(jī)科學(xué)與工程學(xué)院 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 姓 名: 孤狼 學(xué) 號(hào): 1100310315 指導(dǎo)教師: 2014年03月 20 日目錄一.課程設(shè)計(jì)選題和完成內(nèi)容2二、系統(tǒng)的總體設(shè)計(jì)22.1 嵌入式cisc模型機(jī)的數(shù)據(jù)通路框圖22.2 系統(tǒng)的操作控制器的邏輯框圖22.3模型機(jī)的指令格式32.4編寫匯編源程序52.5最終機(jī)器碼.5三、時(shí)序產(chǎn)生器5四、 微程序控制器的設(shè)計(jì)64.1設(shè)計(jì)微指令流程圖64.2 設(shè)計(jì)微指令格式和微指令代碼表84.3設(shè)計(jì)地址轉(zhuǎn)移邏輯電路10五、單元電路設(shè)計(jì)105.1模型機(jī)頂層電路設(shè)計(jì).115.2模型機(jī)crom

2、單元電路設(shè)計(jì).12六、設(shè)計(jì)過程所遇到的問題及解決記錄136.1jns無法完成循環(huán)跳轉(zhuǎn).136.2 sto( sto r2 (r0) )存儲(chǔ)位置每次都為00h.13七、測(cè)試及結(jié)果分析錯(cuò)誤!未定義書簽。八、心得體會(huì)總結(jié)16九、附錄16 各個(gè)單元的電路設(shè)計(jì)或vhdl源文件36一.課程設(shè)計(jì)選題和完成內(nèi)容選題:本設(shè)計(jì)選擇題目為a類第一題題目:設(shè)計(jì)一臺(tái)嵌入式cisc模型計(jì)算機(jī) 采用定長cpu周期、聯(lián)合控制方式,并運(yùn)行能完成一定功能的機(jī)器語言源程序進(jìn)行驗(yàn)證,機(jī)器語言源程序功能如下: a類(最高成績?yōu)椤皟?yōu)”): 輸入包含5個(gè)整數(shù)(有符號(hào)數(shù))的數(shù)組m,輸出所有負(fù)數(shù)的平方和。(非卓越班) 輸入包含5個(gè)整數(shù)(有符號(hào)

3、數(shù))的數(shù)組m,輸出最大負(fù)數(shù)的絕對(duì)值。(非卓越班) 輸入包含10個(gè)整數(shù)(無符號(hào)數(shù))的數(shù)組m,輸出眾數(shù)(出現(xiàn)次數(shù)最多的數(shù))及其出現(xiàn)的次數(shù)。(卓越班) 輸入包含10個(gè)整數(shù)(無符號(hào)數(shù))的數(shù)組m,輸出中位數(shù)。(卓越班) 說明:a類題目的嵌入式模型計(jì)算機(jī)內(nèi)必須設(shè)計(jì)和使用ram存儲(chǔ)器讀寫數(shù)據(jù),相應(yīng)地需要設(shè)計(jì)對(duì)ram存儲(chǔ)器數(shù)據(jù)的讀寫指令,以及對(duì)ram中數(shù)組操作必須的寄存器間接尋址方式等。 b類(最高成績?yōu)椤傲肌保?輸入5個(gè)整數(shù)(有符號(hào)數(shù)),輸出所有負(fù)數(shù)的平方和。(非卓越班) 輸入5個(gè)整數(shù)(有符號(hào)數(shù)),輸出最大負(fù)數(shù)的絕對(duì)值。(非卓越班) 輸入5個(gè)整數(shù)(有符號(hào)數(shù)),輸出它們的平均值,以及小于此平均值的數(shù)的個(gè)數(shù)。

4、(卓越班) 要完成的內(nèi)容:1. 完成系統(tǒng)的總體設(shè)計(jì),畫出模型機(jī)數(shù)據(jù)通路框圖;2. 設(shè)計(jì)微程序控制器(cisc模型計(jì)算機(jī))的邏輯結(jié)構(gòu)框圖; 3. 設(shè)計(jì)機(jī)器指令格式和指令系統(tǒng); 4. 設(shè)計(jì)時(shí)序產(chǎn)生器電路; 5. 設(shè)計(jì)所有機(jī)器指令的微程序流程圖; 6. 設(shè)計(jì)操作7. 的所有單元電路,并用vhdl語言(也可使用gdf文件-圖形描述文件)8. 對(duì)模型機(jī)中控制器單元;設(shè)計(jì)模型機(jī)的各個(gè)部件進(jìn)行編程,并使之成為一個(gè)統(tǒng)一的整體,即形成頂層電路。9. 由給出的題目和設(shè)計(jì)的指令系統(tǒng)編寫相應(yīng)的匯編語言源程序;9. 根據(jù)設(shè)計(jì)的指令格式,將匯編語言源程序手工轉(zhuǎn)換成機(jī)器語言源程序,并將其設(shè)計(jì) 到模型機(jī)中的 rom中去; 1

5、0. 使用eda軟件進(jìn)行功能仿真,要保證其結(jié)果滿足題目的要求;(其中要利用eda軟 件提供的波形編輯器,選擇合適的輸入輸出信號(hào)及中間信號(hào)進(jìn)行調(diào)試。)二、系統(tǒng)的總體設(shè)計(jì)2.1 嵌入式cisc模型機(jī)的數(shù)據(jù)通路框圖 圖2-12.2 系統(tǒng)的操作控制器的邏輯框圖2.3模型機(jī)的指令格式這里,計(jì)算機(jī)數(shù)據(jù)通路的控制將由微程序控制器來完成,cpu從內(nèi)存中取出一條機(jī)器指令到指令執(zhí)行結(jié)束的一個(gè)指令周期全部由微指令組成的序列來完成,即一條機(jī)器指令對(duì)應(yīng)一個(gè)微程序。 此模型的系統(tǒng)共設(shè)計(jì)了共有10 條指令,分別為:in,mov,lad,sto,inc,jns, add,mul, out,test。2.3.1具體指令格式如下

6、:微地址助記符號(hào)指令格式指令功能15-1211 109 87 -0000001mov rd,im0001xxrdim立即數(shù)imrd000010int rd0010xxrdxx將輸入數(shù)據(jù)存到rd寄存器000011sto rs,(rd)0011rsrdxx(rs)->(rd)將rs的內(nèi)容存到rd地址中000100inc rd0100xxrdxx(rd)+1rd鎖存sf和zf000101dec rd0101xxrdxx(rd)-1rd鎖存sf和zf000110test rd0110xxrdxx 測(cè)試 (rd)是否為負(fù),鎖存sf000111jns addr0111xxxxaddr若不為負(fù)數(shù),則a

7、ddrpc001000lad(rs),rd1000rsrdxx(rs)->rd 將rs地址的內(nèi)容讀到rd 001001mul rs rd1001rsrdxx(rs)*(rd)->rd001010add rs,rd1010rsrdaddr(rs)+(rd)->rd001011out rs1011rsxxxx(rs)outbus 2.3.2對(duì)rs和rd的規(guī)定:rs或rd選定的寄存器0 0r00 1r1 1 0r2 1 1 r3 2.3.3模型機(jī)規(guī)定數(shù)據(jù)的表示采用定點(diǎn)整數(shù)補(bǔ)碼表示,單字長為8位,其格式如下: 7 6 5 4 3 2 1 0符號(hào)位 尾數(shù) 2.4編寫匯編源程序我們要實(shí)現(xiàn)

8、的功能是對(duì)連續(xù)輸入的5個(gè)數(shù)據(jù)并存儲(chǔ)到ram的連續(xù)的存儲(chǔ)單元中,然后再從ram中將這5個(gè)數(shù)據(jù)依次讀取出來并作判斷是否為數(shù),將5個(gè)數(shù)中所有的負(fù)數(shù)其求平方和,并對(duì)其結(jié)果進(jìn)行顯示等功能,從而得到一個(gè)簡單的復(fù)雜指令模型機(jī)所實(shí)現(xiàn)的功能和結(jié)果/根據(jù)要求編寫如下匯編源程序:mov r0,00h ;數(shù)據(jù)存放在ram中的地址mov r1,4h ;計(jì)數(shù) 從4h(4)開始,到-1時(shí)結(jié)束 l1: int r2 ;輸入一個(gè)數(shù)到r2sto r2,(r0) ;將輸入的數(shù)存放到ram的(r0)地址inc r0 ;ram地址指針+1dec r1 ;計(jì)數(shù)-1test r1 ;測(cè)試計(jì)數(shù)是否到達(dá)5次,(r1)是否為負(fù)數(shù)jns l1 ;

9、根據(jù)sf符號(hào)標(biāo)志的判斷,若不為負(fù)數(shù),則跳轉(zhuǎn) mov r0 00h ;當(dāng)5個(gè)數(shù)輸入存儲(chǔ)完成后,重新初始化ram指針mov r1 4h ;重置計(jì)數(shù) l2: lad (r0) r2 ;將(r0)地址的數(shù)取出送到r2中test r2 ;測(cè)試取出的數(shù)是否為負(fù)數(shù) jns l3 ;若不為負(fù)數(shù),則跳轉(zhuǎn)到l3mul r2,r2 ;若為負(fù)數(shù),則求平方 add r2,r3 ;再求平方和,把結(jié)果送到r3 l3: inc r0 ;ram地址+1 dec r1 ;計(jì)數(shù)-1+tst r1 ;測(cè)試計(jì)數(shù)是否到達(dá)5次,(r1)是否為負(fù)數(shù)jns l2 ;為正數(shù),計(jì)數(shù)還不到5次,則跳轉(zhuǎn)到l2 out r3 ;計(jì)數(shù)到達(dá)5次,則將最后結(jié)

10、果輸出2.5 最終機(jī)器碼為:地址助記符(匯編)機(jī)器代碼作用00 mov r0,00h0001000000000000數(shù)據(jù)存放在ram中的地址00h開始01 mov r1,4h0001000100000100計(jì)數(shù) 從4h(4)開始,到-1時(shí)結(jié)束02l1:int r20010001000000000輸入一個(gè)數(shù)到r203 sto r2,(r0)0011100000000000將輸入的數(shù)存放到ram的(r0)地址04 inc r00100000000000000ram地址指針+105 dec r10101000100000000計(jì)數(shù)-106 test r10110000100000000測(cè)試計(jì)數(shù)是否到

11、達(dá)5次,(r1)是否為負(fù)數(shù),鎖存sf07 jns l1 0111000000000010根據(jù)sf符號(hào)標(biāo)志的判斷,若不為負(fù)數(shù),則跳轉(zhuǎn)08 mov r0,00h0001000000000000當(dāng)5個(gè)數(shù)輸入存儲(chǔ)完成后,重新初始化ram指針09 mov r1,4h0001000100000100重置計(jì)數(shù)0al2:lad(r0),r21000001000000000將(r0)地址的數(shù)取出送到r2中0b test r20110001000000000測(cè)試取出的數(shù)是否為負(fù)數(shù),鎖存sf0c jns l30111000000001111若不為負(fù)數(shù),則跳轉(zhuǎn)到l30d mul r2,r210011010000000

12、00若為負(fù)數(shù),則求平方0e add r2,r31010101100000000再求平方和,把結(jié)果送到r30fl3:inc r00100000000000000ram地址+110 dec r10101000100000000計(jì)數(shù)-1+11 test r10110000100000000測(cè)試計(jì)數(shù)是否到達(dá)5次,(r1)是否為負(fù)數(shù),鎖存sf12 jns l20111000000001010為正數(shù),計(jì)數(shù)還不到5次,則跳轉(zhuǎn)到l213 out r31011110000000000計(jì)數(shù)到達(dá)5次,則將最后結(jié)果輸出三時(shí)序產(chǎn)生器 t1、t2、t3、t4與clr、q之間的關(guān)系圖如下:四微程序控制器的設(shè)計(jì) 微程序控制器

13、的設(shè)計(jì)過程包括: (1)根據(jù)微處理器結(jié)構(gòu)圖、指令格式和功能設(shè)計(jì)所有機(jī)器指令的微程序流程圖,并確定每 條微指令的微地址和后繼微地址; (2)設(shè)計(jì)微指令格式和微指令代碼表; (3)設(shè)計(jì)地址轉(zhuǎn)移邏輯電路; (4)設(shè)計(jì)微程序控制器中的其它邏輯單元電路,包括微地址寄存器、微命令寄存器和控制 存儲(chǔ)器; (5)設(shè)計(jì)微程序控制器的頂層電路(由多個(gè)模塊組成)。4.1設(shè)計(jì)微指令流程圖根據(jù)微處理器結(jié)構(gòu)圖、指令格式和功能設(shè)計(jì)所有機(jī)器指令的微程序流程圖,并確定每條微指令的微地址和后繼微地址; 00pc->abus( i ) ,rd romibus->ir ,pc +1 p(1 )mov int sto in

14、c dec test jns lad mul add out 01 02 03 04 05 06 07 08 09 0a 0brd->yy+1->rd鎖存sf,zf測(cè)試rd的最高位,鎖存到sf中rs->xrd->yx*y->rd鎖存sf,zfrs->xrd->yx+y ->rd鎖zf,sfrom->busbus->pcir(a)->rdsw->rdrd->arrs->arrd->yy+1->rd鎖存sf,zf 0e 0c rd ramdbus->rdp(2)00rs->dbuswe ra

15、m 00 00 00 00 00 00 00 00 sf=1 sf=0 00 10ir(a)->rd 00 004.2 設(shè)計(jì)微指令格式和微指令代碼表指令流程圖設(shè)計(jì)完成后,開始設(shè)計(jì)微指令格式和微指令代碼表,按照要求,cisc模型機(jī)系統(tǒng)使用的微指令采用全水平型微指令,字長為26位,其中微命令字段為18位,p字段為2位,后繼微地址為6位,其格式如下:按照此格式并根據(jù)設(shè)計(jì)的指令流程圖,可以得到:由微指令格式和微程序流程圖編寫的微指令代碼表如下所示,在微指令的代碼表中微命令字段從左邊到右代表的微命令信號(hào)依次為:load、ldpc、ldar、ldir、ldri、ldpsw、rs_b、s2、s1、s0

16、、alu_b、sw_b、led_b、rd_b、cs_b、ram_b、cs_i、addr_b。clrloadldpc功能0xx將pc清010bus->pc110不裝入,不計(jì)數(shù)11pc+1s2s1s0功能000x+y,修改zf,sf010y+1,修改zf,sf011y-1,修改zf,sf111x*y,修改zf,sf1000&y,修改zf,sf110->y4.3設(shè)計(jì)地址轉(zhuǎn)移邏輯電路地址轉(zhuǎn)移邏輯電路是根據(jù)微程序流程圖中的棱形框部分及多個(gè)分支微地址,利用微地址寄存器的異步置“1”端,實(shí)現(xiàn)微地址的多路轉(zhuǎn)移。地址轉(zhuǎn)移邏輯電路中異步置“1”信號(hào)se6se1表達(dá)式的確定與p字段測(cè)試時(shí)轉(zhuǎn)移微地

17、址的確定密切相關(guān).由于微地址寄存器中的觸發(fā)器異步置“1”端低電平有效,與µa4µa0對(duì)應(yīng)的異步置“1”控制信號(hào)se5se1的邏輯表達(dá)式為:(µa5的異步置“1”端se6實(shí)際未使用)se6 <= '1'se5 <= not(not(sf) and p2 and t4);se4 <= not(i4 and p1 and t4);se3 <= not(i3 and p1 and t4);se2 <= not(i2 and p1 and t4);se1 <= not(i1 and p1 and t4);五、單元電路設(shè)計(jì)設(shè)

18、計(jì)模型機(jī)中的所有單元電路,并用vhdl語言(也可使用gdf文件-圖形描述文件)對(duì)模型機(jī)中的各個(gè)部件進(jìn)行編程,并使之成為一個(gè)統(tǒng)一的整體,即形成頂層電路或頂層文件。具體設(shè)計(jì)方法見附錄。重點(diǎn)設(shè)計(jì)單元電路為:cr0m,alu,rom.crom內(nèi)部重點(diǎn)單元:countrom,addr,mcommand5.1模型機(jī)(頂層)電路:5.2模型機(jī)crom單元電路:六.設(shè)計(jì)測(cè)試過程所遇到的問題及解決記錄6.1 jns (jns l2jns l3)無法實(shí)現(xiàn)循環(huán)跳轉(zhuǎn) 問題所在:沒有認(rèn)真注意到p測(cè)試的返回地址與指令ir->pc地址的關(guān)系,開始時(shí)隨便設(shè)置了ir->pc的地址問題解決:后來了解到改地址與p(2)

19、測(cè)試相關(guān),改為010000后,跳轉(zhuǎn)成功。6.2 sto( sto r2 (r0) )存儲(chǔ)位置每次都為00h 問題所在:sto指令中開啟addr_b,關(guān)alu_b,導(dǎo)致取地址來自于rom內(nèi)的機(jī)器碼后八位addr,該機(jī)器碼后八位為00h。 問題解決:微指令中關(guān)addr_b,開alu_b,alu設(shè)置直接輸出y,此時(shí)y值來源于(r0),即為目的地址。七、測(cè)試及結(jié)果分析根據(jù)設(shè)計(jì)的匯編程序和對(duì)應(yīng)的機(jī)器代碼,對(duì)設(shè)計(jì)的模型機(jī)進(jìn)行仿真測(cè)試,并分析結(jié)果:7.1下圖顯示了ram地址的初值設(shè)置00h,循環(huán)計(jì)數(shù)設(shè)置04h,第一個(gè)循環(huán)讀入40h至r2并存進(jìn)ram的過程。 7.2下圖截取了其中3個(gè)循環(huán),分別讀進(jìn)數(shù)40h,f

20、ch,feh.7.3下圖為5次循環(huán)后讀進(jìn)的5個(gè)數(shù),如圖從地址00h開始存放。7.4下圖為一次從ram中讀取負(fù)數(shù),并計(jì)算平方并加到r3的過程7.5下圖為3個(gè)負(fù)數(shù)從ram中讀取判斷,求得平方并求和的過程。fc*fc+fe*fe+ff*ff=15h.九、心得體會(huì)通過課程設(shè)計(jì)的學(xué)習(xí)設(shè)計(jì)過程,我從對(duì)cisc模型機(jī)的組成和工作原理毫不了解,到慢慢的獨(dú)立設(shè)計(jì)完成,并實(shí)現(xiàn)了預(yù)期功能。這次課程設(shè)計(jì)我學(xué)會(huì)altera max+plus eda軟件的使用,熟悉了vhdl語言,并能使用其進(jìn)行期間的編程,當(dāng)然,也能用圖形描述文件(.gdf)進(jìn)行頂層電路的設(shè)計(jì)。最終能用eda軟件設(shè)計(jì)一個(gè)能完成一定功能的模型計(jì)算機(jī),并通過

21、功能仿真和在eda實(shí)驗(yàn)平臺(tái)上運(yùn)行一個(gè)程序來驗(yàn)證模型機(jī)設(shè)計(jì)的正確性。在設(shè)計(jì)的過程中,我了解了每個(gè)機(jī)器碼,每個(gè)微指令的作用,懂得模型機(jī)的原理。此次的課程設(shè)計(jì)讓我收獲的不單單有課程的知識(shí),也學(xué)會(huì)了自主學(xué)習(xí)、學(xué)會(huì)了細(xì)心解決問題,培養(yǎng)了自己做事的耐心活認(rèn)真的態(tài)度,培養(yǎng)了調(diào)試糾錯(cuò)的良好素養(yǎng),更有的就是加強(qiáng)了自己的實(shí)踐動(dòng)手能力。 十、附錄(vhdl源文件)8.1rom的設(shè)計(jì)(保存匯編源代碼對(duì)應(yīng)的機(jī)器碼以及地址)程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned

22、.all;entity rom isport(dout:out std_logic_vector(15 downto 0);addr:in std_logic_vector(7 downto 0);cs_i:in std_logic);end rom;architecture a of rom isbegindout <="0001000000000000" when addr="00000000" and cs_i = '0' else-mov r0,10h "0001000100000100" when ad

23、dr="00000001" and cs_i = '0' else-mov r1,4h "0010001000000000" when addr="00000010" and cs_i = '0' else-l1:int r2 "0011100000000000" when addr="00000011" and cs_i = '0' else-sto r2,(r0) "0100000000000000" when addr=&

24、quot;00000100" and cs_i = '0' else-inc r0 "0101000100000000" when addr="00000101" and cs_i = '0' else-dec r1 "0110000100000000" when addr="00000110" and cs_i = '0' else-test r1"0111000000000010" when addr="00000111&q

25、uot; and cs_i = '0' else-jns l1 "0001000000000000" when addr="00001000" and cs_i = '0' else-mov r0 10h "0001000100000100" when addr="00001001" and cs_i = '0' else-mov r1 4h "1000001000000000" when addr="00001010" and

26、 cs_i = '0' else-l2:lad(r0) r2 "0110001000000000" when addr="00001011" and cs_i = '0' else-test r2 "0111000000001111" when addr="00001100" and cs_i = '0' else-jns l3 "1001101000000000" when addr="00001101" and cs_i =

27、 '0' else-mul r2,r2 "1010101100000000" when addr="00001110" and cs_i = '0' else-add r2,r3 "0100000000000000" when addr="00001111" and cs_i = '0' else-l3:inc r0 "0101000100000000" when addr="00010000" and cs_i = '

28、0' else-dec r1 "0110000100000000" when addr="00010001" and cs_i = '0' else-test r1 "0111000000001010" when addr="00010010" and cs_i = '0' else-jns l2 "1011110000000000" when addr="00010011" and cs_i = '0' else-ou

29、t r3 "0000000000000000"end a;8.2 alu(運(yùn)算器)library ieee;use ieee.std_logic_1164.all;1use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity alu isport( x: in std_logic_vector(7 downto 0); y: in std_logic_vector(7 downto 0); s2,s1,s0: in std_logic; aluout: out std_logic_vector(7

30、downto 0) ; sf: out std_logic );end alu;architecture a of alu issignal aa,bb,temp:std_logic_vector(8 downto 0);begin process begin if(s2='0' and s1='0' and s0='0') then-add aa<='0'&x; bb<='0'&y; temp<=aa+bb; aluout<=temp(7 downto 0); sf<

31、=temp(7); elsif(s2='0' and s1='1' and s0='0') then -inc aa<='0'&y; temp<=aa+1; aluout<=temp(7 downto 0); sf<=temp(7); elsif(s2='0' and s1='1' and s0='1') then -dec aa<='0'&y; temp<=aa-1; aluout<=temp(7 downt

32、o 0); sf<=temp(7);elsif(s2='1' and s1='1' and s0='1') then-mulaa<='0'&x;bb<='0'&y;temp<=aa*bb;aluout<=temp(7 downto 0);elsif(s2='1' and s1='0' and s0='0') then-testaa<='0'&y;sf<=aa(7); elsif(s2=&

33、#39;1' and s1='1' and s0='0') then -rd->bus aluout<=y; else aluout<="00000000" ; sf<='0' end if; end process;end a;8.3狀態(tài)條件寄存器只保留了用到的sflibrary ieee;use ieee.std_logic_1164.all;entity psw isport( s,ldpsw: in std_logic; sf: out std_logic );end psw;archi

34、tecture a of psw isbegin process(ldpsw) begin if(ldpsw'event and ldpsw='1') then sf<=s; end if; end process;end a;8.4微程序控制器內(nèi)部結(jié)構(gòu):( 1 ) 地址轉(zhuǎn)移邏輯電路程序:library ieee;use ieee.std_logic_1164.all;entity addr isport(i4,i3,i2,i1: in std_logic;sf,p2,p1,t4: in std_logic;se6,se5,se4,se3,se2,se1: out

35、 std_logic);end addr;architecture a of addr isbeginse6 <= '1'se5 <= not(not(sf) and p2 and t4);se4 <= not(i4 and p1 and t4);se3 <= not(i3 and p1 and t4);se2 <= not(i2 and p1 and t4);se1 <= not(i1 and p1 and t4);end a;(2)微地址寄存器微地址寄存器uar的內(nèi)部結(jié)構(gòu):程序:library ieee;use ieee.std_logi

36、c_1164.all;entity mmm isport(se,t2,d,clr: in std_logic;ua: out std_logic);end mmm;architecture a of mmm isbeginprocess(clr,se,t2)beginif(clr='0') thenua <= '0'elsif(se='0') thenua <= '1'elsif(t2'event and t2='1') thenua <= d;end if;end process;(3)

37、微地址轉(zhuǎn)換器f1程序:library ieee; use ieee.std_logic_116 all; entity f1 is port( ua5,ua4,ua3,ua2,ua1,ua0:in std_logic; d:out std_logic_vector(5 downto 0) ); end f1; architecture a of f1 is begin d(5)<=ua5; d(4)<=ua4; d(3)<=ua3; d(2)<=ua2; d(1)<=ua1; d(0)<=ua0; end a;(4) 控制存儲(chǔ)器程序:library ieee

38、;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity countrom isport(addr: in std_logic_vector(5 downto 0); ua:out std_logic_vector(5 downto 0); d:out std_logic_vector(19 downto 0) );end countrom;architecture a of countrom issignal dataout: std_logic_vecto

39、r(25 downto 0);begin process begin case addr is when "000000" => dataout<="11010010001111110110000000"-op->ir pc+1when "000001" => dataout<="10001010001111111000000000"-movwhen "000010" => dataout<="1000101000101111110000000

40、0"-intwhen "000011" => dataout<="10100011100111111100001110"-stowhen "000100" => dataout<="10001110100111111100000000"-incwhen "000101" => dataout<="10001110110111111100000000"-decwhen "000110" => dataout

41、<="10000111000111111100000000"-testwhen "000111" => dataout<="10000010001111111101000000"-jnswhen "001000" => dataout<="10100000001111111100001100"-ladwhen "001001" => dataout<="10001111110111111100000000"-mul

42、when "001010" => dataout<="10001110000111111100000000"-addwhen "001011" => dataout<="10000000001101111100000000"-outwhen "001100" => dataout<="10001010001111001100000000"-rdram,dbus-rdwhen "010000" => dataout&

43、lt;="01000010001111111000000000"-ir-pcwhen "001110" => dataout<="10000000001110011100000000"-weram,dbus-ramwhen others => dataout<="11010011111111110110000000" end case; ua(5 downto 0)<=dataout(5 downto 0); d(19 downto 0)<=dataout(25 downto 6

44、); end process;end a;(5)微命令寄存器程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity mcommand isport( t2,t3,t4:in std_logic; d:in std_logic_vector(19 downto 0); load,ldpc,ldar,ldir,ldri,ldpsw,rs_b,s2,s1,s0:out std_logic; alu_b,sw_b,led_b,rd_d,

45、cs_d,ram_b,cs_i,addr_b,p1,p2:out std_logic );end mcommand;architecture a of mcommand issignal dataout:std_logic_vector(19 downto 0);begin process(t2) begin if(t2'event and t2='1') then dataout(19 downto 0)<=d(19 downto 0); end if; load<=dataout(19); ldpc<=dataout(18) and t4; lda

46、r<=dataout(17) and t3; ldir<=dataout(16) and t3; ldri<=dataout(15) and t4; ldpsw<=dataout(14) and t4; rs_b<=dataout(13); s2<=dataout(12); s1<=dataout(11); s0<=dataout(10); alu_b<=dataout(9); sw_b<=dataout(8); led_b<=dataout(7); rd_d<=not(not dataout(6) and (t2 or

47、t3); cs_d<=not(not dataout(5) and t3); ram_b<=dataout(4); cs_i<=dataout(3); addr_b<=dataout(2); p1<=dataout(1); p2<=dataout(0); end process;end a;(6)微地址轉(zhuǎn)換器f2 程序:library ieee;library ieee;use ieee.std_logic_1164.all;entity f2 is port( d:in std_logic_vector(5 downto 0); ua5,ua4,ua3,u

48、a2,ua1,ua0: out std_logic );end f2;architecture a of f2 isbegin ua5<=d(5); ua4<=d(4); ua3<=d(3); ua2<=d(2); ua1<=d(1); ua0<=d(0);end a;(7)指令代碼轉(zhuǎn)換器f3程序:library ieee;use ieee.std_logic_1164.all;entity f3 is port( d:in std_logic_vector(3 downto 0); ua3,ua2,ua1,ua0: out std_logic );end

49、f3;architecture a of f3 isbegin ua3<=d(3); ua2<=d(2); ua1<=d(1); ua0<=d(0);end a;8.5寄存器單元程序:library ieee;use ieee.std_logic_1164.all;entity ls273 isport(d:in std_logic_vector(7 downto 0);o: out std_logic_vector(7 downto 0);clk: in std_logic);end ls273;architecture a of ls273 isbeginproce

50、ss(clk)beginif(clk'event and clk='1')then o<=d;end if;end process;end a;8.6 1:2分配器library ieee;use ieee.std_logic_1164.all;entity fen2 isport(led_b:in std_logic;dbus:in std_logic_vector(7 downto 0);fenout,outbus:out std_logic_vector(7 downto 0);end fen2;architecture a of fen2 isbegin process begin if(led_b='0') then outbus<=dbus; else fenout<=dbus; end if; end process;end a;8.6 選擇器(1) 3選1數(shù)據(jù)選擇器librar

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論