位置:51电子网 » 技术资料 » 接口电路

利用FPGA解决TMS320C54K与SDRAM的接口问题

发布时间:2008/5/28 0:00:00 访问次数:553

  在dsp应用系统中,需要大量外扩存储器的情况经常遇到。例如,在数码相机和摄像机中,为了将现场拍摄的诸多图片或图像暂存下来,需要将dsp处理后的数据转移到外存中以备后用。从目前的存储器市场看,sdram由于其性能价格比的优势,而被dsp开发者所青睐。dsp与sdram直接接口是不可能的。fpga(现场可编程门阵列)由于其具有使用灵活、执行速度快、开发工具丰富的特点而越来越多地出现在现代电路设计中。本文用fpga作为接口芯片,提供控制信号和定时信号,来实现dsp到sdram的数据存取。

1 sdram介绍

  本文采用的sdram为tms626812a,它内部分为两条,每条1m字节,数据宽度为8位,故存储总容量为2m字节。

所有输入和输出操作都是在时钟clk上升沿的作用下进行的,刷新时钟交替刷新内部的两条ram。tms626812a主要有六条控制命令,它们是:条激活/行地址入口、列地址入口/写操作、列地址入口/读操作、条无效、自动刷新、自行刷新。sdram与tms320c54x接口中用到的命令主要有: mrs、 deac、 actv、wrt-p、read-p和refr。这里,设计目的就是产生控制信号来满足这些命令的时序要求。关于tms626812a的具体说明可以查看其数据手册。

2 sdram与tms320c54x之间的通用接口

  dsp i/f代表tms320c54x端接口单元,sdram cntl 代表sdram 端接口控制单元。sdram被设置成一次性读写128个字节,而dsp一次只读写一个字节,因而建立了两个缓冲区b0、b1来缓存和中转数据。b0、b1大小都为128字节,而且映射到dsp中的同一地址空间。

尽管b0、b1对应于同一地址空间,但对两个缓冲区不能在同一时刻进行合法访问。实际上,当b0被dsp访问时,b1就被sdram访问,反之也成立。若dsp向b1写数据,sdram就从b0读数据;而当sdram的数据写到b0中时,dsp就从b1读数据。两者同时从同一缓冲区读或写都将激发错误。上边所述的数据转移方式有两种好处:一是加速了tms320c54x的访问速度,二是解决了二者之间的时钟不同步问题。

3 fpga中的硬件设计

tms320c54x为外部存储器的扩展提供了下列信号clk、cs、a0~a15、d0~d15、rw、mstrb、istrb、is而sdram接收下列信号clk、cke、cs、dqm、w、ras、cas、a0~a11。由于两端控制信号不同,需要在dsp与sdram之间加上控制逻辑,以便将从dsp过来的信号解释成sdram能够接收的信号。图3是用fpga设计的顶层硬件接口图。

图中主要有三个模块:dsp-io、dma_buf和sd-cmd。其中dsp-io是dsp端的接口,用来解码tms320c54x发送的sdram地址和命令。dma_buf代表缓冲区b0、b1。sd_cmd模块用来产生sdram访问所需的各种信号。

dsp_io模块又包括io_dma、dsp_buf和dsp_read。io_dma产生sdram的命令信号即图3中的dsp_rdy、dsp_sd_rw、dsp_sd_bank_sw、dsp_sd_addr20..0、dsp_sd_addr_reset、dsp_sd_start。dsp_buf产生访问b0、b1的地址、数据和控制信号,图3中指dsp_sd_bufclki、dsp_sd_bufclko、dsp_sd_bufwe、dsp_sd_bufaddr6..0、dsp_sd_bufin7..0。dsp-read子模块用来控制dsp的读写方向。 dma_buf分为b0、b1两个缓冲区,用来进行数据传送每个缓冲区的输入输出信号包括clki、clko、we、addr6-0、data_in7-0、data_out7-0。bank_sw是一个开关信号用于dsp和sdram对b0、b1的切换访问。

sd_cmd模块包括刷新、读、写功能。当dsp芯片发出sdram读命令时,128字节的数据从sdram中读出来并被存储到b0或b1中,当dsp发出写命令之时,128字节的数据传到b0或b1之中并被最终写到sdram中。

4 软件设计

tms626812a sdram有两兆字节的存储容量。所以dsp用两个i/o地址向fpga传送访问sdram的高低地址。此文中该两个i/o地址对应于图4中的03hdma_addh和04hdma_addl。另外,还有一个i/o地址图4中的05h用来向fpga传送命令产生sdram访问的信号。

dsp向sdram写数据时的操作步骤如下:

1数据先被写到b0或b1。

2sdram的访问地址经由dsp的i/o地址dma_addh和dma_addl发送到fpga中。

3dsp向fpga发出一个命令(i/o地址为dma_ctl)产生控制信号,使sdram从b0或b1中读取数值。

dsp从sdram读数据的操作步骤如下:

1dsp传送访问sdram的地址。

2dsp经由fpga传送一个命令,使得数据从sdram中读到fpga中。

3dsp从b0或b1中读得数据。

