当前位置:首页 >> 信息与通信 >>

ispLEVER使用指导


ispLEVER 培 训 教 程
上海莱迪思半导体公司市场部 2002 年 12 月
英文网址: 英文网址: http://www.latticesemi.com 中文网址: 中文网址:http://www.latticesemi.com.cn 或 http://www.lattice.com.cn

PAGE 1

目 录
第一节 第二节 第三节 第四节 第五节 第六节 第七节 附录一 附录二 ispLEVER 简介 ispLEVER ispLEVER 开发工具的原理图输入 设计的编译与仿真 硬件描述语言和原理图混合输入 ispLEVER ispLEVER 工具中 VHDL 和 Verilog 语言的设计方法 System- ispVM System-在系统编程的软件平台 约束条件编辑器( Editor) 约束条件编辑器(Constraint Editor)的使用方法 ispLEVER ispLEVER System 上机实习题 ispLEVER 软件中文件名后缀及其含义

PAGE 2

第 一 节 ispLEVER 简 介
ispLEVER 是 Lattice 公司最新推出的一套 EDA 软件。设计输入可采用原理图、硬件描 述语言、混合输入三种方式。能对所设计的数字电子系统进行功能仿真和时序仿真。编译器是 此软件的核心,能进行逻辑优化,将逻辑映射到器件中去,自动完成布局与布线并生成编程所 需要的熔丝图文件。软件中的 Constraints Editor 工具允许经由一个图形用户接口选择 I/O 设 置和引脚分配。软件包含 Synolicity 公司的“Synplify”综合工具和 Lattice 的 ispVM 器件编 程工具。ispLEVER 软件提供给开发者一个简单而有力的工具,用于设计所有莱迪思可编程逻辑 产品。软件支持所有 Lattice 公司的 ispLSI 、MACH、ispGDX、ispGAL、GAL 器件。ispLEVER 工 具套件还支持莱迪思新的 ispXPGATM 和 ispXPLDTM 产品系列,并集成了莱迪思 ORCA Foundry 设计 工具的特点和功能。这使得 ispLEVER 的用户能够设计新的 ispXPGA 和 ispXPLD 产品系列,ORCA FPGA/FPSC 系列和所有莱迪思的业界领先的 CPLD 产品而不必学习新的设计工具。 软件主要特征: 软件主要特征: 1. 输入方式 * 原理图输入 * ABEL-HDL 输入 * VHDL 输入 * Verilog-HDL 输入 * 原理图和硬件描述语言混合输入 2. 逻辑模拟 * 功能模拟 * 时序模拟 3. 编译器 * 结构综合、映射、自动布局和布线 4. 支持的器件 * 含有支持 ispLSI 器件的宏库及 MACH 器件的宏库、TTL 库 * 支持所有 ispLSI、MACH、ispGDX、ispGAL、GAL、ORCA FPGA/FPSC、ispXPGA 和 ispXPLD 器件 5. Constraints Editor 工具 * I/O 参数设置和引脚分配 6. ispVM 工具 * 对 ISP 器件进行编程

软件支持的计算机平台: 软件支持的计算机平台: PC: Windows 98/NT/2000/XP

PAGE 3

第二节 ispLEVER 开发工具的原理图输入
I. II. ispLEVER( 菜单) 启动 ispLEVER(按 Start=>Programs=>Lattice Semiconductor=>ispLEVER 菜单) 创建一个新的设计项目 创建一个新的设计项目 A. 选择菜单 File。 选择 New Project...。 B. C. 在 Create New Project 对话框的 Project Name 栏中,键入项目名 d:\user\demo.syn。 在 Project type 栏中选择 Schematic/ABEL(ispLEVER 软件支持 Schematic/ABEL、 Schematic/VHDL、Schematic/Verilog 等的混合设计输入,在此例中,仅有原理图输 入,因此可选这三种中的任意一种)。 D. 你可以看到默认的项目名和器件型号: Untitled and ispLSI5256VE-165LF256。

III. 项目命名 A. 用鼠标双击 Untitled。 B. 在 Title 文本框中输入“Demo Project”,并选 OK。 IV. 选择器件 A. 双击 ispLSI5256VE-165LF256, 你会看到 Device Selector 对话框(如下图所示)。 B. 在 Select Device 窗口中选择 ispMACH 4000 项。 C. 按动器件目录中的滚动条,直到找到并选中器件 LC4032V-10T44I。
PAGE 4

D. E.

按 OK 按钮,选择这个器件。 在软件弹出的如下图显示的 Confirm Change 窗口中,按 Yes 按钮。

F. 因改选器件型号后,先前的约束条件可能对新器件无效,因此在软件接着弹出的如下图 显示的 ispLEVER Project Navigato 窗口中,按 Yes 按钮,以用来去除原有的约束条件。

V.

在设计中增加源文件 一个设计项目由一个或多个源文件组成。这些源文件可以是原理图文件(*.sch)、ABEL HDL 文件(*.abl)、VHDL 设计文件(*.vhd)、Verilog HDL 设计文件(*.v)、测试向量文件(*.abv)
PAGE 5

或者是文字文件(*.doc, *.wri, *.txt)。在以下操作步骤中,你要在设计项目中添加一张空 白的原理图纸。 从菜单上选择 Source 项。 A. B. 选择 New... 。 C. 在对话框中,选择 Schematic(原理图),并按 OK。 D. 输入文件名 demo.sch。 确认后按 OK。 E.

VI.

原理图输入 你现在应该进入原理图编辑器。在下面的步骤中,你将要在原理图中画上几个元件符 号,并用引线将它们相互连接起来。 A. 从菜单栏选择 Add, 然后选择 Symbol,你会看到如下图所示的对话框:

B. C. D. E. F. G. H. I. J. K. L. VII.

选择 GATES.LIB 库,然后选择 G_2AND 元件符号。 将鼠标移回到原理图纸上,注意此刻 AND 门粘连在你的光标上,并随之移动。 单击鼠标左键,将符号放置在合适的位置。 再在第一个 AND 门下面放置另外一个 AND 门。 将鼠标移回到元件库的对话框,并选择 G_2OR 元件。 将 OR 门放置在两个 AND 门的右边。 现在选择 Add 菜单中的 Wire 项。 单击上面一个 AND 门的输出引脚,并开始画引线。 随后每次单击鼠标,便可弯折引线 (双击便终止连线)。 将引线连到 OR 门的一个输入脚。 重复上述步骤,连接下面一个 AND 门。

添加更多的元件符号和连线 A. 采用上述步骤,从 REGS.LIB 库中选一个 g_d 寄存器,并从 IOPADS.LIB 库中选择 G_OUTPUT 符号。 将它们互相连接,实现如下的原理图: B.
PAGE 6

VIII. 完成你的设计 在这一节,通过为连线命名和标注 I/O Markers 来完成原理图。 当要为连线加信号名称时,你可以使用 ispLEVER 的特点,同时完成两件事-----同时添加连 线和连线的信号名称。这是一个很有用的特点,可以节省设计时间。I/O Markers 是特殊的元 件符号,它指明了进入或离开这张原理图的信号名称。注意连线不能被悬空(dangling),它们 必需连接到 I/O Marker 或逻辑符号上。这些标记采用与之相连的连线的名字,与 I/O Pad 符号 不同,将在下面定义属性(Add Attributes)的步骤中详细解释。 A. 为了完成这个设计,选择 Add 菜单中的 Net Name 项。 B. 屏幕底下的状态栏将要提示你输入的连线名,输入‘A’ 并按 Enter 键,连线名会粘连在 鼠标的光标上。 C. 将光标移到最上面的与门输入端,并在引线的末连接端(也即输入脚左端的红色方块), 按鼠标左键,并向左边拖动鼠标。这可以在放置连线名称的同时,画出一根输入连线。 D. 输入信号名称现在应该是加注到引线的末端。 E. 重复这一步骤,直至加上全部的输入‘B’,’C’,’D’和‘CK’,以及输出‘OUT’。 F. 现在选择 Add 菜单的 I/O Marker 项。 将会出现一个对话框,请选择 Input。 G. H. 将鼠 标 的光标移至输入连线的末端(位于连线和连线名之间),并单击鼠标的左键。这时 回出现一个输入 I/O Marker,标记里面是连线名。 I. 鼠标移至下一个输入,重复上述步骤,直至所有的输入都有 I/OMarker。 J. 现在请在对话框中选择 Output,然后单击输出连线端,加上一个输出 I/O Marker。 K. 至此原理图就基本完成,它应该如下图所示。

IX.

定义器件的属性(Attributes) 定义器件的属性(Attributes) 你可以为任何一个元件符号或连线定义属性。在这个例子中,你可以为输出端口符号添加 引脚锁定 LOCK 的属性。请注意,在 ispLEVER 中,引脚的属性实际上是加到 I/O Pad 符号上, 而不是加到 I/O Marker 上。同时也请注意,只有当你需要为一个引脚增加属性时,才需要 I/O Pad 符号,否则,你只需要一个 I/O Marker。

PAGE 7

A. B. C.

在菜单条上选择 Edit =>Attribute =>Symbol Attribute 项,这时会出现一个 Symbol Attribute Editor 对话框。 单击需要定义属性的输出 I/O Pad。 对话框里会出现一系列可供选择的属性。

D. 该 I/O E. F. X.

选择 PinNumber 属性,并且把文本框中的‘*’替换成‘4’(‘4’为器件的引脚号)。这样, Pad 上的信号就被锁定到器件的第四个引脚上了。 关闭对话框。 请注意,此时数字‘4’出现在 I/O Pad 符号内。

保存已完成的设计 从菜单条上选择 File,并选 Save 命令。再选 Exit 命令。

PAGE 8

