直接乘3,即011,3位数乘以一个13位的数,位宽扩展为16位(系统是这么执行的),高位为符号位,如果你想要15位数据的话,截位如下,要保留最高位,因为他是符号位:
reg signed [15 : 0] ssignal;
reg signed [14 : 0] my_ssignal;//
my_ssignal <= {ssignal[15],ssigna[13:0]}。
这样应该是对的。
这不是溢出啊,当最高位是1时数据就定义为负数。如果你想看整数范围内数据乘积,改为unsigned类型。
使用“*”的话,默认的乘法器的输入是补码形式的数据吧,3是“011”,就是默认是一个三位数乘以一个13位数,截取了低15位,所以你看你的波形,输入的正弦波乘以一个正数“3”之后,输出结果的相位和输入是相反的。