Altifigence Academy

6 / 37 · 概念

向量索引、位顺序与符号

区分位编号、串行传输顺序与算术解释,阅读数据通路。

索引是名称,声明方向决定其含义

在 logic [7:0] a; 中,a[7] 是最左位;若声明为 logic [0:7] b;,则 b[0] 是最左位。给两个向量都赋 8'h96,从左到右的位串都是 10010110,但每一位的索引不同。只有确认声明方向后,才能使用“bit 0 一定是 LSBLSB 权重最低的比特。应同时检查表示方向与索引规则。”的假设。

实际工作中,整个接口采用一致方向更便于审查。还应明确波形工具的显示顺序,以及文件中比特数组的顺序。本课程输入 JSON 数组从 LSB 开始记录,而 RTL 向量通常从 MSBMSB 权重最高的比特。其索引取决于向量声明方向,不能总认为它是编号最大的位。 开始阅读。

用实际连接确认移动方向

在 q <= {q[1:0], din}; 中,q[2] 的下一值是旧 q[1],q[1] 的下一值是旧 q[0],q[0] 的下一值是 din。

q2next=q1,q1next=q0,q0next=dq_2^{next}=q_1,\quad q_1^{next}=q_0,\quad q_0^{next}=d

相比图画向左还是向右,哪个索引接收哪个信号才是精确规格。

箭头表示一个比特依次经过的存储位置。所有寄存器寄存器 存储多位状态的电路。本课程中的同步寄存器在时钟边沿存储指定输入。了解更多都在同一边沿读取旧值,并不意味着 din 能在一个边沿内穿到 q2。

按位编号阅读移动路径
  1. din: 本边沿要接受的比特
  2. q0: 捕获 din
  3. q1: 捕获旧 q0
  4. q2: 捕获旧 q1

算术移位与逻辑移位

>> 是逻辑右移,左侧空出的位补 0。左操作数为 signed 时,>>> 可用作扩展符号的算术右移。即使位串相同,操作数的 signed 声明不同,也可能使结果不同。

SystemVerilog
logic signed [7:0] x;
logic [7:0] logical_right, arithmetic_right;
assign logical_right = x >> 1;
assign arithmetic_right = x >>> 1;

若 x=8'b11111000(-8),两种结果分别为 01111100 与 11111100。负数的算术右移不一定与整数除法对负数的舍入规则相同,因此数值算法中需要单独确认。

自己试试

三位 q=101、din=0 时,分别求 q<={q[1:0],din} 与 q<={din,q[2:1]} 的下一值。

阅读解释

第一个表达式为 010,第二个也为 010。这个输入下两个方向恰好相同。改用 q=001、din=0,两者分别为 010 和 000,就能区分方向错误。

你的选择适用于此浏览器,可随时在页脚更改。