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];
我是否减少了多路复用器尺寸???
答案 0 :(得分:1)
不,这样打破它的大小会相同。
我认为你在这里复制了地址的价值,所以我不明白为什么你认为你有8x1多路复用器。你有128个可能的地址,所以如果你将它们与输出复用,你应该有一个8位128到1多路复用器。
如果将其拆分,那么你将拥有两个4位128对1多路复用器,这在综合中完全相同。