OpenCores
URL https://opencores.org/ocsvn/gecko3/gecko3/trunk

Subversion Repositories gecko3

[/] [gecko3/] [trunk/] [GECKO3COM/] [gecko3com-ip/] [core/] [GECKO3COM_simple_prng_tb.vhd] - Rev 29

Compare with Previous | Blame | View Log

--  GECKO3COM IP Core
--
--  Copyright (C) 2009 by
--   ___    ___   _   _
--  (  _ \ (  __)( ) ( )
--  | (_) )| (   | |_| |   Bern University of Applied Sciences
--  |  _ < |  _) |  _  |   School of Engineering and
--  | (_) )| |   | | | |   Information Technology
--  (____/ (_)   (_) (_)
--
--  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 3 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, see <http://www.gnu.org/licenses/>.
--
--  URL to the project description: 
--    http://labs.ti.bfh.ch/gecko/wiki/systems/gecko3com/start
--------------------------------------------------------------------------------
--
--  Author:  Christoph Zimmermann
--  Date of creation: 26. February 2010
--  Description:
--      Small testbench to simulate the pseudo random number generator used in
--      the GECKO3COM_simple_test module.
--
--      The file output is not usable for our case. To compare the data we
--      receive through USB we use the output from GECKO3COM_simple_prng_tb.c
--
--  Tool versions:      11.1
--  Dependencies:
--
--------------------------------------------------------------------------------
 
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
 
library std;
use std.textio.all;
 
 
entity GECKO3COM_simple_prng_tb is
end GECKO3COM_simple_prng_tb;
 
architecture simulation of GECKO3COM_simple_prng_tb is
 
  -- simulation constants
  constant C_SIM_DURATION : time := 80080 ns;  -- duration of simulation
  constant CLK_PERIOD     : time := 20 ns;
 
 
  -- signals
  signal sim_stoped      : boolean := false;
  signal sim_clk         : std_logic;
  signal sim_rst         : std_logic;
  signal s_prng_en       : std_logic;
  signal s_prng_feedback : std_logic;
  signal s_prng_data     : std_logic_vector(31 downto 0);
 
 
begin  -- simulation
 
  sim_stoped <= true after C_SIM_DURATION;
 
  -----------------------------------------------------------------------------
  -- Design maps
  ----------------------------------------------------------------------------- 
 
  sim_prng_en : process (sim_clk, sim_rst)
  begin
    if sim_rst = '0' then               -- asynchronous reset (active low)
      s_prng_en <= '0';
    elsif sim_clk'event and sim_clk = '1' then  -- rising clock edge
      s_prng_en <= '1';
    end if;
  end process sim_prng_en;
 
 
  -- purpose: linear shift register for the pseude random number
  --          generator (PRNG)
  -- type   : sequential
  -- inputs : i_sysclk, i_nReset, s_prng_en, s_prng_feedback
  -- outputs: s_prng_data
  prng_shiftregister : process (sim_clk, sim_rst)
  begin  -- process prng_shiftregister
    if sim_rst = '0' then               -- asynchronous reset (active low)
      s_prng_data <= "01010101010101010101010101010101";
    elsif sim_clk'event and sim_clk = '1' then  -- rising clock edge
      if s_prng_en = '1' then
        s_prng_data(31 downto 1) <= s_prng_data(30 downto 0);
        s_prng_data(0)           <= s_prng_feedback;
      end if;
    end if;
  end process prng_shiftregister;
 
  -- purpose: feedback polynom for the pseudo random number generator (PRNG)
  -- inputs : s_prng_data
  -- outputs: s_prng_feedback
  s_prng_feedback <= s_prng_data(15) xor s_prng_data(13) xor s_prng_data(12)
                     xor s_prng_data(10);
 
 
 
  -----------------------------------------------------------------------------
  -- CLK process
  -----------------------------------------------------------------------------
  clk_process : process
  begin
    sim_clk <= '0';
    wait for CLK_PERIOD/2;
    sim_clk <= '1';
    wait for CLK_PERIOD/2;
    if sim_stoped then
      wait;
    end if;
  end process;
 
  rst_process : process
  begin
    sim_rst <= '0';
    wait for 2*CLK_PERIOD;
    sim_rst <= '1';
    wait;
  end process;
 
  -----------------------------------------------------------------------------
  -- write file process
  -----------------------------------------------------------------------------
 
  write_input : process
    type bin_file is file of bit_vector(31 downto 0);
    file c_file_handle  : bin_file;
    --type char_file is file of character;
    --file c_file_handle  : char_file;
    variable C          : character := 'W';
    variable char_count : integer   := 0;
  begin
    file_open(c_file_handle, "GECKO3COM_simple_prng_tb.txt", write_mode);
 
    while sim_stoped = false loop
      write(c_file_handle, to_bitvector(s_prng_data));
      --write(c_file_handle, C);
      char_count := char_count + 1;
      wait until sim_clk = '1';
    end loop;
 
    file_close(c_file_handle);
 
  end process;
 
end simulation;
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.