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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-8 23:02 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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