0
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 多路复用器

通过写作

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

我是否减少了多路复用器的大小???

;

4

1 回答 1

1

不,像这样分解它的大小将相同。

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

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

于 2013-04-08T21:06:39.870 回答