色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

一個簡單的8位處理器完整設計過程及verilog代碼

FPGA之家 ? 來源:EETOP ? 作者:EETOP ? 2023-04-10 11:43 ? 次閱讀

一個簡單的8位處理器完整設計過程及verilog代碼,適合入門學習參考,并含有作者個人寫的指令執行過程。

1. CPU定義

我們按照應用的需求來定義計算機,本文介紹一個非常簡單的CPU的設計,它僅僅用來教學使用的。我們規定它可以存取的存儲器為64byte,其中1byte=8bits。所以這個CPU就有6位的地址線A[5:0],和8位的數據線D[7:0]。

我們僅定義一個通用寄存器AC(8bits寄存器),它僅僅執行4條指令如下:

Instruction Instruction Code Operation
ADD 00AAAAAA AC<—AC+M[AAAAAA]
AND 01AAAAAA AC<—AC^M[AAAAAA]
JMP 10AAAAAA GOTO AAAAAA
INC 11XXXXXX AC<—AC+1

除了寄存器AC外,我們還需要以下幾個寄存器:

地址寄存器A[5:0],保存6位地址。

程序計數器PC[5:0],保存下一條指令的地址。

數據寄存器D[7:0],接受指令和存儲器來的數據。

指令寄存器IR[1:0],存儲指令操作碼。

2.取指設計

在處理器執行指令之前,必須從存儲器取出指令。其中取指執行以下操作:

1〉通過地址端口A[5:0]從地址到存儲器

2〉等待存儲器準備好數據后,讀入數據。

由于地址端口數據A[5:0]是從地址寄存器中讀出的,所以取指第一個執行的狀態是

Fetch1: AR<—PC

接下來cpu發出read信號,并把數據從存儲器M中讀入數據寄存器DR中。同時pc加一。

Fetch2: DR<—M,PC<—PC+1

接下來把DR[7:6]送IR,把DR[5:0]送AR

Fetch3: IR<—DR[7:6],AR<—DR[5:0]

eaa987dc-d66e-11ed-bfe3-dac502259ad0.png

3.指令譯碼

Cpu在取指后進行譯碼一邊知道執行什么指令,對于本文中的CPU來說只有4條指令也就是只有4個執行例程,狀態圖如下:

eaba69ee-d66e-11ed-bfe3-dac502259ad0.png

4.指令執行

對譯碼中調用的4個例程我們分別討論:

4.1 ADD指令

ADD指令需要CPU做以下兩件事情:

1〉從存儲器取一個操作數

2〉把這個操作數加到AC上,并把結果存到AC

所以需要以下操作:

ADD1:DR<—M

ADD2:AC<—AC+DR

4.2 AND指令

AND指令執行過程和ADD相似,需要以下操作:

AND1:DR<—M

AND2:AC<—AC^DR

4.3 JMP指令

JMP指令把CPU要跳轉的指令地址送PC,執行以下操作

JMP1: PC<—DR[5:0]

4.4INC指令

INC指令執行AC+1操作

INC1: AC<—AC+1

總的狀態圖如下:

eacdc584-d66e-11ed-bfe3-dac502259ad0.png

5 建立數據路徑

這一步我們來實現狀態圖和相應的寄存器傳輸。首先看下面的狀態及對應的寄存器傳輸:

Fetch1: AR<—PC

Fetch2: DR<—M,PC<—PC+1

Fetch3: IR<—DR[7:6],AR<—DR[5:0]

ADD1:DR<—M

ADD2:AC<—AC+DR

AND1:DR<—M

AND2:AC<—AC^DR

JMP1: PC<—DR[5:0]

INC1: AC<—AC+1

為了設計數據路徑,我們可以采用兩種辦法:

1〉創造直接的兩個要傳輸組件之間的直接路徑

2〉在CPU內部創造總線來傳輸不同組件之間的數據

首先我們回顧一下可能發生的數據傳輸,以便確定各個組件的功能。特別的我們要注意把數據載入組件的各個操作。首先我們按照他們改變了那個寄存器的數據來重組這些操作。得到如下的結果:

AR:AR<—PC;AR<—DR[5:0]

PC:PC<—PC+1;PC<—DR[5:0]

DR:DR<—M

IR:IR<—DR[7:6]

AC:AC<—AC+DR;