第三节 设计的编译与仿真
I. 建立仿真测试向量(Simulation 建立仿真测试向量(Simulation Test Vectors) A. B. C. D. E. F. G. 在已选择 LC4032V-10T44I 器件的情况下,选择 Source 菜单中的 New...命令。 在对话框中,选择 ABEL Test Vectors 并按 OK。 输入文件名 demo.abv 作为你的测试向量文件名。 按 OK。 文本编辑器弹出后,输入下列测试向量文本: 完成后,选择 File 菜单中的 Save 命令,以保留你的测试向量文件。 再次选择 File,并选 Exit 命令。 module demo; c,x = .c.,.x.; CK,A,B,C,D,OUT PIN;

TEST_VECTORS ([CK, A, B, C, D]->[OUT]) [ c , 0 , 0 , 0 , 0 ]->[ [ c , 0 , 0 , 1 , 0 ]->[ [ c , 1 , 1 , 0 , 0 ]->[ [ c , 0 , 1 , 0 , 1 ]->[ END H.

x x x x

]; ]; ]; ];

此时你的项目管理器(Project Navigator)应如下图所示。

PAGE 9

II.

编译原理图与测试向量 现在你已为你的设计项目建立起所需的源文件,下一步是执行每一个源文件所对应的处 理过程。选择不同的源文件,你可以从项目管理器窗口中观察到该源文件所对应的可执行过 程。在这一步,请你分别编译原理图和测试向量。 A. B. C. D. E. 在项目管理器左边的项目源文件(Sources in Project)清单中选择原理图(demo.sch)。 双击原理图编译(Compile Schematic)处理过程。 编译通过后,Compile Schematic 过程的左边会出现一个绿色的查对记号,以表明编译 成功。编译结果将以逻辑方程的形式表现出来。 然后从源文件清单中选择测试向量源文件(demo.abv)。 双击测试向量编译(Compile Test Vectors)处理过程。

III. 设计的仿真 ispLEVER 开发系统不但可以进行功能仿真(Functional Simulation),而且可以进行时序 仿真(Timing Simulation)。在仿真过程中还提供了单步运行、断点设置功能。 IV. 一、功能仿真 A. 在 ispLEVER Project Navigator 的主窗口左侧,选择测试向量源文件(demo.abv), 双击右侧的 Functional Simulation 功能条。将弹出如下图所示的仿真控制窗口 (Simulator Control Panel)。

PAGE 10

B. 在 Simulator Control Panel 中,将根据(*.abv)文件中所给出的输入波形进行一步 到位的仿真。 在 Simulator Control Panel 中,按 Simulate=>Run,再按 Tools => Waveform Viewer 菜单,将打开波形观察器 Waveform Viewer 如下图所示。 C. 波形现在都显示在波形观察器的窗口中,如下图所示:

PAGE 11

D. 单步仿真。选 Simulator Control Panel 窗口中的 Simulate=>Step 可对您的设计进 行单步仿真。ispLEVER 中仿真器的默认步长为 100ns,您可根据需要在按 Simulate=>Settings 菜单所激活的对话框(Setup Simulator)中重新设置您所需要的 步长。按 Simulator Control Panel 窗口中的 Simulate=>Reset 菜单,可将仿真状态 退回至初始状态(0 时刻)。随后,每按一次 Step,仿真器便仿真一个步长。下图是按 了七次 Step 钮后所显示的波形(所选步长为 100ns)。

E. 设置断点(Breakpoint)。在 Simulator Control Panel 窗口中,按 Signal=>Breakpoints 菜单,会显示如下图所示的断点设置控制的 Breakpoint 窗 口。

在该窗口中按 New 按钮,开始设置一个新的断点。在 Available Signals 栏中单 击鼠标选择所需的信号,在窗口中间的下拉滚动条中可选择设置断点时该信号的变化 要求,例如:->0,指该信号变化到 0 状态;!=1,指该信号处于非 1 状态。一个断点 可以用多个信号所处的状态来作为定义条件,这些条件在逻辑上是与的关系。最后在 Breakpoints 窗口中,先选中 ADD,再按 Arm 按钮使所设断点生效。本例中选择信号
PAGE 12

OUT->?作为断点条件,其意义是指断点条件成立的条件为 OUT 信号发生任何变化(变 为 0,1,Z 或 X 状态)。这样仿真过程中在 0ns,700ns,1000ns 时刻都会遇到断点。 F. 波形编辑(Waveform Edit)。 除了用*.abv 文件描述信号的激励波形外,ispLEVER 还提供了直观的激励波形 的图形输入工具-Waveform Editor。以下是用 Waveform Editor 编辑激励波形的步 骤(仍以设计 demo.sch 为例): 1. 在 Simulator Cotrol Panel 窗口中,按 Tools=>Waveform Editor 菜单,进入 波形编辑器窗口(Waveform Editing Tool),如下图所示:

2. 在上述窗口中按 Object=>Edit Mode,将弹出如下图所示的波形编辑子窗口:

3. 在 Waveform Editing Tool 窗口中按 Edit=>New Wave 菜单,弹出如下窗口:

在该窗口中的 Polarity 选项中选择 Input,然后在窗口下部的空格中输入信 号名:A,B,C,D,CK。每输完一个信号名按一次 Add 钮。
PAGE 13

4. 在完成上述步骤 3 以后,Waveform Editing Tool 窗口中有了 A,B,C,D,CK 的信号名,如下图所示:

单击窗口左侧的信号名 A,开始编辑 A 信号的激励波形。单击 0 时刻右端且与 A 信号所处同一水平位置任意一点,波形编辑器子窗口中将显示如下信息:

在 States 栏中选择 Low,在 Duration 栏中填入 200ns 并按回车键。这 时,在 Waveform Editing Tool 窗口中会显示 A 信号在 0-200ns 区间为 0 的 波形。然后在 Waveform Editing Tool 窗口中单击 200ns 右侧区间任一点, 可在波形编辑器的子窗口中编辑 A 信号的下一个变化。重复上述操作过程, 编辑所有输入信号 A,B,C,D,CK 的激励波形,并将它存盘为 wave_in.wdl 文件。完成后,Waveform Editing Tool 窗口如下图所示:

PAGE 14

5. 在 Waveform Editing Tool 菜单中,按 File=>Consistency Check 菜单,检测 激励波形是否存在冲突。在该例中,错误信息窗口会提示 No Errors Dected。 6. 至此,激励波形已描述完毕,剩下的工作是调入该激励文件(wave_in.wdl)进 行仿真: 回到 ispLEVER Project Navigator 主 窗 口, 按 Source=>Import 菜 单,调入激励文件 wave_in.wdl。在窗口左侧的源程序区选中 Wave_in.wdl 文 件,双击窗口右侧的 Functional Simulation 栏进入功能仿真流程,以下的步 骤与用*.abv 描述激励的仿真过程完全一致,在此不再赘述。 二、时序仿真(Timing Simulation) 时序仿真 时序仿真的操作步骤与功能仿真基本相似,以下简述其操作过程中与功能仿真的 不同之处。 仍以设计 Demo 为例,在 ispLEVER Project Navigator 主窗口中,在左侧源程序区 选中 Demo.abv,双击右侧的 Timing Simulation 栏进入时序仿真流程。由于时序仿真 需要与所选器件有关的时间参数,因此双击 Timing Simulation 栏后,软件会自动对器 件进行适配,然后打开与功能仿真时间相同的 Simulator Control Panel 窗口。 时序仿真与功能仿真操作步骤的不同之处在于仿真的参数设置上。在时序仿真 时,打开 Simulator Control Panel 窗口中的 Simulate=>Settings 菜单,产生 Setup Simulator 对话框。在此对话框中可设置延时参数(Simulation Delay)最小延时(Minimun Delay)、典型延时(Typical Delay)、最大延时(Maximun Delay)和 0 延时(Zero Delay)。 最小延时是指器件可能的最小延时时间,0 延时指延时时间为 0。 在 Setup Simulator 对话框中, 仿真模式(Simulation Mode)可设置为两种形式:惯 性延时(Inertial Mode)和传输延时(Transport Mode)。 将仿真参数设置为最大延时和传输延时状态,在 Waveform Viewer 窗口中显示的 仿真结果如下图所示:

PAGE 15

由图可见,与功能仿真不同的是:输出信号 OUT 的变化比时钟 CK 的上升沿滞后了 5ns。 IV. 建立元件符号(Symbol) 建立元件符号(Symbol) ispLEVER 工具的一个非常有用的特点是能够迅速地建立起一张原理图的符号。通过 这一步骤,你可以建立一个可供反复调用的逻辑宏元件,以便放置在更高一层的原理图 纸上。下一节将指导你如何调用。这里仅教你如何建立元件符号。 双击原理图的资源文件 demo.sch,把它打开。 在原理图编辑器中,选择 File 菜单。 从下拉菜单中,选择 Matching Symbol 命令。 关闭原理图。 至此,这张原理图的宏元件符号已经建立完毕,并且被加到元件表中。你可以在下一 节中调用这个元件。

A. B. C. D. E.

PAGE 16

第四节

硬件描述语言和原理图混合输入

ispLEVER 软件支持 ABEL/原理图、VHDL/原理图、Verilog/原理图的混合输入。这一节, 我们以 ABEL/原理图为例,介绍硬件描述语言和原理图混合输入的方法。 现在,你要建立一个简单的 ABEL HDL 语言输入的设计,并且将其与上一节中完成的原理 图进行合并,以层次结构的方式,画在顶层的原理图上。然后对这个完整的设计进行仿真、编 译,最后适配到器件中。 现在我们就开始吧! ispLEVER 启动 ispLEVER 如果你在上一节的练习后退出了 ispLEVER,点击 Start => Programs => LatticeSemiconductor => ispLEVER 菜单,屏幕上你的项目管理器应该如下图所示。 I

II

建立顶层的原理图 A. 仍旧选择 LC4032V-10T44I 器件,从菜单条上选 Source。 B. 选择 New... C. 在对话框中选 Schematic,并按 OK。 D. 在文本框中输入文件名 top.sch,并按 OK。 E. 现在你就进入了原理图编辑器。

PAGE 17

F.

G. II.

调用上节中创建的元件符号。选择 Add 菜单中的 Symbol 项,这时会出现 Symbol Libraries 对话框,选择 Local 的库,你会注意到在下部的文本框中有一个叫 demo 的元件符号,这就是你在上一节中自行建立的元件符号。 选择 demo 元件符号,并放到原理图上的合适位置。

建立内含 ABEL 语言的逻辑元件符号 现在你要为 ABEL HDL 设计文件建立一个元件符号。只要知道了接口信息,你就可以为下 一层的设计模块创建一个元件符号。而实际的 ABEL 设计文件可以在以后再完成。 A. 在原理图编辑器里,选择 ADD 菜单里的 New Block Symbol...命令。 B. 这时候会出现一个对话框,提示你输入 ABEL 模块名称及其输入信号名和输出信号 名。请按照下图所示输入信息:

C. D. E. F.

当你完成信号名的输入,按 Run 按钮,就会产生一个元件符号,并放在本地元件 库中。同时元件符号还粘连在光标上,随之移动。 把这个符号放在 demo 符号的左边。 单击鼠标右键,就会显示 Symbol Libraries 的对话框。 请注意 abeltop 符号出现在 Local 库中。 关闭对话框。你的原理图应该如下图所示:

III. 完成原理图 现在请你添加必需的连线,连线名称,以及 I/O 标记,来完成顶层原理图,使其看上 去如下图所示。如果你需要帮助,请参考第二节中有关添加连线和符号的指导方法。当 你画完后,请存盘再退出。

PAGE 18

IV.

ABEL建立 ABEL-HDL 源文件 现在你需要建立一个 ABEL 源文件,并把它链接到顶层原理图对应的符号上。项目管 理器使这些步骤简化了: A. 你当前的管理器应该如下图所示:

B.

C. D.

请注意 abeltop 左边的红色“?”图标。这意味着目前这个源文件还是个未知数,因 为你还没有建立它。同时也请注意源文件框中的层次结构,abeltop 和 demo 源文 件位于 top 原理图的下面并且偏右,这说明它们是 top 原理图的底层源文件。这 也是 ispLEVER 项目管理器另外一个有用的特点。 为了建立所需的源文件,请选择 abeltop,然后选择 Source 菜单中的 New...命 令。 在 New Source 对话框中,选择 ABEL-HDL Module 并按 OK。
PAGE 19

E.

下一个对话框会问你模块名,文件名,以及模块的标题。为了将源文件与符号相 链接,模块名必须与符号名一致,而文件名没有必要与符号名一致。但为了简 单,你可以给它们取相同的名字。按下图所示,填写相应的栏目:

F. G.

按 OK。你就进入了 Text Editor,而且可以看到 ABEL HDL 设计文件的框架已经呈 现在你的面前。 输入下列的代码。确保你的输入代码位于 TITLE 语句和 END 语句之间。
MODULE abeltop TITLE 'This is the Top Level ABEL file' " Inputs IN1,IN2,IN3 pin; "Outputs OUT1,OUT2,OUT3,OUT4 Equations OUT1=IN1 & !IN3; OUT2=IN1 & !IN2; OUT3=!IN1 & IN2 & IN3; OUT4=IN2 & IN3; END

pin;

H. I. J.

当你完成后,选择 File 菜单中的 Save 命令。 退出文本编辑器。 请注意项目管理器中 abeltop 源文件左边的图标已经改变了。这就意味着你已经 有了一个与此源文件相关的 ABEL 文件,并且已经建立了正确的链接。

V.

编译 ABEL HDL A. 选择 abeltop 源文件。

PAGE 20

B.

在处理过程列表中,双击 Compile Logic 过程。当处理过程结束后,你的项目管 理器应该如上图所示。

VII.

仿真 你现在可以对整个设计进行仿真。为此,你需要一个新的测试矢量文件。在这个例 子中你只需要修改当前的测试矢量文件。 A. 双击 demo.abv 源文件,就会出现文本编辑器。 B. 按照下图修改测试矢量文件:

PAGE 21

module demo; c,x = .c.,.x.; CLK,TOPIN1,TOPIN2,TOPIN3,TOPOUT PIN; TEST_VECTORS ([CLK,TOPIN1,TOPIN2,TOPIN3]->[TOPOUT]) [ c , 0 , 0 , 0 ]->[ x ]; [ c , 0 , 0 , 1 ]->[ x ]; [ c , 0 , 1 , 0 ]->[ x ]; [ c , 0 , 1 , 1 ]->[ x ]; [ c , 1 , 0 , 0 ]->[ x ]; [ c , 1 , 0 , 1 ]->[ x ]; [ c , 1 , 1 , 0 ]->[ x ]; [ c , 1 , 1 , 1 ]->[ x ]; END

C. D. E. F.

完成后,存盘退出。 仍旧选择测试矢量源文件,双击 Functional Simulation 过程,进行功能仿真。 现进入 Simulation Control Panel 窗口。按 Tools=> Waveform Viewer 窗口,打 开波形观测器准备查看仿真结果。 为了看波形,你必须在 Waveform Viewer 窗口中按 Edit=>Show 菜单,弹出如下 Show Waveforms 窗口:

G.

Show Waveforms 窗口中选择 CLK, TOPIN1, TOPIN2, TOPIN3 和 TOPOUT 信号,并且 按 Show 钮。然后按 File=>Save 菜单。这些信号名都可以在波形观测器中观察 到。再按 Run 钮进行仿真,其结果如下图所示:

PAGE 22

H.

在步骤 D 中,如双击 Timing Simulation 过程,即可进入时序仿真流程,以下仿 真步骤与功能仿真相同。

VIII.

把设计适配到 Lattice 器件中 现在你已经完成了原理图和 ABEL 语言的混合设计及其仿真。剩下的步骤只是将你的 设计放入器件中。因为你已经在第二节中选择了器件,你可以直接执行下面的步骤: A. 在源文件窗口中选择 LC4032V-10T44I 器件作为编译对象,并注意观察对应的处理 过程。 B. 双击处理过程 Fit Design。这将迫使项目管理器完成对源文件的编译,然后连接 所有的源文件,最后进行逻辑分割,布局和布线,将设计适配到所选择的 Lattice 器件中。 C. 当这些都完成后,你可以双击 HTML Fitter Report,查看一下设计报告和有关统 计数据。 D. 祝贺!!你现在已经完成了设计例子,并且掌握了 ispLEVER 的主要功能。 层次化操作方法 层次化操作是 ispLEVER 项目管理器的重要功能,它能够简化层次化设计的操作。 a) 在项目管理器的源文件窗口中,选择最顶层原理图“top.sch”.此时在项目管理器右 边的操作流程清单中必定有 Navigation Hierarchy 过程。 b) 双击 Navigation Hierarchy 过程,即会弹出最顶层原理图“top.sch”。 c) 选择 View 菜单中的 Push/Pop 命令,光标就变成十字形状。 d) 用十字光标单击顶层原理图中的 abeltop 符号,即可弹出描述 abeltop 逻辑的文本 文件 abeltop.abl。此时可以浏览或编辑 ABELHDL 设计文件。浏览完毕后用 File 菜 单中的 Exit 命令退回顶层原理图。

