1、 实验一 通用阵列逻辑 GAL 实现基本门电路的设计一、实验目的1.了解 GAL22V10 的结构及其应用;2.掌握 GAL 器件的设计原则和一般格式;3.学会使用 VHDL 语言进行可编程逻辑器件的逻辑设计; 4.掌握通用阵列逻辑 GAL 的编程、下载、验证功能的全部过程。二、实验原理1. 通用阵列逻辑 GAL22V10通用阵列逻辑 GAL 是由可编程的与阵列、固定(不可编程)的或阵列和输出逻辑宏单元(OLMC )三部分构成。GAL 芯片必须借助 GAL 的开发软件和硬件,对其编程写入后,才能使 GAL 芯片具有预期的逻辑功能。GAL22V10 有 10 个 I/O 口、12 个输入口、10
2、 个寄存器单元,最高频率为超过 100MHz。ispGAL22V10 器件就是把流行的 GAL22V10 与 ISP 技术结合起来,在功能和结构上与GAL22V10 完全相同,并沿用了 GAL22V10 器件的标准 28 脚 PLCC 封装。ispGAl22V10 的传输时延低于 7.5ns,系统速度高达 100MHz 以上,因而非常适用于高速图形处理和高速总线管理。由于它每个输出单元平均能够容纳 12 个乘积项,最多的单元可达 16 个乘积项,因而更为适用大型状态机、状态控制及数据处理、通讯工程、测量仪器等领域。ispGAL22V10 的功能框图及引脚图分别见图 1-1 和 1-2 所示。另
3、外,采用 ispGAL22V10 来实现诸如地址译码器之类的基本逻辑功能是非常容易的。为实现在系统编程,每片 ispGAL22V10 需要有四个在系统编程引脚,它们是串行数据输入(SDI),方式选择(MODE)、串行输出(SDO)和串行时钟(SCLK)。这四个 ISP 控制信号巧妙地利用 28 脚 PLCC 封装 GAL22V10 的四个空脚,从而使得两种器件的引脚相互兼容。在系统编程电源为+5V,无需外接编程高压。每片 ispGAL22V10 可以保证一万次在系统编程。ispGAL22V10 的内部结构图如图 1-3 所示。2.编译、下载源文件用 VHDL 语言编写的源程序,是不能直接对芯片
4、编程下载的,必须经过计算机软件对其进行编译,综合等最终形成 PLD 器件的熔断丝文件(通常叫做 JEDEC 文件,简称为 JED 文件)。通过相应的软件及编程电缆再将 JED 数据文件写入到 GAL 芯片,这样 GAL 芯片就具有用户所需要的逻辑功能。 3.工具软件 ispLEVER 简介ispLEVER 是Lattice 公司新推出的一套EDA软件。设计输入可采用原理图、硬件描述语言、混合输入三种方式。能对所设计的数字电子系统进行功能仿真和时序仿真。编译器是此软件的核心,能进行逻辑优化,将逻辑映射到器件中去,自动完成布局与布线并生成编程所需要的熔丝图文件。软件中的Constraints Ed
5、itor工具允许经由一个图形用户接口选择I/O设置和引脚分配。软件包含Synolicity公司的“Synplify”综合工具和Lattice的ispVM器件编程工具,ispLEVER软件提供给开发者一个简单而有力的工具。图 1-1 ispGAL22V10 功能框图图 1-2 ispGAL22V10 引脚图(a) ispGAL22V10 结构图ispLEVER 软件主要特征:输入方式:* 原理图输入(b) 输出逻辑宏单元结构图图 1-3 ispGAL22V10 结构图及输出逻辑宏单元结构图ispLEVER 设计流程如图 1-4: 图 1-1 ispLEVER 设计流程图图 1-4 ispLEVE
6、R 设计流程图* ABEL-HDL 输入* VHDL 输入* Verilog-HDL 输入* EDIF 输入* 原理图和硬件描述语言混合输入逻辑模拟* 功能模拟; * 时序模拟设计输入HDL 综合高级实现工具仿真及分析器件编程在系统逻辑分析编译器* 结构综合、映射、自动布局和布线支持的器件* 含有支持 ispLSI 器件的宏库及 MACH 器件的宏库、TTL 库* 支持所有LatticeEC、LatticeECP、LatticeSC、LatticeXP、ispLSI、ispMACH、ispGDX、GAL、MachXO、ORCA FPGA/FPSC、ispXPGA 和 ispXPLD 器件Con
7、straints Editor工具 * I/O参数设置和引脚分配 ispVM工具 * 对ISP器件进行编程 三、实验仪器、设备与器件1.计算机 2.实验仪 3.软件系统 4.通用阵列逻辑器件 ispGAL22V10C 四、实验内容与操作步骤(1) 用 GAL22V10 实现基本逻辑门电路。根据图 1-5 示电路,设定 GAL22V10 芯片的各输入、输出引脚并画出其引脚排列图。图 1-5 用 GAL 实现的基本逻辑门 图 1-6 用 GAL 实现的各种触发器启动 ispLEVER(开始=程序=Lattice Semiconductor=ispLEVER Project Navigator 菜单
8、)图 1-7 ispLEVER 启动界面创建一个新的设计项目选择菜单 File。选择 New Project,打开 Project Wizard 窗口。在 Project Wizard 窗口的 Project Name 栏中,键入项目名(如 demo) 。在 Location 栏中,输入文件路径(如 L:ispTOOLS6_1examples ) 。在 Design Entry Type 栏中选择Schematic/VHDL(ispLEVER 软件支持Schematic/ABEL、Schematic/VHDL、VHDL、Schematic/Verilog HDL、Verilog HDL、EDI
9、F、GDF 输入) 。在 Synthesis Tools 栏中选择 Synplify。此时的窗口如图 1-8 所示。完成上述步骤后,按 Next 按钮,产生 Project Wizard Select Device 窗口。在此窗口的 Family 栏中,选择 GAL Device;Device 栏中选择 ispGAL22V10C;Package type栏中选择 28PLCC;Operating conditions 栏中选择 Commercial; Part Name 栏中选择器件型号 ispGAL22V10C-10LJ。此时的窗口如图 1-9 所示。图 1-8 键入项目名图 1-9 选择器
10、件型号完成上述步骤后,按 OK 按钮,产生 Project Wizard Add Source 窗口。直接在 Project Wizard Add Source 窗口中按 Next 按钮,产生 Project Wizard Project Information 窗口。在 Project Wizard Project Information 窗口中按 Finish 按钮。此时的 ispLEVER Project Navigator 主窗口如图 1-10 所示。将该工程文件存盘为 demo.syn。图 1-10 工程文件主窗口VHDL 设计输入的操作步骤在 ispLEVER Project Na
11、vigator 主窗口中,选择 Source=New 菜单。在弹出的 New Source 对话框(如图 1-11)中,选择 VHDL Module 类型,按 OK 按钮。图 1-11 选择 VHDL Module此时,软件会产生一个 New VHDL Source 对话框。如图 1-12 所示。图 1-12 New VHDL Source 对话框在对话框的各栏中,分别填入引脚定义等(如图 1-12 所示)的信息。按 OK 钮后,进入文本编辑器-Text Editor 编辑 VHDL 文件。如图 1-13 所示。在 Text Editor 中输入 VHDL设计程序,并存盘。图 1-13 Tex
12、t Editor 编辑窗口仿真波形输入的操作步骤在 ispLEVER Project Navigator 主窗口中,选择 Source=New 菜单。在弹出的 New Source 对话框(如图 1-14)中,选择 Waveform Stimulus 类型,按 OK 按钮。图1-14 New Source对话框此时,软件会进入波形编辑器-Waveform Editor 编辑波形文件。如图 1-15 所示。在窗口对话框中输入文件名,按 OK 按钮存盘。图1-15 Waveform Editor编辑窗口图 1-16 Waveform Editor 编辑窗口为了能编辑仿真输入波形,在波形编辑器-Wa
13、veform Editor 中,选择下拉菜单 Edit,并选中菜单中的 New Wave,如图 1-16 所示。此时,软件会产生一个 Add New Wave 对话框。如图 1-17 所示。在这个窗口中可以选择引脚性质,并可以输入引脚名,通过按 Add 按钮将引脚名添加到波形编辑器的文件中。通过添加可以产生如图 1-18 所示的结果。图1-17 Add New Wave对话框图1-18 添加引脚名及性质接下来编辑输入引脚的仿真波形。利用图1-18菜单栏中的画笔,选中输入引脚,在引脚右侧的波形窗口中,通过点击鼠标就可以改变波形的高低电平及持续时间。如图1-19所示。图1-19 输入引脚的仿真波形
14、当仿真波形编辑好以后,就可以回到项目管理器主窗口了。编译源文件现在你已经为你的设计项目建立起所需的源文件了,下一步是执行每一个源文件所对应的处理过程。选择不同的源文件,可以从项目管理器窗口中观察到该源文件所对应的可执行过程。在项目管理器左边的项目(Sources in Project)清单中选择GAL22V10C-10LJ。 双击右边的项目(Create Fuse Map)编译处理过程。 编译通过后,项目左边会出现一个绿色的查对记号,以表明编译成功。如图1-20所示。 图 1-20 编译处理仿真在项目管理器左边的项目(Sources in Project)清单中选中仿真波形文件(如demo_s
15、im.wdl)。在项目管理器右边的进程(Process for current source)清单中出现连两个仿真项目。如图1-21所示。双击右边的项目(Functional Simulation)进行功能仿真。双击右边(Timing Simulation)可进行时序仿真。 软件运行后,弹出一个仿真控制窗口,系统进行处理,如图 1-22 所示。当系统成功调入相关文件后,下一步进行仿真运行。点击仿真控制窗口 Simulate 菜单中的 Run,执行仿真运行。如图 1-23 所示。得到图1-24 所示的仿真结果。图 1-21 仿真处理过程图 1-22 仿真控制窗口图 1-23 仿真执行图 1-24
16、 仿真结果在线下载Lattice器件的在系统编程是借助ispVM System 软件来实现的。ispVM System 软件集成在ispLEVER 软件中。在启动ispVM System前,先将Lattice下载电缆连接在PC机的并行口和待下载的实验仪电路板上,并打电路板的电源(注意检查电源正确与否)。在Windows中,按开始=程序=Lattice Semiconductor=ispVM System菜单,启动ispVM System,弹出LSC ispVM System窗口,如图1-25所示。图 1-25 在系统编程主界面在LSC ispVM System窗口中,按ispTools=Sca
17、n Chain菜单,ispVM System软件会自动检测JTAG下载回路,找到回路中所有的器件型号。在本例中,电路板上的JTAG下载回路中仅有一片ispGAL220V10C器件,因此,Scan Chain后的窗口如图1-26所示。双击器件 22V10,弹出器件信息对话框,通过点击按钮 Browse 选择需要下载的 JED 数据文件(如 demo.jed) 。在该对话框中的 Operation 栏里,选择所需的编程操作,这里选Erase,Program,Verify,对器件进行擦除、编程、校验。完成这些操作后,Device Information 对话框如图 1-27 所示。按 OK 钮,关闭
18、该对话框。在 LSC ispVM System 窗口中,按 Project=Download 菜单启动下载操作。数秒钟后,下载完成,若操作成功,这时 New Scan Configuration Setup 子窗口中的 Status 栏显示PASS,并有一个绿色的圆点,如图 1-28 所示。图 1-26 检测 JTAG 下载回路及器件图 1-27 器件信息对话框图 1-28 下载操作器件加密 为防止自己的设计被非法回读,设计者可以在下载设计的时候对器件进行加密。其操作方法是:在Device Information对话框中的Operation栏里,选择Erase, Program, Verify
19、, Secure操作。在LSC ispVM System窗口中,按Project=Download菜单启动加密下载操作。如果对加密后的器件进行回读操作,那么可以看到回存的JED文件中,熔丝信息均为0。 在实验仪上进行功能测试。在实验仪上加上输入信号,测试对应的输出,验证功能是否正确。(2) GAL22V10 实现各种触发器。根据图 1-6 示电路,设定 GAL22V10 芯片的各输入、输出引脚并画出其引脚排列图,注意图中的置位、复位功能为同步的。 参考上一个实验的步骤用 VHDL 语言编写源程序实现各种触发器。对源程序进行编译、下载。在实验仪上进行功能测试。五、实验报告要求1.画出用 ispG
20、AL22V10C 芯片实现基本逻辑门的引脚图;2.写出 VHDL 的源程序;3.写出主要的实验步骤及分析实验结果;4.总结实验心得体会。六、预习要求1.预习教材中有关通用阵列逻辑 GAL 的相关内容;2.预习实验内容,并按指导书的要求编写 VHDL 源程序,写出预习报告。七、思考题1.要想用 GAL16V8 实现某一逻辑电路,对 1 号和 11 号引脚有何特殊要求?2.GAL22V10 专用输入、输出引脚各是多少?3.GAL22V10 的与阵列有行线和列线各多少条?八、部分参考程序基本逻辑门电路程序library ieee;use ieee.std_logic_1164.all;use iee
21、e.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity testGAL1 isport(a,b,c,d,e,m,n,p,q,h,i,j:in std_logic;u1,v,w,x0,y0,z0:out std_logic);end;architecture testGAL1_architecture of testGAL1 isbeginu1n。若设计 n 进制的计数器,当 n 进制计数器计数到 n-1 时,清零译码门输出低电平且反馈到输入控制门,第 n 个计数脉冲到来后,N 位 D 触发器全部清零,完成一个计数周期。图 2-1
22、 n 进制计数器的设计框图三、实验仪器、设备与器件1.计算机 2.实验仪 3.软件系统 4.通用阵列逻辑器件 GAL22V10四、实验内容与操作步骤用 PLA 模型设计的 100 进制计数器的逻辑图。在此基础上,用一片 GAL22V10 实现。设计编写 VHDL 源程序参照实验一中的实验流程对源程序进行编译、下载。在实验仪上进行功能测试。五、实验报告要求1.简述用 PLA 模型设计 N 位二进制计数器的方法及原理;2.写出 VHDL 语言编写的源程序;3.写出主要的实验步骤及实验结果;4.写出心得体会。六、预习与设计要求1.预习教材中有关用 PLA 模型设计 N 位二进制计数器的方法;2.预习
23、实验指导书内容,并按指导书的要求,设计源程序;3.写出预习报告。七、思考题1.用一片 GAL22V10 最多能实现多少进制的计数器?2.GAL22V10 用于组合电路设计时最多可有多少个输入端?八、参考程序十进制计数器程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity Counter10 isport(clk:in std_logic;q0,q1,q2,q3:out std_logic);end;architecture ar
24、ch_Counter10 of Counter10 issignal q: std_logic_vector(3 downto 0);beginq3=q(3);q2=q(2);q1=q(1);q0=q(0);-q=q3process(clk)beginif clk=1 and clkevent thenif q=“1001“ then q=“0000“;elseq=q+“0001“;end if;end if;end process;end arch_Counter10 ;100 进制计数器程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.
25、STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity Counter100 isport(clk,clr:in std_logic;q0,q1,q2,q3,q4,q5,q6:out std_logic);end;architecture arch_Counter100 of Counter100 issignal q: std_logic_vector(6 downto 0);beginq6=q(6);q5=q(5);q4=q(4);q3=q(3);q2=q(2);q1=q(1);q0=q(0);process(clk)beginif clr=1 then q=“0000000“;elsif clk=1 and clkevent thenif q=“1100011“ then q=“0000000“;elseq=q+1;end if;end if;end process;end