如何使用乘法器生成简单的加法器?

时间:2014-03-10 15:16:22

标签: system-verilog synthesis

我正在尝试使用尽可能少的逻辑元件来合成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

1 个答案:

答案 0 :(得分:0)

您的case语句将生成一个4输入多路复用器,op作为select,它使用至少2个逻辑单元。但是,由于在case块中分配了一个8位变量,因此输出的每一位都需要2个逻辑元素。因此,对于大型多路复用器,总逻辑元素为8 * 2,对于加法器,总逻辑元素为8,总计为24。

我也在做这个项目所以我不会过分关注如何优化这个项目。但是我要告诉你的是,多路复用器和加法器都可以使用乘法器实现,最多8个。有了这个说,我不认为这种架构是乘法器实现的最佳选择。