aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/synth/sns01/tb_subs.vhdl
blob: 9844e8a11ad9e44066f103e577565f2501da1761 (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_subs is
end;

architecture behav of tb_subs 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 sub_u4u3u : std_logic_vector (3 downto 0) := "0000";
  signal sub_s4s3s : std_logic_vector (3 downto 0) := "0000";
  signal sub_u4s3s : std_logic_vector (4 downto 0) := "00000";
  signal sub_s4u3s : std_logic_vector (3 downto 0) := "0000";
  signal sub_u4iu : std_logic_vector (3 downto 0) := "0000";
  signal sub_iu3u : std_logic_vector (2 downto 0) := "000";
  signal sub_s4is : std_logic_vector (3 downto 0) := "0000";
  signal sub_is3s : std_logic_vector (2 downto 0) := "000";
  signal sub_u4lu : std_logic_vector (3 downto 0) := "0000";
  signal sub_lu3u : std_logic_vector (2 downto 0) := "000";
  signal sub_s4ls : std_logic_vector (3 downto 0) := "0000";
  signal sub_ls3s : std_logic_vector (2 downto 0) := "000";

  signal sub_u4u3v : std_logic_vector (3 downto 0) := "0000";
  signal sub_s4s3v : std_logic_vector (3 downto 0) := "0000";
  signal sub_u4s3v : std_logic_vector (4 downto 0) := "00000";
  signal sub_s4u3v : std_logic_vector (3 downto 0) := "0000";
  signal sub_u4iv : std_logic_vector (3 downto 0) := "0000";
  signal sub_iu3v : std_logic_vector (2 downto 0) := "000";
  signal sub_s4iv : std_logic_vector (3 downto 0) := "0000";
  signal sub_is3v : std_logic_vector (2 downto 0) := "000";
  signal sub_u4lv : std_logic_vector (3 downto 0) := "0000";
  signal sub_lu3v : std_logic_vector (2 downto 0) := "000";
  signal sub_s4lv : std_logic_vector (3 downto 0) := "0000";
  signal sub_ls3v : std_logic_vector (2 downto 0) := "000";
begin

  dut: entity work.subs
    port map (
      l4 => l4,
      r3 => r3,
      li => li,
      ri => ri,
      sub_u4u3u => sub_u4u3u,
      sub_s4s3s => sub_s4s3s,
      sub_u4s3s => sub_u4s3s,
      sub_s4u3s => sub_s4u3s,
      sub_u4iu => sub_u4iu,
      sub_iu3u => sub_iu3u,
      sub_s4is => sub_s4is,
      sub_is3s => sub_is3s,
      sub_u4lu => sub_u4lu,
      sub_lu3u => sub_lu3u,
      sub_s4ls => sub_s4ls,
      sub_ls3s => sub_ls3s,

      sub_u4u3v => sub_u4u3v,
      sub_s4s3v => sub_s4s3v,
      sub_u4s3v => sub_u4s3v,
      sub_s4u3v => sub_s4u3v,
      sub_u4iv => sub_u4iv,
      sub_iu3v => sub_iu3v,
      sub_s4iv => sub_s4iv,
      sub_is3v => sub_is3v,
      sub_u4lv => sub_u4lv,
      sub_lu3v => sub_lu3v,
      sub_s4lv => sub_s4lv,
      sub_ls3v => sub_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(sub_u4u3u);
        report "s4s3s: " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_s4s3s);
        report "u4s3s: " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_u4s3s);
        report "s4u3s: " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_s4u3s);
        report "u4iu:  " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_u4iu);
        report "iu3u:  " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_iu3u);
        report "s4is:  " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_s4is);
        report "is3s:  " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_is3s);
        report "u4lu:  " & integer'image(i) & " - " & integer'image(j mod 2) & " = "
          & to_string(sub_u4lu);
        report "lu3u:  " & integer'image(i mod 2) & " - " & integer'image(j) & " = "
          & to_string(sub_lu3u);
        report "s4ls:  " & integer'image(i) & " - " & integer'image(j mod 2) & " = "
          & to_string(sub_s4ls);
        report "ls3s:  " & integer'image(i mod 2) & " - " & integer'image(j) & " = "
          & to_string(sub_ls3s);

        ------

        report "u4u3v: " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_u4u3v);
        report "s4s3v: " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_s4s3v);
        report "u4s3v: " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_u4s3v);
        report "s4u3v: " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_s4u3v);
        report "u4iv:  " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_u4iv);
        report "iu3v:  " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_iu3v);
        report "s4iv:  " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_s4iv);
        report "is3v:  " & integer'image(i) & " - " & integer'image(j) & " = "
          & to_string(sub_is3v);
        report "u4lv:  " & integer'image(i) & " - " & integer'image(j mod 2) & " = "
          & to_string(sub_u4lv);
        report "lu3v:  " & integer'image(i mod 2) & " - " & integer'image(j) & " = "
          & to_string(sub_lu3v);
        report "s4lv:  " & integer'image(i) & " - " & integer'image(j mod 2) & " = "
          & to_string(sub_s4lv);
        report "ls3v:  " & integer'image(i mod 2) & " - " & integer'image(j) & " = "
          & to_string(sub_ls3v);
      end loop;
    end loop;
    wait;
  end process;
end behav;