【日记】SRAM的读取操作
2012-10-18 21:46
246 查看
首先,想记录一下,以前对于inout引脚的概念就是网页上被转载很多次的标准版:
于是,非常愚笨的我,每次使用时都要定义一个类似link_data的寄存器,然后再对寄存器赋值。这可真是不会举一反三,比如这几天sram的程序中有这么一句:
assign sram_dq = (state == `wr_ready || state == `wr_delay) ? fifo1_dq_out : 8'hzz;
这样就不需要定义类似link_data的寄存器,而且很简洁。
下面是这几天我和哥们王奇一起做的sram读写实验的代码,或者截图,(其实我们是在练习SDRAM的操作时,做不来SDRAM,于是先拿SRAM撒气的,结果我被气着了。。。)我们就是想把菜鸟学习的点滴记录下来,让更菜的童鞋们有个阶段性的参考,想练习sram的使用时,可以参考我们的程序,省的网页上别人的程序复杂得花很大功夫看会。
1.感谢王奇(中北大学学生),我们一起开始做,一起读sram的英文datasheet,一起扣时序问题,他却比我早很多时间就已经做出来了,我在此期间因为做不出来,都被烦死了,最终还是在他的帮助下,修改好了时序才做出来。他自己的博客上面也有它的程序和实验过程。这里我写我的实验过程。
2.我的几个模块:
看上图,应该很清楚了,练习sram的使用之前,我还从来没用过FIFO,所以又练习了好多天的FIFO使用(没办法,我脑子不好),串口通信也没做过(虽然是学单片机的时候就应该会的,我当时懒,也没学),又专门写了串口的程序。期间磕磕绊绊,也就过来了。
3.这次实验的关键就是SRAM的读写程序,虽然是英文手册,其实最重要的就是引脚图、时间表、时序图。其他的看看也行。
看,最重要的就是不要将状态机写的复杂,写的过程就只有3个时钟周期,不需要写的太多时钟周期。地址给出的同时也要给出数据。读sram的时候,给出地址后,应在下一个时钟上升沿的时候写入第二个FIFO。读的过程也只有3个时钟周期。
4.在写状态机的时候,我就是受到了教科书上面的影响,上来就扒下来那个所谓经典的“current_state”、“next_state”的三段论状态机模型。结果,我感觉完全不适合这次的练习使用。我还是用了新的写法(参考哥们的)。具体来说,就是第一段的always块,仅仅定义了状态的相互转换,基本没有涉及到状态之外的变量。第二段大量使用assign语句,这样就避免的“posedge clk”和“<=”的约束。而且这种状态机的写法真的是很简单易懂啊。。。。
5.附上中心控制模块和串口模块的程序:
于是,非常愚笨的我,每次使用时都要定义一个类似link_data的寄存器,然后再对寄存器赋值。这可真是不会举一反三,比如这几天sram的程序中有这么一句:
assign sram_dq = (state == `wr_ready || state == `wr_delay) ? fifo1_dq_out : 8'hzz;
这样就不需要定义类似link_data的寄存器,而且很简洁。
下面是这几天我和哥们王奇一起做的sram读写实验的代码,或者截图,(其实我们是在练习SDRAM的操作时,做不来SDRAM,于是先拿SRAM撒气的,结果我被气着了。。。)我们就是想把菜鸟学习的点滴记录下来,让更菜的童鞋们有个阶段性的参考,想练习sram的使用时,可以参考我们的程序,省的网页上别人的程序复杂得花很大功夫看会。
1.感谢王奇(中北大学学生),我们一起开始做,一起读sram的英文datasheet,一起扣时序问题,他却比我早很多时间就已经做出来了,我在此期间因为做不出来,都被烦死了,最终还是在他的帮助下,修改好了时序才做出来。他自己的博客上面也有它的程序和实验过程。这里我写我的实验过程。
2.我的几个模块:
看上图,应该很清楚了,练习sram的使用之前,我还从来没用过FIFO,所以又练习了好多天的FIFO使用(没办法,我脑子不好),串口通信也没做过(虽然是学单片机的时候就应该会的,我当时懒,也没学),又专门写了串口的程序。期间磕磕绊绊,也就过来了。
3.这次实验的关键就是SRAM的读写程序,虽然是英文手册,其实最重要的就是引脚图、时间表、时序图。其他的看看也行。
看,最重要的就是不要将状态机写的复杂,写的过程就只有3个时钟周期,不需要写的太多时钟周期。地址给出的同时也要给出数据。读sram的时候,给出地址后,应在下一个时钟上升沿的时候写入第二个FIFO。读的过程也只有3个时钟周期。
4.在写状态机的时候,我就是受到了教科书上面的影响,上来就扒下来那个所谓经典的“current_state”、“next_state”的三段论状态机模型。结果,我感觉完全不适合这次的练习使用。我还是用了新的写法(参考哥们的)。具体来说,就是第一段的always块,仅仅定义了状态的相互转换,基本没有涉及到状态之外的变量。第二段大量使用assign语句,这样就避免的“posedge clk”和“<=”的约束。而且这种状态机的写法真的是很简单易懂啊。。。。
5.附上中心控制模块和串口模块的程序:
相关文章推荐
- Ubuntu个人日记
- 本周日记
- 黑马程序员_java学习日记_Java高新技术_反射(一)
- Spring 4.0使用日记(持续更新)
- MCU+FPGA/CPLD+SRAM驱动TFT_LCD(480*272@16bit)的设计参数分析
- shell学习日记2
- 原来写博客和记日记是不同的感觉,写博客要思考更加的仔细,因为有人在看
- 工作室日记——QG面试
- 黑马程序员_java学习日记银行业务调度系统
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记5)
- 准爸爸日记——20120326
- C日记——文件操作的坑
- 黑马程序员_学习日记3_C#基础归纳总结之结构
- [Dubbo日记](1)Zookeeper安装
- android代码重构日记(四)——关于按钮部分的代码重构
- 跟我一起学习MySQL技术内幕(第五版):(第二章学习日记13)
- UniDac 使用日记(转)
- 日记帐导入-来源为“采购”日记帐导入失败问题
- redis学习日记
- SRAM读写实验--读书笔记