IX.

PAGE 23

e) 用十字光标单击顶层原理图中的 demo 符号,即可弹出描述 demo 逻辑的底层原理图 demo.sch。此时可以浏览或编辑底层原理图。 f) 若欲编辑底层原理图,可以利用 Edit 菜单中的 Schematic 命令进入原理图编辑器。 编译完毕后用 File 菜单中的 Save 和 Exit 命令退出原理图编辑器。 g) 底层原理图浏览完毕后用十字光标单击图中任意空白处即可退回上一层原理图。 h) 若某一设计为多层次化结构,则可在最高层逐层进入其底层,直至最底一层;退出 时亦可以从最底层逐层退出,直至最高一层。 i) 层次化操作结束后用 File 菜单中的 Exit 命令退回项目管理器。

第五节

ispLEVER ispLEVER 工具中 VHDL 和 Verilog 语言的设计方法

用户的 VHDL 或 Verilog 设计可以经 ispLEVER 系统提供的综合器进行编译综合,生成 EDIF 格 式的网表文件,然后可进行逻辑或时序仿真,最后进行适配,生成可下载的 JEDEC 文件。 VHDL 设计输入的操作步骤 在 ispLEVER System Project Navigator 主窗口中,按 File=>New Project 菜单建立一个新的工程文 件,此时会弹出如下图所示的对话框。请注意:在该对话框中的 Project Type 栏中,必须根据设 计类型选择相应的工程文件的类型。本例中,选择 VHDL 类型。若是 Verilog 设计输入,则选择 Verilog HDL 类型。

将该工程文件存盘为 demo.syn。 在 ispLEVER System Project Navigator 主窗口中,选择 Source=>New 菜单。在弹出的 New Source 对话框中,选择 VHDL Module 类型。 此时,软件会产生一个如下图所示的 New VHDL Source 对话框:
PAGE 24

在对话框的各栏中,分别填入如上图所示的信息。按 OK 钮后,进入文本编辑器-Text Editor 编 辑 VHDL 文件。

在 Text Editor 中输入如下的 VHDL 设计,并存盘。 library ieee; use ieee.std_logic_1164.all; entity demo is port ( A, B, C, D, CK: in std_logic; OUTP: out std_logic); end demo; architecture demo_architecture of demo is signal INP: std_logic; begin Process (INP, CK) begin if (rising_edge(CK)) then OUTP <= INP; end if; end process; INP <= (A and B) or (C and D); end demo_architecture;

此 VHDL 设计所描述的电路与 5.2 节所输入的原理图相同,只不过将输出端口 OUT 改名为 OUTP(因为 OUT 为 VHDL 语言保留字)。 此时,在 ispLEVER System Project Navigator 主窗口左侧的源程序区中,demo.vhd 文件被自 动调入。选择器件 ispMACH4A5-64/32-10JC,并启动 Options=>Select RTL Synthesis 菜单,显 示如下对话框:

PAGE 25

在该对话框选择 Synplify,即采用 Synplify 工具对 VHDL 设计进行综合。 此时的 ispLEVER System Project Navigator 主窗口如下图所示:

双击 Processes 窗口的 Synplify Synthesize VHDL File 进行编译、综合。或者选择菜单 Tools=> Synplify Synthesis 产生如下窗口。选 Add 调入 demo.vhd,然后对 demo.vhd 文件进行编译、综 合。

PAGE 26

若整个编译、综合过程无错误,该窗口在综合过程结束时会自动关闭。若在此过程中出错, 双击上述 Synplify 窗口中 Source Files 栏中的 demo.vhd 文件进行修改并存盘,然后按 RUN 钮重 新编译。 在通过 VHDL 综合过程后,可对设计进行功能和时序仿真。在 ispLEVER System Project Navigator 主窗口中按 Source=>New 菜单,产生并编辑如下的测试向量文件 demo.abv: module demo; c,x = .c.,.x.; CK,A,B,C,D,OUTP PIN;

TEST_VECTORS ([CK, A, B, C, D]>[OUTP]) [ c , 0 , 0 , 0 , 0 ]->[ x ]; [ c , 0 , 0 , 1 , 0 ]->[ x ]; [ c , 1 , 1 , 0 , 0 ]->[ x ]; [ c , 0 , 1 , 0 , 1 ]->[ x ]; END 在 ispLEVER System Project Navigator 主窗口中选中左侧的 demo.abv 文件,双击右侧的 Functional Simulation 栏,进行功能仿真。在 Waveform Viewer 窗口中观测信号 A,B,C,CK, D 和 OUTP,其波形如下图所示:
PAGE 27

在 ispLEVER System Project Navigator 主窗口中选中左侧的 demo.abv 文件,双击右侧的 Timing Simulation 栏,进行时序仿真。选择 Maximum Delay,在 Waveform Viewer 窗口中观测信号 A, B,C,CK,D 和 OUTP,其波形如下图所示:

在 ispLEVER System Project Navigator 主窗口中选中左侧的 ispMACH 器件,双击右侧的 Fit Design 栏,进行器件适配。该过程结束后会生成用于下载的 JEDEC 文件 demo.jed。 Verilog 设计输入的操作步骤 Verilog 设计输入的操作步骤与 VHDL 设计输入的操作步骤完全一致,在此不再赘述。需要 注意的是在产生新的工程文件时,工程文件的类型必须选择为 Verilog HDL。

PAGE 28

第六节 ispVM System-在系统编程的软件平台 第六 -
Lattice 器件的在系统编程是借助 ispVM System 软件来实现的。ispVM System 软件集 TM 成在 ispLEVER 软件中,它同时也可以是一个独立的器件编程软件。ispVM System 是一个综合 的将设计下载到器件的软件包。该软件提供一种有效的器件编程方式,即采用由莱迪思半导体 公司或其他公司的设计软件所生成的 JEDEC 文件来对 ISP 器件编程。这一完整的器件编程工 TM TM 具允许用户快速简便地通过 ispSTREAM 将设计烧写到器件上。它还拥有简化 ispATE 、 TM TM ispTEST 及 ispSVF 编程的功能。在此仅介绍最常用的基于 PC 机 Windows 环境的 ispVM System,其使用方法如下: 在启动 ispVM System 前,先将 Lattice 下载电缆连接在 PC 机的并行口和待下载的印刷 电路板上,并打开印刷电路板的电源。 在 Windows 中,按 Start=>Programs=>Lattice Semiconductor=>ispVM System 菜单启动 ispVM System,如下图所示。

