@豆

为FPGA发狂的豆子

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

当前主要关注的是这两个DEMO中对SDRAM的不同的使用。在DE2_70_TV中,用了一个四端口的SDRAM Controller在一个SDRAM内进行存储与读取操作,而在DE2_70_D5M_LTM中则将TV例程中的4端口的SDRAM Controller改成两个双端口的Controller分别控制两篇SDRAM。

  1. 为何在TV中的SDRAM里引出了一个AUD_CTRL_CLK对音频进行控制?是否说明这个例程里的音频信号经过了SDRAM的缓存?
    事实并非如此。由于在TV例程中整个系统只有一个PLL,而且这个PLL有集成在了Sdram_Control_4Port里面,所以当其他模块需要用到50M和28M以外的时钟信号时就必须由此模块内部的PLL产生一个新的时钟,从这里送出。当然,也可以再做一个PLL专门产生音频信号所需的18M时钟,但是这样会浪费资源,为何不直接使用已有的PLL呢?
  2. DE2_70_TV的Sdram_Control_4Port结构与DE2_70_LTM_D5M的结构不同,为何会是这样?
    实际上两者结构一样,仅仅是在DE2_70_LTM_D5M中的Sdram_Control_4Port(下以SC4P代替)少了一个Sdram_PLL,原因在于:在DE2_70_TV中只用到了一个SC4P模块,在DE2_70_LTM_D5M中有两个,若在两个SC4P中都有PLL,那么就需要有两个时钟信号输入SC4P中,这样是很麻烦的,而且比较浪费资源,所以在DE2_70_LTM_D5M的顶层文件中有一个sdram_pll模块,专门用于产生两个SC4P的时钟信号和一个SDRAM的时钟信号。
  3. 为何在LTM例程中SDRAM用到了两个CLK(iCLK_50和sdram_ctrl_clk)而在TV中只用到了一个(iTD1_CLK27)?这些时钟分别由什么用?
    首先,并非在LTM中用到了两个时钟,仔细观察,会发现例程虽然对REF_CLK进行了例化,而且将这个引脚与iCLK_50相连接,但是在Sdram_Ctrol_4Port中,这个引脚只是做了一个定义,并没有实际的应用,所有的内部模块都是由CLK引脚,即sdram_ctrl_clk驱动的,而在TV中,输入的iTD1_CLK27首先经过了Sdram_pll产生了三个时钟,其中一个为CLK,这个时钟信号为驱动内部模块的时钟信号。在这两个例程中,Sdram_pll是不同的,LTM中的PLL产生了三个时钟信号,如图1所示:我们可以看到,输入时钟为50MHz,输出的三个时钟分别为c0=c1=c2=166.6MHz,c1、c2相位延迟90度。在这里,c0为sdram_ctrl_clk,c1、c2分别为两个SDRAM的驱动时钟。在TV中,Sdram_pll如图2所示:输入时钟为27MHz,输出始终分别为c0=c1=108MHz,c2=18.62MHz,其中c1的相位延迟了90度。这里c0为Sdram_Ctrl_4Port内部模块驱动时钟,c1为SDRAM的驱动时钟,c2为音频时钟。
      
                     图1 LTM例程中的Sdram_PLL                                图2 TV例程中的Sdram_PLL 
  4. 为什么LTM中的SDRAM的WR1_DATA为15位的端口({sCCD_G[11:7],  sCCD_B[11:2]}),而在TV中为16位的(YCbCr)?
    在LTM中,用到了两个SDRAM存储由D5M模组产生的RGB信号,一个存储G5B10,另一个存储G5R10,这里的sCCD_G[11:7],  sCCD_B[11:2]就是第一个SDRAM的G5B10,所以只用了15位。而在TV中,由于进入SDRAM的信号是来自摄像头的YCbCr电视信号,为ITU-565格式,所以就用了16位的YCbCr信号作为输入。
  5. 为什么LTM中的SDRAM的WR1_MAX_ADDR和RD1_MAX_ADDR均为800×640,而在TV中WR1_MAX_ADDR为640×480,RD1_MAX_ADDR为640×253,而且在TV中只读了其中的64×240个元素?
  6. 为什么LTM中一个元素的长度为9’h100(WR1_LENGTH(9’h100)),而在TV中为9’h80(WR1_LENGTH(9’h80))?
  7. 为何两个例程中的SA也不相同?LTM中为SA(oDRAM0_A[11:0]),而在TV中为SA(oDRAM0_A)。
  8. 为什么TV中有SDR_CLK(oDRAM0_CLK)而在LTM中却没有?
    首先,oDRAM0_CLK的作用是什么,我们必须要清楚。oDRAM0_CLK直接接到SDRAM的时钟端,这个时钟端就是SDRAM的驱动时钟,频率为166MHz。在LTM,顶层文件已经有Sdram_pll产生了oDRAM0_CLK,而在TV中,Sdram_pll集成在Sdram_Ctrl_4Port中,所以必须从Sdram_Ctrl_4Port中引出此时钟连接到SDRAM。
posted on 2009-06-30 11:38  @豆  阅读(1835)  评论(6)    收藏  举报