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 の多重化が必要です。

これを分割すると、2 つの 4 ビット 128 対 1 のマルチプレクサが得られますが、これは合成ではまったく同じことです。

于 2013-04-08T21:06:39.870 に答える