在 LSC ispVM? System 窗口中,按 ispTools=>Scan Chain 菜单,ispVM System 软件会自动检 测 JTAG 下载回路,找到回路中所有的器件型号。在本例中,印刷电路板上的 JTAG 下载回路中 仅有一片 M4A5-64/32-10JC 器件,因此,Scan Chain 后的窗口如下图所示。

PAGE 29

为得到可供下载到 M4A5-64/32-10JC 器件中的 JED 文件,我们可以将第四节设计实例中的器件 型号改选为 M4A5-64/32-10JC,重新做编译和适配,得到基于 M4A5-64/32-10JC 器件的 JED 文 件。 在 LSC ispVM? System 窗口中,双击 New Scan Configuration Setup 子窗口中的 iM4A5-64/32 栏,弹出 Device Information 对话框。在该对话框中的 Data File 栏里,选择需要下载的 JED 文件 D:\user\demo.jed;在该对话框中的 Operation 栏里,选择所需的编程操作,这里选 Erase,Program,Verify,对器件进行擦除、编程、校验。完成这些操作后,Device Information 对话框如下图所示。按 OK 钮,关闭该对话框。

PAGE 30

在 LSC ispVM? System 窗口中,按 Project=>Download 菜单启动下载操作。数秒钟后,下载完 成,这时 New Scan Configuration Setup 子窗口中的 Status 栏显示 PASS,并有一个绿色的圆 点,参见下图。

器件回读与加密
PAGE 31

器件回读 运用 ispVM System 软件,可以将已下载过的、未经加密的器件中的熔丝信息回读出来, 并存储为新的 JED 文件共复制相同设计的器件。其操作方法是:在 Device Information 对话框 中的 Operation 栏里,选择 Read and Save JEDEC 操作,同时,在 Data File 栏里,输入将要 存放熔丝信息的文件名(JED 文件)。在 LSC ispVM? System 窗口中,按 Project=>Download 菜单启动回读操作。 器件加密 为防止自己的设计被非法回读,设计者可以在下载设计的时候对器件进行加密。其操作 方 法 是 : 在 Device Information 对 话 框 中 的 Operation 栏 里 , 选 择 Erase,Program,Verify,Secure 操作。在 LSC ispVM? System 窗口中,按 Project=>Download 菜单启动加密下载操作。如果对加密后的器件进行回读操作,那么可以看到回存的 JED 文件 中,熔丝信息均为 0。

PAGE 32

第七节

约束条件编辑器( Editor) 约束条件编辑器(Constraint Editor)的使用方法

ispLEVER 软件中的 Constraints Editor 是一个功能强大的、集成的设计参数设置工具, 其可以设置 Pin Attributes,Global Constraints,Resource Reservation 等参数。根据用户 所选器件型号的不同,可供选择的参数也不尽相同。以下我们仍以第四节中的设计为例,说明 其使用方法。 在 ispLEVER Project Navigator 的主窗口左侧,选中器件型号栏(LC4032V-10T44I), 双击右侧的 Constraint Editor 功能条,打开 Constraint Editor,如下图所示。

点击窗口左侧 Input Pins 和 Output Pins 左边的 ,展现所有的输入信号:CLK,TOPIN1, TOPIN2,TOPIN3 以及输出信号 TOPOUT。双击这些信号名,在窗口右侧会出现对应于每个信号的 参数行,如下图所示。

在参数行中,可以单独设置每个信号的 Group Members,GLB,Macrocell,Pin,I/O Types,Slewrate,Fast bypass,Osm bypass,Input registers,Register powerup 等参数。 在这些参数中,最常用的是用于引脚锁定的参数 Pin,其设置方法如下: 双击每个信号参数行的 Pin 这一格,输入该信号需要锁定的引脚序列号。假定信号 CLK, TOPIN1,TOPIN2,TOPIN3 和 TOPOUT 需要锁定的引脚号分别为 39,2,3,4,7,分别输入这些引脚 号,结果如下:

PAGE 33

设置完成后,按 File=>Save 菜单存盘保存设置。无论是原理图还是用 HDL 做的设计,都 可以采用这种方法设定器件的引脚。 若需设置 Global Constraints,Resource Reservation 的参数,可以按窗口右下方的 Global Constraints 和 Resource Reservation 菜单。 引脚锁定的另一种方法: 引脚锁定的另一种方法: 引脚锁定是参数设置中最常用的,以下介绍另一种直观的引脚锁定方法: 在 Constraints Editor 窗口中,按 Device=>Package View 菜单,窗口变成如下形式。

PAGE 34

在右侧窗口中选中要锁定的信号名,按下鼠标左键,将该信号拖至窗口左边器件引脚图中 对应的引脚上,放开左键,该信号就被锁定在对应的引脚上了。用这种方法锁定引脚方便、直 观,在复杂设计中尤为如此。

PAGE 35

附录一 ispLEVER System 上机实习题
实验习题一 按照所给电路图设计一个四位二进制加法计数器,并进行功能仿真 按照所给电路图设计一个四位二进制加法计数器,

操作方法 1 建立一个名为 CNT14 的新设计项目,并打开原理图编辑器。 2 先按照上机操作教材第四节之 3 建立名为 CBU14 的逻辑元件符号。 3 调用逻辑元件 CBU14,完成原理图输入,并标注内部节点名称,然后存盘退出。 4 四位二进制加法计数器 CBU14 的 ABEL 描述语句为: MODULE CBU14 CAI,CLK,CD CAO Q3..Q0 PIN; PIN ISTYPE 'COM'; PIN ISTYPE 'REG';

count = [Q3..Q0]; EQUATIONS count.CLK = CLK; count.AR = CD; count := (count.fb) & !CAI; count := (count.fb + 1) & CAI; CAO = Q3.Q & Q2.Q & Q1.Q & Q0.Q & CAI; END 根据以上语句用文本编辑器建立 CBU14.ABL 文件,并用 Source 菜单中的 Import 命令调 Source 入设计环境。 用文本编辑器建立测试向量文件 CNT14.ABV。 module CNT14; "pins CK QQ0,QQ1,QQ2,QQ3 COUT

5 6

pin; pin ISTYPE 'REG'; pin ISTYPE 'COM';

test_vectors (CK -> [QQ0,QQ1]) @repeat 35 { .c. -> [.x.,.x.]; }
PAGE 36

end 7 8 调入测试向量文件 CNT14.ABV,运行时序仿真的编译过程,通过后显示出波形图。 通过 Edit 菜单中的 Show 或 Hide 命令显示出如下图所示的波形: 图中,QBUS 是由信号 QQ3,QQ2,QQ1,QQ0 所组成的总线信号。

PAGE 37

附录二 ispLEVER 软件中文件名后缀及其含义
SYN ABL ABV SCH VHD V PPN PAR SYM EQ0 EQ1 EQ2 EQ3 EQ4 TMV TT2 FXP LST LOG SIM JHD JED REP RPT XRF ERR MFR TSU TPD TCO 源 源 源 源 源 源 源 文 文 文 文 文 文 文 件 件 件 件 件 件 件 设 计 项 目 管 理 文 件 ABEL 硬 件 描 述 语 言 源 文 件 测 试 向 量 描 述 文 件 电 路 原 理 图 文 件 VHDL 硬 件 描 述 语 言 源 文 件 Verilog 硬 件 描 述 语 言 源 文 件 引 脚 锁 定 描 述 文 件 ( 用 电 路 图 锁 定 引 脚 时 为 中 间 文 件) 适 配 器 控 制 参 数 文 件 电 路 符 合 文 件 逻 辑 描 述 文 件 ( 由 ABL 编 译 所 得) 简 化 逻 辑 文 件 ( 由 EQ0 化 简 所 得) 带 层 次 连 接 关 系 的 逻 辑 描 述 文 件 经 优 化 的 逻 辑 描 述 文 件 经 反 复 优 化 的 逻 辑 描 述 文 件 经 编 译 的 测 试 向 量 文 件 逻 辑 网 表 输 出 文 件, 适 配 器 输 入 文 件 逻 辑 布 局 结 果 文 件 ABEL 源 文 件 的 列 表 文 件 运 行 流 程 记 录 文 件 仿 真 用 网 表 文 件 层 次 化 关 系 连 接 表 文 件 熔 丝 图 文 件 ( JEDEC 文 件) GAL 器 件 设 计 编 译 报 告 文 件 IspLSI 器 件 设 计 编 译 报 告 文 件 信 号 和 节 点 简 缩 名 称 文 件 错 误 报 告 文 件 频 率 分 析 报 告 文 件 寄 存 器 建 立 和 保 持 时 间 报 告 文 件 TPD 路 径 延 时 时 间 报 告 文 件 TCO 路 径 延 时 时 间 报 告 文 件

源 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 结 果 文 件 结 果 文 件 结 果 文 件 结 果 文 件 结 果 文 件 结 果 文 件 结 果 文 件 结 果 文 件 结 果 文 件

语言的介绍。 附录 1 电原理图和 ABEL 语言的介绍。
电原理图的介绍: 1 电原理图的介绍:
PAGE 38

iDE 软件包括一个电原理图输入系统。电原理图可以代表一个简单的逻辑电 路.一个设计中用到的复杂文件或是一个顶层电路图。
1.1 一幅电原理图由以下几部分构成: 一幅电原理图由以下几部分构成:

它可以是标准符号库中的符号,也可以是代表其它电路图的功 能块符号。 2. 连线 用来连接功能块符号。它可以是单一信号线(网线),也可以 是多根信号线的集合(总线)。 3. I/O 标记 它用来标记电原理图的输入输出信号,以及信号的方向(输 入.输出或双向) 4. 图片和文字 仅起说明和解释作用,对整个电原理图没有实际意义。
1.2 符号库: 符号库:

1. 符号

MACH 的原理图设计编辑器共有 10 个基本的符号库(LIB 文件) ⑴ GATES.LIB: 包括各种各样的 2,3,4 输入端的与、或、异或、同或门、 非门、缓冲器、地、电源等。 ⑵ REGS.LIB: 包括各类触发器。如 D 触发器、JK 触发器、RS 触发器、T 触发器和 LATCH 锁存器。 ⑶ IOPAD.LIB: 包括双向 I/O 口和三态 I/O 口。(其它的输入、输出 I/O 目前已不在使用了) ⑷ MUXES.LIB: 包括三种选择器: 二选一、四选一、八选一。 ⑸ ARITHS.LIB: 包括一位的全加器和一位的半加器。 ⑹ TITLE.LIB: 包括不同的标题栏。 ⑺ VANTTL.LIB: 包括 46 种常用 TTL 器件。 ⑻ VANFUNC.LIB:包括 33 种现成的功能模块。
1.3 连线: 连线:

iDE 的原理图编辑设计中有两种连线:单一的网线和多个网线构成的总线。总 线可使用多个信号在一条线传送。总线的命名方式为:busname[number list]。其中 busname 是总线名;numberlist 是用逗号隔开的一组数字(或用冒号表示数据的范 围)。
1.4 1.5 标记: I/O 标记: 图片和文字说明: 图片和文字说明:

可用来标明信号进出电原理图的点。 可以放在电原理图中的任何位置,能给电原理图或工程项目增加额外的信 息。 2 语言介绍: ABEL_HDL 语言介绍:

