您的位置 首页 主动

说说FPGA体系的仿真和测验

一、概述FPGA仿真方法:(1)交互式仿真方法:利用EDA工具的仿真器进行仿真,使用方便,但输入输出不便于记录规档,当输入量较多时不便于观察和比较。(2)测试平台法:为设计模块专门设计的仿真程序,可以

一、概述

FPGA仿真办法:

(1)交互式仿真办法:运用EDA东西的仿真器进行仿真,运用方便,但输入输出不便于记载规档,当输入量较多时不便于调查和比较。

(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 TEXTIO树立测验程序

在由仿真程序直接发生输入信号的办法中,测验矢量是仿真程序的一个部分,假如体系比较复杂,测验矢量的数目非常大,修正测验矢量时就必须修正程序,从头编译和仿真。作业量大。因而,在测验矢量非常大的时分能够用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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/zhudong/206120.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部