如何测试VHDL文件
我已经用VHDL做了一个双端口寄存器库,我想测试它以确保它工作正常。我该怎么做呢?我知道我想做什么(将寄存器2设置为常量,在测试程序中读取,写入寄存器3,然后再读取,看看是否有相同的结果) 唯一的问题是,我不熟悉VHDL,所以我不知道是否有控制台,也不知道测试程序是如何构造的,也不知道如何实例化寄存器文件,甚至不知道用什么编译它(到目前为止我一直在使用quartus) 这是我的注册文件:如何测试VHDL文件,vhdl,Vhdl,我已经用VHDL做了一个双端口寄存器库,我想测试它以确保它工作正常。我该怎么做呢?我知道我想做什么(将寄存器2设置为常量,在测试程序中读取,写入寄存器3,然后再读取,看看是否有相同的结果) 唯一的问题是,我不熟悉VHDL,所以我不知道是否有控制台,也不知道测试程序是如何构造的,也不知道如何实例化寄存器文件,甚至不知道用什么编译它(到目前为止我一直在使用quartus) 这是我的注册文件: use IEEE.STD_LOGIC_ARITH.all; use IEEE.STD_LOGIC_UNSIG
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
-- Register File
entity RF is
port(
signal clk, we: in std_logic;
signal ImmediateValue : in std_logic_vector(15 downto 0);
signal RegisterSelectA, RegisterSelectB : in integer range 0 to 15;
signal AOut, BOut : out std_logic_vector(15 downto 0)
);
end RF
architecture behavior of RF is
array std_logic_vector_field is array(15 downto 0) of std_logic_vector(15 downto 0);
variable registers : std_logic_vector(15 downto 0);
process (clk, we, RegisterSelectA, RegisterSelectB, ImmediateValue)
wait until clk'event and clk = '1';
registers(RegisterSelectA) := ImmediateValue when we = '1';
AOut <= registers(RegisterSelectA);
BOut <= registers(RegisterSelectB);
end process;
end behavior;
使用IEEE.STD\u LOGIC\u ARITH.all;
使用IEEE.STD_LOGIC_UNSIGNED.all;
--寄存器文件
实体RF是
港口(
信号时钟,we:在标准逻辑中;
信号立即值:标准逻辑向量(15到0);
信号寄存器SelectA、寄存器SelectB:在0到15的整数范围内;
信号输出,布特:输出标准逻辑向量(15到0)
);
端射频
射频器件的结构特性
数组std_逻辑_向量_字段是std_逻辑_向量(15向下到0)的数组(15向下到0);
变量寄存器:标准逻辑向量(15到0);
流程(clk、we、RegisterSelectA、RegisterSelectB、即时价值)
等待clk'事件和clk='1';
registers(RegisterSelectA):=we='1'时立即赋值;
AOut首先,如果你是VHDL设计新手,你最好从网上的教程开始,或者读一本书
无论如何,就像软件设计一样,要测试VHDL设计,必须编写一些测试代码。在硬件设计中,这些测试通常类似于单元测试,但通常称为
对于您给出的设计,您需要创建如下内容:
library ieee.std_logic_1164.all;
library ieee.numeric_std.all;
entity test_RF is
end entity;
architecture test of test_RF is
signal clk, we: std_logic;
signal ImmediateValue : std_logic_vector(15 downto 0);
signal RegisterSelectA, RegisterSelectB : integer range 0 to 15;
signal AOut, BOut : std_logic_vector(15 downto 0)
begin
-- Instantiate the design under test
u_RF : entity work.RF
port map (
clk => clk,
we => we,
ImmediateValue => ImmediateValue,
RegisterSelectA => RegisterSelectA,
RegisterSelectB => RegisterSelectB,
AOut => AOut,
BOut => BOut
);
-- create a clock
process is
begin
clk <= '0';
loop
wait for 10 ns;
clk <= not clk;
end loop;
end process;
-- create one or more processes to drive the inputs and read the outputs
process is
begin
wait until rising_edge(clk);
-- do stuff
-- use assert to check things
-- etc
end process;
end architecture;
库ieee.std_logic_1164.all;
图书馆ieee.numeric_std.all;
实体测试
终端实体;
测试单元RF的架构测试是
信号时钟,we:std_逻辑;
信号立即值:标准逻辑向量(15到0);
信号寄存器selecta,寄存器selectb:整数范围0到15;
信号AOut,布特:标准逻辑向量(15到0)
开始
--实例化测试中的设计
u_RF:实体工作.RF
港口地图(
时钟=>clk,
我们=>我们,
即时价值=>即时价值,
RegisterSelectA=>RegisterSelectA,
RegisterSelectB=>RegisterSelectB,
AOut=>AOut,
布特=>布特
);
--创建一个时钟
过程是
开始
clk首先,如果你对VHDL设计不熟悉,最好从网上的教程开始,或者读一本书
无论如何,就像软件设计一样,要测试VHDL设计,必须编写一些测试代码。在硬件设计中,这些测试通常类似于单元测试,但通常称为
对于您给出的设计,您需要创建如下内容:
library ieee.std_logic_1164.all;
library ieee.numeric_std.all;
entity test_RF is
end entity;
architecture test of test_RF is
signal clk, we: std_logic;
signal ImmediateValue : std_logic_vector(15 downto 0);
signal RegisterSelectA, RegisterSelectB : integer range 0 to 15;
signal AOut, BOut : std_logic_vector(15 downto 0)
begin
-- Instantiate the design under test
u_RF : entity work.RF
port map (
clk => clk,
we => we,
ImmediateValue => ImmediateValue,
RegisterSelectA => RegisterSelectA,
RegisterSelectB => RegisterSelectB,
AOut => AOut,
BOut => BOut
);
-- create a clock
process is
begin
clk <= '0';
loop
wait for 10 ns;
clk <= not clk;
end loop;
end process;
-- create one or more processes to drive the inputs and read the outputs
process is
begin
wait until rising_edge(clk);
-- do stuff
-- use assert to check things
-- etc
end process;
end architecture;
库ieee.std_logic_1164.all;
图书馆ieee.numeric_std.all;
实体测试
终端实体;
测试单元RF的架构测试是
信号时钟,we:std_逻辑;
信号立即值:标准逻辑向量(15到0);
信号寄存器selecta,寄存器selectb:整数范围0到15;
信号AOut,布特:标准逻辑向量(15到0)
开始
--实例化测试中的设计
u_RF:实体工作.RF
港口地图(
时钟=>clk,
我们=>我们,
即时价值=>即时价值,
RegisterSelectA=>RegisterSelectA,
RegisterSelectB=>RegisterSelectB,
AOut=>AOut,
布特=>布特
);
--创建一个时钟
过程是
开始
被否决的原因是什么?被否决的原因是什么?