ABEL_HDL 是由美国 DATA I/O 公司开发的一种层次结构的逻辑描述语言,其最 大的特点是设计者不必详细了解器件的内部结构,只需输入符合语法规定的逻辑
PAGE 39

描述。如布尔方程、真值表和状态转换图等。iDE 的 ABEL_HDL 编译器及其支持的 软件可以通过仿真对 ABEL_HDL 设计进行功能验证。
2.1 基本结构: 基本结构:

ABEL_HDL 源文件可包含一个或几个独立的模块,每个模块包含一整套对电路 或子电路的完全的逻辑描述,无论有多少模块都能结合到一个源文件中,并同时 予以处理。 一个模块可分成五段: 1) 头段 一个模块仅能有一个头段,(由模块语句及可选的标题组 成)。 2) 说明段 必须立刻紧跟在头段或 Declarations(说明)关键字之后。 在符号(标识符)说明之前它不能被引用。 3) 逻辑描述段 能用一个或多个以下的构件来描述用户的设计。 (1)方程式(equations) (2)真值表(truth-table) (3)状态图(state-diagram) (4)熔丝说明(fuses) (5)XOR 因子(XOR-Factors) 4) 测试的向量段(可选项) 规定了逻辑器件所期望的操作,这是通过确定 其输出作为其输入的函数而定义的,仅用于方程式仿 真和 JEDEC 仿真。 5) 结束段 关键字:end 语法:end 模块名 (End 语句结束模块,而且是必须的语句)。
2.2 ABEL_HDL 基本语法: 基本语法:

1.合法 ASCII 字符 支持所有在普通键盘上的大小字母字符和其它字符。下面列出有效的字符: a~z (小写字母) A~Z (大写字母) 0~9 (数字) <空格键> <tab 键> ! @ # $ ? + & * ( ) - = + [ ] { } ; : ’ ” 、 \ , < > · / ^ % 2. 标识符 标识符的规则如下: 1) 标识符最长为 31 个字符。超出此长度的名字作为出错被标志出来; 2) 标识符必须以一个字母或下划线开头; 3) 除标识符的第一个字符外,可以是大小写字母、数字、波浪线“~”和 下划线“_”;
PAGE 40

在标识符中不得出现空格。可使用下划线或大写字母来区分一个标识 符中的各个字词; 5) 除了保留的标识符(关键字)外,标识符与字母的大小写有关,大小写 字母的含义是不同的; 6) 除了合法的点扩展名外,在标识符中不能用句点。 3. 关键字 关键字不得用来给器件、引脚、节点、常量、集合、宏或信号命名。如果在 一个源文件的上下文中使用了关键字来命名,则会给出一个错误标志。 下面列出的关键字是保留的标识符。 async_reset fuses state case goto state_diagram declarations if state_register device in sync_reset else interface test_vectors enable(已废除) istype then end library title endcase macro trace endwith module truth_table equations node when external options with flag(已废除) pin functional_block property
2.3 数据

4)

ABEL-HDL 中所有数值在计算机中都是以 32 位的行式存储.数可用五种行式表 示,基中 最常用的四种表示行式如下; 二进制:^B1011 (=^D11) 八进制:^017 (=^D15) 十进制:^D9038 (=^D9038) 十六进制:^HFOD5 (=^D61653)

若一个数值前没有数制符号,则认为它使用的是隐含数制,一般情况隐含数制 为十进制 数也可用字符串来表示,其实际值是先把每个母换成 ASCII 码,然后连在一起 构成数.如 in=(a)等价于 in=^h61 ;in=abc,等价于 in=^h616263.
2.4. 特殊常量 2.4. 特殊常量
PAGE 41

在赋值语句、真值表和测试向量中,用户可使用常量。也可将一常量赋给标 识符,并在整个模块中用此标识符代表该常量。常量的值可以是数值,也可以是 非数值的专用常量值。专用常量值在如下表中列出。 专用常量 常量 说明 .C . 时钟脉冲输入(低电平-高电平-低电平转换) .D . 脉冲下降沿(高电平-低电平转换) .F . 悬浮的输入或输出信号 .K . 钟控输入(高电平_低电平_高电平转换) .P . 寄存器预加载 .SVn . n=2~9。驱动输入至过电压 2~9 .U . 时钟上升沿(低电平-高电平转换) .X . 随意值 .Z . 三态值
2.5 运算符 2.5

1)逻辑运算符 运算符 ! & # $ !$ 2)算术运算符 运算符 - - + 举例 -A A-B A+B

说明 NOT:否(1 补) AND:与 OR:或 XOR:异或 XNOR:异或非 说明 求负数(2 补) 减 加

不支持集合的运算符 * / % <<
A*

乘 无符号整除 取模:无符号整除的余数 A 左移 B 位
PAGE 42

A/B A%B A<<B

>> 3)关系运算符 运算操作符 == != < <= > >=

A>>B

A 右移 B 位

说明 等于 不等于 小于 小于等于 大于 大于等于

4)赋值运算符 运算符 集合 = 导通 ON(1) := 导通 ON(1) >= 随意 DC(X) ?:= 随意 DC(X)
不同数制中的表示

说明 组合型或详细赋值 隐含寄存器型赋值 组合型或详细赋值(DC 和 X 为随意值) 隐含寄存器型赋值(DC 和 X 为随意值)

数制名称 二进制 八进制 十进制 十六进制

基数 2 8 10 16

符号 ^b ^o ^d(默认的数 制) ^h

赋值运算符是一类用于布尔方程的特殊运算符,不能用于表达式.有两种赋值 运算符, 即“=”和“:=”。“=”表示非时钟赋值,也称立即赋值,是组合逻辑方程赋 值。“:=”表示时钟赋值,即在有关的时钟脉冲作用下进行。如;F:=D&F 表示当 前 F 的值等于在此一个时钟前的 F 值与 D 的相与值.又如 A:=D$(B==C);表示一个时 钟后,如果 B=C,则 A=!D;若 B 不等于 C,则 A=D.
2.6 集合(数组) 2.6 集合(数组)
PAGE 43

集合是作为一个整体来进行与运算的一组信号或常量,对集合的任何运算其 实都是对其中每一个元素进行的集合将一组信号用一个名字来表示,从而简化了 ABEL 的逻辑设计和测试向量的描述. (1)集合的表示: 集合用中括号起来,集合的元素‘,’‘..’分隔。 如:IN=[A,B,C,D,E,F];OUT=[YO,Y1,Y2,Y3];此式可写作 OUT=[Y0..Y3]; AA =[0,C1,C2,Q15..Q0]; (2)集合的赋值: 可以数值或数值集合赋值.如: IN=[1,0,0,];或 IN=5; 而 [A1,A2,A3]=2 等 效于 A1=0;A2=1;A3=0;用于集合赋值或比较的数量要转换成二进制形式,并从 下列规则: A. 如果该二进制数的有效位多于集合中的元素个数,只取右边的相应位. B 如果该二进制数的有效位少于集合中的元素个数,要从左边用 0 补齐缺少的位. 例如,下面两式的赋值是等效的; [C,D]=^BO1; [C,D]=^B1;
(3)集合的运算:

除了移位运算符外,其它运算都适用于集合.参于运算的集合元素必须相等. 注意,若集合中同时含有组合输出和寄存器输出的元素时,不能将该集合放在方程 左侧,因为所以赋值运算无论是“=”还是‘:=’都是对集合所有元素进行赋值, 这样总有一部分元素于赋值类型不符.
2.7 2.7 块

