一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

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

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

1. CPU定義

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

我們僅定義一個通用寄存器AC(8bits寄存器),它僅僅執(zhí)行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位地址。

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

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

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

2.取指設(shè)計

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

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

2〉等待存儲器準(zhǔn)備好數(shù)據(jù)后,讀入數(shù)據(jù)。

由于地址端口數(shù)據(jù)A[5:0]是從地址寄存器中讀出的,所以取指第一個執(zhí)行的狀態(tài)是

Fetch1: AR<—PC

接下來cpu發(fā)出read信號,并把數(shù)據(jù)從存儲器M中讀入數(shù)據(jù)寄存器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在取指后進行譯碼一邊知道執(zhí)行什么指令,對于本文中的CPU來說只有4條指令也就是只有4個執(zhí)行例程,狀態(tài)圖如下:

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

4.指令執(zhí)行

對譯碼中調(diào)用的4個例程我們分別討論:

4.1 ADD指令

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

1〉從存儲器取一個操作數(shù)

2〉把這個操作數(shù)加到AC上,并把結(jié)果存到AC

所以需要以下操作:

ADD1:DR<—M

ADD2:AC<—AC+DR

4.2 AND指令

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

AND1:DR<—M

AND2:AC<—AC^DR

4.3 JMP指令

JMP指令把CPU要跳轉(zhuǎn)的指令地址送PC,執(zhí)行以下操作

JMP1: PC<—DR[5:0]

4.4INC指令

INC指令執(zhí)行AC+1操作

INC1: AC<—AC+1

總的狀態(tài)圖如下:

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

5 建立數(shù)據(jù)路徑

這一步我們來實現(xiàn)狀態(tài)圖和相應(yīng)的寄存器傳輸。首先看下面的狀態(tài)及對應(yīng)的寄存器傳輸:

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

為了設(shè)計數(shù)據(jù)路徑,我們可以采用兩種辦法:

1〉創(chuàng)造直接的兩個要傳輸組件之間的直接路徑

2〉在CPU內(nèi)部創(chuàng)造總線來傳輸不同組件之間的數(shù)據(jù)

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

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

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

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

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

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

現(xiàn)在我們來看以下者寫數(shù)據(jù)傳輸中有沒有不必要的傳輸:

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

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

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

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

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

由此我們做以下工作:

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

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

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

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

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

6. ALU設(shè)計

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

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

7. 控制單元

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

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

1〉計數(shù)器:用于保存現(xiàn)在的狀態(tài)

2〉譯碼器:生成各個狀態(tài)的控制信號

3〉其他的組合邏輯來產(chǎn)生控制信號

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

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

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

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

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

2〉把連續(xù)的狀態(tài)賦連續(xù)的計數(shù)器值,這樣就可以用計數(shù)器的INC輸入來達到狀態(tài)的轉(zhuǎn)移。

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

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

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

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

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

PCLOAD=JMP1

PCINC=Fetch2

DRLOAD=Fetch1or ADD1 or AND1

ACLOAD=ADD2 or AND2

IRLOAD=Fetch3

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

ALUSEL=AND2

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

DRBUS=Fetch3 or AND2 or ADD2 or JMP1

其他類似有:

MEMBUS=Fetch2or ADD1 or AND1

PCBUS=Fetch1

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

READ=Fetch2or ADD1 or AND1

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

8.設(shè)計驗證

我們執(zhí)行如下指令進行設(shè)計驗證,

0:ADD4

1:AND5

2:INC

3:JMP0

4:27H

5:39H

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

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

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19748

    瀏覽量

    232966
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5402

    瀏覽量

    122869
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1364

    瀏覽量

    111539
  • 指令
    +關(guān)注

    關(guān)注

    1

    文章

    614

    瀏覽量

    36141
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4882

    瀏覽量

    70050

原文標(biāo)題:一個簡單的8位處理器完整設(shè)計過程及verilog代碼

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

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    新戰(zhàn)局,解析64位處理器以及未來發(fā)展趨勢

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

    32嵌入式處理器8位處理器應(yīng)用開發(fā)的區(qū)別

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

    詳細解析32嵌入式處理器8位處理器應(yīng)用開發(fā)的不同之處

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

    32位處理器可以裝64系統(tǒng)嗎 32位處理器能否裝64系統(tǒng)分析

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

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

    32位處理器的開發(fā)與8位處理器的開發(fā)有哪些明顯的不同?開發(fā)32的嵌入式系統(tǒng)需要哪些工具和環(huán)
    發(fā)表于 04-19 08:11

    何謂32位處理器

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

    Intel 32位處理器 ,Intel 32位處理器結(jié)構(gòu)原理

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

    Intel 64位處理器,Intel 64位處理器結(jié)構(gòu)原理

    Intel 64位處理器,Intel 64位處理器結(jié)構(gòu)原理 現(xiàn)在人們廣泛使用的是由32處理器構(gòu)成的計算系統(tǒng),但是32的計算和操作系統(tǒng)
    發(fā)表于 03-26 15:07 ?3396次閱讀

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

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

    8位處理器上實現(xiàn)高效文件系統(tǒng)

    8位處理器上實現(xiàn)fat fat12 fat16 fat32的高效文件系統(tǒng)
    發(fā)表于 12-30 15:37 ?0次下載

    華清遠見FPGA代碼-使用函數(shù)實現(xiàn)簡單的八位處理器

    華清遠見FPGA代碼-使用函數(shù)實現(xiàn)簡單的八位處理器
    發(fā)表于 10-27 18:07 ?4次下載

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

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

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

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

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

    VisualDSP++3.5 16位處理器加載手冊
    發(fā)表于 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入門指南
    發(fā)表于 05-18 12:50 ?9次下載
    適用于16<b class='flag-5'>位處理器</b>的VisualDSP++3.5入門指南