aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/synth/sns01/tb_adds.vhdl
blob: 936559c8d107fff1b68b250b06f674bf755c027c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

entity tb_adds is
end;

architecture behav of tb_adds is
  type sl_map_type is array (std_ulogic) of character;
  constant sl_map : sl_map_type := "UX01ZWLH-";

  function to_string(v : std_logic_vector) return string
  is
    alias av : std_logic_vector(1 to v'length) is v;
    variable res : string (1 to v'length);
  begin
    for i in res'range loop
      res (i) := sl_map (av (i));
    end loop;
    return res;
  end to_string;

  signal li : integer := 0;
  signal ri : integer := 0;
  signal l4 : std_logic_vector (3 downto 0) := "0000";
  signal r3 : std_logic_vector (2 downto 0) := "000";
  signal add_u4u3u : std_logic_vector (3 downto 0) := "0000";
  signal add_s4s3s : std_logic_vector (3 downto 0) := "0000";
  signal add_u4s3s : std_logic_vector (4 downto 0) := "00000";
  signal add_s4u3s : std_logic_vector (3 downto 0) := "0000";
  signal add_u4iu : std_logic_vector (3 downto 0) := "0000";
  signal add_iu3u : std_logic_vector (2 downto 0) := "000";
  signal add_s4is : std_logic_vector (3 downto 0) := "0000";
  signal add_is3s : std_logic_vector (2 downto 0) := "000";
  signal add_u4lu : std_logic_vector (3 downto 0) := "0000";
  signal add_lu3u : std_logic_vector (2 downto 0) := "000";
  signal add_s4ls : std_logic_vector (3 downto 0) := "0000";
  signal add_ls3s : std_logic_vector (2 downto 0) := "000";

  signal add_u4u3v : std_logic_vector (3 downto 0) := "0000";
  signal add_s4s3v : std_logic_vector (3 downto 0) := "0000";
  signal add_u4s3v : std_logic_vector (4 downto 0) := "00000";
  signal add_s4u3v : std_logic_vector (3 downto 0) := "0000";
  signal add_u4iv : std_logic_vector (3 downto 0) := "0000";
  signal add_iu3v : std_logic_vector (2 downto 0) := "000";
  signal add_s4iv : std_logic_vector (3 downto 0) := "0000";
  signal add_is3v : std_logic_vector (2 downto 0) := "000";
  signal add_u4lv : std_logic_vector (3 downto 0) := "0000";
  signal add_lu3v : std_logic_vector (2 downto 0) := "000";
  signal add_s4lv : std_logic_vector (3 downto 0) := "0000";
  signal add_ls3v : std_logic_vector (2 downto 0) := "000";
begin

  dut: entity work.adds
    port map (
      l4 => l4,
      r3 => r3,
      li => li,
      ri => ri,
      add_u4u3u => add_u4u3u,
      add_s4s3s => add_s4s3s,
      add_u4s3s => add_u4s3s,
      add_s4u3s => add_s4u3s,
      add_u4iu => add_u4iu,
      add_iu3u => add_iu3u,
      add_s4is => add_s4is,
      add_is3s => add_is3s,
      add_u4lu => add_u4lu,
      add_lu3u => add_lu3u,
      add_s4ls => add_s4ls,
      add_ls3s => add_ls3s,

      add_u4u3v => add_u4u3v,
      add_s4s3v => add_s4s3v,
      add_u4s3v => add_u4s3v,
      add_s4u3v => add_s4u3v,
      add_u4iv => add_u4iv,
      add_iu3v => add_iu3v,
      add_s4iv => add_s4iv,
      add_is3v => add_is3v,
      add_u4lv => add_u4lv,
      add_lu3v => add_lu3v,
      add_s4lv => add_s4lv,
      add_ls3v => add_ls3v);

  process
  begin
    for i in -8 to 7 loop
      li <= i;
      l4 <= conv_std_logic_vector (i, 4);
      for j in -4 to 3 loop
        r3 <= conv_std_logic_vector (j, 3);
        ri <= j;
        wait for 1 ns;
        report "u4u3u: " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_u4u3u);
        report "s4s3s: " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_s4s3s);
        report "u4s3s: " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_u4s3s);
        report "s4u3s: " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_s4u3s);
        report "u4iu:  " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_u4iu);
        report "iu3u:  " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_iu3u);
        report "s4is:  " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_s4is);
        report "is3s:  " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_is3s);
        report "u4lu:  " & integer'image(i) & " + " & integer'image(j mod 2) & " = "
          & to_string(add_u4lu);
        report "lu3u:  " & integer'image(i mod 2) & " + " & integer'image(j) & " = "
          & to_string(add_lu3u);
        report "s4ls:  " & integer'image(i) & " + " & integer'image(j mod 2) & " = "
          & to_string(add_s4ls);
        report "ls3s:  " & integer'image(i mod 2) & " + " & integer'image(j) & " = "
          & to_string(add_ls3s);

        ------

        report "u4u3v: " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_u4u3v);
        report "s4s3v: " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_s4s3v);
        report "u4s3v: " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_u4s3v);
        report "s4u3v: " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_s4u3v);
        report "u4iv:  " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_u4iv);
        report "iu3v:  " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_iu3v);
        report "s4iv:  " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_s4iv);
        report "is3v:  " & integer'image(i) & " + " & integer'image(j) & " = "
          & to_string(add_is3v);
        report "u4lv:  " & integer'image(i) & " + " & integer'image(j mod 2) & " = "
          & to_string(add_u4lv);
        report "lu3v:  " & integer'image(i mod 2) & " + " & integer'image(j) & " = "
          & to_string(add_lu3v);
        report "s4lv:  " & integer'image(i) & " + " & integer'image(j mod 2) & " = "
          & to_string(add_s4lv);
        report "ls3v:  " & integer'image(i mod 2) & " + " & integer'image(j) & " = "
          & to_string(add_ls3v);
      end loop;
    end loop;
    wait;
  end process;
end behav;