verilog幂次方_Verilog学习笔记——有符号数的乘法和加法

有符号数的计算在 Verilog 中是一个很重要的问题(也很容易会被忽视),在使用 Verilog 语言编写 FIR 滤波器时,需要涉及到有符号数的加法和乘法,在之前的程序中我把所有的输入输出和中间信号都定义成有符号数,这样在计算时没有出现问题(实际在之前的程序中遇到了有符号和无符号数的问题,最后滤波结果不对,博客的程序是已经改正过的),下面实际试验一下 Verilog 的乘法问题;

1. 编写程序测试无符号数和有符号数的乘法

编写程序如下,其中,乘法的两个乘数分别是无符号、有符号的四种组合,输出的积也是分为无符号和有符号,共计 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 = data_in_unsigned_1 * data_in_signed_2;

//无符号 = 有符号 * 无符号

assign data_out_010 = data_in_signed_1 * data_in_unsigned_2;

//无符号 = 有符号 * 有符号

assign data_out_011 = data_in_signed_1 * data_in_signed_2;

//有符号 = 无符号 * 无符号

assign data_out_100 = data_in_unsigned_1 * data_in_unsigned_2;

//有符号 = 无符号 * 有符号

assign data_out_101 = data_in_unsigned_1 * data_in_signed_2;

//有符号 = 有符号 * 无符号

assign data_out_110 = data_in_signed_1 * data_in_un

你可能感兴趣的:(verilog幂次方)