是否有必要学习使用纯Verilog写一个SDRAM控制器
在做这个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控制器还是可以锻炼一些典型的技能。
- 看官方文档
- 根据时序图设计SDRAM逻辑,使用状态机
- 配合仿真模型写测试仿真
- 调试,提高频率,让你的SDRAM跑的更快
- 研究时序约束
这一套做下来,你就可以提高一个层次了,经历过和没经历过是有质的区别。其实博主在提问的时候心中早已有了答案,只是还没有足够的信念去完成这个事情,当时看到很多业界前辈都支持去写的时候,博主心里也是比较开心的。之前博主已经学一些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
是否有必要学习使用纯Verilog写一个SDRAM控制器的更多相关文章
- Verilog写一个对数计算模块Log2(x)
网上一个能用的也没有,自己写一个把. 1.计算原理: 整数部分 网上找到了一个c语言的计算方法如下: int flog2(float x) { return ((unsigned&)x> ...
- vnpy源码阅读学习(4):自己写一个类似vnpy的UI框架
自己写一个类似vnpy的界面框架 概述 通过之前3次对vnpy的界面代码的研究,我们去模仿做一个vn.py的大框架.巩固一下PyQt5的学习. 这部分的代码相对来说没有难度和深度,基本上就是把PyQt ...
- tensorflow学习笔记3:写一个mnist rpc服务
本篇做一个没有实用价值的mnist rpc服务,重点记录我在调试整合tensorflow和opencv时遇到的问题: 准备模型 mnist的基础模型结构就使用tensorflow tutorial给的 ...
- 让我们纯手写一个js继承吧
继承在前端逻辑操作中是比较常见的,今天我们就从零开始写一个js的继承方式 在es5中继承实质上是先创建子类的实例对象,然后再将父类的方法添加到this上Parent.call(this),在es6中则 ...
- QT学习日记篇-03-仿写一个智能家居界面
课程大纲: <1>让界面漂亮起来,仿写一个智能家居界面 ->第一:给QT工程添加图片 进入下一步: <注意路径和名称一定不能有中文> ...
- python学习(5)写一个二分算法的程序
把之前学习的做一个小结.之前看二分查找法,只能是似而非地看懂大概.现在用这么多天的知识积累已经可以自己写了. 而且在算法书的基础上,把需要找的数字做一个人机互动操作. 另外,初步接触到了 __name ...
- 还在为小三角形切图?使用纯CSS写一个简单的三角形
同学们,当美工给的设计图是这样: 或者这样: 我的内心其实是拒绝的-_-:但工作还得干,大部分同学会写 <style> .icon{width:20px;height:20px;displ ...
- React Native学习(四)—— 写一个公用组件(头部)
本文基于React Native 0.52 Demo上传到Git了,有需要可以看看,写了新内容会上传的.Git地址 https://github.com/gingerJY/React-Native-D ...
- 【Java学习笔记】如何写一个简单的Web Service
本Guide利用Eclipse以及Ant建立一个简单的Web Service,以演示Web Service的基本开发过程: 1.系统条件: Eclipse Java EE IDE for Web De ...
随机推荐
- java基础笔记(2)----流程控制
java流程控制结构包括顺序结构,分支结构,循环结构. 顺序结构: 程序从上到下依次执行,中间没有任何判断和跳转. 代码如下: package com.lvsling.test; public cla ...
- C#简单入门
公司给的一个小的practice C# vs2017 Stage 1 (cmd)1. Parse the dll (reflection)2. Write all the public methods ...
- Access数据库跨库查询及记录集区分
医疗设备软件一般都是单机软件,如果是Windows平台,常会选择Access数据库存储结构化数据,因为他轻量,便于部署.然而随着医疗信息化的发展,医生希望对多台单机设备的数据进行管理,采用网络数据库当 ...
- 网易云音乐APP分析
网易云音乐-感受音乐的力量 你选择的产品是? 网易云音乐 为什么选择该产品作为分析? 之前用的一直是QQ音乐,但是有一天一个朋友分享了一首网易云上的音乐(顺便分享一下歌名:Drop By Drop) ...
- C语言博客作业--函数嵌套调用
一.实验作业(6分) 本周作业要求: 选一题PTA题目介绍. 学习工程文件应用,设计实现学生成绩管理系统. 学生成绩管理系统要求 设计一个菜单驱动的学生成绩管理程序,管理n个学生m门考试科目成绩,实现 ...
- APP案例分析
产品 蓝叠安卓模拟器 选择理由 看了一眼桌面,就这个比较有意思.现在很多人喜欢玩手游,经常喜欢开个小号搞事情.这时候身边又没有多余的手机,怎么办?安卓模拟器下一个.手机屏幕太小玩起来没意思怎么 ...
- C程序第二次作业
2-1删除字符串中数字字符 1.设计思路 (1)主要描述题目算法 第一步:遍历指针s所指的s数组. 第二步:如果 * (s+i)在0至9之间的话,则跳过此 * (s+i). 第三步:如果* (s+i) ...
- 业余草基于JAVA的模块化开发框架JarsLink
需求背景 应用拆分的多或少都有问题.多则维护成本高,每次发布一堆应用.少则拆分成本高,无用功能很难下线.故障不隔离.当一个系统由多人同时参与开发时,修改A功能,可能会影响B功能,引发故障.多分支开发引 ...
- js 防止重复点击
1.添加flag 适用于ajax 表单提交,提交之前flag = false , 提及中,true ,提交后false 2.事件重复点击: <script> var throttle = ...
- Ubuntu 17.10.1安装, 定制
p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 2018.4.7 Ubuntu 17.10.1安装, 定制, 后续搭建LAMP环境 ...



