香港赛马会官方网六和彩|今期香港赛马会网站

新聞中心

EEPW首頁 > 嵌入式系統 > 牛人業話 > 16位CPU怎么做,DIY大神給你支支招兒

16位CPU怎么做,DIY大神給你支支招兒

作者:時間:2019-03-19來源:電子工程世界收藏

  如何制作一個簡單的16位,首先我們要明確是做什么的,想必各位都比我清楚,百度的資料也很全……

本文引用地址:http://www.rylpcf.shop/article/201903/398604.htm

  如果想要制作一個,首先得明白下計算機的組成結構(或者計算機的替代品,因為并不是只有計算機有CPU,現在的電子產品都很先進,很多設備例如手機、洗衣機甚至電 視和你家的汽車上面都得裝一個CPU),數字電路基礎,還最好有點編程的基礎(當然,沒有也沒關系,這些知識都很容易獲得,各種書上面都會提到,并且在接下來的過程中我會提到這些知識)

  我們要實現的是一個指令集的CPU,并且我們最后要自己為這個CPU設計指令并且編碼。

  首先我們來聽個故事,關于CPU的誕生的故事:

  日本客戶希望英特爾幫助他們設計和生產八種專用集成電路芯片,用于實現桌面計算器。英特爾的工程師發現這樣做有兩個很大的問題。第一,英特爾已經在全力開發 三種內存芯片了,沒有人力再設計八種新的芯片。第二,用八種芯片實現計算器,將大大超出預算成本。英特爾的一個名叫Ted Hoff 的工程師仔細分析了日本同行的設計,他發現了一個現象。這八塊芯片各實現一種特定的功能。當用戶使用計算器時,這些功能并不是同時都需要的。比如,如果用戶需要計算100個數的和,他會重復地輸入一個數,再做一次加法,一共做100次,最后再打印出來。負責輸入、加法和打印的電路并不同時工作。 這樣,當一塊芯片在工作時,其他芯片可能是空閑的。

  Hoff有了一個想法:為什么不能用一塊通用的芯片加上程序來實現幾塊芯片的功能呢?當需要某種功能時,只需要把實現該功能的一段程序代碼(稱為子程序)加載到通用芯片上,其功能與專用芯片會完全一樣。

  經過幾天的思考后,霍夫畫出了計算器的新的體系結構圖,其中包含4塊芯片:一塊通用處理器芯片,實現所有的計算和控制功能;一塊可讀寫內存(RAM)芯片, 用來存放數據;一塊只讀內存(ROM)芯片,用來存放程序;一塊輸入輸出芯片,實現鍵入數據和操作命令、打印結果等等功能。

  看完這個故事后,可以總結:CPU是一種用來代替專用集成電路的器件(這只是我的理解,不同人有不同理解,這個就智者見智了,我在接下來的例子中也會說明我的想法)。

  然后考慮如下這個例子:

  例1-1:

  mov eax,0

  repeat:inc eax

  jmp repeat

  例1-2:

  int main()

  {

  unsigned int i = 0;

  while(1)

  i++;

  }

  例1-3:

16位CPU怎么做,DIY大神給你支支招兒

  可以看到,以上三個例子都產生了一個從0不斷增加的序列,而且前兩個例子會一直加到溢出又從0開始(這個取決于計算機的字長也就是多少位的CPU,eax是 32位寄存器所以必然是加到4294967295然后回0,而后面那個c程序則看不同編譯器和不同平臺不一樣),后面那個例子則看你用的是什么樣的加法器和多少個D觸發器

  那問題就來了,我假設要一個遞減的序列怎么辦呢?前兩個例子很好解釋,我直接改代碼不就得了:

  例2-1:

  mov eax,0

  repeat:dec eax

  jmp repeat

  例2-2:

  int main()

  {

  unsigned int i = 0;

  while(1)

  i--;

  }

  你只需要輕輕敲擊鍵盤,修改了代碼之后,它就會如你所愿的執行。

  但是后面那個例子怎么辦呢?可能你已經想到辦法了:如例2-3所示。

  例2-3:

16位CPU怎么做,DIY大神給你支支招兒

  問題就來了,你在鍵盤上敲兩下可不能改變實際電路!上面(例1-3)中是個加法器,但是跑到這里卻變成了減法器(例2-3)!

  這樣的話,你就得再做一個電路,一個用來算加法,一個用來算減法,可是兩個電路代表你得用更多的電路和芯片,你花的錢就得更多,要是你不能同時使用這兩個電路你就花了兩份錢卻只干了一件事!

  這個問題能被解決嗎?答案是能!

  請看例3:

