在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于狀態機的簡易RISC CPU設計

電子工程師 ? 來源:fqj ? 2019-05-06 09:12 ? 次閱讀

一、什么是CPU

CPU即中央處理單元的英文縮寫,它是計算機的核心部件。計算機進行信息處理可分為兩個步驟:

將數據和程序(即指令序列)輸入到計算機的存儲器中。

從第一條指令的地址起開始執行該程序,得到所需結果,結束運行。CPU的作用是協調并控制計算機的各個部件執行程序的指令序列,使其有條不紊地進行。因此它必須具有以下基本功能:

a)取指令:當程序已在存儲器中時,首先根據程序入口地址取出一條程序,為此要發出指令地址及控制信號

b)分析指令:即指令譯碼。是對當前取得的指令進行分析,指出它要求什么操作,并產生相應的操作控制命令。

c)執行指令:根據分析指令時產生的“操作命令”形成相應的操作控制信號序列,通過運算器,存儲器及輸入/輸出設備的執行,實現每條指令的功能,其中包括對運算結果的處理以及下條指令地址的形成。

將其功能進一步細化,可概括如下:

能對指令進行譯碼并執行規定的動作;

可以進行算術和邏輯運算;

能與存儲器,外設交換數據;

提供整個系統所需要的控制;

盡管各種CPU的性能指標和結構細節各不相同,但它們所能完成的基本功能相同。由功能分析,可知任何一種CPU內部結構至少應包含下面這些部件:

算術邏輯運算部件(ALU),

累加器,

程序計數器,

指令寄存器,譯碼器,

時序和控制部件。

RISC即精簡指令集計算機(ReducedInstructionSetComputer)的縮寫。它是一種八十年代才出現的CPU,與一般的CPU相比不僅只是簡化了指令系統,而且是通過簡化指令系統使計算機的結構更加簡單合理,從而提高了運算速度。從實現的途徑看,RISC_CPU與一般的CPU的不同處在于:它的時序控制信號形成部件是用硬布線邏輯實現的而不是采用微程序控制的方式。所謂硬布線邏輯也就是用觸發器和邏輯門直接連線所構成的狀態機和組合邏輯,故產生控制序列的速度比用微程序控制方式快得多,因為這樣做省去了讀取微指令的時間。RISC_CPU也包括上述這些部件,下面就詳細介紹一個簡化的用于教學目的的RISC_CPU的可綜合VerilogHDL模型的設計和仿真過程。

二、RISC CPU結構

RISC_CPU是一個復雜的數字邏輯電路,但是它的基本部件的邏輯并不復雜??砂阉殖砂藗€基本部件:

時鐘發生器

指令寄存器

累加器

RISC CPU算術邏輯運算單元

數據控制器

狀態控制器

程序計數器

地址多路器

其中時鐘發生器利用外來時鐘信號進行分頻生成一系列時鐘信號,送往其他部件用作時鐘信號。各部件之間的相互操作關系則由狀態控制器來控制。下面逐一介紹各部件的具體結構和邏輯關系。

1 時鐘發生器

基于狀態機的簡易RISC CPU設計

時鐘發生器clkgen利用外來時鐘信號clk來生成一系列時鐘信號clk1、fetch、alu_clk送往CPU的其他部件。其中fetch是外來時鐘clk的八分頻信號。利用fetch的上升沿來觸發CPU控制器開始執行一條指令,同時fetch信號還將控制地址多路器輸出指令地址和數據地址。clk1信號用作指令寄存器、累加器、狀態控制器的時鐘信號。alu_clk則用于觸發算術邏輯運算單元。時鐘發生器clkgen的波形見下圖所示:

基于狀態機的簡易RISC CPU設計

其VerilogHDL程序見下面的模塊:

由于在時鐘發生器的設計中采用了同步狀態機的設計方法,不但使clk_gen模塊的源程序可以被各種綜合器綜合,也使得由其生成的clk1、clk2、clk4、fetch、alu_clk在跳變時間同步性能上有明顯的提高,為整個系統的性能提高打下了良好的基礎。

2 指令寄存器

基于狀態機的簡易RISC CPU設計

