EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
8 z( R( z5 M; X5 Q! G: q
8 m0 ^0 ? U/ d2 G {; l
最近几天一直在学习《自己动手写CPU》。。。 书中作者设计了一个OpenMIPS 教学版本的处理器。虽然是教学版本,但是感觉对我这个菜鸟来说也是相当的复杂了。看了许久也是没有看太明白。
4 H0 S. Z) [& V
1 F* r' A# l3 |0 x" U2 g
2 [6 t! U! {1 U }/ Y% f. {# ^9 f7 j1 V
图2:OpenMIPS教学版结构图
; g; H T& c: b" X" U1 m( g取指、译码、执行、访存、回写。 2 Y8 `1 w4 ]- V/ _, W
; q! M& r' u, X6 `4 B5 i: D
4 l: F: R/ i c书中第二章实现了一个指令的运行,代码如下,今天就暂时学习点这些东东吧。。。 " A9 w# B2 F0 n! L4 @- Y$ n
inst_fetch.v " D8 b& J) y$ w9 c# ?2 X$ s
- 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- M5 {5 D$ g: A0 h, ^, [0 U) U
# M+ Y$ \: F. ~) f3 a
4 q9 ?6 z8 z" i
7 B$ v- Y/ N) p" x& D3 sinst_fetch_tb.v
0 X8 s Y8 E& 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
1 A* [$ G' X% E" _# m2 T& o
2 b# N9 s- R1 J/ x: L/ J" T' i" D: p6 s) n5 Q
3 g8 t; W+ W& k6 A% D- 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: L) A+ f, {2 ?5 F
# ]: s2 _! T3 i0 [
$ k! F& o6 {& L2 r
+ E4 l- g1 ]9 C+ j- 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
2 V1 W. ?! }! y# p: K. [
9 c# U- C4 F. N- _: x6 V
$ S9 L2 ^; {& ?3 ?7 M
& i+ q$ f& [! u, Y5 @9 g0 o& a" X
7 L* A" |8 P$ u, h2 A |