HDLBits刷题笔记
今天在刷题的时候遇到一些神奇的错误/技巧:
在Exams/m2014 q4j中,
genvar i;
generate
for (i=1;i<3;i++) begin:adder
add u
(
.a (x[i] ) ,
.b (y[i] ) ,
.cin (c[i-1] ) ,
.cout (c[i] ) ,
.sum (sum[i] )
);
end
endgenerate
在使用generate例化模块的时候,如果将模块名改为x(因为输入变量就叫做x),似乎不会有语法错误,但是最后的结果是有问题的。
在半加器那块儿,发现你可以将{a,b} = c + d + e;,这样的表达式先计算后面的值,然后先满足a的位宽,然后再赋给b(应该吧)!!我下去再试试!!
之后在判断是否溢出的时候复习了一下大二上学期数电的内容,发现隐约记着点什么:
然后上网查询,找到了这个办法!!
双符号位判断。所谓双符号位,就是在正数前补0,在负数前补1,即00表示正号,11表示负号。如果进位将会导致符号位不一致,从而检测出溢出。结果的符号位为01时,称为上溢;为10时,称为下溢。
如:62h+63h=00 1010010+00 1010011=01 0100101,符号位为01,上溢。
如:f0h+88h=11 1110000+11 0001000=110 1111000,符号位为10,下溢。
刚开始写的时候还以为是符号位有1就算是溢出,发现仿真结果不对,最后对照结论和二进制计算器才发现,符号位不一致才算是溢出!
浙公网安备 33010602011771号