ispLEVER培训教程
Page 1
目录
第一节 ispLEVER 简介
第二节 LEVER 开发工具的FPGA设计输入方法第三节 ModelSim 的使用方法
第四节 设计的实现
Page 2
第一节 ispLEVER简介
ispLEVER 是莱迪思公司最新推出的一套EDA软件。提供设计输入、HDL 综合、验证、器件适配、布局布线、编程和在系统设计调试。设计输入可采用原理图、硬件描述语言、混合输入三种方式。能对所设计的数字电子系统进行功能仿真和时序仿真。软件中含有不同的工具,适用于各个设计阶段。软件包含Synplicity公司的“Synplify”、Mentor Graphics公司的“Precision RTL Synthesis”综合工具、Mentor Graphics公司的“ModelSim”仿真工具和Lattice的ispVM器件编程工具。ispLEVER软件提供给开发者一个有力的工具,用于设计所有莱迪思可编程逻辑产品。软件不仅支持所有莱迪思公司的原有的FPGA、FPSC、ispXPGA TM、ispXPLD TM、ispLSI 、MACH、ispGDX、ispGAL、GAL器件,还支持莱迪思新的LatticeXP/ECP/EC和MachXO产品系列。这使得ispLEVER的用户能够设计所有莱迪思公司的业界领先的FPGA、FPSC、
CPLD/SPLD产品而不必学习新的设计工具。
软件主要特征:
1. 输入方式
* 原理图输入
* ABEL-HDL输入
* VHDL输入
* Verilog-HDL输入
* EDIF输入
* 原理图和硬件描述语言混合输入
2.逻辑模拟
* 功能模拟
* 时序模拟
3.编译器
* 结构综合、映射、自动布局和布线
4.支持的器件
* 含有支持ispLSI器件的宏库及MACH器件的宏库、TTL库
* 支持所有ispLSI、MACH、ispGDX、ispGAL、GAL、LatticeEC、LatticeECP、LatticeXP、MachXO、ORCA FPGA/FPSC、ispXPGA和
ispXPLD器件
5. 工具
* Preference Editor、IPexpress、TCL、Floorplanner、EPIC Device Editor和Constraints Editor
6. ispVM工具
* 对器件进行编程
Page 3
第二节 ispLEVER开发工具的FPGA设计输入方法
I.启动ispLEVER(按Start=>Programs=>Lattice Semiconductor=>ispLEVER
Project Navigator菜单)
II.创建一个新的设计项目
1. 选择菜单File。
2. 选择New Project,打开Project Wizard窗口。
3.在Project Wizard窗口的Project Name栏中,键入项目名demo。在
Location栏中,输入文件路径
D:\design\ispLEVER_tutorial_example\ 。在Design Entry Type栏
中选择Schematic/VHDL(ispLEVER软件支持Schematic/ABEL、
Schematic/VHDL、VHDL、Schematic/Verilog HDL、Verilog HDL、
EDIF、GDF输入)。在Synthesis Tools栏中选择Synplify。此时的窗
口如图2.1所示。
`
图2.1 Project Wizard窗口
4.完成上述步骤后,按Next按钮,产生Project Wizard – Select
Device窗口。在此窗口的Family栏中,选择MachXO;Device栏中选择
LCMXO1200E;Speed grade栏中选择 –3;Package type栏中选择
Page 4
TQFP100;Operating conditions栏中选择Commercial; Part Name栏中选择器件型号LCMXO1200E-3T100CES。此时的窗口如图2.2所示。
图2.2 Project Wizard – Select Device窗口
5.完成上述步骤后,按Next按钮,产生Project Wizard – Add Source
窗口。
6.直接在Project Wizard – Add Source窗口中按Next按钮,产生
Project Wizard – Project Information窗口。
7.在Project Wizard – Project Information窗口中按Finish按钮。此
时的ispLEVER Project Navigator主窗口如图2.3所示。
Page 5
图2.3 ispLEVER Project Navigator主窗口
III. VHDL设计输入的操作步骤
本例中,选择VHDL类型。若是Verilog设计输入,则选择Verilog HDL 类型。
将该工程文件存盘为demo.syn。
在ispLEVER Project Navigator主窗口中,选择Source=>New菜单。在弹出的New Source对话框(如图2.4)中,选择VHDL Module类型,按OK按
钮。
此时,软件会产生一个New VHDL Source对话框。
Page 6
Page 7
图2.5 New VHDL Source 对话框
在对话框的各栏中,分别填入如图2.5所示的信息。按OK 钮后,进入文本编辑器-Text Editor 编辑VHDL 文件。
在Text Editor 中输入如下的VHDL 设计,并存盘,该文件(demo.vhd )即为顶层文件。
顶层文件 library ieee;
use ieee.std_logic_1164.all;
entity demo 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;
architecture demo_architecture of demo is
component
COMP_LT
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
-------------------------------------------
-- Instantiate lower level modules
-------------------------------------------
GT_1: COMP_GT port map(
=>
GT_O,
O1
W_CR,
=>
IN0
COMPDAT);
IN1
=>
LT_1: COMP_LT port map (
LT_O,
O1
=>
=>
W_CR,
IN0
COMPDAT);
IN1
=>
EQ_1: COMP_EQ port map (
EQ_O,
=>
O1
W_CR,
=>
IN0
=>
COMPDAT);
IN1
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
Page 8
Page 9
-- 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 demo_architecture;
该设计为实现比较器。采用模块化的分层结构,有一个顶层文件,三个底层文件,参照上述操作,完成三个底层文件(eq.vhd, gt.vhd, lt.vhd )的输入。
底层文件1(eq.vhd ) 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'; end if; end process FUNCTION_EQ;
end IMP_COMP_EQ;
底层文件2(gt.vhd ) 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
'1';
O1
<=
else
O1
'0';
<=
if;
end
end process FUNCTION_GT;
end IMP_COMP_GT;
底层文件3(lt.vhd)
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
<=
'1';
O1
else
'0';
O1
<=
if;
end
end process FUNCTION_LT;
end IMP_COMP_LT;
接下来采用Synplify工具对VHDL设计进行综合。此时的ispLEVER Project Navigator主窗口如图2.6所示:
Page 10
Page 11
图2.6 ispLEVER Project Navigator 主窗口
双击Processes 窗口的Synplify Synthesize VHDL File 进行编译、综合。或者选择菜单Tools=> Synplify Synthesis 产生如图2.7所示的窗口。选Add 依次调入demo.vhd, eq.vhd, gt.vhd 和lt.vhd ,然后对demo.vhd 文件进行编译、综合。
图2.7 Synplify窗口
若整个编译、综合过程无错误,该窗口在综合过程结束时会自动关闭。若在此过程中出错,双击上述Synplify窗口中Source Files栏中的demo.vhd文件进行修改并存盘,然后按RUN钮重新编译。
在通过VHDL综合过程后,可对设计进行功能和时序仿真。
IV. IPexpress的使用方法
ispLEVER软件中的IPexpress工具用于帮助设计者利用Lattice 的参数化模块和IP核设计来完成更大的设计。
在ispLEVER Project Navigator主窗口中,按Tools=>IPexpress菜单,
即会出现如图2.8所示的窗口。
图2.8 IPexpress窗口
在左侧Module文件夹中选择所要的模块,例如FIFO_DC。在File Name 栏中填入文件名。
Page 12
Page 13
图2.9 选择 FIFO
然后按Customize 钮。界面如图2.10所示。
图2.10 设置参数- General Options
然后在对话框中选Configuration,再设置各种参数,最后按Generate钮,即产生相应的模块。这时软件会产生一个VHDL(或者Verilog HDL)的网表文件,并将它存放在指定的目录下。用户可以在其设计中调用此文件。
复选框Import LPC to ispLever project能让用户选择是否将生成的*.lpc文件装载到ispLever project中。*.lpc文件和模块一起产生,存有用户指定的参数。如果用户选择将其装载到ispLever project中的话,就可以在ispLever project窗口中双击该文件直接打开图2.10所示的窗口。在此窗口中能看到先前生成的模块并且可以对其进行修改。
一旦模块生成后,用户可以在自己设计的上层模块中调用该模块的*.lpc或者VHDL/Verilog-HDL文件。
Page 14
第三节 ModelSim 的使用方法
ModelSim 是一个仿真工具,可以用来模拟设计的结果,进行功能仿真和时序仿真。以下用前一节的例子来说明ModelSim的使用方法。
1.建立测试向量文件
2.在ispLEVER Project Navigator主窗口中选择Souce=>New即弹出如图
3.1所
示的窗口。点击VHDL Test Bench,输入以下测试向量内容,并将其存盘为tb_demo.vhd文件。
图3.1 New Source窗口
library ieee;
use ieee.std_logic_1164.all;
entity TB_DEMO is
end TB_DEMO;
-- purpose: STIMULUS for testing comparator
architecture TB of TB_DEMO is
DEMO
component
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
component;
signal CLK : std_logic := '0'; -- Primary Clock
signal RST : std_logic := '0'; -- RESET
signal SEL : std_logic := '1'; -- Select to load compare register
signal DAT : std_logic_vector (3 downto 0) := "0000";
Page 15
signal COMPDAT : std_logic_vector (3 downto 0 ) := "0000";
>
when
COMPDAT
Asserted
signal GT_O : std_logic; --
signal LT_O : std_logic; -- Asserted when COMPDAT <
COMPDAT
=
Asserted
when
signal EQ_O : std_logic; --
constant CLK_PERIOD : time := 20 ns;
begin -- TB
--------------------
-- Clock generator
--------------------
CLK <= not CLK after (CLK_PERIOD/2);
-------------------------------------------
-- Instantiate Unit Under Test
-------------------------------------------
UUT : DEMO port map (
CLK => CLK,
RST,
RST
=>
SEL => SEL,
DAT,
DAT
=>
=>
COMPDAT,
COMPDAT
GT_O,
=>
GT_O
LT_O,
LT_O
=>
=>
EQ_O);
EQ_O
STIMULUS : process
begin -- process STIMULUS
wait for (5 * CLK_PERIOD);
------------------------------
-- Remove Reset condition
------------------------------
'1';
RST
<=
wait for (5 * CLK_PERIOD);
-------------------------------------
-- Expect tGT = 0; tLT = 0; tEQ = 1;
-------------------------------------
(CLK_PERIOD);
wait
for
---------------------------------------
-- Load compare register with new data
---------------------------------------
(CLK_PERIOD);
wait
for
SEL <= '0';
"1010";
DAT
<=
for
(CLK_PERIOD);
wait
-------------------------------------
-- Expect tGT = 1; tLT = 0; tEQ = 0;
Page 16
-------------------------------------
SEL <= '1';
"1010";
COMPDAT
<=
for
(CLK_PERIOD);
wait
-------------------------------------
-- Expect tGT = 0; tLT = 0; tEQ = 1;
-------------------------------------
"1011";
<=
COMPDAT
(CLK_PERIOD);
wait
for
-------------------------------------
-- Expect tGT = 0; tLT = 1; tEQ = 1;
-------------------------------------
wait for (5 * CLK_PERIOD);
end process STIMULUS;
end TB;
图3.2 准备进行功能仿真
在图3.2所示的源文件窗口中选中tb_demo.vhd,在操作流程窗口中双击
VHDL Function Simulation,会弹出如图3.3所示的窗口。图中左侧列出了设计
中所有输入、输出信号。右侧显示了仿真波形。
Page 17
Page 18
图3.3 仿真波形
信号名前若有[+]表示含有下层的信号,可以点击该符号,将显示出下层的信号。图3.4中显示了信号展开后的波形。
图3.4 输入信号展开后的波形
时序仿真的操作步骤与功能仿真类似。
Page 19
第四节设计实现
针对FPGA的设计输入完成编译和功能仿真后,下一步就是进行设计实现(Design Implementation)。整个设计实现过程包括两个重要的执行环节——映射(Map)和布局布线(Place & Route)。映射是将设计由一个与器件无关的元件(例如:门电路和触发器)网络的表述转换为一个与器件相关的元件(例如:可配置的逻辑块)网络的表述。布局布线是根据映射后生成的结构设计(Physical Design)文件(*.ncd)在器件中对设计进行适配。在映射和布局布线的过程中,ispLEVER还提供给设计者交互式编辑功能(Interactive Editing)。
交互式编辑(Interactive Editing)
ispLEVER中的交互式编辑功能包含三个工具:Preference Editor,FPGA Floorplanner以及EPIC Device Editor。
Preference Editor
Preference Editor让您指定或修改由用户或映射器生成的、对布局布线或时序约束的优选条件。Preference Editor读入优选文件(*.prf)并显示这些优选设置。对这个优选文件的更改是通过功能对话框进行的。
在上一节中,对Compare这个设计完成了功能仿真,接下来就可以用Preference Editor进行优选设置了。在映射操作前,首先进行Pre-Map Preference Editor操作:
1.在ispLEVER Project Navigator窗口中,选中左侧源文件窗口中的器
件LCMXO1200E-3T100CES。
2.右侧的操作流程窗口中会有一栏Pre-Map Preference Editor,双击该栏
会弹出Main Control of preference Editor -- Pre-Map窗口,如图4.1所
示。
Page 20