如何减少多路复用器的大小

时间:2013-04-08 20:07:57

标签: verilog memory-model

module memory_module (input clk,input[0:6] address,input [0:7]data_input,
    input read_write,output [0:7]  data_output,input enable,output ready);
    reg ready;
    reg [0:7] data_output;
    reg [0:7] memory [127:0];

    initial
    begin
        ready=0;
    end
    always @(posedge clk)
    begin
        if(enable)
        begin
            ready=0;
            if(read_write)
            begin
                    data_output[0:3]= memory[address][0:3];
                    data_output[4:7]= memory[address][4:7];
            end
            else
            begin
                                        memory[address][4:7]=data_input[4:7];
                                        memory[address][0:3]=data_input[0:3];
            end
            ready=1;
        end
        else
            ready=0;
    end
endmodule

这是我用于内存模块设计的简单verilog代码(我想让我的代码更高效)

当我写 data_output [0:7] = memory [address] [0:7]; 时,它会创建一个8X1 mux

写作

data_output[0:3]= memory[address][0:3];
data_output[4:7]= memory[address][4:7];

我是否减少了多路复用器尺寸???

1 个答案:

答案 0 :(得分:1)

不,这样打破它的大小会相同。

我认为你在这里复制了地址的价值,所以我不明白为什么你认为你有8x1多路复用器。你有128个可能的地址,所以如果你将它们与输出复用,你应该有一个8位128到1多路复用器。

如果将其拆分,那么你将拥有两个4位128对1多路复用器,这在综合中完全相同。