計算機組成原理課程設計--一臺模型計算機的設計與調試_第1頁
已閱讀1頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  計算機科學與技術學院</p><p><b>  課程設計報告</b></p><p>  課程名稱: 計算機組成原理 </p><p>  專 業(yè): 計算機科學與技術 </p><p>  班 級: 計算機1004班 </p><p>  學 號

2、: </p><p>  姓 名: </p><p>  指導老師: 老師 </p><p>  日 期: 2013年3月20日 </p><p><b>  目錄</b></p><p><b>  設計題目1<

3、/b></p><p><b>  1.數據格式1</b></p><p><b>  2.指令系統(tǒng)1</b></p><p>  2.1.算術邏輯運算指令1</p><p>  2.2.訪內指令及轉移指令1</p><p>  2.3.輸入輸出指令2<

4、/p><p>  2.4.停機指令2</p><p>  2.5.具體編碼2</p><p><b>  3.數據通路3</b></p><p>  3.1.全局概略圖3</p><p>  3.2.單片機寫控制4</p><p>  3.3.微程序顯示4</

5、p><p>  3.4.指令寄存器5</p><p>  3.5.通用寄存器6</p><p><b>  3.6.運算器7</b></p><p>  3.7.內存和程序計數器8</p><p>  3.8.地址總線顯示9</p><p>  3.9.手動輸入微程序

6、10</p><p>  3.10.單片機寫微程序10</p><p>  3.11.控制存儲器11</p><p>  3.12.指令譯碼12</p><p>  3.13.微地址顯示13</p><p>  3.14.單片機與數據總線輸入14</p><p>  3.15.設計說

7、明14</p><p><b>  4.時序系統(tǒng)15</b></p><p>  4.1.時序系統(tǒng)與起??刂?5</p><p>  4.2.時序波形圖15</p><p>  5.微指令格式16</p><p>  6.微程序控制器17</p><p>  6

8、.1.原理圖17</p><p>  6.2.地址轉移邏輯18</p><p>  7.微程序流程圖19</p><p>  8.微程序代碼表19</p><p><b>  9.設計體會21</b></p><p>  10.參考文獻21</p><p>&l

9、t;b>  11.附錄21</b></p><p>  11.1.單片機寫程序21</p><p>  11.1.微程序編碼轉換程序29</p><p><b>  設計題目</b></p><p>  一臺模型計算機的設計與調試</p><p><b>  1.

10、數據格式</b></p><p><b>  字長:8位</b></p><p><b>  格式:定點整數</b></p><p>  其中: 第7位為符號位,數值表示范圍是:</p><p>  定點整數:-128 ≤X≤127。</p><p><b&

11、gt;  2.指令系統(tǒng)</b></p><p>  指令的類型設計:算術邏輯運算、數據存取、程序控制、輸入輸出,按固定操作碼4位長度進行設計,設計14條指令。</p><p>  2.1.算術邏輯運算指令</p><p>  設計7條算術邏輯運算類指令并用單字節(jié)表示,尋址方式采用寄存器尋址,指令為RR型,其格式如下:</p><p&g

12、t;  其中:OP-CODE為操作碼,Rs為源寄存器,Rd為目的寄存器</p><p>  2.2.訪內指令及轉移指令</p><p>  2條訪問指令:存數(STA)、取數(LDA)</p><p>  2條轉移指令:無條件轉移(JMP)、結果為零或有進位轉移指令(BZC)</p><p><b>  指令格式為:</b&g

13、t;</p><p>  其中:D為位移量(正負均可),M為尋址方式,其定義如下:</p><p>  本模型機選擇變址寄存器Ri為寄存器R2。</p><p>  2.3.輸入輸出指令</p><p><b>  格式如下: </b></p><p>  其中,addr=01 時,選中“INPU

14、T DEVICE”中的開關組作為入設備,addr=10時,選中“OUTPUT DEVICE”中的七段LED數碼塊作為輸出設備。</p><p><b>  2.4.停機指令</b></p><p><b>  格式如下: </b></p><p>  停機指令HALT,用于實現停機操作。</p><p&

