Finally some inline documentation.
[bos2k9.git] / fhw_rs232_t / rs232_globals_parity_t.vhd
1 -----------------------------------------------------------------------
2 -- Copyright (c) 2009 Malte S. Stretz <http://msquadrat.de> 
3 --
4 -- Testing the parity generator.
5 -----------------------------------------------------------------------
6 -- This entity is part of the following library:
7 -- pragma library fhw_rs232_t
8 library fhw_rs232_t;
9 library fhw_rs232;
10 use fhw_rs232.rs232_globals_p.all;
11
12 library ieee;
13 use ieee.std_logic_1164.all;
14 use ieee.numeric_std.all;
15
16 library stefanvhdl;
17 use stefanvhdl.txt_util.all;
18
19 -----------------------------------------------------------------------
20
21 entity rs232_globals_parity_t is
22 end rs232_globals_parity_t;
23
24 architecture test of rs232_globals_parity_t is
25   -- The first parameter is the `word` to calculate the parities (both 
26   -- even and odd) of, the second is the `expect`ed value for even parity.
27   procedure t(
28     word   : in std_logic_vector;
29     expect : in std_logic) is
30     variable e_p_v, e_e_v : std_logic;
31     variable o_p_v, o_e_v : std_logic;
32   begin
33     e_e_v := expect; o_e_v := not expect;
34     o_p_v := get_parity(word, '0'); assert o_p_v = o_e_v report "wrong O parity for " & str(word) & ": " & str(o_p_v) & " != " & str(o_e_v);
35     e_p_v := get_parity(word, '1'); assert e_p_v = e_e_v report "wrong E parity for " & str(word) & ": " & str(e_p_v) & " != " & str(e_e_v);
36   end t;
37 begin
38   -- We'll test the parity for 1, 2, 3 and 4 bit words.  That includes
39   -- the shortest possible word lengths with even and odd number of
40   -- digits and the next two lengths.  Everything else doesn't make a 
41   -- difference.
42
43   -- word - expected
44   -------------------
45   -- 1 bit
46   t("0",    '0');
47   t("1",    '1');
48   -- 2 bit
49   t("00",   '0');
50   t("01",   '1');
51   t("10",   '1');
52   t("11",   '0');
53   -- 3 bit
54   t("000",  '0');
55   t("001",  '1');
56   t("010",  '1');
57   t("011",  '0');
58   t("100",  '1');
59   t("101",  '0');
60   t("110",  '0');
61   t("111",  '1');
62   -- 4 bit
63   t("0000", '0');
64   t("0001", '1');
65   t("0010", '1');
66   t("0011", '0');
67   t("0100", '1');
68   t("0101", '0');
69   t("0110", '0');
70   t("0111", '1');
71   t("1000", '1');
72   t("1001", '0');
73   t("1010", '0');
74   t("1011", '1');
75   t("1100", '0');
76   t("1101", '1');
77   t("1110", '1');
78   t("1111", '0');
79 end test;