数的运算
一个N位数和一个M位数,N>M。两数相乘,结果为N+M位数;两数相加,结果为N+1位数。
两个N bit有符号数相乘时,先将两数进行符号位扩展为2N bit,再进行移位相加,最后截断高N bit,保留低N bit。
有符号数+有符号数=有符号数; 但是如果表达式中有一个无符号数时,所有操作数都会被强行转化为无符号数。
求补码
将一个正数变成它的相反数时,可以直接取反+1得到该负数的补码。
//dout=-din
//din=4'b0101 5
dout<=~din+1'b1;//dout=4'b1011 -5的补码
求Nbit有符号数的补码,可以将其与能表示的最大范围数(2^N)相加。
//din=-5 原码为4'b1101
dout<=din+2^4 //dout=11(4'b1011)
随机数
$random%b可以生成范围[(-b+1);(b-1)]内的随机数
{$random}%b可以生成范围[0;(b-1)]内的随机数