AC<—AC^DR;

AC<—AC+1

現在我們來看每個操作來決定每個組件執行什么樣的功能,AR,DR,IR三個組件經常從其他的組件載入數據(從總線),所以只需要執行一個并行輸入的操作。PC和AC能夠載入數據同時也能夠自動加一操作。

下一步我們把這些組件連接到總線上來,如圖所示:

eae5e9d4-d66e-11ed-bfe3-dac502259ad0.png

如上圖所示,各個組件與總線之間通過三態連接,防止出現總線競爭。AR寄存器送出存儲器的地址,DR寄存器用于暫存存數起來的數據。到現在為止我們還沒有討論有關的控制信號,我們現在只是保證了所有的數據傳輸能夠產生,我們將在后面章節來使這些數據傳輸正確的產生---控制邏輯。

現在我們來看以下者寫數據傳輸中有沒有不必要的傳輸:

1〉 AR僅僅提供數據給存儲器,所以他不需要連接到總線上。

2〉 IR不通過總線提供數據給任何組件,所以他可以直接輸出到控制單元(后面章節)。

3〉 AC不提供數據到任何的組件,可以不連接到總線上。

4〉總線是8bit寬度的,但是有些傳輸是6bit或者2bit的,我們必須制定寄存器的那幾位送到總線的那幾位。

5〉 AC要可以載入AC和DR的和或者邏輯與的值,數據路徑中還需要進行運算的ALU。

由此我們做以下工作:

1〉去掉AR,IR, AC與總線的連接。

2〉我們約定寄存器連接是從總線的低位開始的。AR,PC連接到Bus[5:0],由于IR是接受DR[7:6]的,所以可以連接到總線的Bus[7:6]。

3〉我們設定,AC作為ALU的一個輸入,另一個輸入來自總線Bus。

下面我們檢查是否有爭用總線的情況,幸運的是這里沒有。修改后的CPU內部組織圖如下:

eaf6059e-d66e-11ed-bfe3-dac502259ad0.png

6. ALU設計

這個CPU的ALU執行的功能就是兩個操作數相加、邏輯與。這里不作詳細介紹。電路如如下:

eb0b8720-d66e-11ed-bfe3-dac502259ad0.png

7. 控制單元

現在我們來考慮如何產生數據路徑所需的控制信號,有兩種方法:硬布線邏輯和為程序控制。這里我們用硬布線邏輯來實現。

這個簡單的CPU需要的控制邏輯由三個部件組成:

1〉計數器:用于保存現在的狀態

2〉譯碼器:生成各個狀態的控制信號

3〉其他的組合邏輯來產生控制信號

一個通用的控制單元原理圖如下:

eb1bd594-d66e-11ed-bfe3-dac502259ad0.png

對于這個CPU來說,一共有9個狀態。所以需要一個4bit的計數器和一個4-16的譯碼器。接下來的工作就是按照前面的狀態轉換圖來對狀態進行賦值。

首先考慮如何的對譯碼輸出狀態進行賦值才能達到最佳狀態。我們按照以下規則:

1〉給Fetch1賦計數器的0值,并用計數器的清零端來達到這個狀態。由這個CPU的狀態圖可以看出,除了Fetch1狀態外的狀態都只能由一個狀態轉化而來,Fetch1需要從4個分支而來,這4個分支就可以發出清零信號(CLR)來轉移到Fetch1。

2〉把連續的狀態賦連續的計數器值,這樣就可以用計數器的INC輸入來達到狀態的轉移。

3〉給每個例程的開始狀態賦值時,要基于指令的操作碼和這個例程的最大狀態數。這樣就可以用操作碼來生成計數器的LD信號達到正確的狀態轉移。首先,在Fetch3狀態發出LD信號,然后要把正確的例程地址放到計數器的輸入端。對這個CPU來說,我們考慮以地址1 [IR] 0作為計數器的預置輸入。則得到狀態編碼如下:

Instruction State IR counter
Fetch Fetch1 0000
Fetch2 0001
Fetch3 0010
ADD ADD1 00 1000
ADD2 00 1001
AND AND1 01 1010
AND2 01 1011
INC INC1 10 1100
JMP JMP1 11 1110

如上表所示,下面我們需要設計產生計數器的LD、INC、CLR等信號,總的控制單元的邏輯如下圖:

