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

Subversion Repositories plb2wbbridge

[/] [plb2wbbridge/] [trunk/] [systems/] [test_system_sim/] [simple/] [simulation/] [testbench/] [system_tb.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 feddischso
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
 
4
library UNISIM;
5
use UNISIM.VCOMPONENTS.ALL;
6
 
7
 
8
entity system_tb is
9
end system_tb;
10
 
11
architecture STRUCTURE of system_tb is
12
 
13
  constant sys_clk_period     : time    := 10.000000 ns;
14
  constant wb_clk_period      : time    := 13.333333 ns;
15
  constant sys_rst_length     : time    := 160 ns;
16
 
17
  constant SYNCH_PART         : integer := 1;
18
  constant SYNCH_SUBPART      : integer := 2;
19
  constant SYNCH_SUBSUBPART   : integer := 3;
20
 
21
  constant SUBSUBPART_LENGTH  : integer := 15;  -- 10 clock cycles
22
  constant SUBPART_LENGTH     : integer := 5;  -- 7 times SUBSUBPART_LENGTH
23
  constant PART_LENGTH        : integer := 5;  -- 6 times SUBPART_LENGTH
24
 
25
  component system is
26
    port (
27
      sys_clk_pin          : in  std_logic;
28
      sys_rst_pin          : in  std_logic;
29
      to_synch_in_pin      : in  std_logic_vector( 0 to 31 );
30
      from_synch_out_pin   : out std_logic_vector( 0 to 31 );
31
      wb_clk_pin           : in  std_logic;
32
      wb_rst_pin           : in  std_logic
33
    );
34
  end component;
35
 
36
 
37
   signal sys_clk : std_logic;
38
   signal sys_rst : std_logic := '1';
39
   signal wb_clk  : std_logic;
40
   signal wb_rst  : std_logic;
41
 
42
 
43
   signal to_synch_in       : std_logic_vector( 0 to 31 );
44
   signal from_synch_out    : std_logic_vector( 0 to 31 );
45
   signal tb_synch_out      : std_logic_vector( 0 to 31 )   := ( others => '0' );
46
 
47
   procedure SendSynch( signal synch_out : OUT std_logic_vector;
48
                                COMMAND :     integer ) is
49
   begin
50
      synch_out( COMMAND ) <= '1';
51
      wait for sys_clk_period*1;
52
      synch_out( COMMAND ) <= '0';
53
   end procedure SendSynch;
54
 
55
 
56
begin
57
 
58
   to_synch_in <= from_synch_out or tb_synch_out;
59
 
60
 
61
 
62
   dut : system
63
      port map (
64
         sys_clk_pin          => sys_clk,
65
         sys_rst_pin          => sys_rst,
66
         to_synch_in_pin      => to_synch_in,
67
         from_synch_out_pin   => from_synch_out,
68
         wb_clk_pin           => wb_clk,
69
         wb_rst_pin           => wb_rst
70
      );
71
 
72
 
73
   --
74
   -- generate plb-clk
75
   -- 
76
   process
77
   begin
78
      sys_clk <= '0';
79
      loop
80
         wait for (sys_clk_period/2);
81
         sys_clk <= not sys_clk;
82
      end loop;
83
   end process;
84
 
85
 
86
   --
87
   --
88
   --
89
   process
90
   begin
91
      wb_clk  <= '0';
92
      loop
93
         wait for (wb_clk_period/2);
94
         wb_clk  <= not wb_clk;
95
      end loop;
96
   end process;
97
 
98
 
99
 
100
 
101
   process
102
   begin
103
      sys_rst <= '1';
104
      wb_rst  <= '1';
105
      wait for ( sys_rst_length );
106
      wb_rst  <= not wb_rst;
107
      sys_rst <= not sys_rst;
108
      wait;
109
   end process;
110
 
111
 
112
   process
113
   begin
114
 
115
    wait until sys_rst = '0';
116
    -- wait until masters a ready
117
    wait for sys_clk_period * 10;
118
 
119
 
120
    while true loop
121
      for i in 0 to PART_LENGTH-1 loop
122
         SendSynch( tb_synch_out, SYNCH_PART );
123
 
124
         for j in 0 to SUBPART_LENGTH-1 loop
125
            SendSynch( tb_synch_out, SYNCH_SUBPART );
126
 
127
            for k in 0 to SUBSUBPART_LENGTH loop
128
               SendSynch( tb_synch_out, SYNCH_SUBSUBPART );
129
               wait for (SUBSUBPART_LENGTH * sys_clk_period );
130
            end loop;
131
 
132
 
133
         end loop;
134
 
135
 
136
      end loop;
137
 
138
   end loop;
139
 
140
   end process;
141
 
142
 
143
 
144
 
145
end architecture STRUCTURE;
146
 

powered by: WebSVN 2.1.0

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