Lattice CPLD/FPGA 开发工具
ispLEVER5.0 简明 中文教程(CPLD篇)
黄 俊
2005年7月
概述
ispLEVER是Lattice(莱迪思)的数字设计工具套件,它支持莱迪思所有的FPGA、CPLD、ispGDX和SPLD器件。ispLEVER包含Lattice以及业界领先者们所开发的工具,用于设计输入、综合、验证/仿真、适配、布局和布线以及器件编程。
本文简要说明了ispLEVER中的各种工具的使用方法,并说明如何查看ispLEVER中的报告。
本篇以一个简单的4位比较器为例介绍开发CPLD的流程,最后还重点介绍了在CPLD开发中占一定比例的原理图编辑法。
关于Help文件
z学习一个软件的最佳途径就是学习它的Help,ispLEVER的Help文档非常详细,不仅有对软件各功能的详细解释还学习指南;
z用户可以在软件的任何环境下按F1打开Help;
z在不同的窗口下的菜单栏内点击Help菜单,即可以打开相应的Help文件;
z为尽快掌握ispLEVER的操作,用户也可以联系代理商以安排软件培训。
在这里做个广告,我们公司——晏阳科技(总公司为彦阳科技)是Lattice的代理商之一,本人是深圳办事处的一名应用工程师,客户主要在福建和深圳。我们深圳办事处的总机号码是0755-********,传真是0755-********。福州联络处的电话是:0591-********
系统需求
z若开发CPLD,建议内存256M以上,推荐512M;
z若开发FPGA,建议内存512M以上,推荐768M;
z强烈建议使用Windows XP系统。
软件安装
1、放入安装光盘,ispLEVER Setup会自动启动。
2、选第三项Install ispLEVER 5.0 Design Tools(第4项Install PAC-
Designer 3.4是安装Lattice PAC系列产品的开发软件,支持在系统可编程模拟器件ispPAC,在系统可编程电源管理芯片ispPAC-POWER,本人也写了一篇关于该软件的中文说明)
3、一直点Next:
设定安装路径,一路点Next,:
4、到以上页面时,选择需要安装器件和开发工具。之后一直点Next。直至安
装完毕。如果完全安装,中间会提示插入第二张光盘。
5、安装完之后,还需要一个license才能运行,要获取该license和license
的安装方法请与代理商取得联系。
第一篇用ispLEVER开发CPLD的流程
1、双击图标,或点开始?程序?Lattice Semiconductor?ispLEVER
Project Navigator,启动ispLEVER。
2、点File?New Project...,或点工具栏上的按钮新建一个项目:
3、在弹出的Project Wizard里面设好项目名及新建项目保存的目录,选择
设计输入的方式及综合工具。ispLEVER里面的输入方式有原理图、ABEL、VHDL、Verilog HDL或原理图分别与这三种语言的混合输入。
4、点下一步,在弹出的对话框里选择好器件,在这里以Lattice目前主流
的CPLD:ispMACH 4000系列CPLD为例,选择LC4032V-75T48C这颗芯片。
5、点下一步,点Add Source...添加已编写好的源文件,勾上Copy Source
to Dirt...,将源文件复制到项目文件夹内。如没有需要添加的源文件则直接点下一步。
6、点完成。最后如下图所示。
7、
点Options ?environment,可以对ispLEVER 的界面做一些设置,其中较为重要的几个设置有:
8、
在Revision Controls(ON)处点右键,选Turn Off,关掉版本记录。
从这里开始,为便于说明,将流程分为两个部分,一是源文件级,二是项目级。
源文件级流程
9、在左边空白处点右键,选New...,选VHDL Module,点OK。
10、填入文件名,实体名和结构体名,点OK。
11、在弹出的源程序编辑窗口中输入顶层文件,(注:本文中的源文件软件
中有自带,在ispLEVER安装目录下找到ispTOOLS5_0\ispcpld\
examples\cpld\vhdl\compare文件夹或在ispLEVER主窗口下,进
File?Open example,选CPLD\VHDL\compare,选compare.syn,点打开:
library ieee;
use ieee.std_logic_1164.all;
entity TOP_SCHEMATIC is
port (CLK : in std_logic;
RST : in std_logic;
SEL : in std_logic;
DAT : in std_logic_vector (3 downto 0);
COMPDAT : in std_logic_vector (3 downto 0);
GT_O : out std_logic;
LT_O : out std_logic;
EQ_O : out std_logic);
end TOP_SCHEMATIC;
architecture IMP_TOP_SCHEMATIC of TOP_SCHEMATIC is
COMP_LT
component
port (O1 : out std_logic;
IN0 : in std_logic_vector (3 downto 0);
IN1 : in std_logic_vector (3 downto 0));
component;
end
COMP_GT
component
port (O1 : out std_logic;
IN0 : in std_logic_vector (3 downto 0);
IN1 : in std_logic_vector (3 downto 0));
component;
end
component
COMP_EQ
port (O1 : out std_logic;
IN0 : in std_logic_vector (3 downto 0);
IN1 : in std_logic_vector (3 downto 0));
component;
end
signal CR : std_logic_vector (3 downto 0);
signal W_CR : std_logic_vector (3 downto 0);
begin -- IMP_TOP_SCHEMATIC
------------------------------------------- -- Instantiate lower level modules ------------------------------------------- GT_1: COMP_GT port map( O1 => GT_O, IN0 => W_CR, IN1 => COMPDAT); LT_1: COMP_LT port map ( O1 => LT_O, IN0 => W_CR, IN1 => COMPDAT); EQ_1: COMP_EQ port map ( O1 => EQ_O, IN0 => W_CR, IN1 => COMPDAT);
W_CR <= CR;
-------------------------------------------- -- Define logic for loading compare register -- -- The compare register (cr) is only loaded -- when sel input is asserted on rising edge of clk. -------------------------------------------- LOAD_COMP_REG : process (CLK, RST) begin -- process LOAD_COMP_REG -- activities triggered by asynchronous reset (active low) if RST = '0' then CR <= "0000"; -- activities triggered by rising edge of clock elsif CLK'event and CLK = '1' then if SEL = '0' then CR <= DAT; else
CR <= CR; end if; end if; end process LOAD_COMP_REG;
end IMP_TOP_SCHEMATIC;
12、 点保存。主界面显示如下,ispLEVER 会自动显示该顶层程序中调用了三
个底层程序, 因这三个底层程序还没有编辑,所以前面标有一个图标。
13、三个底层程序的输入方法也与顶层程序一样,在这里不再重复。在这里
也给出三个底层程序,以方便学习:
(1)
library ieee;
use ieee.std_logic_1164.all;
entity COMP_EQ is
port (O1 : out std_logic;
IN0 : in std_logic_vector (3 downto 0);
IN1 : in std_logic_vector (3 downto 0));
end COMP_EQ;
architecture IMP_COMP_EQ of COMP_EQ is
begin -- IMP_COMP_EQ
FUNCTION_EQ : process (IN0, IN1)
begin -- process FUNCTION_GT
if IN0 = IN1 then
O1 <= '1';
else
O1 <= '0';
if;
end
end process FUNCTION_EQ;
end IMP_COMP_EQ;
(2)
library ieee;
use ieee.std_logic_1164.all; entity COMP_GT is port (O1 : out std_logic; IN0 : in std_logic_vector (3 downto 0); IN1 : in std_logic_vector (3 downto 0));
end COMP_GT;
architecture IMP_COMP_GT of COMP_GT is
begin -- IMP_COMP_GT
FUNCTION_GT : process (IN0,IN1) begin -- process FUNCTION_GT if IN0 > IN1 then O1 <= '1'; else
O1 <= '0'; end if;
end process FUNCTION_GT;
end IMP_COMP_GT;
(3)
library ieee;
use ieee.std_logic_1164.all; entity COMP_LT is port (O1 : out std_logic; IN0 : in std_logic_vector (3 downto 0); IN1 : in std_logic_vector (3 downto 0));
end COMP_LT;
architecture IMP_COMP_LT of COMP_LT is
begin -- IMP_COMP_LT
FUNCTION_LT : process (IN0,IN1) begin -- process FUNCTION_LT if IN0 < IN1 then O1 <= '1'; else
O1 <= '0'; end if;
end process FUNCTION_LT;
end IMP_COMP_LT;
14、文本编辑器窗口下有以下比较实用的小技巧值得关注:
(1) 对源文件的剪切(Ctrl+X)、复制(Ctrl+C)、粘贴(Ctrl+V)和一般文字处理软件的操作一样;
(2) 点工具栏上的按钮,可以在每行程序的开头处显示行号。
(3) 寻找和替换在调试程序时很有用,快捷方式分别是F2,F3;
(4) 键盘记录功能。点下,启动键盘记录功能,从此时起,变
成,系统会自动记录键盘输入的文本字符,直到点击为
止。在此期间的文本都会被暂存,到需要复制该段文本的地方,
按F7,即可粘贴出来。
(5)个性化界面的颜色。点Options?Set color。设置好,点OK。
(6) 模板的使用。模板的合理使用,可以加快源程序的输入速度和准备度,以提高工作效率。
a、建立模板文件。进Templates?Creat File...,设定模板
文件的名字,保存路径:
b、进Templates?New...在弹出的空白文本编辑器中输入模
板的内容。点保存,弹出对话框,选择当前模板存于什么
模板文件中,如这里就选mytpl,输入该模板的模板名,
点OK,该模板即已被保存下来。
c、插入模板。在需要插入模板的地方点Templates?
Insert..., 或点F9,或点工具栏上的图标,在弹出的
对话框中选择需要的模板文件和模板名,点OK。ispLEVER
中已经提供一些常用的模板,用户也可以自己制作,自己
调用。
15、最后显示如下界面:
16、源程序编写完之后是综合(synthesize)。综合是将HDL语言翻译成由
与、或、非门、RAM、寄存器等基本逻辑单元组成的逻辑连接(网表),并根据目标与要求(如果在代码中还加了约束条件的话)优化所生成的逻辑连接的过程。ispLEVER中有两种综合工具,一是Synplicity公司的Synplify,另两个是Mentor Graphics公司的LeonardoSpectrum和Precision。在新建文件夹的时候已经选定综合工具,如果在这时想改,可以在ispLEVER Project Nagavitor主界面下,点Options?Select RTL Synthesize...,在弹出的对话框中直接选择。三者都已嵌入ispLEVER,所以直接在右边的窗口直接双击指令即可。如果通过了会在该指令前显示绿勾,如果出错则会显示红色的叉号,并在Automake Log 栏显示综合信息,出错的提示语句会以红色显示,双击红色提示会直接
连接到出错的程序行,并以高亮显示。
17、双击Compile EDIF File。
18、可以根据需要选择双击Generate Schematic Symbol,该指令的作用是
由HDL文件生成电路图编辑器中的一个电路元件。这在原理图与HDL语
言混合输入的设计当中非常有用。以上三个步骤如果提示有错误或警告
信息,可以根据Automake Log中的信息进行排错,或修改设计。
19、在这里有Compiled Equations和VHDL Test Bench Template两个小指
令,前者可以查看设计实现的表达式,后者可以生成针对该设计的测试
平台的模板。
20、说到测试平台,下面就介绍一下仿真。用ispLEVER开发CPLD有两种仿
真方法,一是用ispLEVER自带的波型仿真,简单直观,另一是使用第三方的工具Modelsim来仿真。
(1) 波型仿真。
z左边空白处,点右键,点Waveform Stimulus。
z选其中一个进行仿真,如果选LC4032V-75T48C就是对整个设计仿真,且还可以支持时序仿真,而其它的只能进行功能仿真。
z点OK,输入文件名。
z点Options?Timing Options,选择最小刻度的单位。
z点Edit?Import Wave...选择信号,点Add,再点Show,可以导入信号。
z也可以用工具栏上的、分别增加和删除波形。如总线输入DAT[3:0]不想分开显示波型可以点图标,再如下图所示,点OK,即可。
z信号列表会在左边显示,信息的摆放顺序可以移动,点中某
个信号,会显示状波纹,点住左键不放,直接拖到想要到的位置即可。
z画好输入的波形图。直接在右边窗口点即可。会弹出对话框,可以选择是什么状态,在Duration里面写入精确的时间。
z 双击已画好的部分波型,则该波型被两条黑线框住,可以在Scale里面整休调节宽度,在Repeat里填入重复的周期数。
z 其它的输入也一样,全部画好如下(在这里随便意思了一下,设计者要根据实际可能发生的情况规划好仿真的输入波形):