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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

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$ ]- ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-31 10:50 , Processed in 0.114257 second(s), 24 queries , Gzip On.

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

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

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