15、gt;<b>  2.5.具體編碼</b></p><p><b>  3.數據通路</b></p><p><b>  3.1.全局概略圖</b></p><p>  3.2.單片機寫控制</p><p><b>  3.3.微程序顯示</b></

16、p><p><b>  3.4.指令寄存器</b></p><p><b>  3.5.通用寄存器</b></p><p><b>  3.6.運算器</b></p><p>  3.7.內存和程序計數器</p><p>  3.8.地址總線顯示</p

17、><p>  3.9.手動輸入微程序</p><p>  3.10.單片機寫微程序</p><p>  3.11.控制存儲器</p><p><b>  3.12.指令譯碼</b></p><p>  3.13.微地址顯示</p><p>  3.14.單片機與數據總線輸入&l

18、t;/p><p><b>  3.15.設計說明</b></p><p><b>  4.時序系統(tǒng)</b></p><p>  4.1.時序系統(tǒng)與起??刂?lt;/p><p><b>  4.2.時序波形圖</b></p><p><b>  5.微指

19、令格式</b></p><p><b>  6.微程序控制器</b></p><p><b>  6.1.原理圖</b></p><p>  6.2.地址轉移邏輯</p><p><b>  7.微程序流程圖</b></p><p><

20、b>  8.微程序代碼表</b></p><p><b>  9.設計體會</b></p><p>  這次計算機組成原理課程設計不僅是一個綜合復習課堂知識的過程,而且是一次非常好的鍛煉實踐能力的機會。</p><p>  以前在學習計算機科學與技術這個專業(yè)時,主要是接觸軟件,忽略了很多硬件方面的知識。但是,只有綜合學習和應用

21、計算機軟硬件知識,才能更好和更深層次地理解計算機的工作原理。</p><p>  在課程設計中發(fā)現對學過的一些理論知識的理解還不夠深刻,尤其是一些細節(jié)方面的知識。只是知其然,而不知其所以然,缺乏深入的思考,往往只看到了表面。</p><p>  在課程設計過程中遇到了一些理解不清的知識點。通過看課本,到圖書館借閱相關資料學習,最后加深了對相關知識點的理解,應用到了課程設計中。對一些芯片的具

22、體參數和用法不太熟悉,通過上網搜索,學會了使用這些芯片。</p><p>  通過這次課程設計,我對計算機的組成和工作原理的理解更加深入了。同時,也鍛煉了自己實際分析問題和解決問題的能力,為以后的進一步學習打下了基礎。</p><p><b>  10.參考文獻</b></p><p>  《計算機組成原理》,科學出版社,白中英著。</p

23、><p>  《計算機組成原理與系統(tǒng)結構試驗教程》,西安電子科技大學出版社,楊小龍編著。</p><p>  百度百科中相關芯片資料</p><p><b>  11.附錄 </b></p><p>  11.1.單片機寫程序</p><p>  #include "reg51.h"

24、;</p><p>  #define DELAY_T 4 //延時函數單位時間</p><p>  #define PRO_LONG 16 //程序長度</p><p>  sbit C51_NOT_SW_B=P0^0;//C51單片機寫存儲器控制邏輯</p><p>  sbit WUD_CE0=P1^0;//寫微程序數據

25、片選信號</p><p>  sbit WUD_CE1=P1^1;</p><p>  sbit WUD_CE2=P1^2;</p><p>  sbit MCS0=P1^3;//控制存儲器片選信號</p><p>  sbit MCS1=P1^4;</p><p>  sbit MCS2=P1^5

26、;</p><p>  sbit MOE=P1^6;//控制存儲器讀選通信號</p><p>  sbit MWE=P1^7;//控制存儲器寫選通信號</p><p>  sbit WRITE_TUA=P2^0;//寫微地址轉移邏輯選通信號</p><p>  sbit C51_LDAR=P2^1;//C51寫地址寄存