eb30203a-d66e-11ed-bfe3-dac502259ad0.png

下面我們用這些譯碼信號來產生數據路徑控制所必需的AR、PC、DR、IR、M和ALU的控制信號。首先考慮寄存器AR,他在Fetch1狀態取PC的值,并在Fetch3狀態取DR[5:0]的值,所以我們得到ARLOAD=Fetch1 or Fetch3。以此類推我們可以得到如下結果:

PCLOAD=JMP1

PCINC=Fetch2

DRLOAD=Fetch1or ADD1 or AND1

ACLOAD=ADD2 or AND2

IRLOAD=Fetch3

對于ALU的控制信號ALUSEL是用來控制ALU做邏輯或者算數運算的,所以有:

ALUSEL=AND2

對于片內總線的控制較為復雜,我們先來看DR,對于DR他只在Fetch3、AND2 、ADD2和JMP1狀態占用總線進行相信的數據傳輸,所以有:

DRBUS=Fetch3 or AND2 or ADD2 or JMP1

其他類似有:

MEMBUS=Fetch2or ADD1 or AND1

PCBUS=Fetch1

最后,控制單元需要產生存儲器的讀信號(READ),它發生在Fetch2、ADD1、AND1三個狀態:

READ=Fetch2or ADD1 or AND1

這樣我們得到了總的控制邏輯,完成了整個CPU的設計。

8.設計驗證

我們執行如下指令進行設計驗證,

0:ADD4

1:AND5

2:INC

3:JMP0

4:27H

5:39H

指令執行過程如下(初始化所有寄存器為全零態):

Instruction State Active Signals Operations Next State
ADD 4 Fetch1 PCBUS、ARLOAD AR<—0 Fetch2
Fetch2 READ、MEMBUS
DRLOAD、PCINC
DR<—04H
PC<—PC+1
Fetch3
Fetch3 DRBUS、ARLOAD
IRLOAD
IR<—00
AR<—04H
ADD1
ADD1 READ、MEMBUS
DRLOAD
DR<—27H ADD2
ADD2 DRBUS、ACLOAD AC<—0+27H Fetch1
AND 5 Fetch1
Fetch2
Fetch3
ADD1
ADD2
INC Fetch1
Fetch2
Fetch3
INC1
JMP 0 Fetch1
Fetch2
Fetch3
JMP1

審核編輯:湯梓紅

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

    關注

    68

    文章

    19259

    瀏覽量

    229653
  • 寄存器
    +關注

    關注

    31

    文章

    5336

    瀏覽量

    120230
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110075
  • 指令
    +關注

    關注

    1

    文章

    607

    瀏覽量

    35694
  • 代碼
    +關注

    關注

    30

    文章

    4779

    瀏覽量

    68524