块的定义文必须放大括号{}中它可被用在状态图,逻辑方程,宏,或标识符中, 它可以只占一行,也可跨越树行,如:{THIS IS A BLOCK};{A=B#C;D=[0,1]+[1,0];A=B$C;} 块的使用能使逻辑描述简洁明了,请比较以下数组逻辑表述: 例 1: 未用块: WHEN (M==S) THEN OT1:=IN1; ELSE WHEN (M==T) THEN OT1:=IN2; WHEN (M==S) THEN OT2:=1; ELSE WHEN (M==T) THEN OY3:=1; 用块: WHEN (M==S) THEN {OT1:=IN1; OT2:=1;} ELSE WHEN (M==T) THEN {OT1:=1N2; OT3:=1;} 例 2: 未用块: IF (HOLD) THEN S1 WITH O1:=O1.FB; O2:=O2.FB;ENDWITH ELSE S2; 用块: IF (HOLD) THEN S1 WITH {O1:=O1.FB; O2:=O2.FB;}ELSE S2; 例 3: 未用块:
PAGE 44

IF (H &! RST) THEN S1; IF (H & ERR) THEN S2; IF (! H) THEN S3; 用块: IF (H) THEN { IF (RST) THEN S1;IF (ERR) THEN S2;} ELSE S3;

2.8 表达式 表达式是标识符和运算符的结合,除赋值运算符外,所有的逻辑运算符,算术 运算符, 关系运算都可以用于表达式中. 例:A==B,2*4/3,A&B; 表达式中运算符 之 间存在的优先级,优先级最高的是单目运算“—”和 “!”, 其次是逻辑运算符。算术运算符,关系运算符。可用 括号()改变表达式中运算 符之 间的优级。 2.9 逻辑方程 逻辑方程表示输入信号和输出信号之间的逻辑关系。 如:c=a&b&c&d,out:=in 等, 方程使用前面介绍的赋值运算符’=’ 和’:=’;ABEL-HDL 的 方程接受 when…then…else 等语句,如: when (select==0) then out=in0; when (select==l) then out=in1 ; 若一个标识符出现在多个方程的左边,则该标识符的值为这些表达式的或值.例: out=a; out=b; out=c; 等价于: out= a#b#c;

第二节

ABELABEL-HDL 基本语言结构

上节介绍了 ABEL 语言元素,语言元素必须按一定的语言结构才能描述输出信 号的逻辑 关系, 本节介绍 ABEL 设计描述的完整结构. ABEL-HDL 源文件包含数个独立的模块.每一模块包含一和完整的逻辑电路描述.多 个这 样的模块可以合成一个 ABEL 源文件,并能进行同时编译. 5-2-1.基本结构 ABEL-HDL 源文件包含数个独立的模块.每一模块包含一个完整的逻辑电路描 述.多个这样的模块可以合成一个 ABEL 源文件,并能进行同时编译.一个模块的 ABEL 源文件典型结构层次如所示: Module module-name ‖一个模块的开始. Title ‖标题语句.
PAGE 45

Declarations MacrroDefinitions Devicefinitions PinandnodeAssignments ArrtibuteDeclaration ConstantDeclaretion BooleanEquations Truthyables StateDiagrams FuseDeclarations TestVectors Endm_name

‖定义段 ‖宏定义段 ‖器件定义段 ‖管脚及节点定义段 ‖属性定义 ‖常量定义 ‖布尔方程 ‖真值表 ‖状态图 ‖熔丝状态定义 ‖测试向量段 ‖一个模块结束

下面为一个多路选择的源文件清单: module mux1 title ‘12to4 multiplexer’ a0,a3,b0..b3,s1,s0 pin; y0..y3,c0..c3 pin; H=[1,1,1,1]; L=[0,0,0,0]; X=[.x.,.x.,.x.,.x.]; sel=[sl,s0]; Y=[y3,y0]; A=[a3..a0]; B=[b3..b0]; C=[c3..c0]; equations when (sel==0) then Y =A ;when (sel==1) then Y=B; when (sel==2) then Y =C ;when (sel==3) then Y=C; test_vectors([sel,a,b,c]->y) [0,1,X,X] -> 1 ; [0,10,H,L]->10 ; [0,5,H,L] -> 5 ; [1,H,3,H] -> 3 ; end mux1 5-2-2.基本语法规则. A. 每行最长不得超过 131 字符.
PAGE 46

B 每条语句可分多行写, 以分号‘;’结束. C 关键字,标识符及数字之间必须用至少一个空格隔开. 以前述 12-4 多路选择器源程序为例,简要说明基本语法规则: 1, module mux12to4 这条语句为模块定义语句,定义一名为 mux12ot4 的 模块.关键词..module 是必须的,它定义一个模块的开始,一个文件至少包括一 个模块,一个模块必需以 module 开始,结束时必须用相应的 END 语句。每一模 块又包含完整的逻辑设计所需的定义段,方程,真值表,状态图及仿真向量表。 2, Title ′12to4 multipexer ‵ 这条语句为标题语句, title 语句用于赋 予模块 一个标题,标题必须用单引号括起来,标题可以用于标记一些用户信息并作为下载 的提部分 下载到器件中.这条语句并不是必须的. 3, 介绍 lstype 语句的用法. istype 语句用于定义管脚属性.其用法如下: 信号名[,信号名…]istype 属性,[属性]…; 语句中合法的属性是: pos 正极性 reg-d D 型寄存器, neg 负极性 reg-g G 型寄存器, reg 寄存器信号 reg-jk jk 型寄存器, com 组合信号 reg-jkd JK/D 可控寄存器 feed-pin 器脚反 fuse 通过熔丝选择节点 feed –reg 寄存器 eqn 通过布尔方程选择节点 feed-or 或门反 pin 通过管脚选择节点 share 共想积项 这些属性的含义如下: pos,neg 分别表示相应的输入或输出信号的极性为正或负.器件的编程须反映这一 状 态,并且与这些信号有关的方程都按其极性进行优化. reg,neg 分别表示相应的输入或输出信号为寄器型,信号的改变,前者由时钟控制, 后 者不用时钟控制. reg –(寄存器类型)表示信号为相应的寄存器类型。 Latch 这一属性只有输入信号才有,它表示相应的输入信号为锁存器输入。锁存 器有使能 控制线,如果使能线为高电平,则锁存器的输入信号可以传送到输出端,如果使 能线为低 电平,则输出端保不变。
PAGE 47

Feed-pin.feed-red.和 feed-or 是反馈语句,说明反馈信号分别来自管脚输出, 内部寄存 器输出,或门输出。反馈属性只能有一个反馈属性有效,pin.eqn.fuse 为节点属 性,分别表示单熔丝节点,管脚控制节点,阵列控制节点。 4, 语句 H=[1,1,1,1];L=[0,0,0,0];X=[.X.,.X.,.X.,.X.];sel=[s1,s0];y=[y3..y0]; a=[a3..a4];b=[b3..b0];c=[c3..c0];是常量定义语句。当程序中需要多次使用同 一定值时。可以定义一常量表示这一定值,适当的使用常量可增强程序的可读 性,是一种良好的程序设计风格。 5, equations 这条语句为方程语句,equations 是关键词。方程语句表示与一 器件有关的一组方程的开始,方程可用布尔代数的形式,也可用高级语言的形式 来描述器件的逻辑功能.例如:EQUATIONS,TRUTH-TABLES,FUSES;STATEDIAGRAMS;XOR-FACTORS. 6, 语句段 test-vectors ([sel,a,b,c]->y) [0,1,x,x]->1; [0,10.H,L]->0; [0,5,H,L]->5; [3,H,H,0]->0; 为测试向量表。测试向量表用具体的输入向量形式定义一个逻辑器件应具备的逻 辑功能,测试向量用于对器件的内部模式进行仿真,并测试编程后的器件功能, 各个测试向量都包含一个表头格式及向量本身,表头格式用来定义测试向量表的 开始,并说明向量的排例,向量表示了器件应具有的逻辑功能。测试向量格式类 似于真值表,但两者是的区别的,真值表中每个输入信号必须编厉所有的状态组 合,从而全面描输入输出信号之间的逻辑关系,而测试向量不同,它可以任意选 择输入信号的几个典型状态,以检测输出。在一个模块中,测试向量表并不是必 须的,特别是在 SYNARIO 平台上,已设置了更先进的逻辑模式方法,后面将详细 介绍。 7, 语句 end mux1 是模块结束语句, 与 module 语句相应,表示一个模块的 结束 。

第 三 节 ABEL –HDL 基语句用法
5-3-1.Module: Module 语句标志一个设计模块的开始,它必须与 END 语句同用。 5-3-2.Title: 格式:Title ‘string’
PAGE 48

title 可在文件开头引导一段文字字符串说明,最长为 324 个字。Title 语 句不是必须的。 5-3-3. Declarations : 关键词 Declarations 可在文件中的任意地方定义数组芯片引脚或常数等。 在紧接着 Module 或 Title 语句之下的各种定义,可去此关键词。例如: Module exam A ,B PIN ; Out1 PIN istype ‘com’; Equations Out1=A&B; Declarions ‖此处必须有此关键词。 C, D, E, F PIN 3 ,4, 5, 6; Out2 PIN 16 istype ‘com’; TEM1 = C&D ; Tem2=E&F; End; 5-3-4. Equations Equations 语句标志一组逻辑方程的开始。逻辑方程包括组合,时序方程。 可以是普通的方程。扩展形式的 BOOIEAN 的方程或用 When-then-else 等语句的高 级语句方程。每一方程结束必须用分号。 5-3-5 .Istype Istype 语句用于定义器件引脚或内部结点信号的属性,明确定义引脚属性 有助于编译软件的正确操作与设计。Istype 语法格式是: 信号名称 1,信号名称 2… PIN(或 NODE) ISTYPE 属性 1,属性 2,…; 例如: P1,P2,P3 PIN ISTYPE INVER, REG-D ; RST PIN ISTYPE COM ; 表示 P1,P2,P3 为 D 触发器输出引脚,反相输出, RST 是组合逻辑方式输出。 以下为部分引脚信号属性关键词。 1.COM.组合逻辑方式输出; 2.REG.寄存寄时序逻辑方式输出; 3. Buffer.在触发器与实际输出引脚间没有反相器的目标器件。 4.Invert.与 Buffer 相反,其目标器件是在触发器与实际输出引脚间反相器件。 5.reg-d. reg-g. reg-jk. Reg-sr. reg-t. 分别为 D 触发器,具有门控时 钟的 D 触发器, JK 触发器。 SR 触发器和 T 触发器。 6.Xor.在目标器件中的异或门。 7.retain.不作输出化简,保留剩余乘积项。 8.Pos.正逻辑输出。
PAGE 49

9.neg.负逻辑输出。 10.collapse.keep.它们的作用恰好相反,分别表示除去或保留所定义的信号。这 两个属性的定义与否要视实际的逻辑设计需要而定。如果不作定义,编译程序将 按照自己的优化方式进行优化,但并非是最好的。 例: module max a, c, d, e, PIN; //定义输入引脚; b Node istype ’collapse’; equations a=b&e; b=c&d; end 编译称序将按照 b 的结点属性除去此结点信号 b,构成如下方程,从而简化了方 程; a = c & b & e; 如果方程为 a=c﹟e,b=c﹟d 则.collapse.属性将使逻辑复杂化。因为最后产生的 方程,a=c﹟d﹟e,成为有 3 项乘积项的方程。 5-3-6. PIN 关键词 PIN 用来定义目标器件的输入输出引脚信号。对于 ABEL3.0 软件, 要写明器件的引脚号。 如: CLK,OE,A,B PIN 1,11,2,3; 对于软件,如在文件的最高层理图中已定义了器件引脚号,则在 ABEL-HDL.文件 中不必写明引脚号。 如: A,B,C7..C0 PIN istype ‘Reg-d’; 5-3-7. NODE 关键词[Node]的定义与[PIN]几乎一样,但[Node]只有在器件的内部,其信 号并不引出。所有肯定没有引脚号,但[Node]的定义有时有特殊作用,它可以作 为一个信号中转站,从而可以简化逻辑,将大块逻辑变成小块逻辑。因为在逻辑 设计中,把逻辑分成小块的优化效率比较高且更容易适配,对于加法器,比较器及 宽位多路通道的逻辑设计尤为明显。 state5-3-8. state-diagram 状态机逻辑描述引导词,使用格式:state-diagram。状态变量各种状态方 程。 对时序电路还可以用状态图进行逻辑设计,利用状态图设计,可以实现复杂的时 序逻辑。 state-diagram 语句用于开始描述不同逻辑状态的转变的条件方式和过程,状态图 的运行结构可由如下不用语句形式来完成: 1.GOTO.语句:为无条件状态转移语句。 例:STATE SO : GOTO S1;即到达状态 SO 时,下一个时钟后,将无条件转向状 态 S1.
PAGE 50

2.CASE.语句:可用于例出互排斥的转移条件。 例:STATE SO; CASE (sel==0) :SO; (sel==1) :Sl; ENDCASE 以下说明当信号 Sel 为 0 时,下一时种仍在状态 ,当信号 sel 为 1 时,下一时 中后转向状态 Sl。 CASE 的状态条件是互为排斥的,既不同时满足两种状态条 件。 3.IF-THEN-ELSE 语句。此语句描述互为排斥的转移条件。 例:STATE SO :IF (ADDRESS > ^HE1OO) THEN S1 ELSE S2: 也可以用宏块来表示语句,IF-THEN-ELSE 语句. 例: IF (Hold) Then Statel with {Q1:=Q1;Q2=Q2;} ELSE State2; 4.sync_Reset Async_Reset 语句.此二语句用于规定状态机的同步复位操作。 例:可以规定当“RST”输入为真时,状态机必须进行异步复位至初状态,可表达 成: Async_reset start : RST; Truth_ 5-3-9. Truth_table Truth_table:是真值表逻辑描述引导关键词,是另一种用 ABEL-HDL 描述逻 辑设计的方法。可用于逻辑方程状态图来表达。真值表是利用一系例输入与输出 列表的方程来完成逻辑描述的。在表中所有的值都是常数,或已定义了数值,或 是一些特殊常数。如:.X.,.Z.,.C.等,每一行以分号结尾,表头描述须定义输入 输出名,下列的真值表描述了一个具有四种状态和一个输出的状态机,用 A 和 B 形成的数组描述当前的状态,下一状态是由具有时序特性的 C 和 D 构成的数组表 示 E,表示具有组合属性的输出; TRUTH_TABLE ([A, B]:>[C, D]->E) 0: > 1->1; 1: > 2->0; 2: > 3->1; 3: > 0->1; 此描述等同于; [ 0, O ]: > [O, 1] ->1; [ O, 1 ]: > [1, 0] ->O; [ 1, O ]: > [1, 1] ->1; [ 1, 1 ]: > [O, O] ->1; 真值表的逻辑描述方式与普通的方程描述方式相同,同样可进行点扩展等操 作。以下两个例子在功能上是普通的。 例 1;equations
PAGE 51

q := a& Load ﹟! q & ! Load; 例 2;truth_table ([a, q, Load]:>q) [0 , 0 , 0 ] :> 1; [0 , 1 , 0 ] :> 0; [1 , 0 , 0 ] :> 1; [1 , 1 , 0 ] :> 0; [0 , 0 , 1 ] :> 0; [1 , 0 , 1 ] :> 1; [0 , 1 , 1 ] :> 0; [1 , 1 , 1 ] :> 1; 真值表可用于组合和时序电路,其真值表表头向量语法如下: TRUTH_TABEL[IN 器件名](输入向—>输出向量) 或 TRUTH-TABEL[IN 器件名](输入向:>输出向量) 或 TRUTH-TABEL[IN 器件名](输入向:>寄存器输出—>输出向量) 其中: a.输入向量和输出向量是逻辑关系中输入和输出信号; b.寄存器输出是信号寄存后输出; c.->表示输入与输出关系为组合型; d.:>表示输入与输出关系为时序型; 注意,真值表中使用的所有信号必须为数值常量,已定义过的常量,或特殊 常量,输入输出向量必须用中括号[]括起来,真值表中的每一行必须以分号结 尾。 10.IF-Then5-3-10.IF-Then-EIse 使用格式:IF(条件描述)Then(下一状态)EIse(下一状态); 注意“状态”描述中必须有下一个状态的变量描述。同时也可根据需要加入 带“with”关键词的转移方程。注意 IF-Then-EIse,结构只能用于状态机 描述,而 When-Then-Else 可用于方程描述。 IF-Then-Else 的运行方式是这样的,首先计算 IF 后的逻辑表达,如果为真 (1),状态机则转向 Else 指向的状态。Else 语句并不是必须 IF-Then-Else 语句 还能够与 Goto,Case,和 with 关键词同用。以下是一组示例。 例 1:state S0: IF (address<^HO4OO) Then S0; Else IF (address <^HE1OO) Then S2; Else S1; 例 2: If (A==B) Then 2; //如果 A 等于 B 转到状态 2。 If (X-Y) Then j else k; //如果 X-Y 不为 O 则转向 j,否则转 向 k 状态.
PAGE 52

If

A

Then

b ﹟ c;

//如果 A 不为 O 则转向 b﹟C 状

态。 例 3: state S0: CASE (sel==1): IF (add==^HO1OO) Then S16; else IF (add> HO1OO) Then S17; else SO; (sel==2): S2; (sel==3): IF (add< =HEIOO); Then IF (reset) Then S3; else SO ; ELSE S17 ; (sel==0): SO; ENDCASE; 5-3-11 GOTO GOTO。语句只能用于状态图描述中,为状态无条件转移语句。必要时可跟 with—end with 转移状态方程。 5-3-12 Case CASE 选择语句的表示式: 状态表达式:表达式:状态表达式;……;ENDCASE; 状态表达式:定义下状态,后面可跟 with_end with 语句。如果 CASE 语 句中一表达式为真,则该表达式后的状态表达定义的状态既为状态机的下一状 态。应当注意,如果 CASE 语句中没有表达取真值,则状态机无法定义下一状态, 它相应的操作与所用器件有关。因此,如果 CASE 在一个语句中有两个或更多的表 达式为真,则结果方程无法定义。 例如:CASE in==0:1; in==1:2;in==3:0; When-Then5-3-13 When-Then-Else: 此语句仅能用于逻辑方程描述。 例: When (Mode==S) Then {OUTD:=SIN;YVAD:=1}EISE When (Mode==S) Then {OUTD:=TIN;YVAD:=1;} 5-3-14 With With 语句主要用于状态图逻辑描述中。在描述时序输出的输出行为时, With 语句是十分有用的,这是由于仅用当前状态表达的时序输出将带后一个时钟 周期。 例 1: State SO :IF (rst) Then S9 with; {Er :=1; Ea :=add;} Then S2 else SO; 例 1: State 5 :IF (a==1) Then 1 with {X:=1; y:=0;} else 2 with {X:=0; Y:=1;} Functional nal_ 5-3-15 Functional_block
PAGE 53

在上下层文件连接中,可用语句说明低级模块,使得低一级模块的信号能与 高一级模块的信号相连。共有三种连接方式: 1) 输入:instance.port=input 2) 输出:output =instance.port 3) 双向连接:instance0.port = instancel .port. 例:module counter; Cnt4 interface (ce,ar,clk,[qo..q3]); ∥Cnt 4 的上层端口 定义。 CNTO..CNT3 functionl-block cnt4; ∥cnt4 的 4 个 instances, CIK,AR,CE Pin; QO..Q3 Pin; equations CNTO. [clk,ar,ce]= [CLK,AR,CE]; CNTO.[qo..q3]= [QO..Q3]; end 5-3-16 Fuses Fuses 语句能很精确定义目标器件中任何熔点的状态。连结或断开(1)。 例: Fuses 3552=1; [3478…3491]=HFF; 利用 Fuses 可以电子标签 ES 的形式来标记用户信号。即用 fuses 熔丝状态 定义语句对其编程。Fuses 语句的用法: Fuses [IN 器件名] 熔丝号 = 熔丝值 Fuses 语句用来定义指定熔丝的状态。对每一熔丝来说,只有两种状态。1 表示熔丝保留。0 表示熔丝烧断。若熔丝号为集合,则熔丝值可为任意数,它首先 扩展为二进制数,并根据其中熔丝的个数,将熔丝值由左边补 0 或截去左边多余 的数。 例如: Fuses[2058..2087]=V4/0; Fuses[2088..2119]=1999; 此语句就是利用 ES 来标记用户信息。 5-3-17 Interface 用于说明上层或下层文件模块的界面端口情况。 例 1:module top; cnt4 intenface (ce,ar,clk→[q3..q0]); module cnt4 intenface (ce=1,ar=0,clk→[q3..q3..q0]); 5-3-18 Library 使用格式 Library ‘name’;
PAGE 54

