【日记】SRAM的读取操作

 

首先,想记录一下,以前对于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.附上中心控制模块和串口模块的程序:

posted on 2012-10-18 21:46  偶似庆庆  阅读(8433)  评论(3编辑  收藏  举报

导航