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

这篇具有很好参考价值的文章主要介绍了Chisel程序设计-取指译码模块实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

b站录屏

Chisel程序设计-取指译码模块实现,scala,chisel,硬件架构,单元测试
bilibili: chisel入门程序设计-取指译码模块的简单实现

目标

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

内容

1. 译码器的设计

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

译码器如图所示:
Chisel程序设计-取指译码模块实现,scala,chisel,硬件架构,单元测试
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. 寄存器文件的设计

Chisel程序设计-取指译码模块实现,scala,chisel,硬件架构,单元测试
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的指令存储器并组合模块。

Chisel程序设计-取指译码模块实现,scala,chisel,硬件架构,单元测试
内存: 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. 组合 指令存储器,寄存器文件,译码器。

Chisel程序设计-取指译码模块实现,scala,chisel,硬件架构,单元测试
PC初始值为0
目标:逐条地取指、译码。
观察四条指令的执行过程的波形

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

bilibili: chisel入门程序设计-取指译码模块的简单实现
文档:详细步骤文章来源地址https://www.toymoban.com/news/detail-842642.html

待完善

@TODO: 生成vcd文件,进行波形仿真验证

到了这里,关于Chisel程序设计-取指译码模块实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包