没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
47页
基于FPGA的SRAM、SDRAM、DDR2 内存应用实例,内容包括异步 SRAM-61LV25616 Busrt 读写测试 Verilog、SDR SDRAM 读写测试 Verilog 和DR2 SDRAM 基于 MCB 硬核读写测试 Verilog。每个示例中包括详细的时序分析、仿真示例和代码示例。每个示例的代码均采用Verilog语言编写。简单易懂,适用性强,非常适合刚接触FPGA设计的初学者
资源推荐
资源详情
资源评论
RAM、SDRAM、DDR2 内存应用实战
1 异步 SRAM-61LV25616 Busrt 读写测试 Verilog
SRAM 一般作为高速缓存使用,XILINX Sparan6 系列可以支持
SRAM/DDR/DDR2/DDR3,黑精灵 3 代 FPGA 型号为 XC6SLX9-TQG144,无法
支持 DDR/DDR2/DDR3,为了实现一款全能型的高性价比开发,支持大量 verilog
项目的实例,又能支持 Microblaze SOC 项目部分的实例,因此选择了一片
SRAM。
PCB 设计:
黑精灵 3 代对于 SRAM 数据通信速度需要达到 100MHZ,因此 FPGA 和 SRAM 之
前的数据连线需要进行等长设计。黑精灵 3 代 PCB 和 SRAM 布线版图如下。
异步 SRAM-61LV25616 读写时序图
Chipscope 仿真图-系统时钟 50MHZ:
基于 Verilog Busrt 读写 SRAM Busrt 长度为 256X16
module Sram #(
parameter
BUSRT_LEN = 256)
(
input Clk,
input Rst_n,
//SRAM 读写控制模块接口
input [17:0] sram_addr_wr,
input [17:0] sram_addr_rd,
input [15:0] sram_wr_data,
output [15:0] sram_rd_data,
input sram_wr_req,
input sram_rd_req,
output sram_wr_ack,
output sram_rd_ack,
//SRAM 信号接口
output reg sram_we,
output reg sram_ce,
output reg sram_oe,
output reg sram_ub,
output reg sram_lb,
output reg [17:0] sram_addr,
inout [15:0]sram_data
);
parameter IDLE = 6'd0;
parameter WRITE = 6'd1;
parameter WAIT = 6'd2;
parameter READ = 6'd3;
parameter READ_D = 6'd4;
reg [5:0]state;
assign sram_wr_ack = (state==WAIT);
assign sram_rd_ack = (state==READ);
//读写地址
always @(posedge Clk)begin
if(~Rst_n)begin
sram_addr=18'd0;
end
else
begin
if(state==WAIT||state==WRITE)sram_addr = sram_addr_wr;
else if(state==READ||state==IDLE||state==READ_D)sram_addr = sram_addr_rd;
end
end
always @(*)begin
if(state==WAIT){sram_we,sram_ce,sram_oe,sram_ub,sram_lb}=5'b0;
else if(state==READ){sram_we,sram_ce,sram_oe,sram_ub,sram_lb}=5'b1_0000;
else {sram_we,sram_ce,sram_oe,sram_ub,sram_lb}=5'b1_1111;
end
reg [9:0]wr_bust_cnt;
reg [9:0]rd_bust_cnt;
always @(posedge Clk)begin
if(~Rst_n)begin
wr_bust_cnt<=8'd0;
rd_bust_cnt<=8'd0;
end
else
begin
if(state==WAIT)wr_bust_cnt<=wr_bust_cnt+1'b1;
else if(state==READ)rd_bust_cnt<=rd_bust_cnt+1'b1;
else if(state==IDLE)begin
wr_bust_cnt<=0;
rd_bust_cnt<=0;
end
end
end
//读写状态机
always @(posedge Clk)begin
if(~Rst_n)begin
state<=IDLE;
end
else
begin
case(state)
IDLE:
if(sram_wr_req) state <= WRITE;//写请求
else if(sram_rd_req) state <= READ;//读请求
WRITE:
state<=WAIT;
WAIT:
if(wr_bust_cnt==159) state <= IDLE;
else state <= WRITE;
READ:
if(rd_bust_cnt==BUSRT_LEN-1) state <= READ_D;
剩余46页未读,继续阅读
资源评论
icysmile131
- 粉丝: 3148
- 资源: 111
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功