第 11章
EDA工具软件接口
EDA技术 实用教程康芯科技
VHDL文本编辑综合
FPGA/CPLD
适配
FPGA/CPLD
编程下载
FPGA/CPLD
器件和电路系统 时序与功能门级仿真逻辑综合器结构综合器
1、行为仿真
2、功能仿真
3、时序仿真
11.1 EDA软件接口流程
VHDL文本编辑
SYNPLIFY
FPGAEXPRESS
FPGA COMPILERII
LEONARDO
………
VHDL
仿真图 11-1 EDA工程接口流程康芯科技
VHDL文本编辑综合
FPGA/CPLD
适配
FPGA/CPLD
编程下载
FPGA/CPLD
器件和电路系统 时序与功能门级仿真逻辑综合器结构综合器
1、行为仿真
2、功能仿真
3、时序仿真
11.1 EDA软件接口流程
VHDL文本编辑
SYNPLIFY
FPGAEXPRESS
FPGA COMPILERII
LEONARDO
………
VHDL
仿真图 11-1 EDA工程接口流程康芯科技
11.2 Synplify与 MAX+plusII的接口图 11-2
Synplify Pro
启动后界面
1,输入设计康芯科技
11.2 Synplify与 MAX+plusII的接口图 11-3 Synplify
新建项目对话框
1,输入设计康芯科技
3,综合前控制设置
4,综合
5,结果检测
2,选择合适的目标器件
11.2 Synplify与 MAX+plusII的接口康芯科技
【 例 11-1】
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt4 is
port (d,in std_logic_vector (3 downto 0);
ld,ce,clk,rst,in std_logic;
q,out std_logic_vector (3 downto 0));
end cnt4;
architecture behave of cnt4 is
signal count,std_logic_vector (3 downto 0);
begin
process (clk,rst)
begin
if rst = '1' then count <= (others => '0');
elsif rising_edge(clk) then
if ld = '1' then count <= d;
elsif ce = '1' then count <= count + 1; end if;
end if;
end process;
q <= count;
end behave;
康芯科技图 11-4 Synplify的 RTL 级原理图
11.2 Synplify与 MAX+plusII的接口康芯科技
11.2 Synplify与 MAX+plusII的接口图 11-5 Synplify的综合后门级电路图康芯科技
11.2 Synplify与 MAX+plusII的接口
6,设定 EDF文件为工程
7,选定 EDF文件来源图 11-6 Synplify的综合后门级电路图
8,选定目标器件
9,编译适配康芯科技
11.2 Synplify与 MAX+plusII的接口图 11-7 Synplify 与 Altera接口流程
HDL
Analyst
Synplify
综合
VHDL

Verilog HDL
Altera
器件工艺库设计约束文件
Synplify
报告文件
Verilog
HDL
网表文件
VHDL
网表文件
AHDL设 计文件
EDIF网 表文件
MAX+plusII
Compiler
.srr
.tlg
.vm,vhm
.edf