顧名思義,指令寄存器用于寄存指令。指令寄存器的觸發時鐘是clk1,在clk1的正沿觸發下,寄存器將數據總線送來的指令存入高8位或低8位寄存器中。但并不是每個clk1的上升沿都寄存數據總線的數據,因為數據總線上有時傳輸指令,有時傳輸數據。什么時候寄存,什么時候不寄存由CPU狀態控制器的load_ir信號控制。load_ir信號通過ena口輸入到指令寄存器。復位后,指令寄存器被清為零。每條指令為2個字節,即16位。高3位是操作碼,低13位是地址。(CPU的地址總線為13位,尋址空間為8K字節。)本設計的數據總線為8位,所以每條指令需取兩次。先取高8位,后取低8位。而當前取的是高8位還是低8位,由變量state記錄。state為零表示取的高8位,存入高8位寄存器,同時將變量state置為1。下次再寄存時,由于state為1,可知取的是低8位,存入低8位寄存器中。

其VerilogHDL程序見下面的模塊:

3.累加器

基于狀態機的簡易RISC CPU設計

累加器用于存放當前的結果,它也是雙目運算其中一個數據來源。復位后,累加器的值是零。當累加器通過ena口收到來自CPU狀態控制器load_acc信號時,在clk1時鐘正跳沿時就收到來自于數據總線的數據。其VerilogHDL程序見下面的模塊:

基于狀態機的簡易RISC CPU設計

4.算術運算器

基于狀態機的簡易RISC CPU設計

算術邏輯運算單元根據輸入的8種不同操作碼分別實現相應的加、與、異或、跳轉等8種基本操作運算。利用這幾種基本運算可以實現很多種其它運算以及邏輯判斷等操作。其VerilogHDL程序見下面的模塊:

基于狀態機的簡易RISC CPU設計

5.數據控制器

基于狀態機的簡易RISC CPU設計

數據控制器的作用是控制累加器數據輸出,由于數據總線是各種操作時傳送數據的公共通道,不同的情況下傳送不同的內容。有時要傳輸指令,有時要傳送RAM區或接口的數據。累加器的數據只有在需要往RAM區或端口寫時才允許輸出,否則應呈現高阻態,以允許其它部件使用數據總線。所以任何部件往總線上輸出數據時,都需要一控制信號。而此控制信號的啟、停,則由CPU狀態控制器輸出的各信號控制決定。數據控制器何時輸出累加器的數據則由狀態控制器輸出的控制信號datactl_ena決定。其VerilogHDL程序見下面的模塊:

基于狀態機的簡易RISC CPU設計

6.地址多路器

基于狀態機的簡易RISC CPU設計

地址多路器用于選擇輸出的地址是PC(程序計數)地址還是數據/端口地址。每個指令周期的前4個時鐘周期用于從ROM中讀取指令,輸出的應是PC地址。后4個時鐘周期用于對RAM或端口的讀寫,該地址由指令中給出。地址的選擇輸出信號由時鐘信號的8分頻信號fetch提供。其VerilogHDL程序見下面的模塊:

基于狀態機的簡易RISC CPU設計

7.程序計數器

基于狀態機的簡易RISC CPU設計

程序計數器用于提供指令地址。以便讀取指令,指令按地址順序存放在存儲器中。有兩種途徑可形成指令地址:其一是順序執行的情況,其二是遇到要改變順序執行程序的情況,例如執行JMP指令后,需要形成新的指令地址。復位后,指令指針為零,即每次CPU重新啟動將從ROM的零地址開始讀取指令并執行。每條指令執行完需2個時鐘,這時pc_addr已被增2,指向下一條指令。(因為每條指令占兩個字節。)如果正執行的指令是跳轉語句,這時CPU狀態控制器將會輸出load_pc信號,通過load口進入程序計數器。程序計數器(pc_addr)將裝入目標地址(ir_addr),而不是增2。其VerilogHDL程序見下面的模塊:

基于狀態機的簡易RISC CPU設計

8.狀態控制器

基于狀態機的簡易RISC CPU設計

狀態控制器由兩部分組成:

狀態機(上圖中的MACHINE部分)

狀態控制器(上圖中的MACHINECTL部分)

狀態機控制器接受復位信號RST,當RST有效時通過信號ena使其為0,輸入到狀態機中停止狀態機的工作。狀態控制器的VerilogHDL程序見下面模塊:

基于狀態機的簡易RISC CPU設計

狀態機是CPU的控制核心,用于產生一系列的控制信號,啟動或停止某些部件。CPU何時進行讀指令讀寫I/O端口,RAM區等操作,都是由狀態機來控制的。狀態機的當前狀態,由變量state記錄,state的值就是當前這個指令周期中已經過的時鐘數(從零計起)。指令周期是由8個時鐘周期組成,每個時鐘周期都要完成固定的操作。

第0個時鐘,因為CPU狀態控制器的輸出:rd和load_ir為高電平,其余均為低電平。指令寄存器寄存由ROM送來的高8位指令代碼。

第1個時鐘,與上一時鐘相比只是inc_pc從0變為1故PC增1,ROM送來低8位指令代碼,指令寄存器寄存該8位代碼。

第2個時鐘,空操作。

第3個時鐘,PC增1,指向下一條指令。若操作符為HLT,則輸出信號HLT為高。如果操作符不為HLT,除了PC增一外(指向下一條指令),其它各控制線輸出為零。

第4個時鐘,若操作符為AND、ADD、XOR或LDA,讀相應地址的數據;若為JMP,將目的地址送給程序計數器;若為STO,輸出累加器數據。

第5個時鐘,若操作符為ANDD、ADD或XORR,算術運算器就進行相應的運算;若為LDA,就把數據通過算術運算器送給累加器;若為SKZ,先判斷累加器的值是否為0,如果為0,PC就增1,否則保持原值;若為JMP,鎖存目的地址;若為STO,將數據寫入地址處。

第6個時鐘,空操作。

第7個時鐘,若操作符為SKZ且累加器值為0,則PC值再增1,跳過一條指令,否則PC無變化。

狀態機的VerilogHDL程序見下面模塊:

基于狀態機的簡易RISC CPU設計

9.外圍模塊

為了對RISC_CPU進行測試,需要有存儲測試程序的ROM和裝載數據的RAM、地址譯碼器。下面來簡單介紹一下:

地址譯碼器

基于狀態機的簡易RISC CPU設計

地址譯碼器用于產生選通信號,選通ROM或RAM。FFFFH---1800H RAM1800H---0000H ROM

基于狀態機的簡易RISC CPU設計

ROM用于裝載測試程序,可讀不可寫。RAM用于存放數據,可讀可寫。

三、RISC CPU中各部件的相互連接關系

基于狀態機的簡易RISC CPU設計

四、RISC CPU和它的外圍電路

基于狀態機的簡易RISC CPU設計

五、RISC CPU的尋址方式和指令系統

RISC_CPU的指令格式一律為:

基于狀態機的簡易RISC CPU設計

指令系統僅由8條指令組成:

1)HLT停機操作。該操作將空一個指令周期,即8個時鐘周期。

2)SKZ為零跳過下一條語句。該操作先判斷當前alu中的結果是否為零,若是零就跳過下一條語句,否則繼續執行。

3)ADD相加。該操作將累加器中的值與地址所指的存儲器或端口的數據相加,結果仍送回累加器中。

4)AND相與。該操作將累加器的值與地址所指的存儲器或端口的數據相與,結果仍送回累加器中。

5)XOR異或。該操作將累加器的值與指令中給出地址的數據異或,結果仍送回累加器中。

6)LDA讀數據。該操作將指令中給出地址的數據放入累加器。

7)STO寫數據。該操作將累加器的數據放入指令中給出的地址。

8)JMP無條件跳轉語句。該操作將跳轉至指令給出的目的地址,繼續執行。

RISC_CPU是8位微處理器,一律采用直接尋址方式,即數據總是放在存儲器中,尋址單元的地址由指令直接給出。這是最簡單的尋址方式。

六、RISC CPU的操作和時序

一個微機系統為了完成自身的功能,需要CPU執行許多操作。以下是RISC_CPU的主要操作:

