-- Copyright (C) 1991-2005 Altera Corporation
-- Your use of Altera Corporation's design tools, logic functions
-- and other software and tools, and its AMPP partner logic
-- functions, and any output files any of the foregoing
-- (including device programming or simulation files), and any
-- associated documentation or information are expressly subject
-- to the terms and conditions of the Altera Program ******
-- Subscription Agreement, Altera MegaCore Function ******
-- Agreement, or other applicable ****** agreement, including,
-- without limitation, that your use is for the sole purpose of
-- programming logic devices manufactured by Altera and sold by
-- Altera or its authorized distributors. Please refer to the
-- applicable agreement for further details.
-- ***************************************************************************
-- This file contains a Vhdl test bench template that is freely editable to
-- suit user's needs .Comments are provided in each section to help the user
-- fill out necessary details.
-- ***************************************************************************
-- Generated on "06/30/2006 11:18:26"
-- Vhdl Test Bench template for design : diohs_task_logic
--
-- Simulation tool : ModelSim (VHDL)
--
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_textio.all;
USE std.textio.all;
ENTITY diohs_task_logic_tb IS
END diohs_task_logic_tb;
ARCHITECTURE diohs_task_logic_arch OF diohs_task_logic_tb IS
-- constants
-- signals
SIGNAL t_sig_HSIN : STD_LOGIC_VECTOR(7 downto 0);
SIGNAL t_sig_clk : STD_LOGIC:='0';
SIGNAL t_sig_rstn : STD_LOGIC;
SIGNAL t_sig_hs_in : STD_LOGIC_VECTOR(7 downto 0);
SIGNAL t_sig_pwm_ena_highs : STD_LOGIC;
CONSTANT ClockPeriod: Time := 10ns;
FILE results: TEXT is OUT "results.txt";
COMPONENT diohs_task_logic
PORT (
HSIN : in STD_LOGIC_VECTOR(7 downto 0);
clk : in STD_LOGIC;
rstn : in STD_LOGIC;
hs_in : out STD_LOGIC_VECTOR(7 downto 0);
pwm_ena_highs : out STD_LOGIC );
END COMPONENT;
BEGIN
tb : diohs_task_logic PORT MAP (
-- list connections between master ports and signals
HSIN => t_sig_HSIN,
clk => t_sig_clk,
rstn => t_sig_rstn,
hs_in => t_sig_hs_in,
pwm_ena_highs => t_sig_pwm_ena_highs
);
init : PROCESS
-- variable declarations
BEGIN
-- code that executes only once
t_sig_rstn <='0';
wait for 20 ns;
t_sig_rstn <='1';
WAIT;
END PROCESS init;
always : PROCESS
-- optional sensitivity list
-- ( )
-- variable declarations
BEGIN
-- code executes for every event on sensitivity list
t_sig_clk <= '1';
wait for 20 ns;
loop
-- t_sig_clk <= transport'0';
-- wait for 5 ns;
-- t_sig_clk <= transport'1';
-- wait for 5 ns;
wait for (ClockPeriod/2);
t_sig_clk <= not t_sig_clk;
end loop;
END PROCESS always;
PROCESS
variable l : line;
variable good_number: boolean;
variable r: std_logic_vector(7 downto 0);
file vector_file: text is in "values.txt";
begin
wait for 20 ns;
while not endfile(vector_file) loop
readline(vector_file,l);
read(l,r,good => good_number);
t_sig_HSIN <= r;
wait for 1000 ns;
end loop;
wait for 200 ns;
assert false
report
"End of simulation"
severity error;
END PROCESS;
process
constant myw: width:= 8;
constant mys: side:= right;
variable wl: line;
begin
wait for 30 ns;
loop
wait for 1000 ns;
writeline(results,wl);
write(wl,t_sig_hs_in,mys,myw);
end loop;
end process;
END diohs_task_logic_arch;
用到了TEXTIO包里的 read/readline, 和write/writeline
源程序:
------------------------------------------------------------------------
-- Library
------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
------------------------------------------------------------------------
-- entity
------------------------------------------------------------------------
entity diohs_task_logic is
port
(
clk: in std_logic;
rstn: in std_logic;
HSIN: in std_logic_vector(7 downto 0);
hs_in: out std_logic_vector(7 downto 0);
pwm_ena_highs: out std_logic
);
end diohs_task_logic;
-------------------------------------------------------------------------
-- architecture
-------------------------------------------------------------------------
architecture arch of diohs_task_logic is
-------------------------------------------------------------------------
-- signal
-------------------------------------------------------------------------
signal HSIN_reg: std_logic_vector(7 downto 0);
signal HSIN_debcnt: std_logic_vector(7 downto 0);
-------------------------------------------------------------------------
begin
-------------------------------------------------------------------------
-- Process: high speed inputs debounce counter;
-------------------------------------------------------------------------
process(rstn,clk,HSIN,HSIN_debcnt,HSIN_Reg)
begin
if rstn='0' then
HSIN_debcnt<=(others => '0');
HSIN_Reg <= (others => '0');
elsif rising_edge(clk) then
if HSIN_debcnt = 99 then
HSIN_debcnt<=(others => '0');
HSIN_Reg <= HSIN;
else
HSIN_debcnt <= HSIN_debcnt + 1;
HSIN_Reg <= HSIN_Reg;
end if;
end if;
end process;
hs_in <= HSIN_Reg;
pwm_ena_highs <= not(HSIN_Reg(2) or HSIN_Reg(1) or HSIN_Reg(0));
end arch