摘要:ATV750是ATMEL公司生产的一种可擦除可编程逻辑器件EPLD(Erasable Programmable Logic Device)。ATV750设计的可编程计数器,具有模值范围大的特点,文中给出了用ATV750设计的可编程计数器的设计原理和方法,同时给出了详细的源程序。
关键词:可编程计数器 反馈置零法 EPLD ATV750
EPLD是继GAL(Generic Array Logic)后出现的新一代PLD(Programmable Logic Device),它的密度比普通GAL大得多,在设计可编程计数器时,仅用一片EPLD就能实现较大模值的分频计数。本文给出用ATMEL公司推出的EPLD芯片ATV750来实现可编程计数器的设计过程。
1 ATV750简介
1.1 ATV750的结构描述
图1为24引脚DIP封装形式的ATV750的引脚排列,它在逻辑结构方面具如下特点:
●带有10个输出逻辑宠单元OLMC(Output Logic Macrocell),每个OLMC有两个或门,每个或门带一半乘积项。每个或门所带的乘积项分别为2×2×4,2×2×5,2×2×6/2×2×7/2×2×8,共有120项乘积项。每个宠单元有两个触发器,每个触发器的输出都有一个三态缓冲器反馈到与门阵列;
●可编程与门阵列共有84个输入变量。其中12个专用输入端为24个变量,10个反馈输入端为20个变量,20个触发器的反馈为40个变量;
●所有的乘积项共有171项。其中或门带120项,每个宠单元中的两个触发器的异步置0信号AR需要2个乘积项,时钟控制信号CK需要2个乘积项,三态输入缓冲器的使能端OE需要1个乘积项10个宏单元共50个乘积项,另外,所有的触发器还共用一个同步置1信号SP,需要1个乘积项。
1.2 输出逻辑宏单元OLMC
ATV750的输出逻辑宏单元OLMC结构如图2所示,它有两个或门OR0和OR1,一个分离开关,两个D触发器F0和F1,一个2选1多路选择器MUX,一个异或门XOR和一个三态缓冲器。
OR0、F0和MUX组成逻辑组态选择电路,可以构成组合逻辑输出或者寄存器(时序逻辑)输出。F0的输出同时由反馈缓冲器Q0反馈回与门阵列。F1是埋入式的,它的输出不接到输出引脚,而是由反馈缓冲器Q1反馈到与门阵列,这可看做是逻辑函数的中间变量而在设计中的一个节点。这种结构对设计中间带有触发器的时序电路非常方便。在设计时,可用节点作为中间输出变量来设计F1之前的电路,然后再以引脚作为输出变量,以节点的输出作为输入变量设计F1以后的电路,这样就可把复杂的设计分成两步来进行。
分离开关的作用是增加或者减少或门OR0的乘积项个数。比如,当OR0带有4个乘积项时,如果在设计电路时输入变量超过4项,那么,分离开关将经过编程而接通,并将OR1所带的4个乘积项接到OR0的输入端而使OR0的乘积项增加一倍。如果在设计时OR0所带的4个乘积项已经费用了,这个开关将通过编程而断开。此时OR1的输出直接作为F1的输入信号被全站作为埋入式应用而并不作废。当三态输出缓冲器的使能端OE使其高阴态时,F的输出与F1一样,都可作为埋入式触发器应用。
两个触发器的时钟信号分别由一个乘积项来供给,即CK0和CK1.异步置0信号也分别由珍上乘积项来供给,即AR0和AR1.这样可以设计异步时序电路。
触发器的同步置1信号SP可由共用的一个乘积项来供给。MUX和三态输出缓冲器可用来构成输出选择电路。
2 可编程计数器的设计原理
一般情况下,采用PLD设计可编程计数器有四种方法:第一是基于二进制计烽器基础上的反馈置零法;第二是基于二进制计数器基础上的反馈初值法;第三是基于二进制计数器基础上的异步复位法;第四是基于M序列发生器基础上的反馈置零法。其中第一种方法的通用性最强,故常被采用。
N位同步二进制加法计数器的构造非常有规律,其各级触发器的状态转移方程为:
Q1=Q1+(Qi-1…Q1·Q0·1),
i=(0,1,…,n-1)
从低位开始分别为:
Q0=Q0+1
Q1=Q1+Q0
Q2=Q2+Q1Q0
欲构成一个N模值的分频器(M≠2n),应先选择二进制计数器的位数n,n的选择应满足:
2n-1 如M=6,则选n=3,模数为2 3计数器的方程如下: Q0=Q0 Q1=Q1+Q0 Q2=Q2+Q1Q0 如果要采用反馈置零法将模为2 n的计数器改变模M计数器,则可选择数M-1作为反馈的码F。对上例中的M-6,可选用M-1=5,即101作为反馈码,因而有: F=Q2Q1Q0 这样将上面模8计数器的方程改为下面形式即可实现模6计数: Q0=FQ0 Q1=F(Q1+Q0) Q2=F(Q2+Q1Q0) 显然,采用此法设计的任意模值计数器具有自启动特性。 3 最大模值计数器的设计 ATV750有10个输出逻辑宏单元OLMC,为了实现最大模值(M≠2
n)的计数器,可将OLMC组态和数项分离连接,这样OLMC中的两个或门所带的乘积项为4~8项。但数目有限的乘积项无法实现上述各级触发器状态转移方程中的异或运算所带来众多的乘积项,为此设计二进制计数器时应分级处理,每级二进制计数器的级数不能超过8位,级与级之间的进位采用同步结构。这样,用ATV750设计可编程计数器的模值M的范围为2
17-1=131071,该数值已能满足绝大部分应用场合的需要。下面给出用ABEL4.0设计的模值M=2
17-2计数器的源程序: module CNT131K title '模M=2 17-1=131071计数器' IC131K device 'P750'; F pin 14; "反馈码输出即分频输出" C01 pin 23; "第一级二进制计数器进位输出" C02 pin 15; "第二级二进制计数器进位输出" Q16,Q15,AQ14 pin 16,22,18 istype
'buffer'; Q13,Q12,Q11,Q10 node 26,35,30,31,29; Q4,Q3,Q2,Q1,Q0 node 32,28,33,27,34; CLK,CLR pin 1,2; "外部时钟和异步复位输入" Q=[Q16..Q0]; P,C,X=.P.,C.,.X.; equations Q0.D=!F&(Q0$1); "第一级" Q1.D=!F&(Q1$0); Q2.D=!F&(Q2$Q1&Q0); Q3.D=!F&(Q3$Q2&Q1&Q0); Q4.D=!F&(Q4$Q3&Q1&Q0); Q5.D=!F&(Q5$Q4&Q3&Q1&Q0); Q6.D=!F&(Q6$Q5&Q4&Q3&Q2&Q1&Q0); Q7.D=!F&(Q7$Q6&Q5&Q4&Q3&Q2&Q1&Q0); C01=Q7&Q6&Q5&Q4&Q3&Q2&Q1&Q0; Q8.D=!F&C01&(Q8$1)#!F&!C01&Q8;
"第二级" Q9.D!F&1&(Q9$Q8)#!F&!C01&Q9; Q10.D=!F&C01&(Q10$Q9&Q8)#!F&!C01&Q10; Q11.D=!F&C01&(Q11$Q10&Q9&Q8)#!F&!C01&Q11; Q12.D=!F&C01&(Q12$Q11&Q10&Q9&Q8)#!F&!C01&Q12; Q13.D=!F&C01&(Q13$Q12&Q11&Q10&Q9&Q8)#!F&!C01&Q13; Q14.D=!F&C01&(Q14$Q13&Q12&Q11&Q10Q9&Q8)#!F&!C01&Q14; C02=Q14&Q13&Q12&Q11&Q10&Q9&Q8&C01; Q15.D=!F&C02&(Q15$1)#!F&!C02&Q15;"第三级" Q16.D=!F&C02&(Q16$Q15)#!F&!C02&Q16; F=Q16&Q15&Q14&Q13&Q12&Q11&Q10Q9&Q8&Q7&Q6&Q5&Q5&Q3&Q2&Q1&!Q0;"反馈码M-1=131070" Q0.C=CLK; Q1.C=CLK; Q2.C=CLK; Q3.C=CLK; Q4.C=CLK; Q5.C=CLK; Q6.C=CLK; Q7.C=CLK; Q8.C=CLK; Q9.C=CLK; Q10.C=CLK; Q11.C=CLK; Q12.C=CLK; Q13.C=CLK; Q14.C=CLK; Q15.C=CLK; Q16.C=CLK; Q0.RE=CLR; Q1.RE=CLR; Q2.RE=CLR; Q3.RE=CLR; Q4.RE=CLR; Q5.RE=CLR; Q6.RE=CLR; Q7.RE=CLR; Q8.RE=CLR; Q9.RE=CLR; Q10.RE=CLR; Q11.RE=CLR; Q12.RE=CLR; Q13.RE=CLR; Q14.RE=CLR; Q15.RE=CLR; Q16.RE=CLR; test-vectors ([CLK,CLR,Q]->[CO,C01,Q]) [0,1,X]->[0,0,0]; "复位" [C,0,X]->[0,0,1]; "计数" [C,0,X]->[0,0,2]; [P,0,3]->[0,0,X]; "预置131068,反码输入" [C,0,X]->[0,0,131069]; "计数" [C,0,X]->[1,0,131070]; [C,0,X]->[0,0,0]; [C,0,X]->[0,0,1]; [C,0,X]->[0,0,2]; [C,0,X]->[0,0,3]; [C,0,X]->[0,0,4]; [C,0,X]->[0,0,5]; [P,0,0]->[0,1,X]; "自启动检测" [C,0,X]->[0,0,0]; end CNT131K 4 结束语 用ATV750设计可编程计数的模M最大值为2
17-1=131071。但在实际运用时,如果模M较小则用GAL设计即可。用GAL16V8设计可编程计数器的模M范围为2至2
8-1=255,用GAL22V10设计可编程计数器的模M范围为2至2
10-1=1023。而当模M比2 17-1更大时,可用更大规模的EPLD设计,如ATV2500和ATV5000。当用可编程计数器构成其它更为复杂的数字系统时,应选用CPLD(Complex
Programmable Logic Device)来设计,这时可选用Lattice半导体公司的ISP(In-System
Programming)器件。
上一篇:42MX系列FPGA及其应用
下一篇:FPGA在演化硬件中的应用
- 热门资源推荐
- 热门放大器推荐
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况