RM新时代网站-首页

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

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

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

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

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

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

1. CPU定義

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

我們僅定義一個(gè)通用寄存器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外,我們還需要以下幾個(gè)寄存器:

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

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

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

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

2.取指設(shè)計(jì)

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

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

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

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

Fetch1: AR<—PC

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

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

4.指令執(zhí)行

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

4.1 ADD指令

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

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

2〉把這個(gè)操作數(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ù)路徑

這一步我們來實(shí)現(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è)計(jì)數(shù)據(jù)路徑,我們可以采用兩種辦法:

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

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

首先我們回顧一下可能發(fā)生的數(shù)據(jù)傳輸,以便確定各個(gè)組件的功能。特別的我們要注意把數(shù)據(jù)載入組件的各個(gè)操作。首先我們按照他們改變了那個(gè)寄存器的數(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)在我們來看每個(gè)操作來決定每個(gè)組件執(zhí)行什么樣的功能,AR,DR,IR三個(gè)組件經(jīng)常從其他的組件載入數(shù)據(jù)(從總線),所以只需要執(zhí)行一個(gè)并行輸入的操作。PC和AC能夠載入數(shù)據(jù)同時(shí)也能夠自動(dòng)加一操作。

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

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

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

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

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

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

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

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

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

由此我們做以下工作:

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

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

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

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

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

6. ALU設(shè)計(jì)

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

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

7. 控制單元

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

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

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

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

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

一個(gè)通用的控制單元原理圖如下:

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

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

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

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

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

3〉給每個(gè)例程的開始狀態(tài)賦值時(shí),要基于指令的操作碼和這個(gè)例程的最大狀態(tài)數(shù)。這樣就可以用操作碼來生成計(jì)數(shù)器的LD信號(hào)達(dá)到正確的狀態(tài)轉(zhuǎn)移。首先,在Fetch3狀態(tài)發(fā)出LD信號(hào),然后要把正確的例程地址放到計(jì)數(shù)器的輸入端。對這個(gè)CPU來說,我們考慮以地址1 [IR] 0作為計(jì)數(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è)計(jì)產(chǎn)生計(jì)數(shù)器的LD、INC、CLR等信號(hào),總的控制單元的邏輯如下圖:

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

下面我們用這些譯碼信號(hào)來產(chǎn)生數(shù)據(jù)路徑控制所必需的AR、PC、DR、IR、M和ALU的控制信號(hào)。首先考慮寄存器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的控制信號(hào)ALUSEL是用來控制ALU做邏輯或者算數(shù)運(yùn)算的,所以有:

ALUSEL=AND2

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

DRBUS=Fetch3 or AND2 or ADD2 or JMP1

其他類似有:

MEMBUS=Fetch2or ADD1 or AND1

PCBUS=Fetch1

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

READ=Fetch2or ADD1 or AND1

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

8.設(shè)計(jì)驗(yàn)證

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

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)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19259

    瀏覽量

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

    關(guān)注

    31

    文章

    5336

    瀏覽量

    120230
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

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

    關(guān)注

    1

    文章

    607

    瀏覽量

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

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68521

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

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

    何謂32位處理器

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

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

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

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

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

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

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

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

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

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

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

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

    電子發(fā)燒友網(wǎng)為你提供“硬件軟件化”,32位處理器的開發(fā)與8位處理器的開發(fā)資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案
    發(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è)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(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入門指南
    RM新时代网站-首页