1. 學習指令儲存器的設計
2. 掌握cpu取指令操作與指令解碼的方法和過程
1. 本次實驗設計採用哈佛結構設計儲存器模組,需要設計乙個唯讀儲存器作為指令儲存器,採用memory ip核實現(不會用memory ip核,可以看我這個博文儲存器實驗
2. 程式計數器pc與pc自增加法器組合成乙個模組,由於指令儲存器只有64個32位單元,所以pc的32位指令位址的高24位可直接在設計中清零
3. 需要注意在指令週期clk的上公升沿執行取指令操作,在clk下降沿更新pc值
4. **展示:
頂層模組
module
fetch_inst_code
(clk
,rst
,led
,mux
,op_code
,funct
,rs_addr
,rt_addr
,rd_addr
,shamt
,inst_code);
input
clk,
rst;
input[1
:0]mux
;output[31
:0]inst_code
;output
reg[7:
0]led;
reg[31:
0]pc;
wire[31
:0]pc_new
;output[5
:0]op_code
,funct
;output[4
:0]rs_addr
,rt_addr
,rd_addr
,shamt;pc
pc1(
clk,
rst,
inst_code);
always@(
*)begin
case
(mux)2
'b00:led
=inst_code[7
:0];
2'b01:led
=inst_code[15
:8];
2'b10:led
=inst_code[23
:16];
2'b11:led
=inst_code[31
:25];
endcase
endassign
op_code
=inst_code[31
:26];
assign
rs_addr
=inst_code[25
:21];
assign
rt_addr
=inst_code[20
:16];
assign
rd_addr
=inst_code[15
:11];
assign
shamt
=inst_code[10
:6];
assign
funct
=inst_code[5
:0];
endmodule
pc(取指令模組)
modulepc(
clk,
rst,
inst_code);
input
clk,
rst;
wire[31
:0]pc_new
;reg[31
:0]pc
;initialpc=
32'h0000_0000
;output[31
:0]inst_code
;assign
pc_new=pc
+4;inst_rom
your_instance_name(.
clka
(clk),
//input
clka
.addra(pc
[7:2
]),/
/input[5
:0]addra
.douta
(inst_code)/
/output[31
:0]douta);
always@(
negedge
clkor
posedge
rst)
beginif(
rst)
begin
pc<=32
'h0000_0000
;end
else
begin
pc<
=pc_new
;end
endendmodule
測試模組
詢問了研究生學長,證實自己的想法
計算機組成原理 指令
1 指令劃分為操作碼和位址碼字段,由二進位制數字組成 指令系統中採用不同定址方式的目的主要是縮短指令長度,擴大定址空間,提高程式設計靈活性。2 運算型指令的定址與轉移型指令的定址不同點在於運算型指今定址的是運算元,而轉移性指令定址的則是下次欲執行的指令的位址。3 零位址指令只有操作碼,沒有運算元。這...
計算機組成原理(七)
計算機資料處理與儲存 一 移位操作 分為邏輯移位與算數移位 正數補碼和原碼移位規則 符號位不變 雙符號位第一位不變 空位補0.負數補碼移位規則 符號位不變 雙符號位第一位不變 左移補0,右移補1 第二符號位移到尾數第一位 二 捨入方法 0舍1入 原碼 補碼 末位恆置1 原碼 補碼 三 數字拓展與壓縮...
計算機組成實驗筆記
實驗 xdc檔案 預設情況下,vivado ide中顯示的xdc檔案 或tcl指令碼 的順序定義了將elaborated design或synthesized design載入到記憶體時工具使用的讀取順序。首先讀取列表頂部的檔案,最後讀取底部的檔案。只需在ide中選擇檔案並將其移動到列表中的所需位置...