网站首页 | 关于我们 | 培训信息 | 政策法规 | 行业动态 | 行业专家 | 资源下载 | 技术理论 | 留言反馈 | 联系我们
  证书查询  
您的姓名:
证书编号:
验 证 码:
证书咨询?
  资源下载 更多>>>
·ROHS法规介绍
·电子元器件的应用可靠性
·PADSpower-PCB软件培训
·电磁兼容分层与综合设计法
  客服中心  

 

您的位置: 网站首页 -> 
FPGA系统的仿真和测试  


                                  FPGA系统的仿真和测试 
     
1概述 

FPGA仿真方法: 

(1) 交互式仿真方法:利用EDA工具的仿真器进行仿真,使用方便,但输入输出不便于记录规档,当输入量较多时不便于观察和比较。 

(2) 测试平台法:为设计模块专门设计的仿真程序,可以实现对被测模块自动输入测试矢量,并通过波形输出文件记录输出,便于将仿真结果记录归档和比较。 

2仿真程序的设计方法 

1.仿真的三个阶段: 

(1)行为仿真:目的是验证系统的数学模型和行为是否正确,对系统的描述的抽象程度较高。在行为仿真时,VHDL的语法语句都可以执行。 

(2)RTL仿真:目的是使被仿真模块符合逻辑综合工具的要求,使其能生成门级逻辑电路。在RTL仿真时,不能使用VHDL中一些不可综合和难以综合的语句和数据类型。该级仿真不考虑惯性延时,但要仿真传输延时。 

(3)门级仿真:门级电路的仿真主要是验证系统的工作速度,惯性延时仅仅是仿真的时候有用在综合的时候将被忽略。 

2.仿真程序的内容 

(1)被测实体的引入。 

(2)被测实体仿真信号的输入。 

(3)被测实体工作状态的激活。 

(4)被测实体信号的输出 

(5)被测实体功能仿真的结果比较,并给出辨别信息 

(6)被测实体的仿真波形比较处理 

3.仿真要注意的地方 

(1)仿真信号可以由程序直接产生,也可以用TEXTIO文件产生后读入。 

(2)仿真程序中可以简化实体描述,省略有关端口的描述。仿真程序实体描述的简化形式为: 

ENTITY测试平台名IS 

END测试平台名; 

(3)对于功能仿真结果的判断,可以用断言语句(ASSORT)描述 

(4)为了比较和分析电子系统的功能,寻求实现指标的最佳结构,往往利用一个测试平台对实体的不同结构进行仿真,一般是应用配置语句为同一被测实体选用多个结构体。 

CONFIGURATION测试平台名OF被测实体名IS 

FOR被测实体的A的结构体名 

END FOR; 

END测试平台名; 

同样,若选用结构体B,则配置语句可写为: 

CONFIGURATION测试平台名OF被测实体名IS 

FOR被测实体的B的结构体名 

END FOR; 

END测试平台名; 

4.VHDL仿真程序结构 

测试平台仅仅是用于仿真,因此可以利用所有的行为描述语言进行描述,下表表示了一个测试平台所包含的部分,典型的测试平台将包括测试结果和错误报告结果。 


(1)产生时钟信号 

-- Declare a clock period constant. 

Constant ClockPeriod : TIME := 10 ns; 

-- Clock Generation method 1: 

Clock <= not Clock after ClockPeriod / 2; 

-- Clock Generation method 2: 

GENERATE CLOCK: process 

begin 

wait for (ClockPeriod / 2) 

Clock <= ’1’; 

wait for (ClockPeriod / 2) 

Clock <= ’0’; 

end process; 


(2)提供仿真信号 

提供仿真信号可以有两种方法:绝对时间仿真和相对时间仿真。在绝对时间仿真方法中,仿真时间只是相对于零时刻的仿真时间。在相对时间仿真方法中,仿真的时间首先提供一个初值,在后继的时间设置中相对于该初始时间进行事件动作。 


绝对时间仿真: 

MainStimulus: process begin 

Reset <= ’1’; 

Load <= ’0’; 

Count_UpDn <= ’0’; 

wait for 100 ns; 

Reset <= ’0’; 

wait for 20 ns; 

Load <= ’1’; 

wait for 20 ns; 

Count_UpDn <= ’1’; 

end process; 


相对时间仿真: 

Process (Clock) 

Begin 

If rising_edge(Clock) then 

TB_Count <= TB_Count + 1; 

end if; 

end process; 

SecondStimulus: process begin 

if (TB_Count <= 5) then 

Reset <= ’1’; 

Load <= ’0’; 

Count_UpDn <= ’0’; 

Else 

Reset <= ’0’; 

Load <= ‘1’; 

Count_UpDn <= ‘1’; 

end process; 

FinalStimulus: process begin 

if (Count = "1100") then 

Count_UpDn <= ’’0’’; 

report "Terminal Count 

Reached, now counting down." 

end if; 

end process; 


