你这问圆颤题是关于截位的,定点数截位关键是小数点的位置。
保留多少位主要看你想要的精度了,例如两个定点数相乘,截位其实就是截掉小数点最后面的数,假如乘积结果为32bit,p31p30p29p28(实际小数点在此)p27p26..p0,若保留小数点后12位,则最大截位误差为2^-12,也就是跟不截位相计算结果最大相差不到0.001,你要看这个精度对于你够不够,一般我们计算是够了,如果不够继续保留多些,如果精度只要满足千分之一,保留小数点后10位都可以了。
可以再讨论。
这是把十六进制则颂转成十进制来显示需要解释的就
if(DTO[4:0]>=5'b01010) begin//相加结果超过10的话
D[3:0] = (DT0[3:0]+4'b0110)//十六正姿进制的数需要举盯绝加上6来完成进位
D[4] = 1
end
这段
D[3:0] = (DT0[3:0]+4'b0110)D[4] = 1两句等价于D[4:0] = DT0[4:0]+4'b0110一句
另外,时序逻辑用<=来赋值,不要用=
REG_tmp := Q_tmp &SIREG_tmp 是3位二进制数,Q_tmp,是2位二进制数,SI是1位二进制数。意思就是一个2位数和1个1位数合起来一个3位数赋给1个3位数。
Q_tmp <= REG_tmp(1 DOWNTO 0)
写成判陪Verilog就是 :
{Q_tmp[1],Q_tmp[0]}<={Q_tmp[0],SI}
时钟沿上升沿作掘乎蠢用下 把输入的SI移到Q_tmp[0]上,Q_tmp[0]移到Q_tmp[1];
第一个clk吧SI移到Q_tmp[0],现在SI就是Q_tmp[0],顷孙在下个clk他又移到Q_tmp[1]。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)