1.系統的復位和啟動操作

2.總線讀操作

3.總線寫操作

下面詳細介紹一下每個操作:

1.系統的復位和啟動操作

RISC_CPU的復位和啟動操作是通過rst引腳的信號觸發執行的。當rst信號一進入高電平,RISC_CPU就會結束現行操作,并且只要rst停留在高電平狀態,CPU就維持在復位狀態。在復位狀態,CPU各內部寄存器都被設為初值,全部為零。數據總線為高阻態,地址總線為0000H,所有控制信號均為無效狀態。rst回到低電平后,接著到來的第一個fetch上升沿將啟動RISC_CPU開始工作,從ROM的000處開始讀取指令并執行相應操作。波形圖如下圖所示。虛線標志處為RISC_CPU啟動工作的時刻。

基于狀態機的簡易RISC CPU設計

RISC_CPU的復位和啟動操作波形

2.總線讀操作

每個指令周期的前0--3個時鐘周期用于讀指令,在狀態控制器一節中已詳細講述,這里就不再重復。第3.5個周期處,存儲器或端口地址就輸出到地址總線上,第4--6個時鐘周期,讀信號rd有效,數據送到數據總線上,以備累加器鎖存,或參與算術、邏輯運算。第7個時鐘周期,讀信號無效,第7.5個周期,地址總線輸出PC地址,為下一個指令做好準備。

基于狀態機的簡易RISC CPU設計

CPU從存儲器或端口讀取數據的時序

3 寫總線操作

每個指令周期的第3.5個時鐘周期處,寫的地址就建立了,第4個時鐘周期輸出數據,第5個時鐘周期輸出寫信號。至第6個時鐘結束,數據無效,第7.5時鐘地址輸出為PC地址,為下一個指令周期做好準備。

基于狀態機的簡易RISC CPU設計

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 指令
    +關注

    關注

    1

    文章

    611

    瀏覽量

    35787
  • 編程
    +關注

    關注

    88

    文章

    3634

    瀏覽量

    93884
  • RISC CPU
    +關注

    關注

    0

    文章

    3

    瀏覽量

    7105

原文標題:基于狀態機的簡易RISC CPU設計(看完你也可以設計CPU了!)

