到此,简单的可进行读写操作的 SDRAM 控制器模块就设计好了。

接下来,结合仿真模型(镁光官网提供的 SDRAM 模型)sdr文件,和编写的 testbench 文件验证所设计的控制器是否正确。
testbench如下

`timescale 1ns/1ns
`define CLK100_PERIOD 10
module sdram_control_tb;
`include "../src/Sdram_Params.h"//本地文件路径
reg Clk;
reg Rst_n;
reg Wr;
reg Rd;
reg [`ASIZE-1:0] Caddr;
reg [`ASIZE-1:0] Raddr;
reg [`BSIZE-1:0] Baddr;
reg [`DSIZE-1:0] Wr_data;
wire[`DSIZE-1:0] Rd_data;
wire Wr_data_vaild;
wire Rd_data_vaild;
wire sdram_clk;
wire sdram_cke;
wire sdram_cs_n;
wire sdram_ras_n;
wire sdram_cas_n;
wire sdram_we_n;
wire [`BSIZE-1:0] sdram_bank;
wire [`ASIZE-1:0] sdram_addr;
wire [`DSIZE-1:0] sdram_dq;
wire [`DSIZE/8-1:0]sdram_dqm;
assign sdram_clk = ~Clk;
wire Rdata_done;//SDRAM 控制器模块例化
sdram_control sdram_control(
.Clk(Clk),
.Rst_n(Rst_n),
.Wr(Wr),
.Rd(Rd),
.Caddr(Caddr),
.Raddr(Raddr),
.Baddr(Baddr),
.Wr_data(Wr_data),
.Rd_data(Rd_data),
.Rd_data_vaild(Rd_data_vaild),
.Wr_data_vaild(Wr_data_vaild),
.Wdata_done(),
.Rdata_done(Rdata_done),
.Sa(sdram_addr),
.Ba(sdram_bank),
.Cs_n(sdram_cs_n),
.Cke(sdram_cke),
.Ras_n(sdram_ras_n),
.Cas_n(sdram_cas_n),
.We_n(sdram_we_n),
.Dq(sdram_dq),
.Dqm(sdram_dqm)
);//SDRAM 模型例化
sdr sdram_model(
.Dq(sdram_dq),
.Addr(sdram_addr),
.Ba(sdram_bank),
.Clk(sdram_clk),
.Cke(sdram_cke),
.Cs_n(sdram_cs_n),
.Ras_n(sdram_ras_n),
.Cas_n(sdram_cas_n),
.We_n(sdram_we_n),
.Dqm(sdram_dqm)
);initial Clk = 1'b1;
always #(`CLK100_PERIOD/2) Clk = ~Clk;initial
begin
Rst_n = 0;
Wr = 0;
Rd = 0;
Caddr = 0;
Raddr = 0;
Baddr = 0;
Wr_data = 0;
#(`CLK100_PERIOD*200+1);
Rst_n = 1;
@(posedge sdram_control.sdram_init.Init_done)
#2000;
repeat(100) //写入 100 组数据
begin
Wr = 1;
Baddr = 2;
#`CLK100_PERIOD;
Wr = 0;
if(Caddr == 512-SC_BL)begin
Caddr = 0;
Raddr = Raddr + 1; //1 行写满,行加 1
end
else
Caddr = Caddr + SC_BL;
#5000; //延时 5us
end
Caddr = 0;
Raddr = 0;
#5000;
repeat(100) //读出 100 组数据
begin
Rd = 1'b1;
#`CLK100_PERIOD;
Rd = 1'b0;
if(Caddr == 512-SC_BL)begin
Caddr = 0;
Raddr = Raddr + 1; //1 行读完,行加 1
end
else
Caddr = Caddr + SC_BL;
#5000; //延时 5us
end
#5000;
$stop;
endinitial
begin
forever begin
@(posedge Wr_data_vaild);
repeat(SC_BL) //改变待(突发)写入的数据
begin
#`CLK100_PERIOD;
Wr_data = Wr_data + 1;
end
end
endendmodule

这里仿真中 SDRAM 控制模块突发长度设置为 8,列选通潜伏期设置为 2。
本次仿真过程是向SDRAM中bank地址为2的块中写入100组突发长度的数据,然后读出这 100 组数据,写入数据在写数据有效区间内改变。观察比较写入与读出数据来验证控制设计是否正确。

仿真波形图:

