7 / 37 · 概念
切片、拼接和重复运算的位宽
计算拼接信号的总位宽与数值保留条件,构建数据通路。
课时内容可免费阅读,选课后可保存学习进度。
拼接运算不是加法
{a,b} 将 b 的比特接在 a 后面。若位宽分别为 M、N,结果位宽为 M+N。两个操作数都是 unsignedunsigned 将位串解释为非负整数的规则。n 位范围为 0 到 2^n−1,可能与同一位串的 signed 解释不同。了解更多 位串时,对应数值如下。
a=2'b10、b=3'b101 时,拼接结果为 5'b10101,即 21,而算术和为 7,两者是不同运算。
a 的比特向高位移动 b 的位宽。拼接运算拼接运算 将多个位串并排连接的运算。结果位宽是操作数位宽之和,与数值加法不同。应理解为 a×2³+b,而非 a+b。
- a = 10: 位宽为 2,整数值为 2
- b = 101: 位宽为 3,整数值为 5
- {a,b} = 10101: 位宽为 5,2×8+5=21
在表达式旁标出位宽
logic [7:0] word;
logic [3:0] upper, lower;
logic [7:0] swapped;
assign upper = word[7:4];
assign lower = word[3:0];
assign swapped = {lower, upper};输入 8'hA3 时,swapped 为 8'h3A。切片切片 从向量中选取连续比特范围的运算。所选范围决定结果位宽和位顺序。范围错一位,就会改变位宽或数值。即使原向量为 signed,部分选择的结果也可能被当作独立 unsigned 值,所以在 signed 运算前应重新确认含义。
符号扩展与重复拼接
logic signed [3:0] small;
logic signed [7:0] extended;
assign extended = {{4{small[3]}}, small};将四个符号位与原四位拼接,总共得到八位。符号扩展不是因为 MSBMSB 权重最高的比特。其索引取决于向量声明方向,不能总认为它是编号最大的位。了解更多 为 1 就加上 1 的算术操作,而是扩展位布局以保留解释后的数值。
使用 q[N-2:0] 的通用移位电路,在 N=1 时该范围不成立。应限制最小支持位宽,或用 generate 分支单独处理 N=1。参数化并非只把数字替换成变量就完成。
自己试试
a 为三位 101,b 为两位 11。{a,b} 的位宽与数值是什么?将其存入四位后会留下什么?
阅读解释
位宽为五位,位串为 10111,值为 。存入四位后丢弃高位,留下 0111,即 7。