1 PROTEUS软件简介
PROTEUS 是来自英国公司的东西软件,在全球广泛运用。和其它东西比较,这款软件的最大特色就在于它能够模仿单片机。能够直接在根据原理图的虚拟原型EDA上编程,并完结软件源码级的实时调试。还能看到运转后输入输出的作用。可是现在咱们都只留意到PROTEUS对单片机的仿真和怎么与Keil进行相关调试,其实 PROTEUS还能够进行PLD的电路仿真。
PLD(可编程逻辑器材)是一种数字集成电路的半成品,在其芯片上按必定摆放方法集成了很多的门和触发器等根本逻辑元件,运用者可利用某种开发东西对其进行加工,即按规划要求将这些片内的元件衔接起来,使之完结某个逻辑电路或体系的功用,成为一个可在实践电子体系中运用的专用集成电路。
一般的PLD规划软件只能进行PLD芯片的时序逻辑仿真,而PROTEUS能进行PLD的电路仿真,能够模仿规划的PLD芯片在电路中实践运转的状况。
咱们经过运用GAL16V8规划一个在单片机体系里常用的三八译器,然后在PROTEUS中经过调查GAL16V8中三八译码器的输入与输出的对应联系来完结PLD的电路仿真。
2. PLD的规划
首先用Protel 99SE完结PLD的规划。
完结后的PLD原理图如下所示:
图1 画好的PLD原理图
这是一个3-8译码器的PLD文件。输入信号为方针元件的2、3、4三个脚,输出信号为方针元件的12-19脚,6-8脚为使能操控端。
Protel 99SE的PLD原理图的规划与一般原理图相同,但有几点是需求留意:
生成PLD元理图后,在原理图中主动参加了两个PLD的元件库(PLD_Devices.lib、PLD_Symbols.lib),PLD的电路图制造必需运用这两个库中的元件。
制造PLD原理图时,有必要放置输入/输出端口(输入:IPAD、输出:OPAD、输入/输出:IOPAD)元件,这些元件所指定的引脚代表着方针器材的引脚。
在输入/输出端口元件放置好后,有必要对其进行编号,还要指定该端口元件所对应衔接的方针器材的引脚号。
完结PLD原理图后,挑选[PLD]/[Compile]进行编译,生成各种格局的文件:
图2 编译生成的各种文件
翻开生成的.jed文件,点击右键,在弹出的窗口中挑选[Export…]项,挑选.jed文件的输出方针地址。
至此就完结了PLD文件的规划。
3 Proteus对PLD的仿真
发动Proteus,制造好电路图。
图3 Proteus仿真电路图
电路中LED显现选用低电平时LED点亮的显现方法。电路中I1-I3为GAL16V8输入端口,端口为高电平时为1,低电平时为0, IO0-IO7为输出端口,输出端口为:LED灯亮时端口输出低电平0,平息时为高电平1。
为了使PLD元件能仿真,还有必要在电路中将编译的.jed文件参加PLD元件中:将鼠标移到U1(16V8)中,右击,挑选元件,然后左击,调出“元件的特点”对话框,在特点对话框中,在窗口中的“JEDEC Fuse Map File:”中参加.jed文件:
图4 16V8元件特点
由前面PLD的规划可得3-8译码器的真值表:
输入信号 输出信号
I3 I2 I1 IO7 IO6 IO5 IO4 IO3 IO2 IO1 IO0
0 0 0 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 1 1 0 1
0 1 0 1 1 1 1 1 0 1 1
0 1 1 1 1 1 1 0 1 1 1
1 0 0 1 1 1 0 1 1 1
1 0 1 1 1 0 1 1 1 1 1
1 1 0 1 0 1 1 1 1 1 1
1 1 1 0 1 1 1 1 1 1 1
表1 3-8译码器真值表
为了调查16V8的输入与输出的对应联系,咱们在AT89C52的程序(程序见附录)中将与I3、I2、I1相连的P2_2、P2_1、P2_0三个端口按真值表中的次序顺次改动,调查LED灯是否由IO0至IO7依靠点亮。
将单片机的程序参加AT89C52后,在Proteus中点击Play键观看电路仿真成果:当输入端的I1、I2、I3值按程序设定按真值表中的000— 111依靠改动时,输出端对应LED灯按真值表中的对应联系由IO0至IO7顺次点亮,如下图。阐明PLD器材16V8规划的三八译码器译码正确。
图5 译码电路对应输入/输出截图
4. 结语
单片机与PLD的结合是当时嵌入式规划常常选用一的种方法。 但假如要进行硬件电路测验和体系调试则比较费事, 由于要进行这两个进程有必要在电路板制造完结、元器材焊接结束之后进行。而电路板的制造、元器材的装置、焊接是费时吃力的, 假如选用作为单片机体系的仿真东西PROTEUS 进行单片机和PLD的仿真, 则不必制造详细的电路板也能够完结以上作业。在运用PROTEUS 运转体系虚拟开发成功之后再进行实践制造, 能够直观得调查电路的运转状况,提早发现规划的过错,能够极大的进步开发功率、下降开发本钱、进步开发速度。
程序附录:
#include《reg51.h》
#include《stdio.h》
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
void delayTIme(int count);
void main(void)
{
while(1)
{
P2_2=0;
P2_1=0;
P2_0=0;
delayTIme(500);
P2_2=0;
P2_1=0;
P2_0=1;
delayTIme(500);
P2_2=0;
P2_1=1;
P2_0=0;
delayTIme(500);
P2_2=0;
P2_1=1;
P2_0=1;
delaytime(500);
P2_2=1;
P2_1=0;
P2_0=0;
delaytime(500);
P2_2=1;
P2_1=0;
P2_0=1;
delaytime(500);
P2_2=1;
P2_1=1;
P2_0=0;
delaytime(500);
P2_2=1;
P2_1=1;
P2_0=1;
delaytime(500);
}
}
void delaytime(int count)
{
int j,k;
while(count– !=0)
{
for(j=0;j《10;j++)
for(k=0;k《72;k++)
;
}
}