版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 計算機組成原理課程設計報告</p><p> 題 目: 設計一臺嵌入式CISC模型機 </p><p> 院 (系): 計算機科學與工程學院 </p><p> 專 業(yè): 網絡工程 </p><p> 學
2、 號: </p><p> 學生姓名: </p><p> 指導教師: </p><p><b> 目錄</b></p><p> 設計一臺嵌入式CISC模型機選題及
3、要求3</p><p> 課程設計的題目和內容(B類)3</p><p> 課程設計需要完成的內容要求3</p><p> 系統(tǒng)開發(fā)環(huán)境及平臺介紹4</p><p> 嵌入式CISI模型機系統(tǒng)總體設計4</p><p> 嵌入式CISC系統(tǒng)設計模型圖4</p><p>
4、控制器邏輯結構框圖5</p><p> 設計模型機指令系統(tǒng)及指令格式5</p><p> 基本指令及匯編功能介紹5</p><p> 指令格式設計介紹6</p><p> T1、T2、T3、T4與CLR、Q之間的關系圖7</p><p> 微程序控制流程圖8</p><p>
5、; 微程序微指令詳細設計9</p><p> 地址邏輯轉移電路單元9</p><p> 軟件代碼清單設計11</p><p> 微地址寄存器單元aa11</p><p> 控制存儲器單元CONTROM13</p><p> 微命令寄存器單元MCOMMAND15</p><p&
6、gt; 微地址轉換器單元(F1、F2、F3)17</p><p> 微程序操作器單元CROM19</p><p> 算術邏輯運算執(zhí)行單元ALU21</p><p> 狀態(tài)條件寄存器單元LS7422</p><p> 公共寄存器單元LS27323</p><p> 1:2分配器FEN2單元24&l
7、t;/p><p> 3選1數據選擇器MUX3單元25</p><p> 4選1數據選擇器MUX4單元26</p><p> 程序計數器PC單元27</p><p> 主存儲器ROM芯片ROM16單元28</p><p> 時序產生器COUNTER單元29</p><p> 嵌入
8、式CISC模型機頂層電路單元31</p><p> 匯編語言源程序設計31</p><p> 機器語言源程序代碼設計32</p><p> 功能仿真及波形圖結果分析33</p><p> 嵌入式CISC模型機的故障現象分析35</p><p> 課設總結心得體會36</p><
9、p> 設計一臺嵌入式CISC模型機選題及要求</p><p> 課程設計的題目和內容(B類)</p><p> 設計一臺嵌入式CISC模型計算機(采用定長CPU周期、聯(lián)合控制方式),并運行能完成一定功能的機器語言程序進行驗證。</p><p> 要求連續(xù)輸入5個有符號整數(用8位二進制補碼表示,十六進制數輸入)求所有正數的平方和并輸出顯示。</p
10、><p> 說明:①5個有符號數從外部輸入;</p><p> ②一定要使用符號位(比如說SF),并且要使用負的時候轉移(比如 說JS)或不為負的時候轉移(比如說JNS)指令。</p><p> 課程設計需要完成的內容要求</p><p> 完成系統(tǒng)的總體設計,畫出模型機數據通路框圖;</p><p> 設
11、計微程序控制器(CISC模型計算機)的邏輯結構框圖; </p><p> 設計機器指令格式和指令系統(tǒng); </p><p> 設計時序產生器電路; </p><p> 設計所有機器指令的微程序流程圖; </p><p> 設計操作控制器單元;</p><p> 設計模型機的所有單元電路,并用VHDL語言(也可使
12、用GDF文件----圖形描述文件)對模型機中的各個部件進行編程,并使之成為一個統(tǒng)一的整體,即形成頂層電路或頂層文件; </p><p> 由給出的題目和設計的指令系統(tǒng)編寫相應的匯編語言源程序;</p><p> 根據設計的指令格式,將匯編語言源程序手工轉換成機器語言源程序,并將其設計到模型機中的ROM中去;</p><p> 使用EDA軟件進行功能仿真,要保證
13、其結果滿足題目的要求;(其中要利用EDA軟件提供的波形編輯器,選擇合適的輸入輸出信號及中間信號進行調試。)</p><p> 系統(tǒng)開發(fā)環(huán)境及平臺介紹</p><p> EDA軟件(Maxplus版本系列)、Windows操作系統(tǒng)平臺。</p><p> Max+plusⅡ是Altera公司上一代的PLD開發(fā)軟件,Max+plusⅡ界面友好,使用便捷,被譽為業(yè)界
14、最易用易學的EDA軟件。在Max+plusⅡ上可以完成設計輸入、元件適配、時序仿真和功能仿真、編程下載整個流程,它提供了一種與結構無關的設計環(huán)境,使設計者能方便地進行設計輸入、快速處理和器件編程。Maxplus基本使用介紹:Graphic Editor圖形編輯器;Symbol Editor符號編輯器;Text Editor文本編輯器;Waveform Editor波形編輯器;Compiler編譯器;Simulator仿真器;File:P
15、roject:Name建立工程名;Save,Compile,Simulator保存,編譯,仿真;New新建文件;Open打開文件;Create Default Symbol創(chuàng)建當前模塊圖形符號。</p><p> 嵌入式CISI模型機系統(tǒng)總體設計</p><p> 嵌入式CISC系統(tǒng)設計模型圖</p><p><b> 控制器邏輯結構框圖</b
16、></p><p> 設計模型機指令系統(tǒng)及指令格式</p><p> 基本指令及匯編功能介紹</p><p> 說明:對Rs和Rd的規(guī)定:</p><p> 模型機規(guī)定數據的表示采用定點整數補碼表示,單字長為8位,其格式如下:</p><p><b> 指令格式設計介紹</b>&l
17、t;/p><p> ?。?)I/O指令(單字節(jié))</p><p><b> IN輸入指令:</b></p><p><b> OUT輸出指令:</b></p><p> (2)MOV指令(雙字節(jié))</p><p> MUL指令(單字節(jié))</p><p&
18、gt;<b> 乘法指令:</b></p><p> “Rs”為源寄存器,存放的是源操作數 </p><p> “Rd”為目的寄存器,存放的是目的操作數所在的地址</p><p> ?。?)ADD(單字節(jié))</p><p><b> 求和指令:</b></p><p&g
19、t; “Rs”為源寄存器,存放的是源操作數 </p><p> “Rd”為目的寄存器,存放的是目的操作數所在的地址</p><p> ?。?)INC(單字節(jié))</p><p><b> 自加1指令:</b></p><p> ?。?)TEST指令(單字節(jié))</p><p> ?。?)JS、
20、JMP條件轉移指令(雙字節(jié))</p><p> T1、T2、T3、T4與CLR、Q之間的關系圖</p><p><b> 微程序控制流程圖</b></p><p> 微程序微指令詳細設計</p><p> 微指令設計依次從左到右:</p><p> 微地址:(6位) (根據流程圖設計而設
21、計);</p><p> 微命令字段+P字段:25位:包含后繼微地址:(6位)(根據流程圖設計而設計)</p><p> 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0</p><p> LOAD LDPC LDAR LDIR LDRi RD_B RS_B S1 S0 ALU_B
22、 LDAC LDDR WR CS SW_B LED_B LDFR P1 P2 </p><p> 地址邏輯轉移電路單元</p><p> 地址邏輯轉移電路為了實現微地址的多路轉移。</p><p> 微地址寄存器中的觸發(fā)器異步置“1”端低電平有效,與µA4~µA0對應的異步置“1”控制信號SE5~SE1的邏輯表達式為:(µA5
23、的異步置“1”端SE6實際未使用。)其中邏輯表達式如下:</p><p> SE5=FS·P(2)·T4</p><p> SE4=I7·P(1)·T4</p><p> SE3=I6·P(1)·T4</p><p> SE2=I5·P(1)·T4<
24、/p><p> SE1=I4·P(1)·T4</p><p> 地址轉移邏輯電路中異步置“1”信號SE5~SE1表達式的確定與P字段測試時轉移微地址的確定密切相關.地址轉移邏輯電路的實現代碼如下:</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;&
25、lt;/p><p> ENTITY ADDR IS</p><p><b> PORT(</b></p><p> I7,I6,I5,I4:IN STD_LOGIC;</p><p> FS,T4,P1,P2:IN STD_LOGIC;</p><p> SE6,SE5,SE4,SE3,SE
26、2,SE1:OUT STD_LOGIC</p><p><b> );</b></p><p><b> END ADDR;</b></p><p> ARCHITECTURE A OF ADDR IS</p><p><b> BEGIN</b></p>
27、<p><b> SE6<='1';</b></p><p> SE5<=NOT(NOT FS AND P2 AND T4);</p><p> SE4<=NOT(I7 AND P1 AND T4);</p><p> SE3<=NOT(I6 AND P1 AND T4);</p
28、><p> SE2<=NOT(I5 AND P1 AND T4);</p><p> SE1<=NOT(I4 AND P1 AND T4);</p><p><b> END A;</b></p><p> 編譯成功通過之后生成圖形符號,地址轉移邏輯電路就可以使用了。</p><p&g
29、t;<b> 軟件代碼清單設計</b></p><p> 微地址寄存器單元aa</p><p> 由6個MMM器件單元組成:</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> ENTITY MMM
30、 IS</p><p><b> PORT(</b></p><p> SE:IN STD_LOGIC;</p><p> T2:IN STD_LOGIC;</p><p> D:IN STD_LOGIC;</p><p> CLR:IN STD_LOGIC;</p>&
31、lt;p> UA:OUT STD_LOGIC</p><p><b> );</b></p><p><b> END MMM;</b></p><p> ARCHITECTURE A OF MMM IS</p><p><b> BEGIN</b><
32、/p><p> PROCESS(CLR,SE,T2)</p><p><b> BEGIN</b></p><p> IF(CLR='0')THEN</p><p> UA<='0';</p><p> ELSIF(SE='0'
33、;)THEN</p><p> UA<='1';</p><p> ELSIF(T2'EVENT AND T2='1') THEN</p><p><b> UA<=D;</b></p><p><b> END IF;<
34、/b></p><p> END PROCESS;</p><p><b> END A; </b></p><p> 編譯成功后生成MMM元器件,生成微地址寄存器單元aa,如圖所示: </p><p> 控制存儲器單元CONTROM</p><p> LIBRARY IEE
35、E;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY CONTROM IS</p><p>
36、; PORT(ADDR: IN STD_LOGIC_VECTOR(5 DOWNTO 0);</p><p> UA:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);</p><p> D:OUT STD_LOGIC_VECTOR(18 DOWNTO 0)</p><p><b> );</b></p>&
37、lt;p> END CONTROM;</p><p> ARCHITECTURE A OF CONTROM IS</p><p> SIGNAL DATAOUT: STD_LOGIC_VECTOR(24 DOWNTO 0);</p><p><b> BEGIN </b></p><p> PROCESS
38、(ADDR)</p><p><b> BEGIN</b></p><p> CASE ADDR IS </p><p> WHEN "000000" => DATAOUT<="1110011001001111000000010";</p><p> WH
39、EN "000010" => DATAOUT<="1001011001001011010000000";</p><p> WHEN "000011" => DATAOUT<="1000111001001011000000000";</p><p> WHEN "00010
40、0" => DATAOUT<="1000011101001111100000000";</p><p> WHEN "000101" => DATAOUT<="1000001001011111000000110";</p><p> WHEN "000110" =>
41、DATAOUT<="1000111010001111000000000";</p><p> WHEN "000111" => DATAOUT<="1000111001001101000000000";</p><p> WHEN "001000" => DATAOUT<=&q
42、uot;1110011001001111000000011";</p><p> WHEN "001001" => DATAOUT<="1000001001011111000000100";</p><p> WHEN "001010" => DATAOUT<="1110011001
43、001111001100000";</p><p> WHEN "001011" => DATAOUT<="1000010001101111000000101";</p><p> WHEN "001100" => DATAOUT<="100001000110111100001001
44、0";</p><p> WHEN "001101" => DATAOUT<="1000001001101111000010100";</p><p> WHEN "001110" => DATAOUT<="1110011001001111000010101";</p
45、><p> WHEN "001111" => DATAOUT<="1000010001000110000000000";</p><p> WHEN "010010" => DATAOUT<="1000001001011111000010011";</p><p>
46、; WHEN "010011" => DATAOUT<="1000111000001111000000000";</p><p> WHEN "010100" => DATAOUT<="1000111110001111000000000";</p><p> WHEN "
47、010101" => DATAOUT<="0100011001001011000000000";</p><p> WHEN "100000" => DATAOUT<="0100011001001011000000000";</p><p> WHEN "110000" =
48、> DATAOUT<="1000011001001111000000000";</p><p> WHEN OTHERS => DATAOUT<="1000011001001111000000000";</p><p><b> END CASE;</b></p><p>
49、 UA(5 DOWNTO 0)<=DATAOUT(5 DOWNTO 0);</p><p> D(18 DOWNTO 0)<=DATAOUT(24 DOWNTO 6);</p><p> END PROCESS;</p><p> END A; </p><p> 微命令寄存器單元MCOMMAND </p&g
50、t;<p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY MCOM
51、MAND IS</p><p><b> PORT(</b></p><p> T2,T3,T4,I3,I2,I1,I0:IN STD_LOGIC;</p><p> O:IN STD_LOGIC_VECTOR(18 DOWNTO 0);</p><p> P1,P2,LOAD,LDPC,LDAR,LDIR,LD
52、R0,LDR1,LDR2,R0_B,R1_B,R2_B,S1,S0,ALU_B,LDAC,LDDR,WR,CS,SW_B,LED_B,LDFR:OUT STD_LOGIC</p><p><b> );</b></p><p> END MCOMMAND;</p><p> ARCHITECTURE A OF MCOMMAND IS<
53、;/p><p> SIGNAL DATAOUT:STD_LOGIC_VECTOR(18 DOWNTO 0);</p><p><b> BEGIN</b></p><p> PROCESS(T2)</p><p><b> BEGIN</b></p><p> IF(T
54、2'EVENT AND T2='1')THEN</p><p> DATAOUT(18 DOWNTO 0)<=O(18 DOWNTO 0);</p><p><b> END IF;</b></p><p> P2<=DATAOUT(0);</p><p> P1<=DA
55、TAOUT(1);</p><p> LDFR<=DATAOUT(2) AND T4;</p><p> LED_B<=DATAOUT(3);</p><p> SW_B<=DATAOUT(4);</p><p> CS<=DATAOUT(5);</p><p> WR<=DAT
56、AOUT(6)OR(NOT T3);</p><p> LDDR<=DATAOUT(7) AND T4;</p><p> LDAC<=DATAOUT(8) AND T4;</p><p> ALU_B<=DATAOUT(9);</p><p> S0<=DATAOUT(10);</p><
57、p> S1<=DATAOUT(11);</p><p> R2_B<=(DATAOUT(13)OR(NOT I1)OR I0)AND(DATAOUT(12)OR(NOT I3)OR I2);</p><p> R1_B<=(DATAOUT(13)OR(NOT I0)OR I1)AND(DATAOUT(12)OR(NOT I2)OR I3);</p>
58、<p> R0_B<=(DATAOUT(13)OR I1 OR I0)AND(DATAOUT(12)OR I3 OR I2);</p><p> LDR2<=T4 AND DATAOUT(14)AND I1 AND (NOT I0); </p><p> LDR1<=T4 AND DATAOUT(14)AND (NOT I1) AND I0;</
59、p><p> LDR0<=T4 AND DATAOUT(14)AND (NOT I1) AND (NOT I0);</p><p> LDIR<=DATAOUT(15)AND T3;</p><p> LDAR<=DATAOUT(16)AND T3;</p><p> LDPC<=DATAOUT(17)AND T4
60、;</p><p> LOAD<=DATAOUT(18);</p><p> END PROCESS;</p><p><b> END A;</b></p><p> 微地址轉換器單元(F1、F2、F3)</p><p> LIBRARY IEEE;</p><
61、;p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> ENTITY F1 IS</p><p><b> PORT(</b></p><p> UA5,UA4,UA3,UA2,UA1,UA0:IN STD_LOGIC;</p><p> D:OUT STD_LOGIC_VEC
62、TOR(5 DOWNTO 0)</p><p><b> );</b></p><p><b> END F1;</b></p><p> ARCHITECTURE A OF F1 IS</p><p><b> BEGIN</b></p><p&g
63、t; D(5)<=UA5;</p><p> D(4)<=UA4;</p><p> D(3)<=UA3;</p><p> D(2)<=UA2;</p><p> D(1)<=UA1;</p><p> D(0)<=UA0;</p><p>&l
64、t;b> END A;</b></p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> ENTITY F2 IS</p><p><b> PORT(</b></p><p> UA5
65、,UA4,UA3,UA2,UA1,UA0:OUT STD_LOGIC;</p><p> D:IN STD_LOGIC_VECTOR(5 DOWNTO 0)</p><p><b> );</b></p><p><b> END F2;</b></p><p> ARCHITECTURE
66、A OF F2 IS</p><p><b> BEGIN</b></p><p> UA5<=D(5);</p><p> UA4<=D(4);</p><p> UA3<=D(3);</p><p> UA2<=D(2);</p><p&g
67、t; UA1<=D(1);</p><p> UA0<=D(0);</p><p><b> END A;</b></p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> ENTITY F3
68、 IS</p><p><b> PORT(</b></p><p> UA7,UA6,UA5,UA4,UA3,UA2,UA1,UA0:OUT STD_LOGIC;</p><p> D:IN STD_LOGIC_VECTOR(7 DOWNTO 0)</p><p><b> );</b>&
69、lt;/p><p><b> END F3;</b></p><p> ARCHITECTURE A OF F3 IS</p><p><b> BEGIN</b></p><p> UA7<=D(7);</p><p> UA6<=D(6);</p&
70、gt;<p> UA5<=D(5);</p><p> UA4<=D(4);</p><p> UA3<=D(3);</p><p> UA2<=D(2);</p><p> UA1<=D(1);</p><p> UA0<=D(0);</p>
71、<p><b> END A;</b></p><p> 微程序操作器單元CROM</p><p> 由地址轉移邏輯電路單元ADDR、微地址寄存器單元aa、控制存儲器單元CONTROM、微命令寄存器單元組成MCOMMAND等幾部分組成。</p><p> 算術邏輯運算執(zhí)行單元ALU</p><p>
72、 LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY ALU IS</p>
73、<p><b> PORT(</b></p><p> A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> S1,S0:IN STD_LOGIC;</p><p> BCDOUT
74、:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> F: OUT STD_LOGIC</p><p><b> );</b></p><p><b> END ALU;</b></p><p> ARCHITECTURE A OF ALU IS</p
75、><p> SIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p><b> BEGIN</b></p><p> PROCESS(S1,S0)</p><p><b> BEGIN</b></p><p> IF(S1=
76、39;0' AND S0='0')THEN</p><p> BCDOUT<=A+B;</p><p> ELSIF(S1='0' AND S0='1')THEN</p><p> BCDOUT<=A*B;</p><p> ELSIF(S1='1'
77、AND S0='0')THEN</p><p><b> F<=B(7);</b></p><p> ELSIF(S1='1' AND S0='1')THEN</p><p> BCDOUT<=A-1;</p><p><b> END IF;
78、</b></p><p> END PROCESS;</p><p><b> END A;</b></p><p> 狀態(tài)條件寄存器單元LS74</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;<
79、/p><p> ENTITY LS74 IS</p><p><b> PORT(</b></p><p> LDFR:IN STD_LOGIC;</p><p> F:IN STD_LOGIC;</p><p> FS:OUT STD_LOGIC</p><p>&
80、lt;b> );</b></p><p><b> END LS74;</b></p><p> ARCHITECTURE A OF LS74 IS</p><p><b> BEGIN</b></p><p> PROCESS(LDFR)</p><
81、p><b> BEGIN</b></p><p> IF(LDFR'EVENT AND LDFR='1')THEN</p><p><b> FS<=F;</b></p><p><b> END IF;</b></p><p>
82、END PROCESS;</p><p><b> END A;</b></p><p> 公共寄存器單元LS273</p><p> 累加器AC、數據寄存器DR、通用寄存器(R0、R1、R2)、地址寄存器AR</p><p> LIBRARY IEEE;</p><p> USE IE
83、EE.STD_LOGIC_1164.ALL;</p><p> ENTITY LS273 IS</p><p><b> PORT(</b></p><p> D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> CLK:IN STD_LOGIC;</p><
84、p> O:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)</p><p><b> );</b></p><p> END LS273;</p><p> ARCHITECTURE A OF LS273 IS</p><p><b> BEGIN</b></p
85、><p> PROCESS(CLK)</p><p><b> BEGIN</b></p><p> IF(CLK'EVENT AND CLK='1')THEN</p><p><b> O<=D;</b></p><p><b>
86、 END IF;</b></p><p> END PROCESS;</p><p><b> END A;</b></p><p> 1:2分配器FEN2單元</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.
87、ALL;</p><p> ENTITY FEN2 IS</p><p><b> PORT(</b></p><p> WR,LED_B:IN STD_LOGIC;</p><p> X:IN STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> W1,W2:O
88、UT STD_LOGIC_VECTOR(7 DOWNTO 0)</p><p><b> );</b></p><p><b> END FEN2;</b></p><p> ARCHITECTURE A OF FEN2 IS</p><p><b> BEGIN</b>
89、;</p><p> PROCESS(LED_B,WR)</p><p><b> BEGIN</b></p><p> IF(LED_B='0' AND WR='0')THEN</p><p><b> W2<=X;</b></p>&l
90、t;p><b> ELSE</b></p><p><b> W1<=X;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b> END A;</b></
91、p><p> 3選1數據選擇器MUX3單元</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> ENTITY MUX3 IS</p><p><b> PORT(</b></p><p
92、> ID:IN STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> SW_B,CS:IN STD_LOGIC;</p><p> N1,N2:IN STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> EW:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)</p><
93、p><b> );</b></p><p><b> END MUX3;</b></p><p> ARCHITECTURE A OF MUX3 IS</p><p><b> BEGIN</b></p><p> PROCESS(SW_B,CS)</p&
94、gt;<p><b> BEGIN</b></p><p> IF(SW_B='0')THEN</p><p><b> EW<=ID;</b></p><p> ELSIF(CS='0')THEN</p><p><b> E
95、W<=N2;</b></p><p><b> ELSE</b></p><p><b> EW<=N1;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p&g
96、t;<b> END A;</b></p><p> 4選1數據選擇器MUX4單元</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> ENTITY MUX4 IS</p><p><b>
97、 PORT(</b></p><p> C,D,E,F: IN STD_LOGIC;</p><p> X1,X2,X3,X4: IN STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> W: out STD_LOGIC_VECTOR(7 DOWNTO 0)</p><p><b>
98、);</b></p><p><b> END MUX4;</b></p><p> ARCHITECTURE A OF MUX4 IS</p><p> SIGNAL SEL: STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p><b> BEGIN</b&g
99、t;</p><p> SEL<=F&E&D&C;</p><p> PROCESS(SEL)</p><p><b> BEGIN </b></p><p> IF(SEL="1110") THEN --R0_out</p><p&g
100、t;<b> W<=X1;</b></p><p> ELSIF(SEL="1101") THEN --R1_out</p><p><b> W<=X2;</b></p><p> ELSIF(SEL="1011") THEN --R2-out</p&
101、gt;<p><b> W<=X3;</b></p><p> ELSIF(SEL="0111") THEN --ALU_out</p><p><b> W<=X4;</b></p><p><b> ELSE</b></p>&
102、lt;p><b> NULL;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b> END A;</b></p><p><b> 程序計數器PC單元</b><
103、;/p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY
104、 PC IS</p><p><b> PORT(</b></p><p> LOAD,LDPC,CLR:IN STD_LOGIC;</p><p> D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> O:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)<
105、;/p><p><b> );</b></p><p><b> END PC;</b></p><p> ARCHITECTURE A OF PC IS</p><p> SIGNAL QOUT:STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p>
106、;<b> BEGIN</b></p><p> PROCESS(LDPC,CLR,LOAD)</p><p><b> BEGIN</b></p><p> IF(CLR='0')THEN</p><p> QOUT<="00000000"; -
107、-BUS->PC,將pc清0</p><p> ELSIF(LDPC'EVENT AND LDPC='1')THEN</p><p> IF(LOAD='0')THEN</p><p><b> QOUT<=D;</b></p><p><b> EL
108、SE</b></p><p> QOUT<=QOUT+1;--PC+1</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b>
109、 O<=QOUT;</b></p><p><b> END A;</b></p><p> 主存儲器ROM芯片ROM16單元</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p>
110、USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY ROM16 IS</p><p><b> PORT(</b></p><p> DOUT:OUT STD_LOGIC_VECTOR(
111、7 DOWNTO 0);</p><p> ADDR:IN STD_LOGIC_VECTOR(7 DOWNTO 0);</p><p> CS:IN STD_LOGIC</p><p><b> );</b></p><p> END ROM16;</p><p> ARCHITECTU
112、RE A OF ROM16 IS</p><p><b> BEGIN</b></p><p> DOUT<= "10000000" WHEN ADDR="00000000" AND CS='0' ELSE--MOV R0,FB</p><p> "11111011
113、" WHEN ADDR="00000001" AND CS='0' ELSE</p><p> "10000001" WHEN ADDR="00000010" AND CS='0' ELSE--MOV R1,00</p><p> "00000000" WHEN A
114、DDR="00000011" AND CS='0'ELSE</p><p> "01110010" WHEN ADDR="00000100" AND CS='0' ELSE--L1:IN R2</p><p> "10010010" WHEN ADDR="00000
115、101" AND CS='0' ELSE--TEST R2</p><p> "10100000" WHEN ADDR="00000110" AND CS='0' ELSE--JS L2</p><p> "00001010" WHEN ADDR="00000111"
116、; AND CS='0' ELSE</p><p> "10111010" WHEN ADDR="00001000" AND CS='0' ELSE--MUL R2,R2</p><p> "11001001" WHEN ADDR="00001001" AND CS='
117、;0' ELSE--ADD R2,R1</p><p> "11010000" WHEN ADDR="00001010" AND CS='0' ELSE--L2:INC R0</p><p> "10010000" WHEN ADDR="00001011" AND CS='0
118、' ELSE--TEST R0</p><p> "10100000" WHEN ADDR="00001100" AND CS='0' ELSE--JS L1</p><p> "00000100" WHEN ADDR="00001101" AND CS='0' EL
119、SE</p><p> "11110100" WHEN ADDR="00001110" AND CS='0' ELSE--L3:OUT R1</p><p> "11100100" WHEN ADDR="00001111" AND CS='0' ELSE--JMP L3<
120、;/p><p> "00001110" WHEN ADDR="00010000" AND CS='0' ELSE</p><p> "00000000";</p><p><b> END A;</b></p><p> 時序產生器COUNT
121、ER單元</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_ARITH.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>
122、 ENTITY COUNTER IS</p><p><b> PORT(</b></p><p> Q,CLR:IN STD_LOGIC;</p><p> T2,T3,T4:OUT STD_LOGIC</p><p><b> );</b></p><p> E
123、ND COUNTER;</p><p> ARCHITECTURE A OF COUNTER IS</p><p> SIGNAL X:STD_LOGIC_VECTOR(1 DOWNTO 0);</p><p><b> BEGIN</b></p><p> PROCESS(Q,CLR)</p>&
124、lt;p><b> BEGIN</b></p><p> IF(CLR='0')THEN</p><p><b> T2<='0';</b></p><p><b> T3<='0';</b></p><p&
125、gt;<b> T4<='0';</b></p><p><b> X<="00";</b></p><p> ELSIF(Q'EVENT AND Q='1')THEN</p><p><b> X<=X+1;</b>
126、;</p><p> T2<=(NOT X(1)) AND X(0);</p><p> T3<=X(1) AND (NOT X(0));</p><p> T4<=X(1) AND X(0);</p><p><b> END IF;</b></p><p> END
127、 PROCESS;</p><p><b> END A;</b></p><p> 嵌入式CISC模型機頂層電路單元</p><p><b> 匯編語言源程序設計</b></p><p> 機器語言源程序代碼設計</p><p> 功能仿真及波形圖結果分析<
128、/p><p> 從外部輸入5個有符號整數,分別是03、FE(-2)、01、FF(-1)、FB(-5);</p><p> 1、當執(zhí)行MOV R0,FB時,R0為FB(-5),用于計數,每輸入一個就自加1;當執(zhí)行MOV R1,00時,R1為00;輸入第一個數:03,執(zhí)行IN R2指令,R2為03;對應的AR的地址為輸入指令IN的地址:04;PC程序計數器為05,執(zhí)行了5次;微地址的04表示測
129、試目的寄存器的數值的符號位,并鎖存,來判斷是否要執(zhí)行跳轉,對應的指令為TEST Rd。如果是正數就不用跳轉,就接著執(zhí)行下一條指令,如果是負數,就跳轉到對應的目標子程序,執(zhí)行對應的指令。如圖所示:</p><p> 輸入第一個數的結果為09,如圖所示:</p><p> 輸入第二個數FE(-2),存入R2,對應的地址AR為07(輸入指令IN的地址),由于是負數,跳轉到INC執(zhí)行,如圖所示
130、:</p><p> 第一個數03和第二個數FE輸出的結果為09,如圖所示:</p><p> 依次輸入5個有符號整數,分別是03、FE(-2)、01、FF(-1)、FB(-5); 03*03+01*01=0A,正確。結果如圖所示:</p><p> 嵌入式CISC模型機的故障現象分析</p><p> 在設計的過程中,出現過以下問題
131、:</p><p> 第一個問題就是循環(huán)中斷,當R0計數的FB只能加到FD,這就意味著,從外部只能輸入3個數,心想是不是微地址有問題,于是就按照老師的方法從里到外地查找控制存儲器單元CONTROM,一一對應的波形圖和微程序控制設計流程圖,沒發(fā)現什么問題;難道是主存儲器單元ROM16有問題嗎?于是帶著疑問去檢查自己的機器源程序代碼設計,一一對應器件上的VDHL語言,結果發(fā)現,是有一個跳轉有問題,于是對應機器代碼設
132、計,把它修改了過來。再重新生成ROM16主存儲器,再重新生成頂層電路單元,選定當前波形仿真文件,然后模擬仿真測試,結果R0計數的FB可以自加到00了,于是就可以輸入5個有符號整數了。</p><p> 第二個問題就是判斷符號位SF,當每次輸入一個有符號整數存入R2時,這時就需要怎么去判斷它的符號位,才能執(zhí)行下一條指令,我用了測試指令TEST,測試它的最高位,鎖存了它的符號位。但是由于沒有改ALU和ADDR的位置
133、,不管是輸入正數還是負數,它都要去計算平方,這就達不到課設的要求。于是查找資料,ALU的算法不變,在S1=1和S0=0的時候,賦值給FS;這就需要修改ADDR 器件里修改為SE5<=NOT(NOT FS AND P2 AND T4);于是按照步驟重新仿真就可以正確判斷符號位了。</p><p><b> 課設總結心得體會</b></p><p> 對于計算機
134、組成原理課程設計,一開始上第一節(jié)課的時候,聽得一頭霧水,之后以為是一件很簡單的事情,想憑著自己對軟件的熟悉使用和以前做Web的經驗去做。但是實踐下來,發(fā)現里面存在很多問題,比如什么是微地址,什么是微程序,什么是后繼微地址,機器代碼要與什么關聯(lián)起來,控制器產生單元又是什么,一大堆問題暴露在我的面前。于是就去復印店復印了一份計算機組成原理課設教材。一頁一頁地研究,發(fā)現里面的邏輯很清晰,雖然第一次看不懂,但是里面的代碼很直觀,比如算術執(zhí)行單元
135、ALU的幾種運算,需要什么運算就設計什么運算,還有要設置控制信號,與狀態(tài)寄存器關聯(lián),與暫存器關聯(lián),與輸出總線關聯(lián)。按照課本的步驟,首先設計指令系統(tǒng)和指令格式,然后設計匯編及機器代碼,接著設計微程序流程圖和微指令字段,最后生成器件和模擬仿真。最讓我頭疼的是為什么會模擬仿真頻頻會出現循環(huán)中斷,也就是只能輸入兩三個數,又為什么輸入的數不管是正數還是負數,仿真測試都通過了,并且都算了平方和。于是就去檢查匯編,改了又改,還是沒有結果,還沒有改到正
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 組成原理課程設計-設計一臺模型計算機
- 計算機組成原理課程設計--一臺模型計算機的設計與調試
- 計算機組成原理課程設計--一臺模型計算機的設計與調試
- 計算機組成原理課程設計---一臺模型計算機的設計與調試
- 計算機組成原理課程設計---一臺模型計算機的設計與調試
- 計算機組成原理課程設計---一臺模型計算機的設計與調試
- 計算機組成原理課程設計--一臺模型計算機設計與測試
- 計算機組成原理課程設計---一臺模型計算機的設計與調試
- 計算機組成原理課程設計---一臺模型計算機的設計與調試
- 計算機組成原理課程設計--研制一臺性能簡單的實驗計算機
- 計算機組成原理課程設計---模型機組成設計
- 計算機組成原理課程設計---設計求負數平方和的cisc模型計算機
- 計算機組成原理課程設計的實驗報告--設計一臺性能簡單的計算機
- 組成原理課程設計---嵌入式的8位cisc模型機設計
- 計算機組成原理課程設計--模型計算機設計
- 計算機組成原理課程設計--基本模型計算機
- 計算機組成原理課程設計---復雜模型機的設計
- 計算機組成原理課程設計--- 模型機設計
- 組成原理課程設計報告---嵌入式的8位cisc模型機設計
- 《計算機組成原理》課程設計
評論
0/150
提交評論