27、器選通信號</p><p>  sbit WDBUSCE=P2^2;//寫數據總線選通信號</p><p>  sbit C51_CE=P2^3;//C51訪問存儲器片選信號</p><p>  sbit C51_OE=P2^4;//C51讀存儲器選通信號</p><p>  sbit C51_WE=P2^5;//C51寫存儲

28、器選通信號</p><p>  sbit OEUA=P2^6;//C51寫微地址選通信號</p><p>  sbit WEUA=P2^7;//C51鎖存微地址信號</p><p><b>  /*程序注釋</b></p><p><b>  輸入R1=16</b></p>

29、<p><b>  輸出R1=16</b></p><p><b>  內存讀取R0=12</b></p><p><b>  輸出R0=12</b></p><p><b>  自增R0</b></p><p><b>  輸出R0

30、=13</b></p><p>  R0+R1->R1=29</p><p><b>  輸出R1=29</b></p><p><b>  輸出R1=29</b></p><p><b>  清零R0=0</b></p><p>&l

31、t;b>  輸出R0=0</b></p><p><b>  輸出R0=0</b></p><p><b>  輸出R0=0</b></p><p><b>  停機</b></p><p><b>  */</b></p>

32、<p>  char ram[16]={ //程序</p><p>  0x45,//0100 0101 IN R1 //R1=16</p><p>  0x59,//0101 1001 OUT R1 //R1=16</p><p>  0x00,//0000 0000 LAD R0 //R0=[0x0f]=0x12&l

33、t;/p><p>  0x0f,//data_0=[0x0f]=0x12</p><p>  0x58,//0101 1000 OUT R0 //R0=0x12</p><p>  0xb0,//1011 0000 INC R0 //R0=13</p><p>  0x58,//0101 1000 OUT R0 //R0=13 <

34、;/p><p>  0x91,//1001 0001 R0+R1->R1 //R1=16+13=29</p><p>  0x59,//0101 1001 OUT R1 //R1=29</p><p>  0x59,//0101 1001 OUT R1</p><p>  0x70,//0111 0000 CLR R0 //R0=

35、00</p><p>  0x58,//0101 1000 OUT R0 //R0=00</p><p>  0x58,//0101 1000 OUT R0 //R0=00</p><p>  0x58,//0101 1000 OUT R0 //R0=00</p><p>  0x60,//0110 0000 STOP &

36、lt;/p><p>  0x12,//data_0=[0x0f]=0x12 </p><p><b>  };</b></p><p>  char code c2[61]={ //控制存儲器高8位</p><p>  0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,</p>

37、;<p>  0x01,0x01,0x00,0x01,0x00,0x00,0x01,0x95,</p><p>  0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x31,</p><p>  0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,</p><p>  0x00,0x02,0x05,0x

38、01,0x01,0x95,0x00,0x01,</p><p>  0x95,0x95,0x01,0x95,0x01,0x05,0x09,0x01,</p><p>  0x05,0x95,0x01,0x01,0x05,0xb9,0x0d,0x01,</p><p>  0x29,0x01,0x19,0x07,0x06</p><p><

39、;b>  };</b></p><p>  char code c1[61]={ //控制存儲器中8位</p><p>  0x81,0xed,0xc0,0xa0,0xe0,0xe0,0xa0,0xe0,</p><p>  0xed,0xed,0xa0,0x80,0x20,0xa0,0xb6,0xea,</p><p&

40、gt;  0xed,0xed,0xed,0xed,0x10,0x04,0x80,0x9a,</p><p>  0x92,0xa2,0xb2,0xa4,0xa2,0xa4,0x82,0x82,</p><p>  0x90,0x84,0xda,0x80,0x80,0xaa,0xa0,0xbc,</p><p>  0xea,0xaa,0xb4,0x9a,0xa4,0

41、xaa,0xaa,0xaa,</p><p>  0xaa,0x9a,0x9a,0xb4,0xda,0x9a,0x9a,0xa2,</p><p>  0x98,0xa2,0x98,0x0a,0x8a</p><p><b>  };</b></p><p>  char code c0[61]={ //控制存儲

42、器低8位</p><p>  0x08,0x82,0x50,0x04,0xa0,0x06,0x07,0xa0,</p><p>  0x8a,0x8c,0x3b,0x01,0x3c,0x0e,0x0f,0x25,</p><p>  0x83,0x85,0x8d,0xa6,0x01,0x01,0x16,0x01,</p><p>  0x01

43、,0x2a,0x2c,0x32,0x33,0x36,0x08,0x08,</p><p>  0x01,0x01,0x01,0xe4,0x01,0x90,0x27,0x28,</p><p>  0x29,0x90,0x2b,0x01,0x2d,0x2e,0x2f,0x30,</p><p>  0x31,0x01,0x01,0x36,0x01,0x01,0x01,

44、0x08,</p><p>  0x08,0x08,0x08,0x08,0x09</p><p><b>  };</b></p><p><b>  char i;</b></p><p>  void delay(char t) //延時函數,調整延時時間,可看到讀寫過程</p>

