SDRAM控制器设计(8)SDRAM控制器仿真验证

SDRAM控制器设计(8)SDRAM控制器仿真验证到此,简单的可进行读写操作的SDRAM控制器模块就设计好了。接下来,结合仿真模型(镁光官网提供的SDRAM模型)sdr文件,和编写的testbench文件验证所设计的控制器是否正确。testbench如下`timescale1ns/1ns`defineCLK100_PERIOD10modulesdram_control_tb;`include”../src/Sdr…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

到此,简单的可进行读写操作的 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;
end

initial
begin
forever begin
@(posedge Wr_data_vaild);
repeat(SC_BL) //改变待(突发)写入的数据
begin
#`CLK100_PERIOD;
Wr_data = Wr_data + 1;
end
end
end

endmodule


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

仿真波形图:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160086.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • activity和task_startactivity无效

    activity和task_startactivity无效我现在需要在点击listview的某个item的时候启动一个activity,因为我的listview不在activity中,所以为了简便我直接用context来调用activity,如下:Intentintent=newIntent(view.getContext(),BlogDetail.class);intent.putExtra(“blog_id”,blog.getId());…

  • Oracle:varchar和varchar2的区别

    Oracle:varchar和varchar2的区别Oracle:varchar和varchar2的区别 1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;2.varchar2把空串等同于null处理,而varchar仍按照空串处理;3.varchar2字符要用几个字节存储,要看数据库使用的字符集. 然后char和varchar2的区别是

  • 完全二叉树图例_二叉树遍历图解

    完全二叉树图例_二叉树遍历图解画解二叉搜索树

    2022年10月21日
  • java struts2 漏洞_struts2漏洞原理及解决办法

    java struts2 漏洞_struts2漏洞原理及解决办法1、原理Struts2的核心是使用的webwork框架,处理action时通过调用底层的getter/setter方法来处理http的参数,它将每个http参数声明为一个ONGL(这里是ONGL的介绍)语句。当我们提交一个http参数:?user.address.city=Bishkek&user[‘favoriteDrink’]=kumysONGL将它转换为:action.getUser…

  • Raspberry Pi (树莓派)折腾记之一

    Raspberry Pi (树莓派)折腾记之一那么什么是RaspberryPi?RaspberryPi是一款针对电脑业余爱好者、教师、小学生以及小型企业等用户的迷你电脑,预装Linux系统,体积仅信用卡大小,搭载ARM架构处理器,运算性能和智能手机相仿。在接口方面,RaspberryPi提供了可供键鼠使用的USB接口,此外还有快速以太网接口、SD卡扩展接口以及1个HDMI高清视频输出接口,可与显示器或者TV…

  • BUZZER_人为什么要见世面

    BUZZER_人为什么要见世面官方说法:Google刚刚公布了一个产品——GoogleBuzz。Buzz是最新的社会媒体。这也巩固了Gmail的社会地位。Google的产品管理人员也就是Google的副经理BradleyHorowitz介绍了Buzz。Buzz的主要功能集中于人们所偏爱的实时共享和交流经验等功能。这两大主题是Buzz的核心理念。当你进入Gmail就会有页面带领你了解Buzz。在收件箱的右边会有一个“Buz…

    2022年10月16日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号