16位CPU怎么做,DIY大神給你支支招兒

  這個例子中使用了一個加法器一個減法器,沒比上面的電路省(顯然……難道你想用減法器做加法器的功能?不可能吧!當然,加上一個負數的補碼確實就是減去 一個數,但是這里先不考慮這種問題),多了一組多路器,少了一組D觸發器。總的來說,優勢還是明顯的(兩塊電路板和一塊電路板的差別)。

  而sel信號就是用來選擇的(0是遞增,1是遞減)。

  如果我們把sel信號看做“程序”的話,這個電路就像一個“CPU”能根據“程序”執行不同的“操作”,這樣的話,通過“程序”(sel信號),這個電路就能夠實現復用。

  根據上面的結論,我認為(僅僅是個人認為啊~):程序就是硬件電路的延伸!

  而CPU的基本思想,我認為就是這樣的。

  接下來我們就分析CPU的結構和各個部件,然后實現這個CPU。

  什么是單周期CPU,什么是多周期CPU,什么是,什么是CISC

  首先大家得有時鐘的概念:這個問題不好解釋 啊。。。。。。可以理解為家里面的機械鐘,上上電池之后就會滴答滴答走,而它“滴答滴答”的速度就是頻率,滴答一下用的時間就是周期,而人的工作,下班, 吃飯和學習娛樂都是按照時鐘的指示來進行的(熬夜的網癮少年不算),一般來說,時鐘信號都是由晶體振蕩器產生的,0101交替的信號(低電平和高電平)。

  數字電路都需要一個“時鐘”來驅動,就像演奏交響樂的時候需要一個指揮家在前面指揮一樣,所有的人都會跟著指揮的拍子來演奏,就像數字電路中所有的部件都會跟著時鐘節拍工作一樣。

  如下是一個理想的時鐘信號:(注意是理想的)。

16位CPU怎么做,DIY大神給你支支招兒

  當然,實際的時鐘信號可能遠沒有這么理想,可能上升沿是斜的,而且占空比也可能不是50%,有抖動,有偏移(相對于兩個器件),可能因為導線的寄生電容效應變得走形。

  上面那段如果沒聽懂也沒關系~~~反正就是告訴你,實際的時鐘信號測出來肯定沒這么標準。

  而 cpu的工作頻率,是外頻與倍頻的積(cpu究竟怎么算頻率,其實這個我也不太清楚呵呵),因為cpu是通過外部的晶振產生一個時鐘信號,然后再通過內部 的電路(鎖相環),倍頻至需要的頻率。當然,有人問,為什么要這么麻煩呢?直接在電路外邊做個時鐘晶振能產生那么高的時鐘信號就可以了嘛,這個是可以的, 在某些簡單的系統上(例如51單片姬)就是這樣的,但是計算姬的cpu比較復雜,因為一些原因所以必須要做到cpu內。

  下面簡單說一下CPU的兩種指令集:CISC和

  說下我的看法(個人看法,如有錯誤還請高手指正):

  RISC是Reduced Instruction Set Computer,精簡指令集計算機,典型例子是MIPS處理器。

  CISC 是Complex Instruction Set Compute,復雜指令集計算機,典型例子是x86系列處理器(當然現在的x86指令還是當初cisc的指令,但是實際處理器的結構都已經變成了 risc結構了,risc的結構實現流水線等特性比較容易,在計算機前的你如果用的是intel某系列的處理器,則它使用的指令集看上去還是像cisc的 指令,但是實際上你的cpu的結構已經是risc的了)。

  一般CISC的處理器需要用微指令配合運行,而RISC全部是通過硬連線實現的, 也就是說,當cisc的處理器在執行你的程序前,還得先從另外一個rom里面讀出一些數據來“指導”處理器怎么處理你的命令,所以cisc效率比較低,而 risc是完全通過部件和部件之間的連接實現某種功能,極大的提高了工作效率,而且為流水線結構的出現提供了基礎。cisc的寄存器數量較少,指令能夠實 現一些比較特殊的功能,例如8086的一些寄存器:

  ax,bx,cx,dx,si,di等;段寄存器有:cs,ds,es,ss等。相對的指令功能比較特殊,例如xlat將bx中的值作為基地址,al中的值作為偏移,在內存中尋址到的數據送到al當中(以ds為段寄存器)

  而risc的處理器則通用寄存器比較多,而指令的功能可以稍微弱一點,例如:

  以nios嵌入式處理器來說明,nios處理器有32個通用寄存器(r0~r31),而指令功能相對x86的弱一些,而且x86進行內存訪問是直接使用mov指令,nios處理器讀內存用的是load,寫內存用的是store,

  二者響應中斷的方式也不一樣,舉一個典型的例子,x86的處理器將中斷向量表放在了內存的最低地址(0-1023,每個中斷向量占四個字節),能容納256 個中斷(以實模式的8086舉例)響應中斷時,將中斷號對應的地址上的cs和ip的值裝入到cs和ip寄存器而將原來的地址保存,并且保存狀態寄存器然后 進入中斷處理,而risc則擁有一個共同的中斷響應函數,這個函數會根據中斷號找到程序向系統注冊的函數的地址,并且調用這個函數。一般來說而是用的 cisc指令的長度是不定的,例如x86的xor ax,bx對應機器碼是0x31d8、而push ax是0x50、pop cx是0x59。而risc的指令確是定長的,例如32位。


上一頁 1 2 3 下一頁

關鍵詞: CPU RISC

評論


相關推薦

技術專區

關閉
香港赛马会官方网六和彩 甘肃11选5任三技巧稳赚 大乐透近100走势基本走势图表 黑龙江时时10分钟 pk106码滚雪球公式图 11选5数字组合稳赚不赔 中国福彩app 全天pk10 幸运飞艇6码倍投方法 时时彩平买稳赚方法 秒速时时开奖网