GAL介绍
GAL是Lattice在PAL的基础上设计出来的器件,即通用阵列逻辑器件。GAL首次在PLD上采用了EEPROM工艺,使得其具有电可擦除重复编程的特点,彻底解决了熔丝型可编程器件的一次可编程问题。GAL在“与—或”阵列结构上沿用了PAL的与阵列可编程、或阵列固定的结构,但对PAL的I/O结构进行了较大的改进,在GAL的输出部分增加了输出逻辑宏单元OLMC。由于GAL是在PAL的基础上设计的,与多种PAL器件保持了兼容性,可直接替换多种PAL器件,方便应用厂商升级现有产品,因此仍被广泛地使用。
CUPL语法
头部描述信息
这里主要是对工程的描述,按照实际情况编写即可,注意ASCII编码
特别需要关注的是Device
,这里需要根据实际的芯片编写,在以下的示例中是g16v8,若不填写则无法生成相应的JED文件。
注释
注释方式没有//的方式,仅有/**/
/* 这是一行注释信息 */
管脚声明
INPUT的和OUT的需要分开放置,这里根据注释去设置就可以。
等号的左边以PIN开头,PIN是保留关键字,用于声明,数字标识实际的管脚,与芯片相对应,IN1是自定义的名称
PIN 2 = IN1;
运算
支持4种运算:
与 AND &
或 OR #
非 NOT !
异或 XOR $
运算表达式修在管教声明的下方即可。
示例
本例子将通过实现一个简单的逻辑元件来加深通过CUPL编程GAL元件。
本案例使用ATF16V8B.
程序编写
运行wincupl程序,创建工程,器件选择g16v8。
输入引脚的个数是2,输出引脚的个数是4
工程创建成功如图所示
本案例实现以下功能:
输入IN0,IN1,分别对应芯片2、3口
输出OUT0,OUT1,OUT2,OUT3,分别对应芯片11,12,13,14口
OUT0是IN0求非运算
OUT1是IN0和IN1求与运算
OUT2是IN0和IN1求或运算
OUT3是IN0和IN1求异或运算
真值表的对应此处省略。
首先定义引脚功能:
/* **** INPUT PINS **** */
PIN 2=IN0;
PIN 3=IN1;
/* **** OUTPUT PINS **** */
PIN 12=OUT0;
PIN 13=OUT1;
PIN 14=OUT2;
PIN 15=OUT3;
接着编写逻辑功能
/* **** EQUATIONS **** */
OUT0=!IN0; /* not */
OUT1=IN0&IN1; /* and */
OUT2=IN0#IN1; /* or */
OUT3=IN0$IN1; /* xor */
程序编写如图所示
运行编译如果没有问题将会提示编译成功