【计算机系统设计】实践笔记(1)数据通路构建:取指部件分析
0 核心思想
根據指令功能,分析出需求,從而得出需要的部件、控制信號以及其他設計。
1. 針對的指令
取指階段,針對所有指令,任何指令都需要進行取指。
2 功能(需求)分析
CPU的內部采用的是字節編址,每次取指之后,都進行PC + 4。
需要執行的操作是
3 需要的部件
4 控制線(控制信號)
4.1 自身必須
- clk:時鐘信號(用于同步)
- reset:復位信號(清零 clear)
問題:PC更新,是上升沿還是下降沿?
答:這取決于設計。
4.2 來源外部
無
5 數據線
特別注意: 此處我們PC使用的是字節編址的地址值,而ROM使用的是字編址的地址值,一個地址代表了一條32位指令,因此,除了PC高位截斷,最低兩位也要截斷,根據字節對齊原則,PC的最低兩位必然是00。
6 地址線
無
7 注意點
8 錯誤的代碼:模塊功能混雜了
`timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2020/11/12 20:31:59 // Design Name: // Module Name: pc_1 // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // //module pc_1(input clk,input rst_n,input [31:0] pcNew, // The PC value from outsideoutput [31:0] pcOld);reg [31:0] pc = 0; assign pcOld = pc; assign pcNew = pcOld;// Update PC register always @(posedge clk) beginif(rst_n == 1) // Xilinx 官方推薦:reset 高電平有效beginpc <= 0;endelsebeginpc <= pcNew + 4;end endendmodule來看看這個好像沒什么錯誤的代碼……
看起來,沒什么錯誤呀!
但是,我們仿真一看:
module tb_pc_1;// pc_1 Parameters parameter PERIOD = 10;// pc_1 Inputs reg clk = 0 ; reg rst_n = 1 ; reg [31:0] pcNew = 0 ;// pc_1 Outputs wire [31:0] pcOld ;initial beginforever #(PERIOD/2) clk=~clk; endinitial begin#(PERIOD*2) rst_n = 0; endpc_1 u_pc_1 (.clk ( clk ),.rst_n ( rst_n ),.pcNew ( pcNew [31:0] ),.pcOld ( pcOld [31:0] ) );endmodule尷尬了,那么問題在哪里?
關注x,這說明,可能
這里,我們看看發生了什么。
藍色框出來的是內部,藍色外部是外部信號。
很明顯……我們的+4應該在外部執行,而不是內部……內部的4和外部的0撞一起了。
總結: 模塊獨立性非常重要,外部就是外部,內部就是內部,功能不要混雜在一起……
9 正確的代碼
pc.v
module pc_1(input clk,input rst_n,input [31:0] pcNew, // The PC value from outside.output [31:0] pcOld);reg [31:0] pc = 0; assign pcOld = pc;// Update PC register always @(posedge clk) beginif(rst_n == 1) // Xilinx 官方推薦:reset 高電平有效beginpc <= 0;endelsebeginpc <= pcNew + 4;end endendmoduleRTL優化結果
測試的時候注意將pcNew和pcOld接一起。
tb_pc.v
這次就對啦!
10 后續的改進預告
后續,PC的值,可能不止是+4還可能來自于j類指令或者b類,因此,真正輸入的pc的pcNew,需要從不同的值中選出一個,需要多個跳轉值的輸入,需要正確的選擇信號,這些都是pc模塊可以增加的東西,后續有需要的時候再增加。
我們期待的是
- pc寄存器本身是獨立的
- pc的輸入是可選的
- 二者是分開的,先用其他方式選擇好輸入的數據,再輸入到pc中更新,再輸出,這幾部分是相對獨立的,盡管它們在一個模塊中
圖示如下:
紅框內部是內部結構,外部是外部輸入數據,包括
- 4個可能的pc輸入情況
- 1個選擇信號
- 1個pc輸出信號
總結
以上是生活随笔為你收集整理的【计算机系统设计】实践笔记(1)数据通路构建:取指部件分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EZ怎么出装?
- 下一篇: 输卵管堵塞用中药灌肠