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

Subversion Repositories plb2wbbridge

[/] [plb2wbbridge/] [trunk/] [systems/] [test_system_sim/] [wb_irqs/] [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
      PLB2WB_IRQ_pin       : out std_logic;
34
      wb_pic_int_i_pin     : in  std_logic_vector( 0 to 3 )
35
    );
36
  end component;
37
 
38
 
39
   signal sys_clk : std_logic;
40
   signal sys_rst : std_logic := '1';
41
   signal wb_clk  : std_logic;
42
   signal wb_rst  : std_logic;
43
   signal plb_irq : std_logic;
44
   signal wb_irq  : std_logic_vector( 0 to 3 );
45
 
46
   signal to_synch_in       : std_logic_vector( 0 to 31 );
47
   signal from_synch_out    : std_logic_vector( 0 to 31 );
48
   signal tb_synch_out      : std_logic_vector( 0 to 31 )   := ( others => '0' );
49
 
50
 
51
   procedure SendSynch( signal synch_out : OUT std_logic_vector;
52
                                COMMAND :     integer ) is
53
   begin
54
      synch_out( COMMAND ) <= '1';
55
      wait for sys_clk_period*1;
56
      synch_out( COMMAND ) <= '0';
57
   end procedure SendSynch;
58
 
59
 
60
begin
61
 
62
   to_synch_in <= from_synch_out or tb_synch_out;
63
 
64
 
65
 
66
   dut : system
67
      port map (
68
         sys_clk_pin          => sys_clk,
69
         sys_rst_pin          => sys_rst,
70
         to_synch_in_pin      => to_synch_in,
71
         from_synch_out_pin   => from_synch_out,
72
         wb_clk_pin           => wb_clk,
73
         wb_rst_pin           => wb_rst,
74
         PLB2WB_IRQ_pin       => plb_irq,
75
         wb_pic_int_i_pin     => wb_irq
76
      );
77
 
78
 
79
   --
80
   -- generate plb-clk
81
   -- 
82
   process
83
   begin
84
      sys_clk <= '0';
85
      loop
86
         wait for (sys_clk_period/2);
87
         sys_clk <= not sys_clk;
88
      end loop;
89
   end process;
90
 
91
 
92
   --
93
   --
94
   --
95
   process
96
   begin
97
      wb_clk  <= '0';
98
      loop
99
         wait for (wb_clk_period/2);
100
         wb_clk  <= not wb_clk;
101
      end loop;
102
   end process;
103
 
104
 
105
 
106
 
107
   process
108
   begin
109
      sys_rst <= '1';
110
      wb_rst  <= '1';
111
      wait for ( sys_rst_length );
112
      wb_rst  <= not wb_rst;
113
      sys_rst <= not sys_rst;
114
      wait;
115
   end process;
116
 
117
 
118
 
119
   process
120
   begin
121
      wb_irq <= ( others => '0' );
122
      wait until sys_rst = '0';
123
 
124
      wait for wb_clk_period * 18;
125
      wb_irq(0) <= '1';
126
      wait for wb_clk_period * 3;
127
      wb_irq(0) <= '0';
128
      wait for wb_clk_period * 1;
129
      wb_irq(2) <= '1';
130
      wait for wb_clk_period * 1;
131
      wb_irq(2) <= '0';
132
      wait for wb_clk_period * 10;
133
 
134
      SendSynch( tb_synch_out, SYNCH_PART );
135
 
136
      wait for wb_clk_period * 20;
137
      wb_irq(1) <= '1';
138
      wait for wb_clk_period * 3;
139
      wb_irq(1) <= '0';
140
      wait for wb_clk_period * 10;
141
 
142
      SendSynch( tb_synch_out, SYNCH_PART );
143
 
144
      wait for wb_clk_period * 20;
145
      wb_irq(2) <= '1';
146
      wait for wb_clk_period * 3;
147
      wb_irq(2) <= '0';
148
      wait for wb_clk_period * 10;
149
 
150
      SendSynch( tb_synch_out, SYNCH_PART );
151
 
152
      wait for wb_clk_period * 20;
153
      wb_irq(3) <= '1';
154
      wait for wb_clk_period * 3;
155
      wb_irq(3) <= '0';
156
      wait for wb_clk_period * 10;
157
 
158
      SendSynch( tb_synch_out, SYNCH_PART );
159
 
160
   end process;
161
 
162
 
163
end architecture STRUCTURE;
164
 

powered by: WebSVN 2.1.0

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