45、<p><b>  {</b></p><p>  char i,j,k;</p><p>  for(i=0;i<t;i++)</p><p>  for(j=0;j<t;j++)</p><p>  for(k=0;k<t;k++)</p><p><b&g

46、t;  ;</b></p><p><b>  }</b></p><p>  void init(void) //初始化數據,準備寫入數據</p><p><b>  {</b></p><p>  C51_NOT_SW_B=1;</p><p>  WUD_

47、CE0=1;</p><p>  WUD_CE1=1;</p><p>  WUD_CE2=1; </p><p><b>  MCS0=1;</b></p><p><b>  MCS1=1;</b></p><p><b>  MCS2=1;</b>

48、</p><p><b>  MOE=1;</b></p><p><b>  MWE=1;</b></p><p>  WRITE_TUA=1;</p><p>  C51_LDAR=0;</p><p>  WDBUSCE=1;</p><p>&

49、lt;b>  C51_CE=1;</b></p><p><b>  C51_OE=1;</b></p><p><b>  C51_WE=1;</b></p><p><b>  OEUA=1;</b></p><p><b>  WEUA=0;&

50、lt;/b></p><p><b>  }</b></p><p>  void pre_run(void) //準備運行模型計算機</p><p><b>  {</b></p><p>  C51_NOT_SW_B=0;</p><p>  WUD_CE0=1;

51、</p><p>  WUD_CE1=1;</p><p>  WUD_CE2=1;</p><p><b>  MCS0=0;</b></p><p><b>  MCS1=0;</b></p><p><b>  MCS2=0; </b></

52、p><p><b>  MOE=0;</b></p><p><b>  MWE=1;</b></p><p>  WRITE_TUA=0;</p><p>  C51_LDAR=0;</p><p>  WDBUSCE=1;</p><p><b&

53、gt;  C51_CE=1;</b></p><p><b>  C51_OE=1;</b></p><p><b>  C51_WE=1;</b></p><p><b>  OEUA=1;</b></p><p><b>  WEUA=0;</b

54、></p><p><b>  }</b></p><p>  void write_ram(void) //寫內存</p><p><b>  { </b></p><p><b>  init();</b></p><p>  for(i=0

55、;i<PRO_LONG;i++) </p><p><b>  {</b></p><p><b>  P3=i; </b></p><p>  WDBUSCE=0;</p><p>  C51_LDAR=0;</p><p>  C51_LDAR=1;</p&g

56、t;<p>  delay(DELAY_T);</p><p>  P3=ram[i];</p><p>  WDBUSCE=0;</p><p>  C51_CE=0; </p><p><b>  C51_WE=0;</b></p><p>  delay(DELAY_T

57、);</p><p>  C51_CE=1;</p><p><b>  C51_WE=1;</b></p><p>  delay(DELAY_T); </p><p>  WDBUSCE=1;</p><p>  delay(DELAY_T); </p><p>

58、<b>  } </b></p><p>  P3=0; //地址寄存器清零</p><p>  WDBUSCE=0;</p><p>  C51_LDAR=0;</p><p>  C51_LDAR=1;</p><p><b>  } </b></p>