文章出處:【微信號:wc_ysj,微信公眾號:旺材芯片】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Verilog狀態機+設計實例

    在verilog中狀態機的一種很常用的邏輯結構,學習和理解狀態機的運行規律能夠幫助我們更好地書寫代碼,同時作為一種思想方法,在別的代碼設計中也會有所幫助。 一、簡介 在使用過程中我們常說
    的頭像 發表于 02-12 19:07 ?4290次閱讀
    Verilog<b class='flag-5'>狀態機</b>+設計實例

    玩轉Spring狀態機

    說起Spring狀態機,大家很容易聯想到這個狀態機和設計模式中狀態模式的區別是啥呢?沒錯,Spring狀態機就是狀態模式的一種實現,在介紹S
    的頭像 發表于 06-25 14:21 ?989次閱讀
    玩轉Spring<b class='flag-5'>狀態機</b>

    如何寫好狀態機

    如何寫好狀態機:狀態機是邏輯設計的重要內容,狀態機的設計水平直接反應工程師的邏輯功底,所以許多公司的硬件和邏輯工程師面試中,狀態機設計幾乎是必選題目。本章在引入
    發表于 06-14 19:24 ?97次下載

    狀態機舉例

    狀態機舉例 你可以指定狀態寄存器和狀態機狀態。以下是一個有四種狀態的普通狀態機。 // Th
    發表于 03-28 15:18 ?994次閱讀

    狀態機代碼生成工具

    狀態機代碼生成工具狀態機代碼生成工具狀態機代碼生成工具狀態機代碼生成工具
    發表于 11-19 15:12 ?9次下載

    狀態機原理及用法

    狀態機原理及用法狀態機原理及用法狀態機原理及用法
    發表于 03-15 15:25 ?0次下載

    簡述使用QII狀態機向導如何創建一個狀態機

    如何使用QII狀態機向導創建一個狀態機
    的頭像 發表于 06-20 00:11 ?4259次閱讀
    簡述使用QII<b class='flag-5'>狀態機</b>向導如何創建一個<b class='flag-5'>狀態機</b>

    狀態機概述 如何理解狀態機

    本篇文章包括狀態機的基本概述以及通過簡單的實例理解狀態機
    的頭像 發表于 01-02 18:03 ?1.1w次閱讀
    <b class='flag-5'>狀態機</b>概述  如何理解<b class='flag-5'>狀態機</b>

    什么是狀態機 狀態機的描述三種方法

    狀態機 1、狀態機是許多數字系統的核心部件,是一類重要的時序邏輯電路。通常包括三個部分:一是下一個狀態的邏輯電路,二是存儲狀態機當前狀態的時
    的頭像 發表于 11-16 17:39 ?2.7w次閱讀

    FPGA:狀態機簡述

    本文目錄 前言 狀態機簡介 狀態機分類 Mealy 型狀態機 Moore 型狀態機 狀態機描述 一段式
    的頭像 發表于 11-05 17:58 ?7504次閱讀
    FPGA:<b class='flag-5'>狀態機</b>簡述

    什么是狀態機狀態機5要素

    玩單片還可以,各個外設也都會驅動,但是如果讓你完整的寫一套代碼時,卻無邏輯與框架可言。這說明編程還處于比較低的水平,你需要學會一種好的編程框架或者一種編程思想!比如模塊化編程、狀態機編程、分層思想
    的頭像 發表于 07-27 11:23 ?2.1w次閱讀
    什么是<b class='flag-5'>狀態機</b>?<b class='flag-5'>狀態機</b>5要素

    狀態模式(狀態機)

    以前寫狀態機,比較常用的方式是用 if-else 或 switch-case,高級的一點是函數指針列表。最近,看了一文章《c語言設計模式–狀態模式(狀態機)》(來源:embed linux
    發表于 12-16 16:53 ?9次下載
    <b class='flag-5'>狀態</b>模式(<b class='flag-5'>狀態機</b>)

    labview狀態機分享

    labview狀態機
    發表于 10-31 15:50 ?15次下載

    有限狀態機分割設計

    有限狀態機分割設計,其實質就是一個狀態機分割成多個狀態機
    的頭像 發表于 10-09 10:47 ?668次閱讀

    什么是狀態機?狀態機的種類與實現

    狀態機,又稱有限狀態機(Finite State Machine,FSM)或米利狀態機(Mealy Machine),是一種描述系統狀態變化的模型。在芯片設計中,
    的頭像 發表于 10-19 10:27 ?9895次閱讀
    主站蜘蛛池模板: sss欧美华人整片在线观看| 32pao强力打造免费高速高清 | 亚洲视频一| 欧美国产精品主播一区| lsj老司机精品视频在线观看| 亚洲特级aaaaaa毛片| 婷婷五月小说| 秋霞一级特黄真人毛片| 久久综合九色综合97_ 久久久| 国产三级在线观看免费| 夜夜夜夜曰天天天天拍国产 | 久久精品五月天| 国产999星空传媒在线观看| 亚洲第一区精品日韩在线播放| 欧美老汉色| 看大片全色黄大色黄| 黄视频在线观看网站| 四虎成人免费观看在线网址| 美女视频黄视大全视频免费网址| 国产精品天天爽夜夜欢张柏芝| 小雪被撑暴黑人黑人与亚洲女人| 精品一区二区在线观看| 亚洲性视频网站| 天天射综合网站| 毛片毛片免费看| 夜夜夜精品视频免费| 久久天天躁夜夜躁狠狠| 在线视频一区二区三区| 亚洲美女视频一区二区三区| 日本a级免费| 7m视频精品凹凸在线播放| 久热国产在线| 男女性生动态免费视频| 四虎必出精品亚洲高清| 国模啪啪一区二区三区| 色拍拍综合网| 视频在线一区| 日韩免费视频一区二区| 99精品久久久久久久婷婷| 国产精品福利午夜h视频| 国产精品丝袜xxxxxxx|