SDRAM控制器设计(8)SDRAM控制器仿真验证相关推荐

  1. 四旋翼无人机反步法控制器设计(含simulink仿真)

    反步法设计: 1.建立四旋翼无人机非线性模型: 2.位置环虚拟控制律及反步控制器设计: 3. 姿态解算 4.姿态环虚拟控制律及反步控制器设计: 5.搭建simulink,仿真结果如下:  

  2. 神经网络控制器设计步骤,神经网络控制器稳定性

    神经网络控制器怎样搭建 什么是神经网络控制技术 神经网络控制技术是一项复杂的系统控制技术,一般应用在变频器的控制中,它是通过对系统的辨识.运算后对变频器进行控制的一种新技术AI爱发猫 www.aifa ...

  3. 汽车主动悬挂系matlab,基于Matlab的汽车主动悬架控制器设计与仿真.doc

    基于Matlab的汽车主动悬架控制器设计与仿真 <现代控制理论及其应用>课程小论文 基于Matlab的汽车主动悬架控制器设计与仿真 学院:机 械 工 程 学 院 班级() 姓名: 2015 ...

  4. 二阶积分系统L1自适应控制器设计

    二阶积分系统极点配置 使用二阶积分系统设计的原因: - 二阶积分系统与四旋翼内环具有一定的相似性(动系下的角动量微分需考虑随动) - 二阶积分系统控制器设计相对简单,但包含L1设计需要考虑的全部内容 ...

  5. matlab数字pid控制仿真程序,基于MATLAB的数字PID控制器设计及仿真分析

    基于MATLAB的数字PID控制器设计及仿真分析 基于基于MATLABMATLAB的数字的数字PIDPID控制器设计及仿真分析控制器设计及仿真分析 摘摘 要要 PID控制作为历史最为悠久,生命力最强的 ...

  6. 计算机组成原理硬布线实验心得,计算机组成原理课程设计—硬布线控制器的设计与实现...

    计算机组成原理课程设计-硬布线控制器的设计与实现 (13页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 硬布硬布线线控制器的控制器的设计 ...

  7. FPGA之SDRAM控制器设计(三)

    FPGA之SDRAM控制器设计(三):写 由于已经涉及了上电刷新,写三个大的状态转移,先把状态转移图给出.主控状态转移图是基于手册上描述来的.在代码注释中会给出每个状态的意义解释. 写时序图 写状态转 ...

  8. 基于FPGA的SDRAM控制器设计(二)

    基于FPGA的SDRAM控制器设计(二) 1. SDRAM理论基础 2. SDRAM初始化模块以及仿真 3.TOP模块的仲裁机制 4. SDRAM刷新模块代码以及仿真 5.代码 6.参考资料 1. S ...

  9. 基于FPGA的SDRAM控制器设计(1)

    基于FPGA的SDRAM初始化配置 SDRAM简述 SDRAM的引脚及作用 SDRAM初始化时序控制 SDRAM上电时序代码 SDRAM测试模块的代码 仿真测试结果 参考文献 总结 SDRAM简述 S ...

  10. SDRAM控制器设计

    SDRAM控制器设计 SDRAM 器件引脚示意图和功能框图如下: SDRAM 器件有如下的特性 通常情况下, SDRAM 存储器工作在 3.3V 的电压下(需要注意的是 DDR DRAM工作电压是 2 ...

最新文章

  1. 去掉[]中的英文(正则表达式)C#
  2. 跨域资源共享的10种方式(转)
  3. 每日一皮:程序员距离人生目标只有一个沟
  4. 动态链接到MFC的DLL(转)
  5. mysql闪退或者can not connect 127.0.0.1
  6. Linux / 设置和查看环境变量的方法
  7. MySQL多个线程同时写数据_多个线程可以同时将数据写入文件吗?
  8. 51C语言编译后执行到一半,“C语言” 读书札记之[再续编译执行]
  9. Java工作笔记-AJAX实现整体不变,局部更新(与整体刷新比较)
  10. 跳转语句_javascript流程语句(单分支)
  11. detectron2 ImportError: cannot import name ‘_C‘ from ‘detectron2‘
  12. VC第三方界面库xtremetoolkitPro使用说明
  13. 数学建模1---基本方法和步骤
  14. POST 请求实现任意的文件下载
  15. scrapy+python爬地图参照物应该有的坑及解决办法
  16. LayUI 之动态树形菜单
  17. Linux--文件操作
  18. 【解决方法(最详细)】WIN10系统使用Teamviewer远程连接时被检测出商业用途
  19. [喵咪软件推荐(1)]全球国家信息库
  20. criterial查询(2014-05-29 03:51)续-----Example

热门文章

  1. Anaconda完全卸载教程(Windows10系统)
  2. 一阶广义差分模型_计量经济学习题第5章 自相关性
  3. 计算流体力学c语言教程,计算流体力学教程
  4. tp5 引入阿里云短信验证码
  5. 抖音快手短视频 影视后期制作工具网址大全
  6. url 在线解码 工具
  7. IGBT工作原理,解析IGBT工作原理及作用
  8. IGBT热模型基本原理及其建模方法
  9. android 弹窗banner,弹窗交互规范分析|UI|观点|DesigneR_D - 原创文章 - 站酷 (ZCOOL)
  10. 大学生 大创 软著申请指南(图文含模板)(专用于大创,这篇就够了!纯干货!)