首页 > 编程知识 正文

realtek lan控制器什么意思(ddr3控制器)

时间:2023-05-03 23:13:18 阅读:75540 作者:20

1.SDRAM配置文件简介:SDRAM是同步动态随机存储器,同步是指时钟与外部输入的时钟匹配,即与外部共享一个时钟; 动态是指在每个时间段进行刷新操作。 否则,内部数据将会丢失。 这也由存储的特性决定。随机意味着可以自行指定数据存储地址。 3358www.Sina.com/:SDRAM有多个存储体,每个存储体都有自己的矩阵地址,并且彼此独立。 读写时,必须指定该存储体的行,并读写该列。 http://www.Sina.com/3358 www http://www.Sina.com/: SDRAM输入和输出的数据线在共用的本文中使用的SDRAM在黑金AX4010中

2. SDRAM操作流程开机后,初始化为仲裁状态机,刷新请求优先执行。 读写请求的优先顺序可以在bank与地址3. SDRAM的初始化中找到手册,参照初始化的时序图

其中行列地址线是共用的,下面会具体的说明是SDRAM使能线,在运行中可以一直保持较高

命令,command由四条线组成:数据,您可以在手册中轻松找到不同的命令。 那4条线的高低水平分别是什么样的?

3358www.Sina.com/是一个掩码,用于设置dqm的值。 读写sdram时,只能对数据的前8位或后8位或16位感兴趣。ps:是不是感觉挺简单的()

CKE是矩阵地址线,COMMAND

CS,RAS,CAS,WE是bank,指定对该bank进行操作

DQM:是sdram的数据线

从时序图可以看出,接通电源后,我们至少需要延迟100us,然后再给出NOP命令。 通常,为了稳定,延迟200us。一般一直设为00,即十六位都感兴趣,后面几个延迟和相应的指令按照时序图就可以了

直接来一个叫LOAD Mode Register的命令。 在这种情况下,必须指定a的值。 根据a的值,稍后对SDMRA的操作会有所不同。 读一下手册就知道了

控制A:突发长度并给出读写命令,可以连续读写多少个数据? 我设定了000,突发长度是1。 我觉得这很方便写程序

row地址时,A全部有效,col地址时,其第九位有效:读写是连续还是随机,仅在突发长度不为1时有效; 的读写需要给出地址。 也就是说,写入的第一个数据的地址是给定的,如果突发长度不是1,则后续数据的地址根据给定的地址依次加1。 还是随机的。

BA只对读取数据有效,给出读取命令后,在下几个周期内数据会出来。 也称为潜伏期

其他位不介绍,都可以是0。

DQ

4. SDRAM的写法是往常的规则。 我先查一下手册,找到时间图。 很遗憾,没有我想要的完整的东西。 那个分开吧。 激活命令,以对应的row地址和存储体延迟两个周期写入命令,并指定对应的col行地址和数据。 (A10最好是0。 否则,在给定一个命令后,又必须给定主动命令。 重复1、2步)如果想继续写,然后继续写,如果不想再写另一个写命令和新的col地址,在写数据达到突发长度后,传递PRECHARGE命令,写入完成在NOP命令后,然后再给PRECHARGE(预充电)命令,此时需要指定bank,如果A10为高的话,就是对所有的bank,如果A10为低的话,就按照BA指定的来,一般设置A10为高

请参考以下写入时机。 我说的只是给A10的值不同而已。 可以看到,如果给定了A10,则会自动执行PRECHARGE操作;如果给定了A10,则必须自己给定并终止这次写入操作。

5.SDRAM3358www.Sina.com/

6 .注意事项1 .读写时,A10的值非常值得关注。 2 .读取时,何时接收数据; 写入时,什么时候获取数据? 3 .仲裁模块的写入在读写数据后,不要超过刷新周期。 在这里,可以用读写速度来交换稳定性。 7 .异步FIFO的最后介绍异步FIFO的实现。 先进先进先进先出机制,可以说简单,但设计起来有点困难。 难点如下

1. 由于使用的是同一块内存,如何做到读与写如何不冲突2. 如何判断是否写满了,以及是否为空3. 如何计算FIFO里面读写的数据量

接下来,我还是结合代码来说明吧

1. 读写

curr表示当前读写的地址,next表示下一次的读写地址只需要合理地对next地址进行更新即可做到合理性

reg[8:0]curr_read_ptr,next_read_ptr;//读指针reg[8:0]curr_write_ptr,next_write_ptr;//写指针

对读地址进行更新,可以看到,只要不为空的时候,我们就可以一直更新next读地址的值,同样,只要没有写满的时候,就可以一直更新next写地址的值。

always@(posedge rclk or negedge rst)beginif(rst == 1'b0)next_read_ptr <= 'd1;else if(r_en == 1'b1)if(r_empty == 1'b0)if(next_read_ptr == 'd511)next_read_ptr <= 'd0;elsenext_read_ptr <= next_read_ptr + 1'b1;elsenext_read_ptr <= next_read_ptr;elsenext_read_ptr <= next_read_ptr;end 2. 判断是否为空和满

满和空其实很好判断,只要当下一个写的地址等于当前读的地址,即可判断为满,
空也是如此,当下一个读的地址等于当前写的地址,即为空,还要考虑初始情况,next_read等于next_write的时候也是为空的

assign w_full = (next_write_ptr == curr_read_ptr ) ? 1'b1 : 1'b0; assign r_empty = ( next_read_ptr == curr_write_ptr || (next_read_ptr == next_write_ptr)) ? 1'b1 : 1'b0; 3. 计算FIFO里面的数据量

FIFO里面的数据量其实读写地址的差值,但是当写的地址在读的地址后面的时候,又不仅仅是差值了,而是数据总长度减去这个差值了。

always@(posedge rclk or negedge rst)beginif(rst == 1'b0)data_count <= 'd0;else if(curr_read_ptr >= curr_write_ptr && next_read_ptr != next_write_ptr)data_count <= 'd511 - curr_read_ptr + curr_write_ptr;elsedata_count <= curr_write_ptr - curr_read_ptr;end

最后给出我自己实现的SDRAM_FIFO控制器,其中包括sdram_pluse仿真模块,以及testbench;FIFO没有调用IP核,利用SDRAM和FIFO将sdram封装成一个可以方便实用的异步sdram_fifo.
欢迎大家下载学习,写的很通俗易懂。下载地址.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。