存储器单元Verilog
我是verilog的新手,我想用16x4 SRAM在verilog中创建一个64x8内存单元。我设计了它,但我不知道如何将它翻译成verilog。我有16x4 SRAM和2到4解码器,但据我所知,我需要创建一个64x8,我不知道如何创建。这是我到目前为止的两个模块。我知道64x8内存单元使用2to4解码器和16x4 SRAM的8个,至少根据我的设计存储器单元Verilog,verilog,Verilog,我是verilog的新手,我想用16x4 SRAM在verilog中创建一个64x8内存单元。我设计了它,但我不知道如何将它翻译成verilog。我有16x4 SRAM和2到4解码器,但据我所知,我需要创建一个64x8,我不知道如何创建。这是我到目前为止的两个模块。我知道64x8内存单元使用2to4解码器和16x4 SRAM的8个,至少根据我的设计 module ram16x4( input [3:0] adrs, inout [3:0] data, input chip
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
您的代码中存在一些不一致性(2to4decoder参数是x,y或ce0,ce1?),因此我将假设您的模块具有以下特征来回答:(控件处于低活动状态,如您设计的那样) 该解决方案基于两种简单的技术。一个用于扩展数据(从4扩展到8),另一个用于扩展地址空间(从16扩展到64):
- 数据-为了扩展数据(比如16x8内存),您需要两个实例,它们采用相同的控制信号和不同的数据部分-一个采用位[3:0],另一个采用位[7:4]。每次写入和读取都在两个实例上执行
- 地址空间-为了扩展地址空间(比如64x4内存),您应该使用2to4解码器。这样,地址0-15映射到实例0,地址16-31映射到实例1,依此类推。。。根据地址MSB,每次写入或读取仅对一个实例执行
问题是如何用16x4块构建64x8?向我们展示您的想法。或者,您认为32x4和16x8会是什么样子。我们将从那里纠正/指导您。@Morgan是的,这正是我想弄明白的,很可能我也不理解verilog。您能否将您认为的
模块ram64x8
添加到问题中,即使它只是实例化了几个16x4块。
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
};