有符号数的计算在 Verilog 中是一个很重要的问题(也很容易会被忽视),有时为了简单方便,我常常会使用“*”来偷懒,这样就不用去调用乘法器了,但是结果常常不同,下面实际试验一下 Verilog 的乘法问题;
编写程序测试无符号数和有符号数的乘法
编写程序如下,其中,乘法的两个乘数分别是无符号、有符号的四种组合,输出的积也是分为无符号和有符号,共计 8 种可能;
module signed_test(
input [7:0] data_in_unsigned_1,
input [7:0] data_in_unsigned_2,
input signed[7:0] data_in_signed_1,
input signed[7:0] data_in_signed_2,
output [15:0] data_out_000,
output [15:0] data_out_001,
output [15:0] data_out_010,
output [15:0] data_out_011,
output signed[15:0] data_out_100,
output signed[15:0] data_out_101,
output signed[15:0] data_out_110,
output signed[15:0] data_out_111);
//无符号 = 无符号 * 无符号
assign data_out_000 = data_in_unsigned_1 * data_in_unsigned_2;
//无符号 = 无符号 * 有符号
assign data_out_001