@@ -18,12 +18,14 @@ package uart_pkg is
1818 type uart_master_t is record
1919 p_actor : actor_t;
2020 p_baud_rate : natural ;
21+ p_parity : natural ;
2122 p_idle_state : std_logic ;
22- end record ;
23+ end record uart_master_t ;
2324
2425 type uart_slave_t is record
2526 p_actor : actor_t;
2627 p_baud_rate : natural ;
28+ p_parity : natural ;
2729 p_idle_state : std_logic ;
2830 p_data_length : positive ;
2931 end record ;
@@ -37,12 +39,25 @@ package uart_pkg is
3739 uart_slave : uart_slave_t;
3840 baud_rate : natural );
3941
42+ -- 0 = no parity, 1 = odd parity, 2 = even parity
43+ procedure set_parity(signal net : inout network_t;
44+ uart_master : uart_master_t;
45+ parity : natural );
46+
47+ procedure set_parity(signal net : inout network_t;
48+ uart_slave : uart_slave_t;
49+ parity : natural );
50+
4051 constant default_baud_rate : natural := 115200 ;
4152 constant default_idle_state : std_logic := '1' ;
4253 constant default_data_length : positive := 8 ;
54+ constant default_parity : natural := 0 ;
55+
4356 impure function new_uart_master(initial_baud_rate : natural := default_baud_rate;
57+ initial_parity : natural := default_parity;
4458 idle_state : std_logic := default_idle_state) return uart_master_t;
4559 impure function new_uart_slave(initial_baud_rate : natural := default_baud_rate;
60+ initial_parity : natural := default_parity;
4661 idle_state : std_logic := default_idle_state;
4762 data_length : positive := default_data_length) return uart_slave_t;
4863
@@ -52,24 +67,37 @@ package uart_pkg is
5267 impure function as_sync(uart_slave : uart_slave_t) return sync_handle_t;
5368
5469 constant uart_set_baud_rate_msg : msg_type_t := new_msg_type(" uart set baud rate" );
70+
71+ constant uart_set_parity_msg : msg_type_t := new_msg_type(" uart set parity rate" );
72+
73+ function even_parity(data : std_logic_vector ) return std_logic ;
74+ function odd_parity (data : std_logic_vector ) return std_logic ;
75+
5576end package ;
5677
5778package body uart_pkg is
5879
5980 impure function new_uart_master(initial_baud_rate : natural := default_baud_rate;
81+ initial_parity : natural := default_parity;
6082 idle_state : std_logic := default_idle_state) return uart_master_t is
6183 begin
6284 return (p_actor => new_actor,
6385 p_baud_rate => initial_baud_rate,
86+ p_parity => initial_parity,
6487 p_idle_state => idle_state);
6588 end ;
6689
67- impure function new_uart_slave(initial_baud_rate : natural := default_baud_rate;
90+ impure function new_uart_slave(
91+ initial_baud_rate : natural := default_baud_rate;
92+ initial_parity : natural := default_parity;
6893 idle_state : std_logic := default_idle_state;
69- data_length : positive := default_data_length) return uart_slave_t is
94+ data_length : positive := default_data_length
95+ ) return uart_slave_t is
96+
7097 begin
7198 return (p_actor => new_actor,
7299 p_baud_rate => initial_baud_rate,
100+ p_parity => initial_parity,
73101 p_idle_state => idle_state,
74102 p_data_length => data_length);
75103 end ;
@@ -116,4 +144,39 @@ package body uart_pkg is
116144 begin
117145 set_baud_rate(net, uart_slave.p_actor, baud_rate);
118146 end ;
147+
148+ procedure set_parity(signal net : inout network_t;
149+ actor : actor_t;
150+ parity : natural ) is
151+ variable msg : msg_t := new_msg(uart_set_parity_msg);
152+ begin
153+ push(msg, parity);
154+ send(net, actor, msg);
155+ end ;
156+
157+ procedure set_parity(signal net : inout network_t;
158+ uart_master : uart_master_t;
159+ parity : natural ) is
160+ begin
161+ set_parity(net, uart_master.p_actor, parity);
162+ end ;
163+
164+ procedure set_parity(signal net : inout network_t;
165+ uart_slave : uart_slave_t;
166+ parity : natural ) is
167+ begin
168+ set_parity(net, uart_slave.p_actor, parity);
169+ end ;
170+
171+ function even_parity (data : std_logic_vector ) return std_logic is
172+ begin
173+ return xor data;
174+
175+ end function even_parity;
176+
177+ function odd_parity (data : std_logic_vector ) return std_logic is
178+ begin
179+
180+ return xnor data;
181+ end function odd_parity;
119182end package body ;
0 commit comments