具体设计时,应参考相关资料进行补充。不同的dsp与不同类型的sdram接口时,会有细微的区别,电路设计完毕后要进行认真而多方面的测试。



  在dsp应用系统中,需要大量外扩存储器的情况经常遇到。例如,在数码相机和摄像机中,为了将现场拍摄的诸多图片或图像暂存下来,需要将dsp处理后的数据转移到外存中以备后用。从目前的存储器市场看,sdram由于其性能价格比的优势,而被dsp开发者所青睐。dsp与sdram直接接口是不可能的。fpga(现场可编程门阵列)由于其具有使用灵活、执行速度快、开发工具丰富的特点而越来越多地出现在现代电路设计中。本文用fpga作为接口芯片,提供控制信号和定时信号,来实现dsp到sdram的数据存取。

1 sdram介绍

  本文采用的sdram为tms626812a,它内部分为两条,每条1m字节,数据宽度为8位,故存储总容量为2m字节。

所有输入和输出操作都是在时钟clk上升沿的作用下进行的,刷新时钟交替刷新内部的两条ram。tms626812a主要有六条控制命令,它们是:条激活/行地址入口、列地址入口/写操作、列地址入口/读操作、条无效、自动刷新、自行刷新。sdram与tms320c54x接口中用到的命令主要有: mrs、 deac、 actv、wrt-p、read-p和refr。这里,设计目的就是产生控制信号来满足这些命令的时序要求。关于tms626812a的具体说明可以查看其数据手册。

2 sdram与tms320c54x之间的通用接口

  dsp i/f代表tms320c54x端接口单元,sdram cntl 代表sdram 端接口控制单元。sdram被设置成一次性读写128个字节,而dsp一次只读写一个字节,因而建立了两个缓冲区b0、b1来缓存和中转数据。b0、b1大小都为128字节,而且映射到dsp中的同一地址空间。

尽管b0、b1对应于同一地址空间,但对两个缓冲区不能在同一时刻进行合法访问。实际上,当b0被dsp访问时,b1就被sdram访问,反之也成立。若dsp向b1写数据,sdram就从b0读数据;而当sdram的数据写到b0中时,dsp就从b1读数据。两者同时从同一缓冲区读或写都将激发错误。上边所述的数据转移方式有两种好处:一是加速了tms320c54x的访问速度,二是解决了二者之间的时钟不同步问题。

3 fpga中的硬件设计

tms320c54x为外部存储器的扩展提供了下列信号clk、cs、a0~a15、d0~d15、rw、mstrb、istrb、is而sdram接收下列信号clk、cke、cs、dqm、w、ras、cas、a0~a11。由于两端控制信号不同,需要在dsp与sdram之间加上控制逻辑,以便将从dsp过来的信号解释成sdram能够接收的信号。图3是用fpga设计的顶层硬件接口图。

图中主要有三个模块:dsp-io、dma_buf和sd-cmd。其中dsp-io是dsp端的接口,用来解码tms320c54x发送的sdram地址和命令。dma_buf代表缓冲区b0、b1。sd_cmd模块用来产生sdram访问所需的各种信号。

dsp_io模块又包括io_dma、dsp_buf和dsp_read。io_dma产生sdram的命令信号即图3中的dsp_rdy、dsp_sd_rw、dsp_sd_bank_sw、dsp_sd_addr20..0、dsp_sd_addr_reset、dsp_sd_start。dsp_buf产生访问b0、b1的地址、数据和控制信号,图3中指dsp_sd_bufclki、dsp_sd_bufclko、dsp_sd_bufwe、dsp_sd_bufaddr6..0、dsp_sd_bufin7..0。dsp-read子模块用来控制dsp的读写方向。 dma_buf分为b0、b1两个缓冲区,用来进行数据传送每个缓冲区的输入输出信号包括clki、clko、we、addr6-0、data_in7-0、data_out7-0。bank_sw是一个开关信号用于dsp和sdram对b0、b1的切换访问。

sd_cmd模块包括刷新、读、写功能。当dsp芯片发出sdram读命令时,128字节的数据从sdram中读出来并被存储到b0或b1中,当dsp发出写命令之时,128字节的数据传到b0或b1之中并被最终写到sdram中。

4 软件设计

tms626812a sdram有两兆字节的存储容量。所以dsp用两个i/o地址向fpga传送访问sdram的高低地址。此文中该两个i/o地址对应于图4中的03hdma_addh和04hdma_addl。另外,还有一个i/o地址图4中的05h用来向fpga传送命令产生sdram访问的信号。

dsp向sdram写数据时的操作步骤如下:

1数据先被写到b0或b1。

2sdram的访问地址经由dsp的i/o地址dma_addh和dma_addl发送到fpga中。

3dsp向fpga发出一个命令(i/o地址为dma_ctl)产生控制信号,使sdram从b0或b1中读取数值。

dsp从sdram读数据的操作步骤如下:

1dsp传送访问sdram的地址。

2dsp经由fpga传送一个命令,使得数据从sdram中读到fpga中。

3dsp从b0或b1中读得数据。

具体设计时,应参考相关资料进行补充。不同的dsp与不同类型的sdram接口时,会有细微的区别,电路设计完毕后要进行认真而多方面的测试。



相关IC型号

热门点击

 

推荐技术资料

耳机放大器
    为了在听音乐时不影响家人,我萌生了做一台耳机放大器的想... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!