利用FPGA解决TMS320C54x与SDRAM的接口问题
发布时间:2008/5/27 0:00:00 访问次数:584
    
    
    来源:电子技术应用 作者:辛 阳 杨义先
    
    摘要:介绍了如何利用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和
    
    
    来源:电子技术应用 作者:辛 阳 杨义先
    
    摘要:介绍了如何利用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和