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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

FPGA学习之路—应用程序—基于Verilog设计单总线8位ALU

發布時間:2023/12/19 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA学习之路—应用程序—基于Verilog设计单总线8位ALU 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

FPGA學習之路——基于Verilog設計單總線8位ALU

定義

ALU(arithmetic and logic unit) 算術邏輯單元,簡稱ALU,是計算機的數學運算核心,也就是負責運算的組件,如將兩個數相減或者做邏輯運算等。基本其它的組件都用到了ALU,它有兩個單元,算術單元邏輯單元。算術單元執行如加、減、乘、除操作,邏輯單元執行與、或、非、異或等操作。

ALU的輸入為操作數以及來自控制單元的控制命令(ADD R0,R1;),輸出為運算結果以及狀態信息。

ALU的設計流程如下圖所示。

單總線結構,是指所有部件都接到同一總線上,數據可以在任何兩個寄存器之間,或是在任一寄存器和ALU之間傳送。在同一時間內,只能有一個操作數放在總線上進行傳輸。
所以對本次的ALU設計而言,需要分兩次才能將兩個操作數輸入到ALU,且需要A、B兩個緩沖寄存器。優點是控制電路比較簡單,缺點是操作速度較慢。

功能

算術運算:帶進位加減法、不帶進位加減法
邏輯運算:與、或、異或、同或
移位操作:左移、右移、清零、取反

//算術運算 parameter A_ADDC=5'd1; //帶進位加法 parameter A_ADD=5'd2; //不帶進位加法 parameter A_SUBC=5'd3; //帶進位減法 parameter A_SUB=5'd4; //不帶進位減法 //邏輯運算 parameter A_AND=5'd5; //與操作 parameter A_OR=5'd6; //或操作 parameter A_XOR=5'd7; //異或操作 parameter A_NOR=5'd8; //同或操作 //移位功能 parameter A_SHIFT=5'd9; //移位操作 //移位選擇 parameter A_LSH=2'd0; //左移操作 parameter A_RSH=2'd1; //右移操作 parameter A_CLR=2'd2; //數據清零 parameter A_CPL=2'd3; //數據取反

輸出包括計算結果dataout、進位標志CY、零標志ZN和溢出標志OV,以不帶進位加法為例說明輸出的計算過程。

A_ADD:begin{CYreg,dataout}<=RegA+RegB;ZNreg<=(RegA+RegB)?0:1;OVreg<=((RegA[7]==RegB[7])&&(RegA[7]!=dataout[7]))?1:0;end

補碼加法運算溢出判斷三種方法:在代碼中我們用的法一。
[方法一]
Xf、Yf分別兩個數的符號位,Zf為運算結果符號位。
當Xf =Yf =0(兩數同為正),而Zf=1(結果為負)時,負溢出;
當出現Xf =Yf =1(兩數同為負),而Zf=0(結果為正),正溢出.
[方法二]
Cs表示符號位的進位,Cp表示最高數值位進位,⊕表示異或。
若 Cs⊕Cp =0 ,無溢出;
若 Cs⊕Cp =1 ,有溢出。
[方法三]
用變形補碼進行雙符號位運算(正數符為00,負數符號以11)
若運算結果的符號位為"01",則正溢出;
若結果雙符號為10,則負溢出;
若結果的雙符號位為00或11,無溢出

實驗結果

1、算術運算帶進位加法,A=23,B=42,C0=1。

從結果我們可以看到,data總線開始進行RegA,RegB數據的傳輸。在運算完成后,輸出結果又放到data總線上,實現了單總線的設計。運算結果66=23+42+1,驗證正確。

2、邏輯運算,以異或為例。可以從下圖看到異或邏輯正確。

3、移位操作,RegA=18,RegB=2,以(RegA<<RegB)左移為例,結果如下,可以看到結果正確。

心得

此模塊中的data總線為inout類型,在編寫代碼和調試過程中遇到部分問題,使用方法如下。

inout data; reg dataout; //需輸出的數據 reg link; //inout口方向控制 assign data=(link)?dataout:1'bz; //若輸出數據則將dataout與data連接。//若接收數據,則掛高阻態。

1、inout端口不能被賦值為reg型,因此,不能用于always語句中。
2、對于inout端口的邏輯判斷,要用到?:條件表達式,來控制高阻的賦值。當需要inout輸入數據時,給高阻態。當需要給inout輸出數據時,與相應的輸出結果寄存器連接。
3、寫tb文件時,給inout數據進行賦值也是用assign的類似操作。
4、設置inout的高阻態時,高阻態的數據位數要與inout的位數一致,否則會“萬里江山一片紅”。

實驗項目下載鏈接

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的FPGA学习之路—应用程序—基于Verilog设计单总线8位ALU的全部內容,希望文章能夠幫你解決所遇到的問題。

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