Chisel程序设计-取指译码模块实现

b站录屏

b
bilibili: chisel入门程序设计-取指译码模块的简单实现

目标

  1. 设计一个连续取指+译指的电路
  2. 入门简单数据通路
  3. 运用chisel语法编写模块

内容

1. 译码器的设计

完成add, sub, lw, sw指令译码。其他指令一律译为nop

译码器如图所示:
译码器
IO端口

Input: Instr_word[31:0]
Output: 
    add_op
    sub_op
    lw_op
    sw_op
    nop

实现代码,完成波形仿真测试。 指令测试样例:

add x1, x2, x3 # 0x003100b3 b000000_00010_00011_00001_00000_100000 
sub x0, x5, x6 # 0x40628033 b000000_00101_00110_00000_00000_100010 
lw x5, 100(x2) # 0x06432283 b100011_00010_00101_00000_00001_100100 
sw x5, 104(x2) # 0x06512423 b101011_00010_00101_00000_00001_101000 
jal ra, 100    # 0x064000ef b00000110010000000000_00001_1101111 

2. 寄存器文件的设计

寄存器文件
32-bit的寄存器 x 32 允许两读一写

  • r0固定读出0
  • 输入端口
rs1, rs2, wb_data, reg_wb, rf_wren
  • 输出端口
rs1_out, rs2_out
  • 寄存器内部保存的初始数值设置为寄存器编号

  • 测试

rs1=5, rs2=8, wb_data=0x1234, reg_wb=1, rf_wren=1 
观察输出波形以及对应寄存器的值

3. 实现32-word的指令存储器并组合模块。

指令存储器
内存: 32字指令存储器 地址0存储4条指令

add x1, x2, x3 : 0x003100b3
sub x0, x5, x6 : 0x40628033
lw x5, 100(x2) : 0x06432283
sw x5, 104(x2) : 0x06512423
jal ra, 100    : 0x064000ef

4. 组合 指令存储器,寄存器文件,译码器。

组合
PC初始值为0
目标:逐条地取指、译码。
观察四条指令的执行过程的波形

详细过程,可以访问视频和文档

bilibili: chisel入门程序设计-取指译码模块的简单实现
文档:详细步骤

待完善

@TODO: 生成vcd文件,进行波形仿真验证
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值