1. 1. GAL介绍
  2. 2. CUPL语法
    1. 2.1. 头部描述信息
    2. 2.2. 注释
    3. 2.3. 管脚声明
    4. 2.4. 运算
  3. 3. 示例
    1. 3.1. 程序编写

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 */

程序编写如图所示

运行编译如果没有问题将会提示编译成功