写testbench时输入输出数据到文件

eeleader-mcu   2010-10-25 09:43 楼主

-- 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

回复评论 (3)

顶,好帖!比较完整的表达了写TESTBENCH 时,输入输出数据到文件的整个过程!

一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2010-10-25 12:50

。。。。。。。。。

。。。。请问txt里面的格式是什么?想输入正弦波的数据
点赞  2012-3-11 19:34

参考verilog仿真文件对数据读写要求

一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2012-3-13 13:33
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复