59、;<p>  void read_ram(void) //讀內存</p><p><b>  {</b></p><p><b>  init();</b></p><p>  for(i=0;i<PRO_LONG;i++)</p><p><b>  {</b

60、></p><p><b>  P3=i; </b></p><p>  WDBUSCE=0;</p><p>  C51_LDAR=0;</p><p>  C51_LDAR=1;</p><p>  delay(DELAY_T);</p><p>  WDBUS

61、CE=1;</p><p>  C51_CE=0;</p><p><b>  C51_OE=0;</b></p><p>  delay(DELAY_T); </p><p>  C51_CE=1;</p><p><b>  C51_OE=1;</b></p&g

62、t;<p>  delay(DELAY_T); </p><p><b>  } </b></p><p>  P3=0; //地址寄存器清零</p><p>  WDBUSCE=0;</p><p>  C51_LDAR=0;</p><p>  C51_LDAR=1

63、;</p><p><b>  } </b></p><p>  void write_m_ram(void) //寫控制存儲器</p><p><b>  { </b></p><p><b>  init();</b></p><p><b&

64、gt;  MCS0=0;</b></p><p>  for(i=0;i<61;i++) </p><p><b>  {</b></p><p><b>  P3=i; </b></p><p><b>  OEUA=0;</b></p>&l

65、t;p><b>  WEUA=0;</b></p><p><b>  WEUA=1;</b></p><p>  P3=c0[i];</p><p>  WUD_CE0=0;</p><p><b>  MOE=1;</b></p><p&g

66、t;<b>  MWE=0; </b></p><p><b>  MWE=1;</b></p><p>  delay(DELAY_T);</p><p>  WUD_CE0=1;</p><p>  delay(DELAY_T); </p><p><b>

67、  } </b></p><p><b>  MCS0=1;</b></p><p><b>  MCS1=0;</b></p><p>  for(i=0;i<61;i++) </p><p><b>  {</b></p><p>

68、<b>  P3=i; </b></p><p><b>  OEUA=0;</b></p><p><b>  WEUA=0;</b></p><p><b>  WEUA=1;</b></p><p>  P3=c1[i];</p>&

69、lt;p>  WUD_CE1=0;</p><p><b>  MOE=1;</b></p><p><b>  MWE=0; </b></p><p><b>  MWE=1;</b></p><p>  delay(DELAY_T);</p>&l

70、t;p>  WUD_CE1=1;</p><p>  delay(DELAY_T); </p><p><b>  } </b></p><p><b>  MCS1=1;</b></p><p><b>  MCS2=0;</b></p><p&

71、gt;  for(i=0;i<61;i++) </p><p><b>  {</b></p><p><b>  P3=i; </b></p><p><b>  OEUA=0;</b></p><p><b>  WEUA=0;</b></

72、p><p><b>  WEUA=1;</b></p><p>  P3=c2[i];</p><p>  WUD_CE2=0;</p><p><b>  MOE=1;</b></p><p><b>  MWE=0; </b></p>

73、<p><b>  MWE=1;</b></p><p>  delay(DELAY_T);</p><p>  WUD_CE2=1;</p><p>  delay(DELAY_T); </p><p><b>  } </b></p><p><b

74、>  MCS2=1;</b></p><p><b>  } </b></p><p>  void read_m_ram(void) //讀控制存儲器</p><p><b>  { </b></p><p><b>  init();</b></

75、p><p><b>  MWE=1;</b></p><p>  for(i=0;i<61;i++) </p><p><b>  {</b></p><p><b>  P3=i; </b></p><p><b>  OEUA=0;&l

76、t;/b></p><p><b>  WEUA=0;</b></p><p><b>  WEUA=1;</b></p><p><b>  MCS0=0;</b></p><p><b>  MCS1=0;</b></p>

77、<p><b>  MCS2=0;</b></p><p>  MOE=0;</p><p>  delay(DELAY_T*1);</p><p><b>  MOE=1;</b></p><p>  delay(DELAY_T*1); </p><p&

78、gt;<b>  }</b></p><p><b>  P3=0; </b></p><p><b>  OEUA=0;</b></p><p><b>  WEUA=0;</b></p><p><b>  WEUA=1; </b&g

