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

升序与降序索引定义变量的差异及比特赋值疑问

Verilog数组索引升序/降序的差异分析

第一种定义场景

原代码实现:

output [7:0] o_RX_Byte;

reg [7:0] r_RX_Byte = 0;
reg [0:2] r_Bit_Index = 0;
  • 这里r_RX_Byte采用降序索引(高位索引在前),其中7对应最高有效位(MSB),0对应最低有效位(LSB)。
  • r_Bit_Index是3位寄存器,取值范围为0~7:
    • 当r_Bit_Index=0时,r_RX_Byte[r_Bit_Index]指向的是LSB(第0位);
    • 当r_Bit_Index=7时,指向的是MSB(第7位)。
  • 执行r_RX_Byte[r_Bit_Index] <= i_RX_Serial;时,若r_Bit_Index从0递增到7,串行数据会被依次写入LSB到MSB。

第二种定义场景

修改后的代码实现:

output [0:7] o_RX_Byte;

reg [0:7] r_RX_Byte = 0;
reg [0:2] r_Bit_Index = 0;
  • 这里r_RX_Byte采用升序索引(低位索引在前),其中0对应最高有效位(MSB),7对应最低有效位(LSB)。
  • 同样r_Bit_Index取值范围为0~7:
    • 当r_Bit_Index=0时,r_RX_Byte[r_Bit_Index]指向的是MSB(第0位);
    • 当r_Bit_Index=7时,指向的是LSB(第7位)。
  • 执行相同赋值语句时,若r_Bit_Index从0递增到7,串行数据会被依次写入MSB到LSB,和第一种场景的存储顺序完全相反。

核心结论

两种索引定义存在本质差异,直接影响比特的存储顺序:

  • 降序索引[7:0]:索引值越大,对应位的权重越高(7是MSB,0是LSB);
  • 升序索引[0:7]:索引值越小,对应位的权重越高(0是MSB,7是LSB);
  • 相同的索引变量r_Bit_Index,在两种定义下会指向不同权重的比特位,最终导致串行数据写入字节的顺序完全颠倒。

内容的提问来源于stack exchange,提问作者Jingle Jangle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:42:46