升序与降序索引定义变量的差异及比特赋值疑问
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
相关产品推荐
相关产品推荐

