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

Subversion Repositories serial_div_uu

[/] [serial_div_uu/] [trunk/] [testbench.vhd] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 7 jclaytons
-------------------------------------------------------------------------------
2
--
3
-- Filename:      testbench.vhd
4
-- Author:        David Sala
5
-- Description:   Divider Testbench
6
-- Comment:
7
--
8
-- Version history:
9
-------------------------------------------------------------------------------
10
 
11
LIBRARY IEEE;
12
USE IEEE.std_logic_1164.ALL;
13
USE IEEE.std_logic_signed.ALL;
14
 
15
-------------------------------------------------------------------------------
16
-- ENTITY
17
-------------------------------------------------------------------------------
18
entity testbench is
19
end testbench;
20
 
21
-------------------------------------------------------------------------------
22
-- ARCHITECTURE
23
-------------------------------------------------------------------------------
24
architecture behavioral of testbench is
25
 
26
 
27
 
28
component serial_divide_uu
29
  generic ( M_PP : integer := 16;           -- Size of dividend
30
            N_PP : integer := 8;            -- Size of divisor
31
            R_PP : integer := 0;            -- Size of remainder
32
            S_PP : integer := 0;            -- Skip this many bits (known leading zeros)
33
            HELD_OUTPUT_PP : integer := 0); -- Set to 1 if stable output should be held
34
                                            -- from previous operation, during current
35
                                            -- operation.  Using this option will increase
36
                                            -- the resource utilization (costs extra
37
                                            -- d-flip-flops.)
38
    port(   clk_i      : in  std_logic;
39
            clk_en_i   : in  std_logic;
40
            rst_i      : in  std_logic;
41
            divide_i   : in  std_logic;
42
            dividend_i : in  std_logic_vector(M_PP-1 downto 0);
43
            divisor_i  : in  std_logic_vector(N_PP-1 downto 0);
44
            quotient_o : out std_logic_vector(M_PP+R_PP-S_PP-1 downto 0);
45
            done_o     : out std_logic
46
    );
47
end component;
48
 
49
 
50
 
51
signal     clk_i      : std_logic;
52
signal     clk_en_i   : std_logic;
53
signal     rst_i      : std_logic;
54
signal     divide_i   : std_logic;
55
signal     dividend_i : std_logic_vector(20 downto 0);
56
signal     divisor_i  : std_logic_vector(20 downto 0);
57
signal     quotient_o : std_logic_vector(20 downto 0);
58
signal     done_o     : std_logic;
59
 
60
signal     expected : std_logic_vector(20 downto 0);
61
 
62
 
63
 
64
begin
65
 
66
I_serial_divide_uu: serial_divide_uu
67
  generic map ( M_PP => 21,
68
                N_PP => 21,
69
                R_PP => 0,
70
                S_PP => 0,
71
                HELD_OUTPUT_PP => 1)
72
    port map ( clk_i      => clk_i,
73
               clk_en_i   => clk_en_i,
74
               rst_i      => rst_i,
75
               divide_i   => divide_i,
76
               dividend_i => dividend_i,
77
               divisor_i  => divisor_i,
78
               quotient_o => quotient_o,
79
               done_o     => done_o );
80
 
81
clk_en_i <='1';
82
 
83
stim_gen: process
84
begin
85
 
86
        dividend_i <= "000000011100000110100"; -- 14388;
87
        divisor_i  <= "000000000000000000000"; -- 64
88
     expected <= "000000000000011100000"; -- 224;
89
        wait for 10000 ns;
90
        dividend_i <= "000000010111111101111"; -- 12271;
91
        divisor_i <= "000000000000001111101"; -- 125;
92
        expected <= "000000000000001100010"; -- 98;
93
        wait for 10000 ns;
94
        dividend_i <= "000000011100000110100"; -- 14388;
95
        divisor_i <= "000000000000010111010"; -- 186;
96
        expected <= "000000000000001001101"; -- 77;
97
        wait for 10000 ns;
98
        dividend_i <= "101100100010001111100"; -- 1459324;
99
        divisor_i <=  "000010100111001110101"; -- 85621;
100
      expected <= "000000000000000010001"; -- 17;
101
        wait for 10000 ns;
102
        dividend_i <= "000000011100000110100"; -- 14388;
103
        divisor_i <= "000000000000010111010"; -- 186;
104
        expected <= "000000000000001001101"; -- 77;
105
        wait for 100 ns;
106
        wait;
107
end process;
108
 
109
 
110
stim_gen2: process
111
begin
112
    divide_i <= '0';
113
        wait for 100 ns;
114
    divide_i <= '1';
115
        wait for 100 ns;
116
    divide_i <= '0';
117
        wait for 10000 ns;
118
    divide_i <= '1';
119
        wait for 100 ns;
120
    divide_i <= '0';
121
        wait for 10000 ns;
122
    divide_i <= '1';
123
        wait for 100 ns;
124
    divide_i <= '0';
125
        wait for 10000 ns;
126
    divide_i <= '1';
127
        wait for 100 ns;
128
    divide_i <= '0';
129
        wait;
130
end process;
131
 
132
 
133
res_gen: process
134
begin
135
  rst_i <= '1';
136
  wait for 10 ns;
137
  rst_i <= '0';
138
  wait;
139
end process res_gen;
140
 
141
clk_gen: process
142
begin
143
        clk_i <= '0';
144
        wait for 50 ns;
145
        clk_i <= '1';
146
        wait for 50 ns;
147
end process;
148
 
149
end behavioral;

powered by: WebSVN 2.1.0

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