Memory 如何在verilog中映射16个端口的内存 模块测试123(时钟、Rst\n); . . . 连线[7:0]端口1_数据; 连线[7:0]端口2_数据; 连线[7:0]端口3_数据; 连线[7:0]端口4_数据; 连线[7:0]端口5_数据; 连线[7:0]端口6_数据; 连线[7:0]端口7_数据; 连线[7:0]端口8_数据; 连线[7:0]端口9_数据; 连线[7:0]端口10_数据; 连线[7:0]端口11_数据; 连线[7:0]端口12_数据; 连线[7:0]端口13_数据; 连线[7:0]端口14_数据; 连线[7:0]端口15_数据; reg[flit_port_width-1:0]flit_out1; reg[flit_port_width-1:0]flit_out2; reg[flit_port_width-1:0]flit_out3; reg[flit_port_width-1:0]flit_out4; reg[flit_port_width-1:0]flit_out5; reg[flit_port_width-1:0]flit_out6; reg[flit_port_width-1:0]flit_out7; reg[flit_port_width-1:0]flit_out8; reg[flit_port_width-1:0]flit_out9; reg[flit_port_width-1:0]flit_out10; reg[flit_port_width-1:0]flit_out11; reg[flit_port_width-1:0]flit_out12; reg[flit_port_width-1:0]flit_out13; reg[flit_port_width-1:0]flit_out14; reg[flit_port_width-1:0]flit_out15; . . . 内存#(/*地址宽度*/32'd16, /*数据宽度*/32'd8, /*lo*/32'd0, /*hi*/32'd63)存储器1(.clk(clk) ,.rst(rst_n) ,.flit_out(flit_out 1) ,.dataout(端口1_数据) ); 内存#(/*地址宽度*/32'd16, /*数据宽度*/32'd8, /*lo*/32'd0, /*hi*/32'd63)存储器2(.clk(clk) ,.rst(rst_n) ,.flit_out(flit_out 2) ,.dataout(端口2_数据) ); 内存#(/*地址宽度*/32'd16, /*数据宽度*/32'd8, /*lo*/32'd0, /*hi*/32'd63)存储器3(.clk(clk)。。。 ); . . . 端模 内存模块( 飞出去, rst, 中华电力有限公司, 数据输出 ); 参数addr_width=1; 参数数据_宽度=1; 参数lo=0; 参数hi=1; 整数计数,i; 输入[34:0]飞出; 输入rst、clk; 输出[数据宽度-1:0]数据输出; 注册我们; reg[数据宽度-1:0]数据输出; reg[addr_width-1:0]addr; reg[数据宽度-1:0]数据输入; reg[数据宽度-1:0]内存[lo:hi]; 初始开始 计数=0;i=0; 结束 始终@(posedge clk)开始 count
我不完全理解这个问题,但发现了一些错误。您的代码包含:Memory 如何在verilog中映射16个端口的内存 模块测试123(时钟、Rst\n); . . . 连线[7:0]端口1_数据; 连线[7:0]端口2_数据; 连线[7:0]端口3_数据; 连线[7:0]端口4_数据; 连线[7:0]端口5_数据; 连线[7:0]端口6_数据; 连线[7:0]端口7_数据; 连线[7:0]端口8_数据; 连线[7:0]端口9_数据; 连线[7:0]端口10_数据; 连线[7:0]端口11_数据; 连线[7:0]端口12_数据; 连线[7:0]端口13_数据; 连线[7:0]端口14_数据; 连线[7:0]端口15_数据; reg[flit_port_width-1:0]flit_out1; reg[flit_port_width-1:0]flit_out2; reg[flit_port_width-1:0]flit_out3; reg[flit_port_width-1:0]flit_out4; reg[flit_port_width-1:0]flit_out5; reg[flit_port_width-1:0]flit_out6; reg[flit_port_width-1:0]flit_out7; reg[flit_port_width-1:0]flit_out8; reg[flit_port_width-1:0]flit_out9; reg[flit_port_width-1:0]flit_out10; reg[flit_port_width-1:0]flit_out11; reg[flit_port_width-1:0]flit_out12; reg[flit_port_width-1:0]flit_out13; reg[flit_port_width-1:0]flit_out14; reg[flit_port_width-1:0]flit_out15; . . . 内存#(/*地址宽度*/32'd16, /*数据宽度*/32'd8, /*lo*/32'd0, /*hi*/32'd63)存储器1(.clk(clk) ,.rst(rst_n) ,.flit_out(flit_out 1) ,.dataout(端口1_数据) ); 内存#(/*地址宽度*/32'd16, /*数据宽度*/32'd8, /*lo*/32'd0, /*hi*/32'd63)存储器2(.clk(clk) ,.rst(rst_n) ,.flit_out(flit_out 2) ,.dataout(端口2_数据) ); 内存#(/*地址宽度*/32'd16, /*数据宽度*/32'd8, /*lo*/32'd0, /*hi*/32'd63)存储器3(.clk(clk)。。。 ); . . . 端模 内存模块( 飞出去, rst, 中华电力有限公司, 数据输出 ); 参数addr_width=1; 参数数据_宽度=1; 参数lo=0; 参数hi=1; 整数计数,i; 输入[34:0]飞出; 输入rst、clk; 输出[数据宽度-1:0]数据输出; 注册我们; reg[数据宽度-1:0]数据输出; reg[addr_width-1:0]addr; reg[数据宽度-1:0]数据输入; reg[数据宽度-1:0]内存[lo:hi]; 初始开始 计数=0;i=0; 结束 始终@(posedge clk)开始 count,memory,mapping,verilog,Memory,Mapping,Verilog,我不完全理解这个问题,但发现了一些错误。您的代码包含: module testing123(Clk, Rst_n); . . . wire [7:0] port1_data; wire [7:0] port2_data; wire [7:0] port3_data; wire [7:0] port4_data; wire [7:0] port5_data; wire [7:0] port6_data; wire [7:0] port7_data; wire [7:0] port8_data; w
module testing123(Clk, Rst_n);
. . .
wire [7:0] port1_data;
wire [7:0] port2_data;
wire [7:0] port3_data;
wire [7:0] port4_data;
wire [7:0] port5_data;
wire [7:0] port6_data;
wire [7:0] port7_data;
wire [7:0] port8_data;
wire [7:0] port9_data;
wire [7:0] port10_data;
wire [7:0] port11_data;
wire [7:0] port12_data;
wire [7:0] port13_data;
wire [7:0] port14_data;
wire [7:0] port15_data;
reg [flit_port_width-1:0] flit_out1;
reg [flit_port_width-1:0] flit_out2;
reg [flit_port_width-1:0] flit_out3;
reg [flit_port_width-1:0] flit_out4;
reg [flit_port_width-1:0] flit_out5;
reg [flit_port_width-1:0] flit_out6;
reg [flit_port_width-1:0] flit_out7;
reg [flit_port_width-1:0] flit_out8;
reg [flit_port_width-1:0] flit_out9;
reg [flit_port_width-1:0] flit_out10;
reg [flit_port_width-1:0] flit_out11;
reg [flit_port_width-1:0] flit_out12;
reg [flit_port_width-1:0] flit_out13;
reg [flit_port_width-1:0] flit_out14;
reg [flit_port_width-1:0] flit_out15;
. . .
RAM_Memory #(/*addr_width*/ 32'd16,
/*data_width*/ 32'd8,
/*lo*/ 32'd0,
/*hi*/ 32'd63) Memory1(.clk(Clk)
,.rst(Rst_n)
,.flit_out(flit_out1)
,.dataout(port1_data)
);
RAM_Memory #(/*addr_width*/ 32'd16,
/*data_width*/ 32'd8,
/*lo*/ 32'd0,
/*hi*/ 32'd63) Memory2(.clk(Clk)
,.rst(Rst_n)
,.flit_out(flit_out2)
,.dataout(port2_data)
);
RAM_Memory #(/*addr_width*/ 32'd16,
/*data_width*/ 32'd8,
/*lo*/ 32'd0,
/*hi*/ 32'd63) Memory3(.clk(Clk) ...
);
. . .
endmodule
module RAM_Memory(
flit_out,
rst,
clk,
dataout
);
parameter addr_width = 1;
parameter data_width = 1;
parameter lo = 0;
parameter hi = 1;
integer count, i;
input [34:0] flit_out;
input rst,clk;
output [data_width - 1 : 0] dataout;
reg we;
reg [data_width - 1 : 0] dataout;
reg [addr_width - 1 : 0] addr;
reg [data_width - 1 : 0] data_in;
reg [data_width - 1 : 0] mem [lo:hi];
initial begin
count =0; i=0;
end
always @(posedge clk)begin
count<=count+1;
we<=0;
if(count>=1) begin
we<=1;
end
end
always @(we)begin
assign data_in = flit_out[7:0];
assign addr = flit_out[23:8];
mem[addr]<= data_in;
assign dataout = mem[addr];
end
always @(count)begin
if(count>=68)begin
count<=0;
end
end
endmodule
always @(posedge clk) begin
if (en) begin
//..
end
end
我可以看到您试图在4、16位宽的寄存器(原始内存)中存储64位值。我看不出15或16个端口与任何事情有什么关系。请您澄清一下,谢谢。如果答案只是与先前答案的链接,可能应该是接近投票,因为这是一个重复的问题。
always @(posedge clk) begin
if (en) begin
//..
end
end
always @* begin
data_in = filt_out[7:0]
addr = flit_out[23:8];
dataout = mem[addr];
always @(posedge clk)begin
if (we) begin
data_in <= flit_out[7:0];
addr <= flit_out[23:8];
mem[addr] <= data_in;
dataout <= mem[addr];
end
end
//Semantically split the bus
assign data_in = flit_out[7:0];
assign addr = flit_out[23:8];
always @(posedge clk)begin
if (we) begin
mem[addr] <= data_in;
dataout <= mem[addr];
end
end
module RAM_Memory(
flit_out,
rst,
clk,
dataout
);
parameter addr_width = 1;
parameter data_width = 1;
parameter lo = 0;
parameter hi = 1;
input [34:0] flit_out;
input rst,clk;
output [data_width - 1 : 0] dataout;
reg [data_width - 1 : 0] dataout;
module RAM_Memory#(
parameter ADDR_WIDTH = 1, //They don not have to be upper case
parameter DATA_WIDTH= 1, // But most languages semantically define upper case as constants
parameter LO = 0;
parameter HI = 1;
)(
input [34:0] flit_out,
input rst,
input clk,
output [DATA_WIDTH-1:0] dataout
);
RAM_Memory #(/*addr_width*/ 32'd16,
/*data_width*/ 32'd8,
/*lo*/ 32'd0,
/*hi*/ 32'd63) Memory2(.clk(Clk)
,.rst(Rst_n)
,.flit_out(flit_out2)
,.dataout(port2_data)
);
RAM_Memory #(
.ADDR_WIDTH( 6 ), //No need to specify the width of parameter
.DATA_WIDTH( 8 ),
.LO ( 0 ),
.HI ( 63 )
) Memory2 (
.clk ( Clk )
,.rst ( Rst_n )
,.flit_out ( flit_out2 )
,.dataout ( port2_data)
);