CPU设计实战 第6章 实践任务

CPU设计实战-汪文祥 邢金璋
第6章 实践任务
实验环境 lab7.zip

文章目录


前言

在lab6的实验环境下,在流水线中添加转移指令和访存指令。


一、实验内容

添加转移指令:
我们将所有转移指令都放在译码级完成

//ID_stage添加代码:
wire        inst_bgez;
wire        inst_bgtz;
wire        inst_blez;
wire        inst_bltz;
wire        inst_bgezal;
wire        inst_bltzal;
wire        inst_j;
wire        inst_jalr;
assign inst_bgez   = op_d[6'h01] & rt_d[5'h01];
assign inst_bgtz   = op_d[6'h07] & rt_d[5'h00];
assign inst_blez   = op_d[6'h06] & rt_d[5'h00];
assign inst_bltz   = op_d[6'h01] & rt_d[5'h00];
assign inst_bgezal = op_d[6'h01] & rt_d[5'h11];
assign inst_bltzal = op_d[6'h01] & rt_d[5'h10];
assign inst_j      = op_d[6'h02];
assign inst_jalr   = op_d[6'h00] & func_d[6'h09] & rt_d[5'h00] & sa_d[5'h00];
wire        rsgez;
wire        rsgtz;
wire        rslez;
wire        rsltz;
assign rsgez    = (rs_value[31] == 1'b0 || rs_value == 32'd0);
assign rsgtz    = (rs_value[31] == 1'b0 && rs_value != 32'd0);
assign rslez    = (rs_value[31] == 1'b1 || rs_value == 32'd0);
assign rsltz    = (rs_value[31] == 1'b1 && rs_value != 32'd0);

//ID_stage修改代码:
assign alu_op[ 0] = inst_addu   | inst_addiu | inst_lw    | inst_sw 
                  | inst_jal    | inst_add   | inst_addi  | inst_jalr
                  | inst_bgezal | inst_bltzal| inst_lb    | inst_lbu
                  | inst_lh     | inst_lhu   | inst_lwl   | inst_lwr
                  | inst_sb     | inst_sh    | inst_swl   | inst_swr;
assign src1_is_pc   = inst_jal   | inst_bgezal | inst_bltzal | inst_jalr;
assign src2_is_8    = inst_jal | inst_bgezal | inst_bltzal | inst_jalr;
assign dst_is_r31   = inst_jal   | inst_bgezal | inst_bltzal;
assign gr_we        = ~inst_sw   & ~inst_beq  & ~inst_bne  & ~inst_jr   &
                      ~inst_bgez & ~inst_bgtz & ~inst_blez & ~inst_bltz &
                      ~inst_sb   & ~inst_sh   & ~inst_swl  & ~inst_swr;  
assign br_taken = (   inst_beq    &&  rs_eq_rt
                   || inst_bne    && !rs_eq_rt
                   || inst_bgez   &&  rsgez
                   || inst_bgtz   &&  rsgtz
                   || inst_blez   &&  rslez
                   || inst_bltz   &&  rsltz
                   || inst_bltzal &&  rsltz
                   || inst_bgezal &&  rsgez
                   || inst_jal
                   || inst_j
                   || inst_jalr
                   || inst_jr
                  ) && ds_valid;
assign br_target = (inst_beq || inst_bne || inst_bgez || inst_bgtz || inst_blez || inst_bltz || inst_bgezal || inst_bltzal) ? 
                   (fs_pc + {
  {14{imm[15]}}, imm[15:0], 2'b0}) :
                   (inst_jr || inst_jalr)          ? rs_value :
                  /*inst_jal*/      
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
CPU设计实战实践代码是实现计算机中央处理器的一种具体编码方法。这个过程需要深入了解计算机体系结构和指令集架构,以及硬件描述语言(HDL)等知识。首先,需要明确CPU的功能和设计要求,比如时钟频率、指令集、寄存器,然后根据这些需求编写HDL代码进行逻辑设计和电路布局。在设计实践中需要考虑到数据通路、控制单元、寄存器堆、运算单元等模块的实现,并且需要进行模块间的连接与通信。在代码实践中,需要测试代码的正确性与稳定性,以及进行性能优化。最后,通过仿真测试,验证CPU设计的功能是否满足预期,并对设计进行评估与改进。 CPU设计实战实践代码的关键挑战之一是要能够理解和应用各种原理和技术,比如时序电路、组合逻辑电路、存储器与寄存器的设计等。另外,需要对硬件描述语言(如Verilog、VHDL等)有深入的理解,并能够熟练运用在CPU设计中。另外,考虑到现代CPU设计的复杂性,设计者还需要具备对性能分析和优化的能力,以及对硬件验证工具的熟练应用。最后,对CPU设计实践代码的经验积累也是必不可少的,只有不断实践和总结,才能够在CPU设计领域中不断提升自己。 总的来说,CPU设计实战实践代码是一个需要理论与实践相结合的过程,需要具备多方面的知识和技能。通过不断地练习与实践设计者可以逐渐提高自己的CPU设计能力,为计算机硬件的发展做出贡献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值