日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

4位加法器的设计代码verilog_一个简单的8位处理器完整设计过程及verilog代码

發布時間:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4位加法器的设计代码verilog_一个简单的8位处理器完整设计过程及verilog代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歡迎FPGA工程師加入官方微信技術群

點擊藍字關注我們FPGA之家-中國最好最大的FPGA純工程師社群

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]

3.?指令譯碼

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

4.?指令執行

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

4.1 ADD指令

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

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

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

所以需要以下操作:

ADD1:DR

ADD2:AC

4.2 AND指令

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

AND1:DR

AND2:AC

4.3 JMP指令

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

JMP1:? PC

4.4INC指令

INC指令執行AC+1操作

INC1:?? AC

總的狀態圖如下:

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:PC

DR:DR

IR:IR

AC:AC

AC

AC

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

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

如上圖所示,各個組件與總線之間通過三態連接,防止出現總線競爭。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內部組織圖如下:

6. ALU設計

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

7. ?控制單元

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

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

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

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

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

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

對于這個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等信號,總的控制單元的邏輯如下圖:

下面我們用這些譯碼信號來產生數據路徑控制所必需的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

Fetch2

Fetch2

READ、MEMBUS

DRLOAD、PCINC

DR

PC

Fetch3

Fetch3

DRBUS、ARLOAD

IRLOAD

IR

AR

ADD1

ADD1

READ、MEMBUS

DRLOAD

DR

ADD2

ADD2

DRBUS、ACLOAD

AC

Fetch1

AND ?5

Fetch1

Fetch2

Fetch3

ADD1

ADD2

INC

Fetch1

Fetch2

Fetch3

INC1

JMP ?0

Fetch1

Fetch2

Fetch3

JMP1

歡迎FPGA、嵌入式、信號處理等工程師關注公眾號

全國第一大FPGA微信技術群

歡迎大家加入全國FPGA微信技術群,這個群體擁有數萬工程師、一群熱愛技術的工程師,這里的FPGA工程師相互幫助,相互分享,技術氛圍濃厚!趕緊叫上小伙伴一起加入吧!

用手指按住就可以加入FPGA全國技術群哦

FPGA之家元器件芯城

優勢元器件服務,有需求請掃碼聯系群主:金娟 郵箱:293580331@qq.com?歡迎推薦給采購

ACTEL、AD部分優勢訂貨(經營全系列):

XILINX、ALTERA優勢現貨或訂貨(經營全系列):

(以上器件為部分型號,更多型號請咨詢群主金娟)

服務理念:FPGA之家元器件自營芯城,旨在方便工程師快速方便購買器件服務,經過數年竭誠服務,我們的客服遍布國內大型上市公司、軍工科研單位、中小企業、最大的優勢是強調服務至上的理念、并且做到快速交貨、價格優惠!

直營品牌:Xilinx ALTERA ADI TI NXP ST E2V、鎂光 等百余元器件品牌,尤其擅長歐美對華禁運器件,歡迎工程師朋友把我們推薦給采購或者親自咨詢我們!我們將一如既往提供業內最佳服務!

FPGA技術群官方鳴謝品牌:Xilinx、 intel(Altera)、microsemi(,Actel)、LattIC e,Vantis,Quicklogic,Lucent等

總結

以上是生活随笔為你收集整理的4位加法器的设计代码verilog_一个简单的8位处理器完整设计过程及verilog代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。