Library 语句的应用将使所指定的文件被插入 ABEL-HDL 文件中,插入位置 是 Library 语言开始处。Library 指定的文件应有。Inc 的扩展名。如果无此文 件,编译器搜索 abe15ib.inc 库。 5-3-19 Macoro Macoro 可定一个宏模块。一旦定义了一个宏,则能在文件的任意地方用,但 只能被用于已定义的模块中,宏定义与方程定义是有一定区别的。例: Module macr A,b,c pin ; X1,x2,x3 pin istype ‘com’; Y1 macro [B﹟C]; Y2=B﹟C; Equations X1 =a&y1; X2=A&[Y1]; X3=A&Y2; Xor_ 5-3-20 Xor_Factors Xor-Factors 语句可以在一定条件下将以与,或乘积形式的 Boolean 方程 简化了方程,提高了资源利用。 State_ 5-4-21 State_register; 对于符号化的状态图,State-register 语句可用于定义符号状态机的名字, 由编译器自动决定构成状态机的触发器数目和类型。这有助于优化状态机结构, 提高资源利用。 例;module SM a,b,clock pin; ∥输入 a_rst,s_rst pin; ∥复位输入 x,y pin istype ‘com’; ∥简单组合输出 sreg state_register; ∥ 状态机定义 SO..S3 State; ∥状态定义 equations sreg.clk=clock; state-diagram sreg. State s0 : goto s1 with {x=a&b;y=0} State s1 : if [a&b] then s2 with {x=0;y=1}; State s2 : X=a&b y=1;if(a) then s1 else s2; State s3 : goto s0 with {x=1;y=0;}; Async-reset s0: a_rst ; ∥异步复位 Sync- reset s0: s_rst ; ∥同步复位 end 当 a_rst=1 时,将异步复位到起始态 s0;当 s_rst=1 时,将同步复位到起始 态 s0,它们的基本语句如 5-5-23 所述。
PAGE 55

Async_ Sync_ 5-3-22 Async_reset. Sync_reset; 在符号化状态描述中,语句 Async-reset 和 Sync-reset 用状态符号规定状态 机的同步或异步复位。 例: Async_reset START: RST; Sync_reset START: RST; with5-3-23 with-endwith: with--endwith 转移语句状态表达式: with(方程); [方程] … endwith with-endwith 语句表示状态发生转移时相应的输出。 例如; CASE A=B: GOTO 4; WITH OUT_1=1; OUT_2=0; ENDWITH; 表示当 A=B 时,转移到状态 4,同时输出 OUT_1=1; OUT_2=0; 第 四 节 常用指示字

指示字在文件中的作用是指导编译程序在某一指定范围内如何对文件的内容 加以处理,根据文件中设置的不同指示字,编译程序有条件地对文件的某些逻辑 操作进行处理。ABEL-HDL 在设计中,指示字并非是必须的,ABEL-HDL 的指示字比 较多,这里只能作小部分介绍,有兴趣的读者可以参有关资料。 5-4-1. @Carry; 算术函数位宽控制指示字。此指示字特别适用于组合逻辑的加法器及比较 器,计数器,等设计。它能将大的逻辑块化作小逻辑块,以节省芯片资源。 例如; 一个 8 位 2 进制加法器。@Carry;2 语句可以将 8 位加法器分成 4 个 2 位 加法器并 指示编译程序产生中间进位点,这将有效地减少逻辑的复杂度。若@Carry 1,则 将 8 位加法器分成 8 个 1 位加法器成为一个全串行进位加法器。 例. @Carry 1; [s8..s0]=[0,a7..a0]+[0,b7..b0]; 5-4-2. @Repeat ; @Repeat 可使宏块重复几次。 例如 : @Repeat 5{k,}表示“,k,k,k,k,k”写入源文件中。在大的真值表 中,此语句是十分有用的。 5-4-3. @inciude; @inciude 指示字可以将设定文件中的内容放入 ABEL.inc; 源文件中。 例; @inciude ; maros,abl @inciude,∥incs ∥maros.inc; Dos 路径需要双斜杠。
PAGE 56

5-4-4. @if; @if 指示字将根据条件包括或排除种逻辑表达。 例:@if (A>17 ){C=D$F;} Message. 5-4-5. @Message 此指示字可以字符串的形式将指定的信息送向屏幕。可以用此指示字了解编译 器的每一步编译与工作情况。这对调试复杂的文件十分有用。 例: @message, Includes completed; 5-4-6. @Dcstate; 当运行用@Dcstate 后,所有未定状态都将作为无关输出,使用中必须将@ Dcstate 或,dc 属性联用。 Dcse 5-4-7. @Dcset; 对于组合逻辑,使用@Dcset 或 Istype ‘dc’后将确定定义有用输出组合 以外的信号为无关信号,从而可以简化和优化逻辑。 请看下例; module AD A3..A0 Pin; B3..B0 Pin istype ‘dc,com’; Truth-table ([A3..A0 ]->[ B3..B0]) [0, 0, 0, 0]-> [0, 0, 0, 1]; [0, 1, 1, 1]-> [1, 1, 0, 0]; [1, 0, 0, 1]-> [0, 1, 1, 1]; end. 此例的真值表最多可以有 16 种组合,但所需的逻辑只用了三种,其余 13 种 为无用逻辑。所以就能设置为无关状态,在引脚属性上用 dc, 或@ Dcset,就能 大为简化逻辑。减少逻辑的乘积项。 第 五 节 ABELABEL-HDL 程序设计技巧

