如何写FPGA读写SRAM的仿真程式??
使用verilog写了个FPGA读写SRAM的程式,思路就是当SRAM写能有效时,FPGA往SRAM的第一个地址写入一个数据,当读有效时,再把该数读出来,延时一段时间后,...
使用verilog写了个FPGA读写SRAM的程式,思路就是当SRAM写能有效时,FPGA往SRAM的第一个地址写入一个数据,当读有效时,再把该数读出来,延时一段时间后,地址及数据顺序自增1,上述使用到双向口,可在写仿真程式时,仿真波形不对,我钻研有一周了,因为是自学外加我悟性不是很高,学习进度非常缓慢,现求助于网络,麻烦知道的网友给予答疑解惑,谢谢!
仿真程序如下:
`timescale 1 ns/ 1 ps
`define test;
module sram_vlg_tst();
reg clk;
reg rst_n;
reg sdlink;
reg [14:0] addr_r;
reg[7:0] wr_data;
// wires
wire led;
wire [7:0] sram_data; //FPGA的双向口,写能时,sram_data为输出口,往SRAM写数据
//读能时,sram_data为输入口,从SRAM读数据;
sram i1 (
// port map - connection between master ports and signals/registers
.clk(clk),
.led(led),
.rst_n(rst_n),
.sram_addr(sram_addr),
.sram_data(sram_data),
.sram_wr_n(sram_wr_n)
);
`ifdef test
initial begin
clk=0;
forever #10 clk=~clk;
end
initial begin
rst_n=0;
#1000;
rst_n=1;
sdlink=1; //Sdlink为高时,FPGA往SRAM第0地址输入数据
addr_r=15'd0;
wr_data=8'd2;
end
`else
initial begin
clk=0;
forever #10 clk=~clk;
end
initial begin
rst_n=0;
#1000;
rst_n=0;
sdlink=0; //Sdlink为高时,FPGA往SRAM第0地址输入数据
addr_r=15'd0;
end
`endif
endmodule 展开
仿真程序如下:
`timescale 1 ns/ 1 ps
`define test;
module sram_vlg_tst();
reg clk;
reg rst_n;
reg sdlink;
reg [14:0] addr_r;
reg[7:0] wr_data;
// wires
wire led;
wire [7:0] sram_data; //FPGA的双向口,写能时,sram_data为输出口,往SRAM写数据
//读能时,sram_data为输入口,从SRAM读数据;
sram i1 (
// port map - connection between master ports and signals/registers
.clk(clk),
.led(led),
.rst_n(rst_n),
.sram_addr(sram_addr),
.sram_data(sram_data),
.sram_wr_n(sram_wr_n)
);
`ifdef test
initial begin
clk=0;
forever #10 clk=~clk;
end
initial begin
rst_n=0;
#1000;
rst_n=1;
sdlink=1; //Sdlink为高时,FPGA往SRAM第0地址输入数据
addr_r=15'd0;
wr_data=8'd2;
end
`else
initial begin
clk=0;
forever #10 clk=~clk;
end
initial begin
rst_n=0;
#1000;
rst_n=0;
sdlink=0; //Sdlink为高时,FPGA往SRAM第0地址输入数据
addr_r=15'd0;
end
`endif
endmodule 展开
展开全部
sram_wr_n没有激励。这是sram的写使能信号,低有效。
追问
我在源代码里有assign sram_wr_n=~sdlink,在测仿真程式里还要再加进去么?
追答
sram i1 (
// port map - connection between master ports and signals/registers
.clk(clk),
.led(led),
.rst_n(rst_n),
.sram_addr(sram_addr),
.sram_data(sram_data),
.sram_wr_n(sram_wr_n)
);
这个就是向sram输入激励。你看看波形中sram_wr_n是否和你预期的一样。
要加入assign sram_wr_n=~sdlink
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询