我是verilog的新手,我想用一个16x4 SRAM在verilog中创建一个64x8内存单元。我设计了它,但我不知道如何将其解释为verilog。我有16x4 SRAM和2到4解码器,但据我所知,我需要创建一个64x8,我不确定如何。这是我到目前为止的两个模块。我知道64x8内存单元使用2to4解码器和8x16x4 SRAM,至少根据我的设计。
module ram16x4(
input [3:0] adrs,
inout [3:0] data,
input chip_en, write_en, output_en
);
reg [0:15][3:0] mem;
assign data = ~chip_en & write_en & ~output_en ? mem[adrs]: 4'hz;
always@(*)
begin
if(chip_en == 0)
if(write_en == 0 && output_en == 1)
mem[adrs] = data;
end
endmodule
2到4解码器:
module 2to4decoder (a4, a5, _ce0, _ce1, _ce2, _ce3);
output w, x, y, z;
input a4, a5;
assign _ce0 = (~a4) & (~a5);
assign _ce1 = (~a4) & a5;
assign _ce2 = a4 & (~a5);
assign _ce3 = a4 & a5;
endmodule
答案 0 :(得分:1)
您的代码中存在一些不一致(2to4decoder参数是x,y或ce0,ce1?)所以我将回答假设您的模块的以下签名:(控制是低有效的,如您设计的那样)
ram16x4 (
input [3:0] adrs,
inout [3:0] data,
input chip_en,
input write_en,
input output_en
);
module 2to4decoder (
input a5,
input a4,
ouput _ce0,
ouput _ce1,
ouput _ce2,
ouput _ce3
};
该解决方案基于2种简单技术。一个用于扩展数据(从4到8),一个用于扩展地址空间(从16到64):
说完这一切,64x8解决方案基于上面的两个概念的结合,而且看起来像这样:(当使用generate时它可以更优雅,但那是另一个故事)
模块ram64x8( 输入[5:0] adrs, inout [7:0]数据, 输入chip_en,write_en,output_en);
wire ce0,ce1,ce2,ce3;
2to4解码器解码( .a5(adrs [5]), .a4(adrs [4]), ._ce0(~ce0), ._ce1(~ce1), ._ce2(~ce2), ._ce3(~ce3));
ram16x4 mem_0_0( .adrs(adrs [3:0]), .data(数据[ 3:0 ]), .chip_en( ce0 ), .write_en(write_en), .output_en(output_en));
ram16x4 mem_0_1( .adrs(adrs [3:0]), .data(数据[ 7:4 ]), .chip_en( ce0 ), .write_en(write_en), .output_en(output_en));
ram16x4 mem_1_0( .adrs(adrs [3:0]), .data(数据[ 3:0 ]), .chip_en( ce1 ), .write_en(write_en), .output_en(output_en));
ram16x4 mem_1_1( .adrs(adrs [3:0]), .data(数据[ 7:4 ]), .chip_en( ce1 ), .write_en(write_en), .output_en(output_en));
ram16x4 mem_2_0( .adrs(adrs [3:0]), .data(数据[ 3:0 ]), .chip_en( ce2 ), .write_en(write_en), .output_en(output_en));
ram16x4 mem_2_1( .adrs(adrs [3:0]), .data(数据[ 7:4 ]), .chip_en( ce2 ), .write_en(write_en), .output_en(output_en));
ram16x4 mem_3_0( .adrs(adrs [3:0]), .data(数据[ 3:0 ]), .chip_en( ce3 ), .write_en(write_en), .output_en(output_en));
ram16x4 mem_3_1( .adrs(adrs [3:0]), .data(数据[ 7:4 ]), .chip_en( ce3 ), .write_en(write_en), .output_en(output_en));
endmodule