79、t;</p><p><b>  } </b></p><p>  void main(void) //主函數</p><p><b>  {</b></p><p>  write_ram(); //寫內存</p><p>  read_ram(); //

80、讀內存</p><p>  write_m_ram(); //寫控制存儲器</p><p>  read_m_ram(); //讀控制存儲器</p><p>  pre_run(); //準備運行</p><p><b>  while(1)</b></p><p><b&g

81、t;  ;</b></p><p><b>  }</b></p><p>  11.1.微程序編碼轉換程序</p><p>  因為需要將許多24位2進制的微程序轉換為16進制的數據寫入控制存儲器,所以用PHP語言編寫自動轉換程序,提高轉換速度和準確度。</p><p><b>  運行效果如下圖

82、:</b></p><p><b>  <?php</b></p><p>  echo "welcome to data change<hr>";</p><p>  function num2_to_num16($str)</p><p><b>  {&l

83、t;/b></p><p>  switch($str)</p><p><b>  {</b></p><p>  case"0000":return '0';</p><p>  case"0001":return '1';</p&g

84、t;<p>  case"0010":return '2';</p><p>  case"0011":return '3';</p><p>  case"0100":return '4';</p><p>  case"0101&q

85、uot;:return '5';</p><p>  case"0110":return '6';</p><p>  case"0111":return '7';</p><p>  case"1000":return '8';</p&

86、gt;<p>  case"1001":return '9';</p><p>  case"1010":return 'a';</p><p>  case"1011":return 'b';</p><p>  case"1100&

87、quot;:return 'c';</p><p>  case"1101":return 'd';</p><p>  case"1110":return 'e';</p><p>  case"1111":return 'f';</p

88、><p>  default:return "<hr>wrong num2<hr>";</p><p><b>  }</b></p><p><b>  }</b></p><p>  $numbers=file_get_contents('numb

89、er.txt');</p><p>  $numbers_array=explode("\n",$numbers); //切開字符串</p><p>  $rs=array();</p><p>  foreach($numbers_array as $v)</p><p><b>  {</b&

90、gt;</p><p>  $v1=substr($v,0,1);</p><p>  if($v1<'0'||$v1>'9')</p><p><b>  ; </b></p><p><b>  else</b></p><p>

91、;  array_push($rs,$v);</p><p><b>  }</b></p><p>  foreach($rs as &$v)</p><p><b>  {</b></p><p>  $mode="/\D/";</p><p>

92、;  $v=preg_replace($mode,'',$v);</p><p><b>  }</b></p><p>  foreach($rs as &$v)//change to num16</p><p><b>  {</b></p><p><b> 

93、 $temp='';</b></p><p>  for($i=0; $i<6; $i++)</p><p>  $temp.=num2_to_num16(substr($v,2+4*$i,4));</p><p>  $v=$temp;</p><p><b>  }</b><

94、/p><p><b>  $i=0;</b></p><p>  $output=array('','','');</p><p>  foreach($rs as $v)</p><p><b>  {</b></p><p> 

95、 if(($i+1)%8==0)</p><p>  $tail='<br>';</p><p><b>  else</b></p><p>  $tail='';</p><p>  $output[0].="0x".substr($v,0,2).&#

96、39;,'.$tail;</p><p>  $output[1].="0x".substr($v,2,2).','.$tail;</p><p>  $output[2].="0x".substr($v,4,2).','.$tail;</p><p><b>  $i+

97、+;</b></p><p><b>  }</b></p><p><b>  $i=2;</b></p><p>  echo "program result=<hr>";</p><p>  foreach($output as &$v)&l

98、t;/p><p><b>  {</b></p><p>  $v="char code c".$i--."[61]={<br>".substr($v,0,-6).'<br>};<br><br>';</p><p><b>  ech

溫馨提示

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

評論

0/150

提交評論