利用FPGA解决TMS320C54x与SDRAM的接口问题_接口电路论文
摘要:介绍了如何利用fpga设计tms320c54x系列芯片与tms62812a sdram之间的接口。这种接口方法适合于需要外扩大容量存储器的应用场合。 关键词:fpga tms320c54x sdrm 接口在dsp应用系统中,需要大量外扩存储器的情况经常遇到。例如,在数码相机和摄像机中,为了将现场拍摄的诸多图片或图像暂存下来,需要将dsp处理后的数据转移到外存中以备后用。从目前的存储器市场看,sdram由于其性能价格比的优势,而被dsp开发者所青睐。dsp与sdram直接接口是不可能的。fpga(现场可编程门阵列)由于其具有使用灵活、执行速度快、开发工具丰富的特点而越来越多地出现在现场电路设计中。本文用fpga作为接口芯片,提供控制信号和定时信号,来实现dsp到sdram的数据存取。1 sdram介绍本文采用的sdram为tms626812a,图1为其功能框图。它内部分为两条,每条1m字节,数据宽度为8位,故存储总容量为2m字节。所有输入和输出操作都是在时钟clk上升沿的作用下进行的,刷新时钟交替刷新内部的两条ram。tms626812a主要有六条控制命令,它们是:条激尖/行地址入口、列地址入口/写操作、列地址入口/读操作、条无效、自动刷新、自动刷新。sdram与tms320c54x接口中用到的命令主要有:mrs、deac、actv、wrt-p、read-p和refr。这里,设计目的就是产生控制信号来满足这些命令的时序要求。关于tms626812a的具体说明可以查看其数据手册。
2 sdram与tms320c54x之间的通用接口图2是dsp与sdram的通用接口框图,图中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、ao~a15、d0~d15、rw、matrb、istrb、is,而sdram接收下列信号:clk、cke、cs、cqm、w、ras、cas、a0~a11。由于两端控制信号不同,需要在dsp与sdram之间加上控制逻辑,以便将从dsp过来的信号解释成sdram能够接收的信号,图3是用fpga设计的顶层硬件接口图。图中主要由三个模块:dsp-iq、dma-buf和sd-cmd。其中dsp-io是dsp端的接口,用来解码tms320c54x发送的sdram地址和命令。dma-buf代表缓冲区bo、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中。
图3 用fpga设计的顶层硬件接口图
4 软件设计tms626812a sdram有两兆字节的存储容量。所以dsp用两个i/o地址向fpga传送访问sdram的高低地址。此文中,该两个i/o地址对应用图4中的03h(dma_addh)和04h(dma_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中读得数据。
图4为dsp中与数据传送相关的各类存储器的分配情况。具体设计时,应参考相关资料进行补充。不同的dsp与不同类型的sdram接口时,会有细微的区别,电路设计完毕后要进行认真而多方面的测试。
2 sdram与tms320c54x之间的通用接口图2是dsp与sdram的通用接口框图,图中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、ao~a15、d0~d15、rw、matrb、istrb、is,而sdram接收下列信号:clk、cke、cs、cqm、w、ras、cas、a0~a11。由于两端控制信号不同,需要在dsp与sdram之间加上控制逻辑,以便将从dsp过来的信号解释成sdram能够接收的信号,图3是用fpga设计的顶层硬件接口图。图中主要由三个模块:dsp-iq、dma-buf和sd-cmd。其中dsp-io是dsp端的接口,用来解码tms320c54x发送的sdram地址和命令。dma-buf代表缓冲区bo、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中。
图3 用fpga设计的顶层硬件接口图
4 软件设计tms626812a sdram有两兆字节的存储容量。所以dsp用两个i/o地址向fpga传送访问sdram的高低地址。此文中,该两个i/o地址对应用图4中的03h(dma_addh)和04h(dma_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中读得数据。
图4为dsp中与数据传送相关的各类存储器的分配情况。具体设计时,应参考相关资料进行补充。不同的dsp与不同类型的sdram接口时,会有细微的区别,电路设计完毕后要进行认真而多方面的测试。