是否有必要学习使用纯Verilog写一个SDRAM控制器

时间:2024-01-23 07:20:01

  在做这个SDRAM控制器之前,博主有一个疑问,对于学生来说,是否有必要学习用纯Verilog写一个SDRAM控制器?因为目前X家和A家都有了DDR IP Core,对于要实现一个应用可以直接调用IP Core,只需要对其接口操作即可。对于开发者来说,与其费时费力用Verilog去写一个性能差而且老的SDRAM控制器,还不如直接调用官方经过打磨的更为先进IP Core。所以博主特地去号称平均学历211,平均月薪7、8万的知(bi)乎提出了这个问题,得到的解答博主总结大致如下。

       对于学生这个身份来说,应该是要以学习为主要目的,虽然说目前企业为了加快项目进度会直接使用IP Core,但是我们以学为本的初衷不应该为了避过难点而直接不去尝试,就比如我们刚开始学Verilog的时候肯定都会写过分频器,那么为什么不直接去学更简单精度更高PLL IP Core呢?从一个新手逐渐成长成一个老手都是由简单到复杂,由基础到提升,这是一个必经的过程。这也就是很多高校还是会开设汇编语言编写单片机的课程,学FPGA全用IP Core和学单片机全用库函数是一个道理。这是其一。

       第二,写一个SDRAM控制器还是可以锻炼一些典型的技能。

  1. 看官方文档
  2. 根据时序图设计SDRAM逻辑,使用状态机
  3. 配合仿真模型写测试仿真
  4. 调试,提高频率,让你的SDRAM跑的更快
  5. 研究时序约束

  这一套做下来,你就可以提高一个层次了,经历过和没经历过是有质的区别。其实博主在提问的时候心中早已有了答案,只是还没有足够的信念去完成这个事情,当时看到很多业界前辈都支持去写的时候,博主心里也是比较开心的。之前博主已经学一些SDRAM的基础知识,只是当时水平还不够,没有坚持下去,心里一直不甘。趁着最近两个月之内没有什么事情要忙,所以决定要再次死磕SDRAM。

SDRAM基本概念

  SDRAM(Synchronous Dynamic Random Access Memory),同步动态随机存储器。同步是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准。动态是指存储阵列需要不断的刷新来保证数据不丢失。随机是指数据不是线性依次存储,而是*指定地址进行数据读写。

  我手上的这块开发板的SDRAM芯片为,海力士的HY57V641620ETP-7,行地址12位,列地址8位,一个存储单元为16bit,则一个bank的存储单元为2^12 x 2^8 = 1M,一个bank内存为16Mbit。

  SDRAM容量 = 数据位宽x存储单元数量(bank数x行地址x列地址)

  (一个bank里面有16Mbit(行地址x列地址x存储单元位宽))

  The Hynix HY57V641620E(L/S)T(P)  4Bank x 1Mbits x 16 = 64Mbit

  主要特性:

  ·电压:vdd vddq 3.3v

  ·4096 refresh cycles/64ms

  ·54Pin TSOPII (Thin Small Out-Line Package,薄型小尺寸封装)

SDRAM内部结构

       SDRAM内部一般有四个bank用来存储信息,每个bank的行地址和列地址是通用的,bank地址来判断对哪个bank进行操作。

       每个bank的存储数据方式就如同一个表格一样,通过行地址和列地址来确定一个数据,每个数据为16位。我手上的这块SDRAM的列地址是8位,行地址是12位也就是说一共是2^12 = 4096行,2^8 = 256列。每个bank能存储1048576个数据,1048576 x 16bit = 1M x 16bit = 16Mbit,那么这个SDRAM一共可以存储4 x 16Mbit = 64Mbit。SDRAM的存储容量也就是这么计算来的。

引脚说明

对于一些引脚的描述,还是直接看英文的好。

Note:其他的没啥说的,一般的芯片引脚都这样,这是要提的是UDQM,LDQM这两个引脚,数据掩码,UDQM为高电平,DQ0~DQ15数据总线的高字节即DQ8~DQ15呈现高阻态(全零),LDQM为高电平,DQ0~DQ15数据总线的高字节即DQ0~DQ7呈现高阻态(全零)。韦德是屏蔽输入输出信号。

模式寄存器

A4—A6 CAS Latency  列选通潜伏期设置寄存器,这个意思为当我们给读命令之后,SDRAM等待2/3/reserved个时钟周期之后才会进行操作。

突发长度为4              Addr = 12’b0000_0110_0010

突发长度为full page    Addr = 12’b0000_0110_0111

Burst length(激发长度)。突发长度为4指给一次读或写命令SDRAM会连续的读四个数据或连续的写四个数据,同理 SDRAM支持页读写,当burst length为111是full page一次读写命令可以读/写一整页的数据。

我这里这个设计中设置潜伏期为3,突发长度为4。

SDRAM操作命令

       SDRAM的操作命令可以从手册中查到,我用到的就这么几个。由片选有效、行有效、列有效、写使能信号组成。对于这些SDRAM的基本特性都是可以在官方手册中可以直接看到的。不同公司的SDRAM的型号不同但是其读写操作模式都是相同的,所以都是可以相互参考,看文档还直接看英文文档好。这篇就先简单记录SDRAM的基本概念,下次再记录工作原理和各个功能模块的设计。

  目前博主也是刚开始学习SDRAM控制器的设计,刚刚实现了一个简易的SDRAM控制器,频率这跑到了50Mhz,通过PC端串口发送数据到FIFO缓冲,然后写入SDRAM,最后再读出来,用FIFO缓冲再用串口发送到PC端,后面博主会继续调试,争取能挂载摄像头实时处理显示。

 

转载请注明出处:NingHeChuan(宁河川)

个人微信订阅号:开源FPGA

如果你想及时收到个人撰写的博文推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信订阅号

知乎ID:NingHeChuan

微博ID:NingHeChuan

原文地址:http://www.cnblogs.com/ninghechuan/p/8903938.html