|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
8 I2 r' P* G: q
& m5 }( I$ k# e" r) l最近几天一直在学习《自己动手写CPU》。。。 书中作者设计了一个OpenMIPS 教学版本的处理器。虽然是教学版本,但是感觉对我这个菜鸟来说也是相当的复杂了。看了许久也是没有看太明白。+ n9 o" b$ G( @* f, a2 a* b& f
* @5 \# ?- M6 q9 s. X, @* g6 j( t1 M
5 V; _8 E; l, m2 J: l8 I7 }
/ A& L0 U( j% V& K B图2:OpenMIPS教学版结构图 ) I) [3 P1 H) r0 k7 M
取指、译码、执行、访存、回写。
+ a& P) t) s4 d1 k l8 ^
, R8 |0 i* N! X: i8 |' H( n' p' P/ k! [# Z* d1 k
书中第二章实现了一个指令的运行,代码如下,今天就暂时学习点这些东东吧。。。
# V$ s- {5 c, m) v) s& ]inst_fetch.v - j, k( {: U7 h$ j
- module inst_fetch(
- input wire clk,
- input wire rst,
- output wire[31:0] inst_o
-
- );
- wire[5:0] pc;
- wire rom_ce;
-
- //pc_reg例化
- pc_reg pc_reg0(
- .clk(clk),
- .rst(rst),
- .pc(pc),
- .ce(rom_ce)
-
- );
-
- rom rom0(
- .ce(rom_ce),
- .addr(pc),
- .inst(inst_o)
- );
-
- endmodule+ C: J, `' A5 [/ V4 U5 ^8 Z% G; Y
* }4 R& M$ m7 I; h
& X" q: C! v/ ]0 C4 d5 f4 {
$ x$ g/ s: @7 N& J( _inst_fetch_tb.v
, Z! O2 v# r4 a7 Z# x- module inst_fetch_tb;
- reg CLOCK_50;
- reg rst;
- wire[31:0] inst;
-
- initial begin
- CLOCK_50 = 1'b0;
- forever #10 CLOCK_50 = ~CLOCK_50;
- end
- initial begin
- rst = 1'b1;
- #195 rst= 1'b0;
- #1000 $stop;
- end
-
- inst_fetch inst_fetch0(
- .clk(CLOCK_50),
- .rst(rst),
- .inst_o(inst)
- );
- endmodule: {. G+ G; s7 L8 h; u5 p& D
7 o5 d: \9 k% P' Y
! C% m0 q& w/ h& Z9 f2 m3 g- z5 l$ r8 Z7 _% A
- module pc_reg(
- input wire clk,
- input wire rst,
-
- output reg[5:0] pc,
- output reg ce
-
- );
- always @ (posedge clk) begin
- if (ce == 1'b0) begin
- pc <= 6'h00;
- end else begin
- pc <= pc + 1'b1;
- end
- end
-
- always @ (posedge clk) begin
- if (rst == 1'b1) begin
- ce <= 1'b0;
- end else begin
- ce <= 1'b1;
- end
- end
- endmodule
! Z+ t& S6 e9 @. S# h / _6 V+ q7 F4 f' Z* @7 i) |
' @. c4 s& W9 {) x4 U! ]
% s4 p: y* ]% n, ?; G* ?
- module rom(
- input wire ce,
- input wire[5:0] addr,
- output reg[31:0] inst
-
- );
- reg[31:0] rom[63:0];
- initial $readmemh ( "rom.data", rom );
- always @ (*) begin
- if (ce == 1'b0) begin
- inst <= 32'h0;
- end else begin
- inst <= rom[addr];
- end
- end
- endmodule
A9 }1 k D* D3 [: v# y6 W$ c a : k5 r0 X' M# j. C# K, S
, |: ^( f8 O% R, X1 x5 z
T7 h" G/ @( E 3 `% l3 b3 B* V. d' P$ ]- ]
|
|