原文標題:一個簡單的8位處理器完整設計過程及verilog代碼

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    新戰局,解析64位處理器以及未來發展趨勢

    就目前而言,64位處理器對于用戶來說,并沒有太大的意義。不過在未來,或許手機真的需要8GBRAM甚至更高的RAM時,64位處理器及系統應用才能真正得到性能上的發揮,讓用戶真正的體驗到64位處理
    發表于 10-03 13:30 ?1654次閱讀

    32嵌入式處理器8位處理器應用開發的區別

    32的RISC嵌入式處理器非常大的優勢,為嵌入式設計帶來豐富的硬件功能和額外的性能,已經成為嵌入式應用和設計的主流。而8位處理器通常受到的64K軟件限制也不存在了,設計者幾乎可以任意
    發表于 09-22 10:42 ?1569次閱讀

    詳細解析32嵌入式處理器8位處理器應用開發的不同之處

    目前,國內熟悉8位處理器開發的工程師非常多,開發工具和手段也很豐富,并且價格較低。而32位處理器的開發與8位處理器的開發則有著許多明顯的不同
    的頭像 發表于 02-07 09:14 ?8494次閱讀

    32位處理器可以裝64系統嗎 32位處理器能否裝64系統分析

    32位處理器可以裝64系統嗎?從技術角度看,32位處理器是不能裝64系統的,因為不支持,不確定的用戶可以使用下面的兩種方法來檢查32位處理器
    發表于 06-28 09:57

    32位處理器的開發與8位處理器的開發有哪些明顯的不同?

    32位處理器的開發與8位處理器的開發有哪些明顯的不同?開發32的嵌入式系統需要哪些工具和環
    發表于 04-19 08:11

    何謂32位處理器

    32位處理器首先處理器都是8的倍數:8/16/32/64。表示時鐘周期里,
    發表于 07-13 08:41

    Intel 32位處理器 ,Intel 32位處理器結構原理

    Intel 32位處理器 ,Intel 32位處理器結構原理是什么? 微型計算機中的運算和控制合起來稱為CPU,因CPU通常集成在
    發表于 03-26 15:05 ?1982次閱讀

    Intel 64位處理器,Intel 64位處理器結構原理

    Intel 64位處理器,Intel 64位處理器結構原理 現在人們廣泛使用的是由32處理器構成的計算系統,但是32的計算和操作系統
    發表于 03-26 15:07 ?3305次閱讀

    AMD 32位處理器,AMD 32位處理器有哪些系列?

    AMD 32位處理器,AMD 32位處理器有哪些系列? AMD,這個成立于1969年、總部位于美國加利福尼亞州桑尼維爾的處理器廠商,經過多年不懈地
    發表于 03-26 15:14 ?4209次閱讀

    8位處理器上實現高效文件系統

    8位處理器上實現fat fat12 fat16 fat32的高效文件系統
    發表于 12-30 15:37 ?0次下載

    華清遠見FPGA代碼-使用函數實現簡單的八位處理器

    華清遠見FPGA代碼-使用函數實現簡單的八位處理器
    發表于 10-27 18:07 ?4次下載

    “硬件軟件化”,32位處理器的開發與8位處理器的開發資料下載

    電子發燒友網為你提供“硬件軟件化”,32位處理器的開發與8位處理器的開發資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案
    發表于 04-22 08:55 ?6次下載
    “硬件軟件化”,32<b class='flag-5'>位處理器</b>的開發與<b class='flag-5'>8</b><b class='flag-5'>位處理器</b>的開發資料下載

    到底64位處理器和32位處理器有什么區別呢?資料下載

    電子發燒友網為你提供到底64位處理器和32位處理器有什么區別呢?資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 04-25 08:47 ?8次下載
    到底64<b class='flag-5'>位處理器</b>和32<b class='flag-5'>位處理器</b>有什么區別呢?資料下載

    VisualDSP++3.5 16位處理器加載手冊

    VisualDSP++3.5 16位處理器加載手冊
    發表于 05-11 17:11 ?2次下載
    VisualDSP++3.5 16<b class='flag-5'>位處理器</b>加載<b class='flag-5'>器</b>手冊

    適用于16位處理器的VisualDSP++3.5入門指南

    適用于16位處理器的VisualDSP++3.5入門指南
    發表于 05-18 12:50 ?9次下載
    適用于16<b class='flag-5'>位處理器</b>的VisualDSP++3.5入門指南
    主站蜘蛛池模板: 动漫美女禁区图| 欧美国产一区二区三区激情无套| 国产精品私人玩物在线观看| 东莞桑拿美女| 国产精品久久久久无码AV色戒 | 337p啪啪人体大胆| 97免费视频在线| 大学生高潮无套内谢视频| 国产传媒18精品A片在线观看| 国产亚洲一区在线| 久久中文字幕亚洲| 欧美最猛12teevideos| 色琪琪久久热在线| 亚洲九九精品| 中文中幕无码亚洲在线| WWWXXXX兽交| 国产免费看黄的私人影院| 亚洲女人网| 夜夜国产亚洲视频香蕉| 最新国产av.在线视频| 波多野结衣教师系列6| 国产欧美第一页| 久久综合九色综合国产| 青青久久久| 亚洲精品久久久一区| 2020精品国产视| 国产白丝精品爽爽久久蜜臀| 极品少妇高潮啪啪无码吴梦| 免费乱理伦片在线观看夜| 四虎免费影院| 中文字幕精品在线观看| 动漫美女禁区图| 久久久96| 色综合伊人色综合网站中国| 一边啪啪的一边呻吟声口述 | 国产AV精品白浆一区二| 寂寞夜晚看免费视频| 欧美在线视频一区| 亚洲免费综合色视频| h版动漫在线播放的网站| 国内外成人免费在线视频|