You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设计支持任意起始位连续4位访问的可位寻址内存(RISC架构)

RISC单周期电路:跨4位存储块的连续bit寻址取数设计

需求明确

现有16位数据:1101101001100010

  • 索引0:取前4位 → 1101
  • 索引3:跳过前3个bit,取连续4位(对应数据段为跨块的连续4位)
    当前指令内存以4位为单个存储块,需实现从任意bit索引开始,连续取4位的功能。

核心设计方案

1. 存储块映射

将16位数据按高位到低位拆分为4个独立的4位存储单元,记为:

  • Mem[0]:最高4位 → 1101
  • Mem[1]:次高4位 → 1010
  • Mem[2]:次低4位 → 0110
  • Mem[3]:最低4位 → 0010

2. 地址解码与块选择

对输入的bit索引idx(合法范围0~12,因需取4位,最大索引为16-4=12),计算两个关键参数:

  • 起始块地址:blk_addr = idx // 4(整数除法,如idx=3时blk_addr=0,idx=4时blk_addr=1)
  • 块内偏移:offset = idx % 4(如idx=3时offset=3,idx=5时offset=1)

根据offset判断取数逻辑:

  • 若offset = 0:仅读取Mem[blk_addr],直接输出该块的4位数据。
  • 若offset ≠ 0:需同时读取Mem[blk_addr]和Mem[blk_addr+1](因4位数据会跨两个存储块)。

3. 跨块数据拼接(移位+或运算)

当需要跨块取数时,通过以下步骤拼接数据:

  1. 将Mem[blk_addr]执行逻辑右移,移位位数为4 - offset,保留低offset位有效数据(高位补0)。
  2. 将Mem[blk_addr+1]执行逻辑左移,移位位数为offset,保留高4 - offset位有效数据(低位补0)。
  3. 将两个移位结果做按位或运算,得到最终的4位连续数据。

验证示例(以idx=3为例)

  • blk_addr=0,offset=3
  • Mem[0] = 1101 → 右移1位 → 0110
  • Mem[1] = 1010 → 左移3位 → 1000
  • 按位或运算:0110 | 1000 = 1110(对应原始数据中跳过前3位后的连续4位)

4. 电路硬件实现

通过以下模块组合完成功能:

  • 地址解码器:根据idx生成对应存储块的读取使能信号,控制是否读取单个块或两个块。
  • 移位器:两个4位可控移位器,分别处理两个存储块的移位操作。
  • 多路选择器:根据offset是否为0,选择输出单个块数据或移位拼接后的结果。
  • 逻辑运算单元:实现跨块时的按位或拼接。

内容的提问来源于stack exchange,提问作者Nishant Jalan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 08:08:10