#乘法与位运算
题目描述:
进行一个运算单元的电路设计,A[7:0]*11111011,尽量用最少的资源实现,写出对应的 RTL 代码。
信号示意:
A信号输入
B 信号输出
解析:首先,考虑11111011是什么,其值为251,在乘法运算中可以将其分解为256 -4 -1,那么为什么是减去4和1呢 因为它们分别对应 8‘b100 和 8’b1。题目化为 A*(2^8-2^2-1).
在位运算中,2的整数倍运算可以直接使用移位进行,这样可以极大的减少资源占用。例如 A*256(即2^8)相当于 A 左移 8 位。
`timescale 1ns/1ns
module dajiang13(
input [7:0] A,
output [15:0] B
);
wire [15:0] reg1;
wire [15:0] reg2;
wire [15:0] reg3;
assign reg1 = { A, {8{1'b0}}};
assign reg2 = { {6{1'b0}} , A ,{2{1'b0}}};
assign reg3 = { {8{1'b0}} , A};
assign B = reg1 - reg2 - reg3;
endmodule