.tdf
RTL 仿真器
.sdc
康芯科技
11.3 ModelSim与 MAX+plusII的接口
1,VHDL
IEEEVHDL’87和 ’ 93标准,IEEE Std,1076-’87 & ‘93。
VHDL多值逻辑系统标准,IEEE1164-1993。
VHDL标准数学程序包,IEEE 1076.2-1996。
2,Verilog
IEEE Verilog标准,IEEE 1364-’95。
IEEE Verilog2001标准,IEEE1364-2001(部分支持 )。
OVI Verilog LRM 2.0(大部分支持 。 OVI,Open Verilog International)。
PLI 1.0 (PLI,Programming Language Interface)。
VCD (Value Change Dump)。
康芯科技
11.3 ModelSim与 MAX+plusII的接口
3,VITAL
VITAL2.2b 和 VITAL’95 (IEEE 1076.4-1995)。
VITAL 2000。
4,SDF(Standard Delay Format,标准延迟格式 )
SDF标准,SDF1.0~ 3.0。
康芯科技
11.3 ModelSim与 MAX+plusII的接口
(1) 启动 ModelSim
图 11-13 ModelSim的启动界面康芯科技
11.3 ModelSim与 MAX+plusII的接口
(2) 建立仿真工程项目图 11-14 ModelSim的
Create Project 对话框康芯科技
11.3 ModelSim与 MAX+plusII的接口
(3) 编译仿真文件。
图 11-15 开始编译仿真文件康芯科技
11.3 ModelSim与 MAX+plusII的接口
(3) 编译仿真文件。
图 11-16 ModelSim编译时的提示信息康芯科技
11.3 ModelSim与 MAX+plusII的接口
(4) 装载仿真模块和仿真库图 11-17 装载设计模块康芯科技(5) 执行仿真库 图 11-18 ModelSim的仿真观察窗康芯科技
(5) 执行仿真库图 11-19 ModelSim的波形观察窗
11.3 ModelSim与 MAX+plusII的接口康芯科技图 11-20 ModelSim的 Create Project对话框
11.3 ModelSim与 MAX+plusII的接口
(1) MAX+plusII编译前设置步骤图 11-21 输出网表文件设置康芯科技图 11-22 Compiler子窗口界面
11.3 ModelSim与 MAX+plusII的接口
(1) MAX+plusII编译前设置步骤康芯科技
11.3 ModelSim与 MAX+plusII的接口
(2) 生成仿真文件步骤
(3) 在 ModelSim中作编译前设置
(4) 仿真康芯科技
11.3 ModelSim与 MAX+plusII的接口
(1) MAX+plusII
编译前设置步骤图 11-23 ModelSim
编译前设置康芯科技
11.3 ModelSim与 MAX+plusII的接口步骤
(2) 建立 VITAL库图 11-24 建立
VITAL库康芯科技
11.3 ModelSim与 MAX+plusII的接口步骤 (3) 编译库文件图 11-25
ModelSim的
Compile HDL
Source Files 对话框康芯科技
11.3 ModelSim与 MAX+plusII的接口步骤 (4) 导入 SDF文件图 11-26
ModelSim
对 cnt4的部分仿真波形康芯科技习 题
11-1 使用 ModelSim进行行为仿真,功能仿真和时序仿真有哪些步骤? 在此,行为仿真与功能仿真的区别是什么?
11-2 试使用 Synplify Pro综合一个 VHDL描述的设计,然后在
MAX+plusII中完成适配 。
康芯科技实 验 与 设 计
11-1 EDA工具接口实验
(1) 实验目的,了解 MAX+plusⅡ 与 Synplify的接口方式,用 Synplify辅助设计 。
(2) 实验内容 1,按照 11.2节所述内容和步骤,按 Synplify与 MAX+plusII
的接口流程,完成 cnt.vhd的 Synplify综合,EDIF文件导入,硬件测试 。
(3) 实验内容 2,试用 Synplify对第 10章中例子进行综合,分析与用
MAX+plusII综合的不同 。
(4) 实验报告,叙述 Synplify与 MAX+plusII的接口流程,给出详细实验报告 。
康芯科技实 验 与 设 计
11-2 采用高速 ADC TLC5510的简易存储示波器设计
(1) 实验目的,学习利用 FPGA控制高速 ADC,示波器显示控制方法等 。
(2) 实验原理,图 11-27所示的是存储示波器结构图,FPGA中的
ADC采样控制器负责 ADC对模拟信号的采样,并将 ADC转换好的数据送到双口 RAM中存储,由地址发生计数器产生 RAM的地址信号 。 当完成 1至数个周期被测信号的采样后,在地址发生计数器的地址扫描下,将存于 RAM中的数据通过外部的 DAC进入示波器的
Y端;与此同时,地址发生计数器的地址信号分频后通过另一个
DAC构成锯齿波信号,进入示波器的 X端 。 从而实现存储示波器的功能 。
康芯科技实 验 与 设 计示波器
F P G A
高速 A D C
时钟 C L K
A /D 采样控制器 分频器模拟信号输入地址发生计数器 双口 R A M
锯齿波波形数据输出
Y
X
D A C
D A C
图 11-27 存储示波器结构简图康芯科技实 验 与 设 计图 11-28 TLC5510引脚图康芯科技实 验 与 设 计图 11-29 TLC5510采样时序图康芯科技实 验 与 设 计图 11-30 TLC5510采样控制状态图
St 0 St 1
A D ck < = '1 ';
l o ck < = '1 ';
d cl k < = '0 ';
A D ck < = '0 ';
l o ck < = '0 ';
d cl k < = '1 ';
康芯科技实 验 与 设 计图 11-31 TLC5510采样控制器模块图康芯科技【 例 11-2】 -- TLC5510采样控制示例
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity ad5510 is
port( rst,in std_logic; -- 复位
clk,in std_logic; -- 采样控制 Clock 输入
d,in std_logic_vector(7 downto 0);-- 8位 A/D数据
ADck,out std_logic; -- TLC5510的 CLK
ADoe,out std_logic; -- TLC5510的 OE
data,out std_logic_vector(7 downto 0);-- 8位数据
dclk,out std_logic ); -- 数据输出锁存信号
end ad5510;
architecture ADCTRL of ad5510 is
type adsstates is (sta0,sta1); --定义两个状态变量
signal ads_state,next_ads_state,adsstates;
signal lock,std_logic;
begin
ads,PROCESS( ads_state) -- A/D 采样控制状态机
BEGIN
CASE ads_state IS
WHEN sta0 => ADck<='1'; lock<='1'; dclk<='0';next_ads_state <= sta1;
WHEN sta1 => ADck<='0'; lock<='0'; dclk<='1';next_ads_state <= sta0;
WHEN OTHERS => ADck<='0'; lock<='0'; dclk<='1';next_ads_state <= sta0;
END CASE ; 接下页康芯科技
END PROCESS;
PROCESS (CLK,rst)
BEGIN
IF RST ='0' THEN ads_state <= sta0;
ELSIF ( CLK'EVENT AND CLK='1') THEN
ads_state <= next_ads_state; -- 在时钟上升沿,转换至下一状态
END IF;
END PROCESS;
PROCESS (lock,rst) -- 此进程中,在 lock的上升沿,将转换好的数据锁入
BEGIN
IF RST ='0' THEN data <= (others => '0');
ELSIF lock'EVENT AND lock='1' THEN data <= D ; END IF;
END PROCESS ;
ADoe <= '0';
end ADCTRL;
康芯科技实 验 与 设 计图 12-32 A/D转换仿真波形康芯科技【 例 12-3】 -- TLC5510的另一种采样控制方法
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity adctrl is
port( rst,in std_logic; -- 复位
clk,in std_logic; -- 采样控制 Clock 输入;
d,in std_logic_vector(7 downto 0); -- 8位 A/D数据
ADck,out std_logic; -- TLC5510的 CLK
ADoe,out std_logic; -- TLC5510的 OE
data,out std_logic_vector(7 downto 0); -- 8位数据
dclk,out std_logic);
end adctrl;
architecture logi of adctrl is
signal lock,std_logic;
begin
lock <= clk; ADck <= clk; dclk <= not lock;
PROCESS (lock,rst) -- 此进程中,在 lock的上升沿,将转换好的数据锁入
BEGIN
if rst <= '0' then data <= (others => '0');
ELSIF lock'EVENT AND lock='1' THEN
data <= D ;
END IF;
END PROCESS ;
ADoe <= '0';
end logi;
康芯科技实 验 与 设 计图 11-32 存储示波器采 样控制模块图康芯科技实 验 与 设 计图 11-33 存储示波器 RTL电路图康芯科技
【 例 11-4】 -- TLC5510采样控制 。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY RESERV IS
PORT( CLK,IN STD_LOGIC;--采样与扫描显示时钟
RD,IN STD_LOGIC;--采样与显示控制
TRAG,OUT STD_LOGIC_VECTOR (9 DOWNTO 0);--锯齿波发生信号
ADIN,IN STD_LOGIC_VECTOR (7 DOWNTO 0);--A/D采样数据输入
DOUT,OUT STD_LOGIC_VECTOR (9 DOWNTO 0) ); --数据向示波器扫描输出
END;
ARCHITECTURE DACC OF RESERV IS
COMPONENT DPRAM --采样双口 RAM
PORT ( data,IN STD_LOGIC_VECTOR (7 DOWNTO 0);
wraddress,IN STD_LOGIC_VECTOR (9 DOWNTO 0);
rdaddress,IN STD_LOGIC_VECTOR (9 DOWNTO 0);
wren,IN STD_LOGIC ;
clock,IN STD_LOGIC ;
q,OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );
END COMPONENT;
SIGNAL QWR,STD_LOGIC_VECTOR (9 DOWNTO 0); --对双口 RAM写地址计数器接下页康芯科技
SIGNAL Q2,STD_LOGIC_VECTOR (9 DOWNTO 0);
SIGNAL QRD,STD_LOGIC_VECTOR (9 DOWNTO 0); --对双口 RAM读地址计数器
SIGNAL NOTCLK,STD_LOGIC ;
SIGNAL COUT,STD_LOGIC ;
SIGNAL WEN,STD_LOGIC ;
SIGNAL DIN,STD_LOGIC_VECTOR (7 DOWNTO 0);
BEGIN
DOUT(1 DOWNTO 0) <= "00" ; NOTCLK <= NOT CLK ;
PROCESS(NOTCLK,RD,QWR,QRD)
BEGIN
IF RD='1' THEN QWR<="0000000000" ;
QRD<="0000000000" ; --当 RD为 1时两个地址发生器清 0,
ELSIF NOTCLK'EVENT AND NOTCLK = '1' THEN
IF QWR<"1111111111" THEN QWR <= QWR + 1 ; WEN <= NOT RD ;
ELSE QRD <= QRD + 1 ; WEN <= NOT RD ; END IF;
END IF ;
END PROCESS;
PROCESS(QRD(2 DOWNTO 0) )
BEGIN
IF QRD(2 DOWNTO 0) = "111" THEN COUT <= '1'; ELSE COUT <= '0' ;
END IF;
接下页康芯科技
END PROCESS;
PROCESS(COUT,Q2) --产生锯齿波信号扫描数据
BEGIN
IF COUT'EVENT AND COUT = '1' THEN Q2 <= Q2 + 1 ; END IF;
END PROCESS;
process(CLK,ADIN) --对 A/D的采样控制
begin
if (rising_edge(NOTCLK)) then DIN<=ADIN ;--将来自 A/D的 8位数据赋值给 DIN
end if;
end process;
TRAG <= Q2 ;
u1,DPRAM PORT MAP(data=>DIN,wren=>WEN,wraddress=>QWR,
rdaddress=>QRD,q => DOUT(9 DOWNTO 2),clock=>CLK );
END;
康芯科技
【 例 11-5】 --双口 RAM
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY DPRAM IS
PORT ( data,IN STD_LOGIC_VECTOR (7 DOWNTO 0);
wraddress,IN STD_LOGIC_VECTOR (9 DOWNTO 0);
rdaddress,IN STD_LOGIC_VECTOR (9 DOWNTO 0);
wren,IN STD_LOGIC,= '1';
clock,IN STD_LOGIC ;
q,OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END DPRAM;
ARCHITECTURE SYN OF DPRAM IS
SIGNAL sub_wire0,STD_LOGIC_VECTOR (7 DOWNTO 0);
COMPONENT lpm_ram_dp
GENERIC (lpm_width,NATURAL;
lpm_widthad,NATURAL;
lpm_indata,STRING;
lpm_wraddress_control,STRING;
lpm_rdaddress_control,STRING;
lpm_outdata,STRING;
lpm_file,STRING;
lpm_hint,STRING );
接下页康芯科技
PORT ( rdclock,IN STD_LOGIC ;
wren,IN STD_LOGIC ;
wrclock,IN STD_LOGIC ;
q,OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
data,IN STD_LOGIC_VECTOR (7 DOWNTO 0);
rdaddress,IN STD_LOGIC_VECTOR (9 DOWNTO 0);
wraddress,IN STD_LOGIC_VECTOR (9 DOWNTO 0) );
END COMPONENT;
BEGIN
q <= sub_wire0(7 DOWNTO 0);
lpm_ram_dp_component,lpm_ram_dp
GENERIC MAP (LPM_WIDTH=>8,LPM_WIDTHAD=>10,
LPM_INDATA=>"REGISTERED",
LPM_WRADDRESS_CONTROL => "REGISTERED",
LPM_RDADDRESS_CONTROL => "REGISTERED",
LPM_OUTDATA => "REGISTERED",
LPM_FILE => "./DATA/LUT10to8.hex",
LPM_HINT => "USE_EAB=ON" )
PORT MAP (rdclock=>clock,wren=>wren,wrclock=>clock,data=>data,
rdaddress=>rdaddress,wraddress=>wraddress,q=>sub_wire0);
END SYN;
康芯科技实 验 与 设 计
(3) 实验内容 1,对例 11-4/例 11-5给出仿真波形,并分析,然后进行硬件验证 。
锁定引脚 。 时钟首先输入 12MHz。 注意打开系统的 +/-12V电源开关 。
用示波器的 Y1( X) 端接 GWADDA板的 5651 D/A输出,GWADDA
板上 5510 A/D口,AIN”接来自主系统模拟波形,即接主系统板上右侧,JP17”的,OUTPUT”端,然后将主系统 板上,JP18”的
,INPUT”端与系统右下角的时钟 65536或 32768HZ等相接 。 注意,
将,JP18”上方的 3针座靠,CNECT”方向用短路帽短路,以便在
,JP17”的,OUTPUT”端输出,用于 A/D采样的模拟波形 。 调节
,JP18”上方的电位器,使得主系统右侧的,模拟测试信号,端输出正常信号波形 ( 用示波器监视,在 0--4V之间 ) 。
康芯科技实 验 与 设 计
GWADDA板上跳线 JAD的短路帽插,20MHz”端,这时 VHDL程序时钟 CLK锁定在 127脚;此时 AD5510和 DA5651的工作时钟与 FPGA的工作时钟完全一样,都是 20MHz。
电路图选择 No.5,选择键 1高电平为采样,低电平为存储显示 。 将示波器打到 X/Y档 。
波形输出,Y1( X) 端接 GWADDA板的 5651的 A输出端,作 X作锯齿波输出;
波形输出,Y2( Y) 端接 GWADDA板的 5651的 B输出端,作 Y作波形输出 。
(4) 实验内容 2,为了改善输出波形的显示效果,修改例 11-4,设计一个状态机,严格控制进入 RAM中的数据在地址发生器一个扫描周期中含被采样信号整数个完整周期的采样数据。