原创 FPGA读写2PORTRAM过程分析4

2013-1-15 16:35 1076 10 11 分类: FPGA/CPLD 文集: FPGA

从寄存器配置中可以看出FLAGB 代表EP6的FULL标志,FLAGC代表EP2的EMPTY标志,而且都是低电平有效,就是说如果FLAGB输出低电平,代表EP6FIFO是FULL的。默认的话EP2是OUT,EP6是IN.

 24343357_1337669541G8eZ.jpg

24343357_133766954385Wo.jpg

从WRITE READY 到WRITE这状态跳转很繁琐,我具体说一下,

首先,我们的程序是经过读USBFIFO,然后写SRAM,现在执行到这里。

FLAGB=1,EP6FIFO不满,执行

if (datacnt==sram_a_o)

         begin

          data_wr<=sram_d_o;

         end

ioRDY1_SLWRn<='b0;

ioRDY0_SLRDn<='b1;

STATE<=WRITE;

状态跳转到WRITE,执行下面语句,

ioRDY1_SLWRn<='b1;

ioRDY0_SLRDn<='b1;

if(sram_a_o!=ADDR_FULL+1)  //SRAM_A_0===?1000

         begin

                   sram_a_o<=sram_a_o+1;

                   datacnt<=datacnt+1;

                   sram_wren<='b0;                                //将数据写到FIFO中

                   sram_rden<='b1;

                   STATE<=WRITE_READY;

         End

然后再跳转到WRITE_READY,直到我们将EP6FIFO填满,现在的数据是什么不重要,只是为了填满FIFO,使得FLAGB为低电平。大约写256次,因为数据是16位,FIFO大小是512字节。现在执行下面函数

if (FFlagA==0)

         begin

                   datacnt<=datacnt+1;

                   fifodata[datacnt-sram_a_o]<=sram_d_o;

                   FFlagA<=FFlagA+1;

         end

                  else

                            fifodata[datacnt-sram_a_o]<=sram_d_o;

                            STATE<=WRITE_READY;

注意这里把DATACUT加一,但是没有将SRAM_A_O加一,也就是它们不再相等了。执行结束,重新跳转到WRITE_READY,执行下面的语句,else后面的语句,黄色覆盖的部分。

if (datacnt==sram_a_o)

         begin

                   data_wr<=sram_d_o;

         end

         else

           begin

                  fifodata[datacnt-sram_a_o]<=sram_d_o; 

                  fifodata[datacnt-sram_a_o-1]<=fifodata[datacnt-sram_a_o];

                  data_wr<=fifodata[datacnt-sram_a_o-1];

                  atacnt<=datacnt-1;

           end

ioRDY1_SLWRn<='b0;

ioRDY0_SLRDn<='b1;

STATE<=WRITE;

End

然后再跳转到WRITE状态,然后DATACNT和SRAM_A_O又相等了,然后重复上面提到的过程。直到SRAM_A_O=0X1000,然后写FIFO的流程才结束。

真是麻烦的,我都看得眼花了,估计还有分析不对的地方,以后再慢慢修改吧。

WRITE:

                   begin

                            ioRDY1_SLWRn<='b1;

                            ioRDY0_SLRDn<='b1;

                            if(sram_a_o!=ADDR_FULL+1)  //SRAM_A_0===?1FFF

                                     begin

                                     sram_a_o<=sram_a_o+1;

                                     datacnt<=datacnt+1;

                                     sram_wren<='b0;

                                     sram_rden<='b1;

                                     STATE<=WRITE_READY;

                                     end

                            else

                                     begin                          

                                     sram_wren<='b0;

                                     sram_rden<='b0;

                                     STATE<=WRITE_END;

                                     end 

                   end

 

 

WRITE_END:

                   begin

 

                   wr_flag='b0;

                   ioRDY1_SLWRn<='b1;

                   ioRDY0_SLRDn<='b1;               

                   sram_a_o<='h1fff;

                   datacnt<='h1fff;

                   sram_wren<='b0;

                   sram_rden<='b0;

                   oPA4_FIFO0<='b1;

                   oPA5_FIFO1<='b1;

                   STATE<=IDLE;

                   end

         default:

                   STATE<=IDLE;

         Endcase

 

这2个状态就很简单了,不用多说了。 

文章评论1条评论)

登录后参与讨论

用户403664 2013-1-15 16:13

博主可以参加博客大赛啊,原创博文都可以参加。还可以创建个人专栏

用户377235 2012-8-24 23:04

感谢分享~~~~~

相关推荐阅读
用户420394 2013-01-23 09:17
PCB走线信号分析3-串扰
先看串扰的一些概念,串扰是指信号在传输通道上传输时,因电磁耦合而对相邻传输线产生的影响。   变化的信号(如阶跃信号)沿传输线由A到B传播,传输...
用户420394 2013-01-23 09:16
PCB走线信号分析2-hyperlynx
传输线的反射- 先说几个信号完整性的经典语句 1:一个信号沿着传输线前进的每一步中,都会感觉到一个瞬间阻抗。听起来,感觉是在开汽车,都会感觉到路面的坑坑洼洼一...
用户420394 2013-01-23 09:16
PCB走线信号分析1-hyperlynx
昨天晚上原本还打算再介绍一下PADS如何设计自己的元器件和PCB封装,我到网络上看了一下,这个方面的有很多的教程,所以呢,我就不多说了,各位可以到网络上参考其他好心网友提供的教程,很...
用户420394 2013-01-21 12:06
CY7C68013自动下载固件驱动程序的配置
CY7C68013自动下载固件驱动程序的配置 EZ Loader Custom USB Firmware Loader Driver 上面的一串英文是cypress公司的一个文档名称,是讲...
用户420394 2013-01-21 12:01
ADUC842开发-初步概述
  简单介绍一下ADI公司的8052核心的单片机。   8052核心的,不用多说了吧,这个表可以大概的知道这个系列单片机的性能,注意,ADUC分频比可以是1,传统的8052都是1...
用户420394 2013-01-21 11:59
ADUC842开发-IIC接口
  今天简单介绍一下ADuC842的IIC接口。 ADUC842有专门的IIC接口,我们不需要使用IO去模拟IIC主机了,先看看IIC的寄存器   这里我说明一下,我们下面把...
我要评论
1
10
关闭 站长推荐上一条 /3 下一条