目录
第一节ispLEVER 简介
第二节ispLEVER 开发工具的FPGA设计输入方法第三节ModelSim 的使用方法
第四节设计的实现
第一节 ispLEVER简介
ispLEVER 是完整的CPLD和FPGA设计软件,能帮助用户完成从概念到完成产品的设计。 ispLEVER包含许多有力的开发的工具,用于设计输入、项目管理、IP集成、器件映射、布局和布线,以及在系统逻辑分析等。
ispLEVER (Windows) 还包含业界领头羊——我们的伙伴Synplicity 和Mentor Graphics ——的第三方工具,这些工具用于综合和仿真。
ispLEVER 6.0完全支持最新的高性能、低成本的90纳米LatticeECP2?和LatticeSC? 终极性能的系统芯片FPGA系列,并且具有引以为豪的空前性能和经过重大改进的设计流程。ispLEVER 6.0版的主要亮点包括:支持业界最快的90纳米FPGA;推出新的、高度集成的Design Planner接口、针对原理图FPGA设计支持的改进以及一个IPexpress? 用户可配置的IP核拓展库。ispLEVER设计流程如下:
软件主要特征:
1. 输入方式
* 原理图输入
* ABEL-HDL输入
* VHDL输入
* Verilog-HDL输入
* EDIF输入
* 原理图和硬件描述语言混合输入
2.逻辑模拟
* 功能模拟
* 时序模拟
3.编译器
* 结构综合、映射、自动布局和布线
4.支持的器件
* 含有支持ispLSI器件的宏库及MACH器件的宏库、TTL库
* 支持所有LatticeEC、LatticeECP、LatticeSC、LatticeXP、ispLSI、ispMACH、ispGDX、GAL、MachXO、ORCA FPGA/FPSC、ispXPGA和ispXPLD 器件
5. 工具
* Design Planner、EPIC Device Editor、IPexpress、ispTRACY Core Linker、ispVM、ispTRACY Logic Analyzer、Power Calculator、Block Modular Design Wizard、Memory Initialization Tool、Synplify Synthesis、Precisin Synthesis、ModelSim Simulator和TCL等。
第二节 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栏中,选择LatticeXP;Device栏中
选择LFXP3C;Speed grade栏中选择–3;Package type栏中选择
PQFP208;Operating conditions栏中选择Commercial; Part Name栏中选择器件型号LFXP3C-3P208C。此时的窗口如图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所示。
图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对话框。
图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));
end component;
component COMP_GT
port (O1 : out std_logic;
IN0 : in std_logic_vector (3 downto 0);
IN1 : in std_logic_vector (3 downto 0));
end component;
component COMP_EQ
port (O1 : out std_logic;
IN0 : in std_logic_vector (3 downto 0);
IN1 : in std_logic_vector (3 downto 0));
end component;
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(
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 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
O1 <= '1';
else
O1 <= '0';
end if;
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
O1 <= '1';
else
O1 <= '0';
end if;
end process FUNCTION_LT;
end IMP_COMP_LT;
接下来采用Synplify工具对VHDL设计进行综合。此时的ispLEVER Project Navigator主窗口如图2.6所示:
图2.6 ispLEVER Project Navigator主窗口
双击Processes窗口的Synplify Synthesize VHDL File进行编译、综合。
在通过VHDL综合过程后,可对设计进行功能和时序仿真。请参见第三节。
IV. IPexpress的使用方法
ispLEVER软件中的IPexpress工具用于帮助设计者利用Lattice 的参数化模块和IP核设计来完成更大的设计。
在ispLEVER Project Navigator主窗口中,按Tools=>IPexpress菜单,
即会出现如图2.7所示的窗口。
图2.7 IPexpress窗口
在左侧Module文件夹中选择所要的模块,例如FIFO_DC。在File Name
栏中填入文件名。
然后按Customize钮。界面如图2.9所示。
图2.9 设置参数- General Options
然后在对话框中选Configuration,再设置各种参数,最后按Generate钮,即产生相应的模块。这时软件会根据图2.8中Design Entry栏中的设计输入类型产生一个VHDL(或者Verilog HDL)的网表文件,并将它存放在指定的目录下。用户可以在其设计中调用此文件。
复选框Import LPC to ispLever project能让用户选择是否将生成的*.lpc文件装载到ispLever project中。*.lpc文件和模块一起产生,存有用户指定的参数。如果用户选择将其装载到ispLever project中的话,就可以在ispLever project窗口中双击该文件直接打开图2.9所示的窗口。在此窗口中能看到先前生成的模块并且可以对其进行修改。
一旦模块生成后,用户可以在自己设计的上层模块中调用该模块的*.lpc或
者VHDL/Verilog-HDL文件。
第三节 ModelSim 的使用方法
ModelSim 是一个仿真工具,可以用来模拟设计的结果,进行功能仿真和时序仿真。以下用前一节的例子来说明ModelSim的使用方法。
1.建立测试向量文件
2.在ispLEVER Project Navigator主窗口中选择Source=>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
component DEMO
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";
signal COMPDAT : std_logic_vector (3 downto 0 ) := "0000";
signal GT_O : std_logic; -- Asserted when COMPDAT > signal LT_O : std_logic; -- Asserted when COMPDAT < signal EQ_O : std_logic; -- Asserted when COMPDAT =
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
------------------------------
RST <= '1';
wait for (5 * CLK_PERIOD);
-------------------------------------
-- Expect tGT = 0; tLT = 0; tEQ = 1;
-------------------------------------
wait for (CLK_PERIOD);
---------------------------------------
-- Load compare register with new data
---------------------------------------
wait for (CLK_PERIOD);
SEL <= '0';
DAT <= "1010";
wait for (CLK_PERIOD);
-------------------------------------
-- Expect tGT = 1; tLT = 0; tEQ = 0;
-------------------------------------
SEL <= '1';
COMPDAT <= "1010";
wait for (CLK_PERIOD);
-------------------------------------
-- Expect tGT = 0; tLT = 0; tEQ = 1;
-------------------------------------
COMPDAT <= "1011";
wait for (CLK_PERIOD);
-------------------------------------
-- 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 Functional Simulation,会弹出如图3.3所示的窗口。图中左侧列出了设计中所有输入、输出信号。右侧显示了仿真波形。
图3.3 仿真波形
信号名前若有[+]表示含有下层的信号,可以点击该符号,将显示出下层的
信号。图3.4中显示了信号展开后的波形。
图3.4 输入信号展开后的波形
同样,在图3.2所示的源文件窗口中选中tb_demo.vhd,在操作流程窗口中
双击 VHDL Post-Route Functional Simulation,可进行布线后的功能仿真(即不
带延时信息的门级仿真);双击 VHDL Post-Route Timing Simulation,可进行布
线后的时序仿真(即带延时信息的门级仿真)。它们的操作步骤与功能仿真类似。
第四节设计实现
针对FPGA的设计输入完成编译和功能仿真后,下一步就是进行设计实现(Design Implementation)。整个设计实现过程包括两个重要的执行环节——映射(Map)和布局布线(Place & Route)。映射是将设计由一个与器件无关的元件(例如:门电路和触发器)网络的表述转换为一个与器件相关的元件(例如:可配置的逻辑块)网络的表述。布局布线是根据映射后生成的结构设计(Physical Design)文件(*.ncd)在器件中对设计进行适配。在映射和布局布线的过程中,ispLEVER还提供给设计者交互式编辑功能(Interactive Editing)。
交互式编辑(Interactive Editing)
ispLEVER 6.0的FPGA设计流程提供强大的交互式编辑功能,通过两个重要的工具—— Design Planner和EPIC Device Editor来实现。
在ispLEVER 6.0版开发工具中,新的Design Planner工具将两个最常用的优化工具 - Preference Editor 和Floorplanner集成在一起,更真实地反映出专业FPGA设计者的处理思路和工作流程。现在用户能够无缝地从一项任务转移到另一项任务,而无需多余的中间步骤。Preference Editor被用来定义诸如关键路径和时序目标等设计参数,因为这些参数的定义是专门针对器件的,无法在硬件描述语言(HDL)层上完成。Floorplanner支持器件内逻辑布局的具体控制。将这两种相关的工具集成在一起,极大地简化了一些任务,诸如将客户定制的逻辑指定到器件I/O引脚。采用这种新的方法,设计者拥有一种标准的工具,可以帮助他们无缝地工作,从而更快、更高效地完成这些设计任务。
Design Planner
在上一节中,对Compare这个设计完成了功能仿真,接下来就可以用Design Planner进行优化设置了。在ispLEVER Project Navigator窗口中,共有三种操作可运行Design Planner。它们分别为Design Planner (Pre-Map)、Design Planner (Post-Map)和Design Planner (Post-PAR)。首先进行的是Design Planner (Pre-Map) 操作:
1.在ispLEVER Project Navigator窗口中,选中左侧源文件窗口中的器件
LFXP3C-3P208C。
2.右侧的操作流程窗口中会有一栏Design Planner (Pre-Map),双击该栏会
弹出三个窗口,依次为:Design Planner Control、Package View 以及
SpreadSheet View,分别如图4.1、图4.2和图4.3所示。
Design Planner Control窗口是Design Planner工具的入口。它是第一个打开的窗口,并且在您工作的时候一直保持打开状态,提供给您访问六种设计观察窗口(Pre-Mapped View、Post-Mapped View、Package View、
Floorplan View、Physical View和Spreadsheet View)以及Path Tracer的菜单,并且提供撤销和重做命令。Design Planner Control窗口显示有关设计的处理、状态以及提示信息。