用EPLD芯片ADV750设计的一种可编程计数器

2006-05-07 15:49:52来源: 国外电子元器件

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)器件。

编辑: 引用地址:http://www.eeworld.com.cn/designarticles/eda/200605/2337.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部

小广播

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved