我正在尝试使用尽可能少的逻辑元件来合成Altera电路。此外,嵌入式乘法器不计入逻辑元素,因此我应该使用它们。到目前为止,电路在功能方面看起来是正确的。但是,以下模块使用大量逻辑元素。它使用了24个逻辑元件,我不知道为什么因为它应该使用8 +几个组合门用于case块。
我怀疑加法器,但我不是百分百肯定。但是,如果我的怀疑是正确的,是否可以将乘数用作简单的加法器?
module alu #(parameter N = 8)
(
output logic [N-1:0] alu_res,
input [N-1:0] a,
input [N-1:0] b,
input [1:0] op,
input clk
);
wire [7:0] dataa, datab;
wire [15:0] result;
// instantiate embedded 8-bit signed multiplier
mult mult8bit (.*);
// assign multiplier operands
assign dataa = a;
assign datab = b;
always_comb
unique case (op)
// LW
2'b00: alu_res = 8'b0;
// ADD
2'b01: alu_res = a + b;
// MUL
2'b10: alu_res = result[2*N-2:N-1]; // a is a fraction
// MOV
2'b11: alu_res = a;
endcase
endmodule
答案 0 :(得分:0)
您的case语句将生成一个4输入多路复用器,op作为select,它使用至少2个逻辑单元。但是,由于在case块中分配了一个8位变量,因此输出的每一位都需要2个逻辑元素。因此,对于大型多路复用器,总逻辑元素为8 * 2,对于加法器,总逻辑元素为8,总计为24。
我也在做这个项目所以我不会过分关注如何优化这个项目。但是我要告诉你的是,多路复用器和加法器都可以使用乘法器实现,最多8个。有了这个说,我不认为这种架构是乘法器实现的最佳选择。