摘要:CPLD可编程技术具有功能集成度高、设计灵活、开发周期短、成本低等特点。介绍基于ATMEL 公司的CPLD芯片ATF1508AS设计的串并转换和高速USB及其在高速高精度数据采集系统中的应用。
关键词:CPLD 串并转换 USB
可编程逻辑器件(PLD)是20世纪70年代在ASIC设计的基础上发展起来的一种划时代的新型逻辑器件。自PLD器件问世以来,制造工艺上采用TTL、CMOS、ECL及静态RAM技术,器件类型有PROM、EPROM、E2PROM、FPLA、PAL、GAL、PML及LCA等。PLD在性能和规模上的发展,主要依赖于制造工艺的不断改进,高密度PLD是VLSI集成工艺高度发展的产物。80年代末,美国ALTERA和XILINX公司采用EECMOS工艺,分别推出大规模和超大规模的复杂可编程逻辑器件(CPLD)和现场可编程逻辑门阵列器件(FPGA)。这种芯片在达到高集成度的同时,所具有的应用灵活性和多组态功能是以往的LSI/VLSI电路无法比拟的。自从跨入90年代以来,可编程逻辑器件CPLD/FPGA得到了飞速发展,向高集成度、高速度和低价位方向不断迈进;不仅具有电擦除特性,而且出现了边缘扫描及在线编程等高级特性;其应用领域不断扩大,可用于状态机、同步、译码、解码、计数、总线接口、串并转换等很多方面,而且在信号处理领域的应用也活跃起来。使用CPLD可以提高系统集成度、降低噪声、增强系统可靠性并降低成本。
本文主要介绍ATMEL公司的CPLD芯片ATF1508AS的特点及应用。ATF1508AS是利用ATMEL成熟的电擦除技术实现的高性能、高密度的复杂可编程逻辑器件(CPLD),与ALTERA公司的EPM7000系列引脚完全兼容;可以将EPM7000的POF文件转换为适合ATF1508AS的工业标准JEDEC编程文件,下载到ATF1508AS芯片中。
1 ATF1508AS的特点
ATF1508AS是利用ATMEL成熟的电擦除技术实现的高性能、高密度的复杂可编程逻辑器件(CPLD)。它有128个逻辑宏单元和最大100个输入,能很容易地集成一系列TTL、SSI、MSI、LSI和传统PLD的逻辑功能。ATF1508AS的增强型路由开关矩阵增加了可用的门数和设计改变时引脚锁定的成功率,这是非常重要的。ATF1508AS有96个双向I/O引脚和4个输入引脚。这4个输入引脚也可以用于全局控制信号、全局寄存器时钟、全局复位和全局输出允许。
128个宏单元中的每一个都产生一个隐藏的反馈回路到全局总线,每一个输入引脚、I/O引脚也都汇入全局总线。每个逻辑块的开关矩阵从全局总线中选择40个独立的信号,每一个宏单元也产生一个返送逻辑项到局部总线。宏单元之间的级联逻辑可以快速有效地实现复杂的逻辑功能。ATF1508AS包括八个这样的逻辑链,每一个都能通过扇入最多40个乘积项实现逻辑项求和。
ATF1508AS是在系统编程(ISP)器件。它用工业标准的4脚JTAG接口(IEEE标准1149.1),完全与JTAG的边界扫描描述语言(BSDL)兼容。ISP允许器件不用从印刷电路板上拿走就可编程;除简化生产流程外,ISP也允许通过软件进行设计修改。
ATF1508AS的引脚保持电路提供对所有输入和I/O引脚的设置。当任何引脚驱动到高电平或低电平,紧接着引脚被悬空时,引脚将保持先前的高电平或低电平状态。这种电路防止没有用到的输入和I/O线悬空而成为中间的电压值,这会导致不必要的功耗和系统噪声。引脚保持电路去除了对外部上拉电阻的需要和直流功耗。
ATF1508AS的加密特性可以保护ATF1508AS的设计内容。两个字节(16位)的用户信号可被用户存取,能存放工程名、部件号、版本或日期等,而且用户信号的存取不受加密熔丝的状态影响。
ATF1508AS具有上电复位特性。在上电期间,所有的I/O引脚将为三态,直到VCC到达上电电压,这样可防止在上电期间发生总线竞争。ATF1508AS的寄存器设计成在上电时复位,从VCC上升到VRST后的微小的延时,所有的寄存器将复位到低电平,输出状态要根据缓冲器的极性设置。这种特性对于状态机的初始化是比较关键的。
2 ATF1508AS的宏单元
ATF1508AS的宏单元如图1所示。它的宏单元非常灵活,足以支持高复杂逻辑功能并且高速工作。宏单元包括五个部分:乘积项和乘积项选择多路复用器、或/异或/级联逻辑、触发器、输出选择和使能、逻辑阵列输入。没有用到的宏单元可由编译器禁止以降低功耗。
(1)乘积项和乘积项选择矩阵
每一个宏单元有5个乘积项,每个乘积项作为它的输入从全局总线和局部总线接收所有信号。乘积项选择矩阵(PTMUX)按需分配这5个乘积项到宏单元的逻辑门,也负责分配控制信号。乘积项选择矩阵的编程是由设计编译器决定的,编译器将选择优化的宏单元配置。
(2)或/异或/级联逻辑
ATF1508AS的逻辑结构是为有效地支持所有的逻辑而设计的。在一个宏单元内,所有的乘积项可以被布进或门,产生一个5输入的与/或求和项。通过邻近的宏单元扇入额外的乘积项,可以扩展到40个乘积项而只有很小的延时。宏单元的异或门允许有效地实现比较和算术功能,其中异或门的一个输入来自或运算的求和项,另一个输入可以是一个乘积项或一个固定的高电平或低电平。对于组合逻辑输出,固定电平允许极性选择;对于时序逻辑,固定电平允许利用反演规则(摩根定律的推论)化简乘积项。异或门也可以用于仿真T型和JK型触发器。
(3)触发器
ATF1508AS的触发器有非常灵活的数据和控制功能。触发器的输入可以来自于异或门、一个单独的乘积项或直接由I/O口输入。选择单独的乘积项允许在一个组合逻辑输出宏单元内生成一个隐藏的寄存器反馈(这个特性是由fitter软件自动实现的)。除D、T、JK和SR类型外,ATF1508AS的触发器还可配置为锁存器。在这种模式中,当时钟为高时,数据通过;当时钟为低时,数据锁存。
时钟信号可以是全局CLK信号(GCK)和一个单独的乘积项。触发器在时钟的上升沿改变状态。当GCK信号作为时钟信号时,宏单元的一个乘积项可以选择作为时钟允许信号。当使用时钟使能功能时,使能信号(乘积项)为低时,所有的时钟边沿将被忽略。触发器的异步复位信号(AR)可以是全局复位信号(GCLEAR)、一个乘积项或不使用。AR也可以是GCLEAR和一个乘积项的逻辑或输出。异步置位信号(AP)可以是一个乘积项或不使用。
(4)输出选择和使能
ATF1508AS宏单元的输出可以选择为寄存器型和组合型。隐藏的反馈信号可以是组合或寄存器信号而不管输出是组合型还是寄存器型。输出使能多路复用器(MOE)控制输出使能信号。如果是简单的输出操作,任何缓冲器都可以永久使能。如果引脚用作输入,缓冲器也可以永久禁止。在这种配置下,所有的宏单元资源仍然可用,包括隐藏的反馈信号、扩展器和级联逻辑。每一个宏单元的输出使能信号都可以选择一个全局输出使能信号。该器件有6个全局输出使能信号(OE)。
(5)逻辑阵列输入
逻辑阵列输入包括全局总线/开关矩阵和返送总线:
◇ 全局总线/开关矩阵
全局总线包括所有的输入和I/O引脚信号以及所有128个宏单元的隐藏反馈信号。每个逻辑块的开关矩阵将全局总线的所有信号作为其输入。在软件的控制下,这些信号中最多可以有40个被选择作为逻辑块的输入。
◇ 返送总线
每一个宏单元可以产生一个返送乘积项。这个信号连接到局部总线上,并且对16个宏单元有效,它是宏单元一个乘积项的反极性。每个局部总线的16个返送项允许产生高扇入求和项(最多21个乘积项),而只有很小的延时。
3 设计软件支持
ATMEL公司提供了CPLD的设计软件,而且很多第三方的工具软件也支持ATF1508AS的设计,可以用多种高级描述语言和格式进行逻辑描述,如CUPL、ABEL、VHDL等。由于ATF1508AS与ALTERA公司的EPM7000系列是完全引脚兼容的,因此可以使用ALTERA公司的MAXPLUSII软件。它能进行VHDL语言的编译和综合,使用方便,功能强大。MAXPLUSII综合后产生适合ALTERA的CPLD编程的POF文件,使用POF2JED软件(ATMEL公司提供),就可将POF文件转换为适合ATF1508AS的工业标准JEDEC编程文件,下载到ATF1508AS芯片中。
4 器件编程
ATF1508AS器件是利用4脚JTAG协议在系统编程(ISP)的。ATMEL提供了ISP硬件(下载电缆)和软件,以允许从PC对ATF1508AS进行编程。若要允许ISP编程支持"自动测试装置(ATE)"向量,必须通过ATMEL的ISP软件生成串行向量格式(SVF)文件,也可转换为除SVF外的其它ATE测试格式。ATF1508AS器件也可以用标准的第三方编程器来编程,这时JTAG ISP口可以被禁止从而允许这四个额外的I/O引脚用于逻辑功能。
ATF1508AS还有一个特性就是如果由于任何原因编程过程被中断,则器件将被锁定以防止输入和I/O引脚被驱动。在这种状态下,输入和I/O引脚缺省下为高阻状态。在编程器件时,输入和I/O引脚也将为高阻状态。此外,引脚保持电路设置在器件编程期间将保持以前的状态。ATF1508AS器件出厂时被初始化为已擦除状态,可以直接用来ISP编程。
5 应用实例
(1)应用ATF1508AS进行串并转换
本系统应用ATMEL公司的ATF1508AS进行串行数据到并行数据的转换,在进行数据采集中,用到Crystal半导体公司生产的24位高精度Σ-△模/数转换器CS5321/CS5322组件。该组件最终输出字长为24位的2的补码格式的串行数字信号,将其转换为并行数据可以方便与单片机的接口。串并转换可采用移位寄存器来实现。对实现6通道24位采样,若采用移位寄存器,则需要8位移位寄存器,共3×6=18片,另外还要用几片译码器。这样,会使芯片数量大增,占用大片电路板面积,使系统的体积增大。本系统使用ATF1508AS来实现6通道24位数据的串并转换,可将大部分数字逻辑设计(包括组合逻辑和时序逻辑)集成在一个芯片内,大幅减少芯片数量,减小系统体积。
由于ATF1508AS内部有128个宏单元,而且24位串并转换需要24个移位寄存器,因此不能同时进行6通道的串并转换,只能分时复用。本系统分3次进行串并转换,每次转换2个通道,等待单片机读取2个通道的并行数据后再进行剩下的转换。部分串并转换VHDL程序如下(硬件描述语言是VHDL,软件是ALTERA公司的MAXPLUSⅡ软件和ATMEL公司的POF2JED软件,下载软件是ATMEL公司的ATMISP,下载电缆是ATMEL公司的专用电缆):
s2p : process(SCLK1M,DRDYIN,WORKING,RESET)
begin
if WORKING='1' or RESET='1' then
shift_enable <= '0';
state <= s0;
elsif SCLK1M'event and SCLK1M='0' then
count1 <= count1+1;
case state is
when s0 =>if DRDYIN='0' then
shift_enable <= '1';
count1 <= (others=>'0');
int_reg <= '1';
state <= s1;
elsif READOK='1' then
int_reg <= '1';
end if;
when s1=>shift_reg0<=shift_reg0(22 downto 0)& SOD(0);
shift_reg1<=shift_reg1(22 downto 0)& SOD(1);
if count1=23 then
shift_enable <= '0';
int_reg <= '0';
state <= s2;
else
int_reg <= '1'; end if;
when s2 => if shift_enable='1' then
shift_reg0<=shift_reg0(22 downto 0)& SOD(2);
shift_reg1<=shift_reg1(22 downto 0)& SOD(3);
if count1=23 then
shift_enable <= '0';
int_reg <= '0';
state <= s3;
else
int_reg <= '1'; end if;
elsif READOK='1' then
shift_enable <= '1';
count1 <= (others=>'0');
end if;
when s3 =>if shift_enable='1' then
shift_reg0<=shift_reg0(22 downto 0)& SOD(4);
shift_reg1<=shift_reg1(22 downto 0)& SOD(5);
if count1=23 then
shift_enable <= '0';
int_reg <= '0';
state <= s0;
else
int_reg <= '1'; end if;
elsif READOK='1' then
shift_enable <= '1';
count1 <= (others=>'0');
end if;
end case;
end if;
end process;
(2)应用ATF1508AS进行高速USB通信
USB是近年来应用在PC领域的新型接口技术,具有使用方便、速度快、连接灵活、支持热插拔等特点。USB1.1协议定义在高速下12 Mb/s、低速下1.5 Mb/s的传输速度。若要达到高速12 Mb/s(相当于近1 MB/s)的速度,就要大约1μs传输1个字节。但由于USB的控制传输、错误检测以及单片机本身速度的限制,很难达到这么高的速度,因此,必须采用DMA方式才能达到真正的高速传输,使用CPLD就可以实现类似DMA方式。单片机负责解释USB的控制传输,当要进行从外存取数送到USB接口芯片时,单片机让出总线,由CPLD完成该工作。CPLD产生外存的读取时序和地址、片选信号,同时产生USB接口芯片的写时序和地址、片选信号,这样就可以自动实现外存数据到USB接口芯片的工作,而且速度很快,不需要单片机干预。以下给出RAM的读取时序、地址信号和USB接口芯片写时序的VHDL程序片断:
rram1 : process(SCLK2M) -- RAM_OE(RAM读时序)
begin
if SCLK2M'event and SCLK2M='1' then
if read='0' then
ram_oe_reg <= '1';
cpld2_counter <= (others=>'0');
elsif read='1' then
cpld2_counter <= cpld2_counter+1;
if cpld2_counter>0 then
ram_oe_reg <= not ram_oe_reg;
end if;
end if;
end if;
end process;
rram2 : process(SCLK2M,WORKING,RESET) -- ADDRESS(RAM地址信号)
begin
if WORKING='1' or RESET='1' then
adr_reg <= (others=>'0');
elsif SCLK2M'event and SCLK2M='0' then
if read='1' and ram_oe_reg='1' and cpld2_counter>2 then
adr_reg <= adr_reg+1;
end if;
end if;
end process;
wd12 : process(SCLK2M) --USB芯片读时序
begin
if SCLK2M'event and SCLK2M='0' then
if read='0' then
d12_wr_reg <= '1';
elsif read='1' and cpld2_counter/=129 then
d12_wr_reg <= not d12_wr_reg;
end if;
end if;
end process;
结束语
CPLD器件的优势在于缩短开发生产周期,现场灵活性好,而且随着电子技术的发展,其集成度越来越高,速度越来越快,价格也逐渐降低,因此市场发展很快。ATMEL公司的ATF1508AS是高性能、高密度的复杂可编程逻辑器件,使用方便,具有很高的性价比,因此具有广阔的应用前景。
上一篇:用SoC实现视频图形引擎功能的研究
下一篇:CPLD技术在PCI总线开发中的应用
- 热门资源推荐
- 热门放大器推荐