EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
' a1 ]8 }' x& a) L7 L+ I; p
2 w$ V0 Z% t, Q- t
最近几天一直在学习《自己动手写CPU》。。。 书中作者设计了一个OpenMIPS 教学版本的处理器。虽然是教学版本,但是感觉对我这个菜鸟来说也是相当的复杂了。看了许久也是没有看太明白。
1 i0 I- Q8 N- Y- N
9 R( e; P* |9 _& @: H3 ]- i1 L6 e& o7 @# D" c- T" M4 k
+ {1 r; {1 }8 [0 {/ c
图2:OpenMIPS教学版结构图 ! ~8 Q( Q' ?, A- O
取指、译码、执行、访存、回写。 - K& O( v6 Q, y! _3 R
; _# c) v; \, e
; w" [6 k0 i7 K# `+ G
书中第二章实现了一个指令的运行,代码如下,今天就暂时学习点这些东东吧。。。 # G' D$ C2 {/ i* o! Y! U
inst_fetch.v + d% |1 n# H; V- B% C
- 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+ e5 ?, l+ y3 T
* P# C8 Y# b- Q8 C/ x, c; q
% F/ i; h \8 d5 A* l8 I
/ ~5 d3 V' e- G9 \: hinst_fetch_tb.v & M4 E9 B$ Z2 b- r% w; R" V( L
- 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! N# I% y( K( l5 e( ~' l/ t( [
7 \3 ~6 H! F5 a% S6 d" v# ? x/ M* m
" s1 C; y: I/ y) q$ ~7 |; {5 T
! r; x ^/ J1 \- 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
4 s( a' U9 g( J$ V) b% z
% J! e+ w7 P8 o2 L8 W$ N# c) o. S7 B. `
: \' n% v9 A+ J5 F
$ F q$ ^. u( ^: a8 N- 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! v( \" Z K6 o7 |" K
2 t m# H5 T4 w. n y8 k/ F
7 N4 u" @1 `9 O* o/ m$ R5 g& \1 U5 k: V6 k& i# G9 ~! u) \
6 }& p# [6 `! p
|