运行节点建立中间信号。 5-5-1. 运行节点建立中间信号。 中间信号主要指定节点上的组合逻辑信号。这种中间信号的设置能有效地减 少乘积项,简化逻辑表达式,从而减少适配器的工作量和运行时间,增加适配成 功,同时减少芯片资源占用。请看以下 2 例的比较。 例 1: A, B, C, D, E PIN; X, Y PIN Istype ‘com’; equations X=[A & B & C] ﹟ [B $ C]; Y=[A & D] ﹟[A & E] ﹟[A & B & C]; 例 2: A, B, C, D, E PIN;
PAGE 57

X, Y M

PIN Istype ‘com’; Node Istype ‘com’;

equations M = A & B & C 中间变量 X = M ﹟[B $ C]; Y = [A & D] ﹟[A & E] ﹟M; 虽然以上两例的逻辑功能是一样的,但例 1 没有中间变量,编译中必须产生两次 A & B & C 的逻辑结构。而例 2 用了优化中间变量,逻辑结构大简化。在大系统设计 中使用中间变量是非常重要的,能使优化适配器作出更有效的设计方案,使设计 逻辑关系更明确,更节省资源。 例如;IF (input==cod)…的描述能产生一个乘积项。如果输入是 8 位宽数,则增 加到 8 个 乘积项。又如果此表达使用 10 次,则所编译产生的逻辑量要花很长的时间编译和 花费很大 资源去适配,而且甚至会导致适配失败,但如果引起中间变量就能很好地解决这 个问题: code1 node istype ‘com’; equations code1 = (input==cod); if code1...; 5-5-2.减少相临状态变化量 2.减少相临状态变化量 对所设计的状态机,如果并不在意每一状态具体构成,则可以通过适当的安排 定义,使每一相临状态的转变只有一位发生变化,这样,也能有效地减少系统的 逻辑量,达到简化逻辑的目的。 请比较以下两种不同状态机的定义。 状态 常规状态定义 简化逻辑状态定义 SO O O O O S1 O 1 O 1 S2 1 O 1 1 S3 1 1 1 O 可以得出, 简化逻辑状态定义中的每一相临状态仅有一位变化. 5-5-3.使用标识符表示状态 3.使用标识符表示状态 一个状态机有不同的状态,每一状态描述了状态机在此点处的输出和状态转移 情况.一般地,每一状态都有一个名称,而状态机的运行就是以下其不同状态的转移 来描述的,但在真实的器件中,这种状态机的运行依存者是序设的足够数量的触发 器.每一触发器当前状态位的组合构成了任一确定的状态。
PAGE 58

5-5-4. 无用状态处理 如果所设的状态机有一个特定的起始状态,必须定义触发器在上电成其他非 正常情况下(即未处于已定义的状态中)必须保证能在下一时钟脉冲后回到起始 状态。在状态机设计中不能留有不确定状态和死胡同状态。 5-5-5. 运用异或功能简化逻辑 尽可能地运用异或算符或在其中隐含异或功能,这样可以有效简化逻辑结 构,减少乘积项。 例 1:module Y Q1 Pin istype ‘com,xor’; A ,b ,c Pin; equations Q1=a$b &c; end 例 2; module Z q3, q2, q1, q0 pin istype ‘reg,xor’; clock pin; count=[q3..q0]; equations count.clk=clock; count:=count+1; end 5-5-6. 输出极性控制 由于大部分的 PLD 器件的输出端都有一个异或门,所以对输出的极性控制十分 方便,无需增加任何其他逻辑就能容易地改变输出的极性。利用这一点也能简化 逻辑,下例中,OUT1 的正极性输出逻辑有四个乘积项,显然有了很大的简化。 1. OUT1=(A&C)﹟(A&D) ﹟(B&C) ﹟(B&D); 2. !OUT1=(!A&!B)﹟(!C&!D); 来控制输出极性。 5-5-7.用 istype 来控制输出极性 7.用 在 ABEL-HDL 中,有两种方式可以来控制极性。 1.用 Istype ‘neg’. 或 ‘pos’. 或 ‘dc’, 2.用 Istype ‘invert’.或 ‘buffer’. 适当的极性控制对逻辑都有一定优化作用。 1.Istype ‘neg’. 对电路作负极性输出优化,对于真值表或状态中未指定 的逻辑状态定义为 0。 2.Istype ‘pos’ 与 neg 相反,它定义为 1。
PAGE 59

3.Istype ‘dc’它具有更好的优化功能,它将定义无关状态 dc。 运用低电平输出有效定义。 5-5-8. 运用低电平输出有效定义 如果逻辑设计的输出定义为低电平有效,则最节省逻辑资源的方法是采用如 下定义方式: !QO pin istype reg; 5-5-9.结点排除(Collaps) 对于组合逻辑结点,编译软件将其例为缺省之例。一个结点究竟是排除还是 保留。可以 ABEL-HDL 在中通过定义信号属性来确定。 Istype ‘keep’表示保留此结点;istype ‘collapse’表示除去此结 点, 结点排除的好处是:为组合逻辑提供多层次化,具有算术或比较器的电路通常会产 生大量的乘积项,这种现象对器件的配置是十分不利的,编译程序通过结点排除 和产生多层次逻辑从而简化了整个逻辑。当然有的情况下,结点排除倒起了相反 的作用,这时可以定义结点保留:‘Keep’. 5-5-9 运算符优先级 优先级 1 1 2 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4

运算符 - ! & << >> * / % + # $ !$ == != < <= > >=
PAGE 60

说明 求负数 反 与 左移 右移 乘 无符号除 求模 加 减 或 异或 异或非 等于 不等于 小于 小于或等于 大于 大于或等于

附录 2
SYN ABL ABV SCH VHD V PPN PAR SYM EQ0 EQ1 EQ2 EQ3 EQ4 TMV TT2 FXP LST LOG SIM JHD JED REP RPT XRF ERR MFR TSU TPD TCO

ispDesignEXPERT System 文 件 后 缀 及 其 含 义
源 文 件 源 文 件 源 文 件 源 文 件 源 文 件 源 文 件 源 文 件 源 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 中 间 文 件 结 果 文 件 结 果 文 件 结 果 文 件 结 果 文 件 结 果 文 件 结 结 结 结 果 果 果 果 文 文 文 文 件 件 件 件 设 计 项 目 管 理 文 件 ABEL 硬 件 描 述 语 言 源 文 件 测 试 向 量 描 述 文 件 电 路 原 理 图 文 件 VHDL 硬 件 描 述 语 言 源 文 件 Verilog 硬 件 描 述 语 言 源 文 件 引 脚 锁 定 描 述 文 件 ( 用 电 路 图 锁 定 引 脚 时 为 中 间 文 件) 适 配 器 控 制 参 数 文 件 电 路 符 合 文 件 逻 辑 描 述 文 件 ( 由 ABL 编 译 所 得) 简 化 逻 辑 文 件 ( 由 EQ0 化 简 所 得) 带 层 次 连 接 关 系 的 逻 辑 描 述 文 件 经 优 化 的 逻 辑 描 述 文 件 经 反 复 优 化 的 逻 辑 描 述 文 件 经 编 译 的 测 试 向 量 文 件 逻 辑 网 表 输 出 文 件, 适 配 器 输 入 文 件 逻 辑 布 局 结 果 文 件 ABEL 源 文 件 的 列 表 文 件 运 行 流 程 记 录 文 件 仿 真 用 网 表 文 件 层 次 化 关 系 连 接 表 文 件 熔 丝 图 文 件 ( JEDEC 文 件) GAL 器 件 设 计 编 译 报 告 文 件 IspLSI 器 件 设 计 编 译 报 告 文 件 信 号 和 节 点 简 缩 名 称 文 件 错 误 报 告 文 件 频 率 分 析 报 告 文 件 寄 存 器 建 立 和 保 持 时 间 报 告 文 件 TPD 路 径 延 时 时 间 报 告 文 件 TCO 路 径 延 时 时 间 报 告 文 件

·常用点扩展名 常用点扩展名
PAGE 61

点扩展名 .AP .AR .CE ① .CLK .CLR
②,③

引脚到引脚

√ √ √

.LD .LE .LH ① .OE .SP .SR

说明 异步寄存器置位 异步寄存器复位 门控时钟触发器的时钟使能输入 边沿角发型触发器的时钟输入 与器件独立的同步寄存器复位,等效于用 ISTYPE ‘buffer’ 的.AP(或是用 ISTYPE ‘invert’的.AR) 寄存器加载输入 锁存器的锁存使能输入(低电平有效) 锁存器锁存使能输入(高电平有效) 输出使能 同步寄存器置位 同步寄存器复位

PAGE 62


相关文章:
Lattice的ISPlever使用教程
在 ispLEVER Project Navigator 的主窗口左侧,选择测试向量源文 件(demo.abv),...ispLEVER培训教程 32页 4下载券 ispLEVER使用指南(FPGA部... 51页 免费©...
GAL实验指导g
GAL实验指导g_工学_高等教育_教育专区。实验一一、...器件的设计原则和一般格式; 3.学会使用 VHDL 语言...ispLEVER(开始=>程序=>Lattice Semiconductor=>...
实验指导课思考题(参考解答)
2007 1 ispLEVER 软件的仿真验证。 注:本题也可用 VHDL 或 Verilog HDL 语言...使用一键分享,轻松赚取财富值, 了解详情 嵌入播放器: 普通尺寸(450*500pix) ...
ispLEVER 的下载、安装和License
ispLEVER 的下载、安装和License_信息与通信_工程科技_专业资料。ispLEVER软件的安装...ispLEVER使用指南(FPGA部... 51页 免费 ISPLEVER简明教程 暂无评价 36页 免费 ...
实验1-指导书-利用ispLEVER软件设计全加器和寄存器
实验1-指导书-利用ispLEVER软件设计全加器和寄存器_电子/电路_工程科技_专业资料...实验时间:2016-5-4 一、实验目的及要求 (1)掌握 ispLEVER 软件的使用方法。 ...
组成原理实验指导书[1]
18 ispEXPERT(ispLEVER)库及库元件说明 ... 21 实验一 数据选择器实验 实验...(3)掌握数据选择器的测试方法; (4)熟悉组成原理实验台和图形输入法软件的使用...
实验3-指导书-微程序控制器
(3)软件:ispLEVER 3.0、ispVM System 17.4 四、实验实施步骤 (一)微程序计数器 μPC 的层次化设计 要求使用层次化方法设计一个微程序计数器 μPC,其中 cppc ...
更多相关标签:
isplever classic使用 | isplever | isplever破解版下载 | isplever下载 | isplever classic 2.0 | isplever8.1下载 | lattice isplever | isplever classic下载 |