6ES7510-1DJ01-0AB0参数详细
本文介绍了MAX7000系列CPLD器件在DSP接口电路中的应用,重点介绍了TMS3202××系列DSP和存储器,LCD接口的方法,并辅以VHDL源程序的例子。
关键词:DSP;MAX7000;CPLD;可编程逻辑器件
前言:
Altera公司的产品基本上都属于CPLD结构。由于它的内部连线均采用连续式互联结构,即利用同样长度的金属线实现逻辑单元之间的连接,它具有延时可预测的优点。由于采用了全新的结构,**的技术再加上MAX+PLUSII可编程逻辑的开发环境,使得Altera公司的PLD器件不仅具有PLD器件的一般优点,还有如下一些优势:高性能、高集成度、价格合理、开发周期较短、可以很方便的进行在线编程。
MAX系列是Altera目前为流行,使用广泛的两个系列之一,本文章以MAX7000系列芯片为例介绍了可编程芯片在DSP系统设计中的应用。
MAX7000系列器件的特点
MAX7000系列是高密度,高性能的CMOSCPLD,是在Altera公司的第二代MAX结构基础上构成的,采用**的0.8umCOMSEEPROM技术制造。MAX7000系列提供600到5000可用门(器件上提供1200-10000门),引脚到引脚的延时为6ns,计数器频率可达151.5MHz。MAX7000系列的-7和-10P速度等级同PCI总线标准一致。MAX7000系列的高密度器件称为MAX7000E系列。它们有几个加强的特性:附加全局时钟,附加输入使能控制,增加连线资源、快速输入寄存器和可编程的输出电压摆动率。
MAX7000是用CMOSEEPROM单元实现逻辑函数的。可编程的MAX7000结构容纳各种各样的,有独立的组合逻辑和时序逻辑函数。在设计开发和调整阶段,MAX7000器件可以快速而有效地重新编程,并保证可编程的擦除100次。
DSP系统结构
在进行DSP系统设计时采用CPLD来实现DSP和其他外围芯片的接口电路的优点主要是硬件设计简单,因为CPLD的管脚具有重定义的功能,这使得PCB板的设计要简化很多;因为MAX7000系列CPLD的功能比较强大,可以很容易实现地址译码、等待时序的插入以及这种简单的总线转换,一般用一块CPLD就可以实现系统所有的接口电路。它的功能框图如下:
下面从等待时序的产生、地址译码和LCD接口电路的实现几个方面来举例说明。
用CPLD产生等待时序
TMS320C2X支持与慢速外设接口的硬件等待状态插入。当与慢速外设接口时,系统必须提供能产生等待状态的硬件电路。外设存取的速度越慢,所需插入的等待状态数量就越多。那么,如何根据外设存取速度来确定所需的等待数可以由下式确定:
设t为外设访问时间
TMS32020[200(N-1)+85]ns
TMS320C25-40[100(N-1)+40]ns
TMS320C25-50[80(N-1)+29]ns
假设设计的系统在访问程序空间时需要加入两个等待,I/O空间和数据空间则是全速。用VHDL语言描述如下:
——generate wait state for low speed interface
g_wait_prog:
PROCESS(clockout, reset)
BEGIN
IF((res_cpu = ‘0‘) or (ps = ‘1‘))THEN
progwaitclock <=0;
ELSIF(clockout‘EVENT AND clockout= ‘0‘) THEN
IF (ps =‘0‘) THEN
IFprogwaitclock = 2 THEN
progwaitclock <=0;
ELSE
progwaitclock <=progwaitclock + 1;
ENDIF;
ELSE
progwaitclock <=progwaitclock ;
ENDIF;
ENDIF;
ENDPROCESS g_wait_prog;
——generate ready signal
PROCESS
BEGIN
IF((progwaitclock = 0)and(lcdwaitclock = 0)) THEN
ready<= ‘1‘;
ELSE
ready<= ‘0‘;
ENDIF;
ENDPROCESS ;
Clockout为CPU的时钟输出信号,信号量progwaitclock是用来计数clockout的个数,当CPU访问程序空间时,PS为低电平,progwaitclock开始计数,当progwaitclock的值不为0时ready为高,CPU等待外部设备就绪,当progwaitclock计数到要等待的个数时,progwaitclock复位为零,ready变为低,CPU等待结束。
用CPLD实现存储器接口
存储器接口包括ROM接口和RAM接口两种。ROM主要指PROM和EPROM,而RAM主要是静态RAM(SRAM)。设计存储器接口时主要考虑到存储器速度,以确定需要插入几个等待状态,还要考虑到地址译码,地址空间分配的问题。
1快速PROM/EPROM接口
快速PROM/EPROM(存取时间35ns)可直接和TMS320C2××接口而不用加入等待,但要考虑到地址译码的问题。
2慢速EPROM/EEPROM/FLASH MEMORY的接口
对于慢速器件,在和DSP这种较快的处理器接口的时候要加入合适的等待周期,还要考虑地址译码的问题。
3快速SRAM接口
TMS320C2××既可将SRAM用作程序存储器,也可用作数据存储器。不管是程序空间还是数据空间,它都只要考虑译码的问题,用正确的线片选即可,如程序空间用PS片选,而数据空间用DS片选。
4程序和数据公用SRAM
在很多时候,为了方便调试不但要扩展程序SRAM也要扩展数据SRAM。因为TMS320C2××分别用PS和DS来选程序和数据空间,一般的做法是用PS和DS分别片选不同的芯片,为了使DSP有足够的程序和地址空间,我们需要多片存储器芯片,这样,会给PCB布线的时候带来很大的麻烦。因为采用了CPLD来进行译码,我们可以很方便的用一块容量较大的SRAM,通过合适的译码电路使它的空间能分开,既有程序空间又有数据空间。下以CY7C1024-15为例来说明:
—— ramaddress albbbbbbbb.
——pro_data = 1 means select 8000H——ffffH(data);
——pro_data = 0 means select 0000H——7fffH(program);
PROCESS(ds,ps)
BEGIN
IF((strb=‘0‘)and(ds = ‘1‘)and(ps = ‘0‘)) THEN
pro_data<= ‘0‘;
ELSIF((strb=‘0‘)and(ds = ‘0‘)and(ps = ‘1‘)) THEN
pro_data<= ‘1‘;
ELSE
pro_data<= ‘0‘;
ENDIF;
ENDPROCESS;
—— ramcontrol line.
control:
PROCESS(we, w/r, ps, ds, ios, br, strb)
BEGIN
IF strb ="0" THEN
IF ((ds =‘1‘)and(ps = ‘0‘))or((ds = ‘1‘)and(ps = ‘0‘)) THEN
ram_cs<= "0";
ram_w/r<= w/r;
ram_oe<= we;
ELSE
ram_cs<= "1";
ram_w/r<= "1";
ram_oe<= "1";
ENDIF;
ELSE
ram_cs<= "1";
ram_w/r<= "1";
ram_oe<= "1";
ENDIF;
CY7C1021是Cypress公司生产的64k×16bitStaticRAM,以上程序要完成的功能是让一块芯片的64k空间中的低端32k为程序空间,32k为数据空间。程序中的pro_data接CY7C1021的高位地址线A15,当ps为低时pro_data为低电平,选中RAM的低32k空间,当ds为低时pro_data为高电平,选中RAM的高32k空间,ram_cs、ram_w/r、ram_oe分别接CY7C1021的片选、读、写线。
用CPLD实现LCD接口电路
我们常用的LCD有很多种,如段型、点阵型,这儿主要介绍如何用CPLD来实现DSP和点阵型LCD的接口。由于点阵型液晶显示器的引线多,用户使用极不方便,制造商将点阵型液晶显示器做在一块板上成套出售,这种产品称为液晶显示模块。在液晶显示模块上装配好了液晶显示驱动电路和分压电路,并提供驱动电路的接口,这使得液晶显示模块和微处理器的接口十分方便。它在结构上可分为接口、控制和输出三大部分。以深圳天马公司的液晶模块为例,简单介绍它的接口。它一共有11条信号线:
RS用于寄存器选择,低电平选择指令寄存器,高电平选择数据寄存器。
R/W为读/写控制端,低电平时写显示模块,把CPU的数据写入显示模块;高电平读显示模块,把显示模块的数读回CPU。
E为允许输入信号线(数据读写操作允许信号),高电平有效。
D0-D7为数据线。
相比较DSP而言,LCD显示模块是慢速器件,在设计接口电路时除了要考虑它的接口时序匹配外还要考虑加入合适的等待周期。在下面给出的例子中地址线a0用来控制是读还是写,a1用来选择数据寄存器还是控制寄存器。Lcd_rs接到LCD模块的RS管脚,lcd_wr接到LCD模块的W/R管脚,lcd_e接到E管脚。程序中的high_adr是DSP地址线高3位a15-a13的组合,在这个例子程序中LCD模块的操作地址被映射到DSP的IO空间的0x2000-0x3fff。
—— lcdinterface :
—— bbbbb :a1(lcd_rs), a0(lcd_wr) ,we, wr, ios, strb ;
—— a1,a0=> "00" : write command
—— a1,a0=> "01" : read AC value
—— a1,a0=> "10" : write data
—— a1,a0=> "11" : read data
—— lcd_rs: select register bank ‘1‘ for data, ‘0‘ for command
—— lcd_wr: write/read control ‘1‘ for read, ‘0‘ for write
—— lcd_e :enable signal; ‘1‘ for read , ‘1‘ to ‘0‘ write data in
lcd_en:
PROCESS(we, wr, ios, strb)
BEGIN
IF ((strb= ‘0‘) and (ios = ‘0‘)) THEN
IF(high_adr = "001") THEN
lcd_rs<= a1;
lcd_wr<= a0;
lcd_e<= (not (we or wr));
ELSE
lcd_rs<= ‘0‘;
lcd_wr<= ‘0‘;
lcd_e<= ‘0‘;
ENDIF;
ELSE
lcd_rs<= ‘0‘;
lcd_wr<= ‘0‘;
lcd_e<= ‘0‘;
ENDIF;
ENDPROCESS lcd_en;
——generate wait state for low speed interface
g_lcd_wait:
PROCESS(clockout, reset1 )
BEGIN
IF((reset1 = ‘0‘)or(not((ios = ‘0‘) and (high_adr = "001"))))THEN
lcdwaitclock <=0;
ELSIF(clockout‘EVENT AND clockout= ‘0‘) THEN
IF ((ios =‘0‘) and (high_adr = "001")) THEN
IFlcdwaitclock = 5 THEN
lcdwaitclock <=0;
ELSE
lcdwaitclock <=lcdwaitclock + 1;
ENDIF;
ELSE
lcdwaitclock <=0;
ENDIF;
ENDIF;
ENDPROCESS g_lcd_wait;
用CPLD实现键盘接口电路
DSP和键盘的接口可以用专用的键盘接口芯片来实现,但如果是要识别的键不是很多,用一块专门的键盘接口芯片就显得有些多余,用一块CPLD附带就能实现键盘接口,它可以把键码的识别映射到DSP的一个IO空间,通过读这个IO地址来判断是否有键按下,它也可以很方便的实现按键中断,的键通过与的关系产生一个信号,这个信号连到CPU的中断输入管脚,当有键按下时,这个信号发生调变触发CPU的中断。它还可以很容易实现硬件消抖。因为这部分比较简单,故不再举例说明。
仿真波形
如图所示为以上VHDL程序在MAXPLUSII中编译仿真的结果,仿真仅仅给出了每个功能模块的部分波形,图中显示了当访问程序空间时,pro_data为低电平,ready保持两个时钟周期的低电平使得CPU总线插入两个周期的等待。图中还显示了当访问IO空间的0x2002地址时的波形,对这个地址进行读操作是从LCD的控制寄存器读入数据,这时ready保持5个时钟周期的低电平来让CPU插入5个周期的等待,在这个期间lcd_wr保持高电平表示对LCD进行读操作,lcd_rs保持低电平表示选择LCD的控制寄存器。
结论
芯片的设计、生产和制造技术的发展使得CPLD的在各种设计中有越来越多的应用,而随着DSP芯片性能价格比和开发手段的不断提高,DSP已在通信与信息系统、信号与信息处理、自动控制、雷达、军事、航空航天、医疗、家用电器等许多领域也得到广泛的应用。DSP的高速度和期复杂的接口时序使得在设计DSP系统时往往会难于设计DSP和外围电路的接口,本文以存储器,LCD等为例简单介绍了MAX7000系列在DSP系统中的应用,并辅有VHDL实现的例子,通过的实践应用,总体感觉用CPLD来处理DSP的外围接口电路很方便,因为它的IO管脚几乎可以随意分配,可给PCB布线带来很大的方便;尤其在调试的时候,甚至不用断电就可以重新向CPLD中写入新的逻辑关系就可以调试。