找回密码
 注册
关于网站域名变更的通知
查看: 356|回复: 1
打印 上一主题 下一主题

转——【FPGA代码学习】学习取指令

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-11 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
转——【FPGA代码学习】学习取指令
' 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-30 00:02 , Processed in 0.109375 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表