Verilog中给有数值信号前加负号出现错误的问题

在这里插入图片描述
比如这个图片中的代码,phase_acc一共是24位,前两位是相位数值,所以取值只到第22位。当时第二行是按照算法中的2047 - X去写的代码,原本下面的那行是这样写的:

next_cos_phase = - phase_acc[21:11];

最后跑出来数据错误,错误位很小,就是最后一位上下错1的样子,但是信号前加负号相当于取补码,计算的时候是取反加1的,这个时候的代码就相当于用 2048 - X 了,所以数据对比错误,此时要对应上需要减去取补码时加的这个1就可以了。

猜你喜欢

转载自blog.csdn.net/Hennys/article/details/120544236