(3)显示结果 

VHDL提供标准的std_textio函数包把输入输出结果显示在终端上。 


5.简单的仿真程序 

library IEEE; 

use IEEE.std_logic_1164.all; 

entity testbench is 

end entity testbench; 

architecture test_reg of testbench 

component shift_reg is 

port (clock : in std_logic; 

reset : in std_logic; 

load : in std_logic; 

sel : in std_logic_vector(1 downto 0); 

data : in std_logic_vector(4 downto 0); 

shiftreg : out std_logic_vector(4 downto 0)); 

end component; 

signal clock, reset, load: std_logic; 

signal shiftreg, data: std_logic_vector(4 downto 0); 

signal sel: std_logic_vector(1 downto 0); 

constant ClockPeriod : TIME := 50 ns; 

begin 

UUT : shift_reg port map (clock => clock, reset => reset, 

load => load, data => data, 

shiftreg => shiftreg); 

process begin 

clock <= not clock after (ClockPeriod / 2); 

end process; 

process begin 

reset <= ’1’; 

data <= "00000"; 

load <= ’0’; 

set <= "00"; 

wait for 200 ns; 

reset <= ’0’; 

load <= ’1’; 

wait for 200 ns; 

data <= "00001"; 

wait for 100 ns; 

sel <= "01"; 

load <= ’0’; 

wait for 200 ns; 

sel <= "10"; 

wait for 1000 ns; 

end process; 

end architecture test_reg; 


6.3.3TEXTIO建立测试程序 

在由仿真程序直接产生输入信号的方法中,测试矢量是仿真程序的一个部分,如果系统比较复杂,测试矢量的数目非常大,修改测试矢量时就必须修改程序,重新编译和仿真。工作量大。因此,在测试矢量非常大的时候可以用TEXTIO的方法来进行仿真。 


TEXTIO仿真方法:测试矢量从仿真程序中分离出来,单独存于一个文件中(即TEXTIO文件),在仿真时,根据定时要求按行读出,并赋予相应的输入信号。这种方法允许采用同一个测试平台,通过不同的测试矢量文件进行不同的仿真。值得注意的是,测试矢量文件的读取,需要利用TEXTIO程序包的功能。在TEXTIO程序包中,包含有对文本文件进行读写的过程和函数。 

LIBRARY IEEE; 

USE IEEE.std_logic_1164.all; 

LIBRARY ieee; 

USE IEEE.STD_LOGIC_TEXTIO.ALL; 

USE STD.TEXTIO.ALL; 

ENTITY testbench IS 

END testbench; 

ARCHITECTURE testbench_arch OF testbench IS 

COMPONENT stopwatch 

PORT ( 

CLK : in STD_LOGIC; 

RESET : in STD_LOGIC; 

STRTSTOP : in STD_LOGIC; 

TENTHSOUT : out STD_LOGIC_VECTOR (9 DOWNTO 0); 

ONESOUT : out STD_LOGIC_VECTOR (6 DOWNTO 0); 

TENSOUT : out STD_LOGIC_VECTOR (6 DOWNTO 0) 

); 

END COMPONENT; 

SIGNAL CLK : STD_LOGIC; 

SIGNAL RESET : STD_LOGIC; 

SIGNAL STRTSTOP : STD_LOGIC; 

SIGNAL TENTHSOUT : STD_LOGIC_VECTOR (9 DOWNTO 0); 

SIGNAL ONESOUT : STD_LOGIC_VECTOR (6 DOWNTO 0); 

SIGNAL TENSOUT : STD_LOGIC_VECTOR (6 DOWNTO 0); 

constant ClockPeriod : Time := 60 ns; 

FILE RESULTS: TEXT IS OUT "results.txt"; 

signal i: std_logic; 

BEGIN 

UUT : stopwatch 

PORT MAP ( 

CLK => CLK, 

RESET => RESET, 

STRTSTOP => STRTSTOP, 

TENTHSOUT => TENTHSOUT, 

ONESOUT => ONESOUT, 

TENSOUT => TENSOUT 

); 

stimulus: PROCESS 

begin 

reset <= ’1’; 

strtstop <= ’1’; 

wait for 240 ns; 

reset <= ’0’; 

strtstop <= ’0’; 

wait for 5000 ns; 

strtstop <= ’1’; 

wait for 8125 ns; 

strtstop <= ’0’; 

wait for 500 ns; 

strtstop <= ’1’; 

wait for 875 ns; 

reset <= ’1’; 

wait for 375 ns; 

reset <= ’0’; 

wait for 700 ns;
 

京ICP证:2008100号 © 版权所有:中国电子工程协会 侵权必究    
通讯地址:北京市海淀区银网中心18层    
E-mail:ceea@sina.com

肺癌早期治疗 肺癌晚期治疗 胃癌的中医治疗 肿瘤早期治疗 肿瘤晚期治疗 北京肿瘤医院 北京癌症治疗 汇海 汇海教授