首先导入两个单口ram的IP核,我设置的是写优先模式,同时设置了一个写使能信号

首先设置状态机,第一个状态为闲置状态,第二个状态为写ram1,只把数据写进ram,不输出。第三个状态,写ram2读ram1,第四个状态为结束状态。自定义了一个信号为读使能信号,其实也不是读使能,就是决定输出是哪个ram的一个使能信号。读写的时候地址都要加1,所以定义了一个cnt信号作为状态转移。
接下来上代码:
module sing_ram2(
input clka,
input rst_n,
input [7:0] din,
output reg out_valid,
output reg [7:0] dout,
output wire [7:0] douta,
output wire [7:0] doutb,
output reg [1:0] state
);
reg [9:0] addra;
reg [9:0] addrb;
reg [9:0] cnt;
reg we_wr1,we_wr2,en_rd1,en_rd2;
parameter IDLE = 2'b00;
parameter RAM1_WR = 2'b01;
parameter RAM1_RD = 2'b10;
parameter RAM2_RD = 2'b11;
always @(posedge clka or negedge rst_n)
if(!rst_n)
cnt<=0;
else
cnt<=cnt+1;
always @(posedge clka or negedge rst_n)
if(!rst_n)
begin
state<=IDLE;
we_wr1<=1'b1;
en_rd1<=1'b0;
we_wr2<=1'b0;
en_rd2<=1'b0;
addra<=10'd0;
addrb<=10'd0;
end
else
begin
case(state)
IDLE : if(we_wr1)

本文介绍了如何在FPGA中使用两个单口RAM进行乒乓操作,通过状态机控制写入和读取过程。利用写使能和读使能信号,在一个时钟周期内实现数据的连续流动,避免了数据覆盖问题,从而实现并行读写操作。
最低0.47元/天 解锁文章
2124

被折叠的 条评论
为什么被折叠?



