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

Verilog 如何减小多路复用器的大小,verilog,memory-model,Verilog,Memory Model,这是我设计内存模块的简单verilog代码(我想让我的代码更高效) 当我写入数据时,输出[0:7]=内存[address][0:7]它创建一个8X1多路复用器 通过写作 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;

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

当我写入数据时,输出[0:7]=内存[address][0:7]它创建一个8X1多路复用器

通过写作

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
我是否在减少多路复用器的大小


)

不,像那样把它拆开大小是一样的

我想你在这里对地址的值进行多路复用,所以我不明白你为什么认为你有一个8x1多路复用器。您有128个可能的地址,因此如果将这些地址多路复用到输出,您应该有一个8位128对1的多路复用器


如果将其拆分,则将有两个4位128对1的MUX,这与合成中的情况完全相同

如果您想构建一个带有多路复用器的128元素dram,则不需要。你为什么想缩小尺寸?这样我就可以把我的内存做成一个二维数组,比如32x8对不起,但我还是不明白你的意思。无论你想在什么芯片上构建它,你都会受到限制吗?我不认为减少多路复用器的大小与构建二维内存阵列有什么关系。如果你需要更小的RAM,那么就使用DRAM,虽然我不知道最终的目标是什么,但我还是不明白为什么是128x1多路复用。每当我必须从内存中选择值时,它取决于地址变量(它充当mux的选择器),这是8位值。当我们说“N-to-1”mux时,我们谈论的不是地址的宽度,而是输入的数量。4对1多路复用器有2个地址位和4个数据输入。8对1多路复用器有3个地址位和8个数据输入。256对1多路复用器有8个地址位和256个数据输入。
data_output[0:3]= memory[address][0:3];
data_output[4:7]= memory[address][4:7];