[RISCV] SOC 加法器流程初探, 自C到soc的探索

概要

tinyriscv SOC 加法器原理和流程

整体架构流程

C 语言实现加法程序, 并真正由 SOC 硬件加速器完成加法操作。

技术名词解释

  • ROM: SOC内存储并执行代码空间
  • RAM: SOC存储数据空间

技术细节

  1. C 语言程序实现加法
	int b = 11;	
	int a = 10;
	sum = b + a;
  1. C 语言make 编译生成指令 bin
 D:\soft\tinyriscv\tests\example\simple>make

生成 simple.bin 文件, 这是C code bin 文件

  1. 指令bin放ROM 执行
D:\soft\tinyriscv\sim>python .\sim_new_nowave.py ..\tests\example\simple\simple.bin inst.data
test running...
WARNING: ../tb/tinyriscv_soc_tb.v:499: $readmemh(inst.data): Not enough words in the file for the requested range [0:4095].
FST info: dumpfile tinyriscv_soc_tb.fst opened for output.

这里 inst.data 对应就是 ROM, 放代码的. 把我们的 C Code bin 拷贝到ROM.

  1. 加数写入RAM
    (1)在 tinyriscv top中, 通过 master 0 将加数 a(10) 和 b(11) 的值写到 RAM.在这里插入图片描述
    (2) 拿到RAM 访问权限后,就可以写 RAM。要注意的是 tinyriscv 里可能同时有 3 个 master 抢夺RAM 权限, 这就需要仲裁。好在此时只有 master 0 发了请求,所以他马上就把数据写到 RAM 了。
    在这里插入图片描述看起来是同一个时钟周期同时完成的。
    在这里插入图片描述
  2. RAM上读取加数数据
    在这里插入图片描述 s1_data_i 从设备1(RAM) 读取到的数据 , 通过 soc 内部总线 rib 传给 m0 m0_data_o (主设备0读取到的数据) .
    在这里插入图片描述m0_data_o 记录的加数再传到 tinyriscv module 的 rib_ex_data_i
    在这里插入图片描述再传给ex 的 mem_rdata_i
    input wire[`MemBus] mem_rdata_i,        // 内存输入数据
  1. SOC 加法器运算
    ex 里完成这个加法运算。
    执行(ex)模块是一个纯组合逻辑电路,主要作用有以下几点:

1.根据当前是什么指令执行对应的操作,比如add指令,则将寄存器1的值和寄存器2的值相加。

2.如果是内存加载指令,则读取对应地址的内存数据。

以add指令为例说明,add指令的作用就是将寄存器1的值和寄存器2的值相加,最后将结果写入目的寄存器。

`INST_TYPE_R_M: begin
     if ((funct7 == 7'b0000000) || (funct7 == 7'b0100000)) begin
         case (funct3)
             `INST_ADD_SUB: begin
                 jump_flag = `JumpDisable;
                 hold_flag = `HoldDisable;
                 jump_addr = `ZeroWord;
                 mem_wdata_o = `ZeroWord;
                 mem_raddr_o = `ZeroWord;
                 mem_waddr_o = `ZeroWord;
                 mem_we = `WriteDisable;
                 if (inst_i[30] == 1'b0) begin
                     reg_wdata = reg1_rdata_i + reg2_rdata_i;
                 end else begin
                     reg_wdata = reg1_rdata_i - reg2_rdata_i;
                 end
     end

下图是add指令的编码格式:
在这里插入图片描述在这里插入图片描述这中间细分的话, 还涉及取指、译码、访存、执行、回写过程。不展开了,后续单独章节分析。

  1. 加法结果写回RAM
    在这里插入图片描述参考文献:
    [1] 从零开始写RISC-V处理器
    [2] https://gitee.com/llorr/tinyriscv
  • 20
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值