------------------------------------------------------------------------------ -- Copyright (C) 2010, Kenichi Kurimoto -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 2 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ----------------------------------------------------------------------------- library ieee; use ieee.std_logic_1164.all; use std.textio.all; use ieee.std_logic_textio.all; --use ieee.numeric_std.all; library gaisler; use gaisler.sim.all; use gaisler.ambatest.all; use gaisler.ahbtbp.all; library techmap; use techmap.gencomp.all; library grlib; use grlib.stdlib.all; library kuri; use kuri.mjpeg.all; use work.debug.all; use work.config.all; entity sim_yccrgbs is generic ( clkperiod : integer := 20); end ; architecture behav of sim_yccrgbs is component bus_yccrgbs port( rstn : in std_ulogic; clk : in std_ulogic; ctrl_in1 : in ahbtbm_ctrl_in_type; ctrl_out1 : out ahbtbm_ctrl_out_type ); end component; signal clk : std_ulogic := '0'; signal rst : std_ulogic := '0'; signal ctrl1 : ahbtb_ctrl_type; -- signal data_in : std_logic_vector(31 downto 0); file in_file : text open read_mode is "in_yccrgbs.txt"; file compare_file : text open read_mode is "out_yccrgbs.txt"; begin -- behav b0 : bus_yccrgbs port map (rst,clk,ctrl1.i,ctrl1.o); tictak : process begin clk <= '0'; wait for 10 ns; clk <= '1'; wait for 10 ns; end process; stim: process variable li : line; variable lc : line; variable i,j : integer; -- variable ycc : std_logic_vector(23 downto 0); variable indata : std_logic_vector(31 downto 0); variable radd : std_logic_vector(31 downto 0); -- variable cdata1, cdata2 : std_logic_vector(15 downto 0); variable cdata32 : std_logic_vector(31 downto 0); begin report " stimulus process start "; rst <= '0'; wait for 100 ns; rst <= '1'; -- initialize ahbtbminit(ctrl1); -- Write Control registers through APB bus ahbwrite(x"80000200", x"a0000000", "10", "10", '1', 2, false , ctrl1); ahbwrite(x"80000204", x"028001e0", "10", "10", '1', 2, false , ctrl1); --ahbwrite(x"80000204", x"00500050", "10", "10", '1', 2, false , ctrl1); ahbwrite(x"80000208", x"00000000", "10", "10", '1', 2, false , ctrl1); --ahbwrite(x"80000208", x"00000460", "10", "10", '1', 2, false , ctrl1); ahbwrite(x"8000020c", x"00000000", "10", "10", '1', 2, false , ctrl1); ahbwrite(x"8000020c", x"ffffffff", "10", "10", '1', 2, false , ctrl1); -- Write YCC data for IP core -- for i in 0 to 33821 loop for i in 0 to 3999 loop readline(in_file,li); hread(li, indata); ahbwrite(x"90000000", indata, "10", "10", '1', 2, false , ctrl1); ahbtbmidle(true, ctrl1); wait for 20 ns; end loop; radd := x"a0000000"; -- for i in 0 to 16910 loop for i in 0 to 1999 loop readline(compare_file, lc); hread(lc, cdata32); ahbread(radd, cdata32, "10", 2, false, ctrl1); radd := radd + x"004"; end loop; ahbtbmidle(true,ctrl1); wait for 100 ns; ahbtbmdone(0, ctrl1); wait for 300 ns; report "stimulus process end" severity failure; wait; end process; end behav;