b站录屏
bilibili: chisel入门程序设计-取指译码模块的简单实现
目标
- 设计一个连续取指+译指的电路
- 入门简单数据通路
- 运用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
目标:逐条地取指、译码。
观察四条指令的执行过程的波形文章来源:https://www.toymoban.com/news/detail-842642.html
详细过程,可以访问视频和文档
bilibili: chisel入门程序设计-取指译码模块的简单实现
文档:详细步骤文章来源地址https://www.toymoban.com/news/detail-842642.html
待完善
@TODO: 生成vcd文件,进行波形仿真验证
到了这里,关于Chisel程序设计-取指译码模块实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!