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

Subversion Repositories modbus

[/] [modbus/] [trunk/] [enlace/] [rs232_receive_control.vhd] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 guanucolui
--  C:\USER\XILINX_2006\UART_RS232\RX_CTRL.vhd
2
--  VHDL code created by Xilinx's StateCAD 7.1i
3
--  Thu Oct 19 16:59:23 2006
4
 
5
--  This VHDL code (for use with Xilinx XST) was generated using: 
6
--  enumerated state assignment with structured code format.
7
--  Minimization is enabled,  implied else is disabled, 
8
--  and outputs are area optimized.
9
 
10
LIBRARY ieee;
11
USE ieee.std_logic_1164.all;
12
 
13
ENTITY RX_CTRL IS
14
        PORT (CLK,ctr_bits_eq_9,fd_rxd,last_sample,RESET,sampled_bit: IN std_logic;
15
                incr_ctr_bits,ld_parity_error,load_data,load_discrepancy,new_data,
16
                        reset_busy,reset_capture,reset_ctr_bits,reset_ctr_clock,rst_ce_ctr_clock,
17
                        rst_discrepancy,set_busy,set_capture,set_ce_ctr_clock,shift_enable,
18
                        start_error,stop_error : OUT std_logic);
19
END;
20
 
21
ARCHITECTURE BEHAVIOR OF RX_CTRL IS
22
        TYPE type_sreg IS (IDLE,CHECK_9_BITS,CHECK_START_BIT,CHECK_STOP_BIT,END_RECEIVING,
23
                SHIFT_BIT,START_BIT_ERROR,START_RECEIVING,STOP_BIT_ERROR,STORE_DATA,
24
                WAIT_NEXT_BIT,WAIT_STOP_BIT);
25
        SIGNAL sreg, next_sreg : type_sreg;
26
BEGIN
27
        PROCESS (CLK, RESET, next_sreg)
28
        BEGIN
29
                IF ( RESET='1' ) THEN
30
                        sreg <= IDLE;
31
                ELSIF CLK='1' AND CLK'event THEN
32
                        sreg <= next_sreg;
33
                END IF;
34
        END PROCESS;
35
 
36
        PROCESS (sreg,ctr_bits_eq_9,fd_rxd,last_sample,sampled_bit)
37
        BEGIN
38
                incr_ctr_bits <= '0'; ld_parity_error <= '0'; load_data <= '0';
39
                        load_discrepancy <= '0'; new_data <= '0'; reset_busy <= '0'; reset_capture <=
40
                         '0'; reset_ctr_bits <= '0'; reset_ctr_clock <= '0'; rst_ce_ctr_clock <= '0';
41
                         rst_discrepancy <= '0'; set_busy <= '0'; set_capture <= '0';
42
                        set_ce_ctr_clock <= '0'; shift_enable <= '0'; start_error <= '0'; stop_error
43
                        <= '0';
44
 
45
                next_sreg<=IDLE;
46
 
47
                IF NOT ( (sreg=CHECK_9_BITS) OR (sreg=CHECK_START_BIT) OR (
48
                        sreg=CHECK_STOP_BIT) OR (sreg=END_RECEIVING) OR (sreg=IDLE) OR (
49
                        sreg=SHIFT_BIT) OR (sreg=START_BIT_ERROR) OR (sreg=START_RECEIVING) OR (
50
                        sreg=STOP_BIT_ERROR) OR (sreg=STORE_DATA) OR (sreg=WAIT_NEXT_BIT) OR (
51
                        sreg=WAIT_STOP_BIT)) THEN next_sreg<=IDLE;
52
                        incr_ctr_bits<='0';
53
                        ld_parity_error<='0';
54
                        load_data<='0';
55
                        load_discrepancy<='0';
56
                        new_data<='0';
57
                        reset_busy<='0';
58
                        reset_capture<='0';
59
                        reset_ctr_bits<='0';
60
                        reset_ctr_clock<='0';
61
                        rst_ce_ctr_clock<='0';
62
                        rst_discrepancy<='0';
63
                        set_busy<='0';
64
                        set_capture<='0';
65
                        set_ce_ctr_clock<='0';
66
                        shift_enable<='0';
67
                        start_error<='0';
68
                        stop_error<='0';
69
                ELSE
70
                        CASE sreg IS
71
                                WHEN CHECK_9_BITS =>
72
                                        incr_ctr_bits<='0';
73
                                        ld_parity_error<='0';
74
                                        load_data<='0';
75
                                        load_discrepancy<='0';
76
                                        new_data<='0';
77
                                        reset_busy<='0';
78
                                        reset_capture<='0';
79
                                        reset_ctr_bits<='0';
80
                                        reset_ctr_clock<='0';
81
                                        rst_ce_ctr_clock<='0';
82
                                        set_busy<='0';
83
                                        set_capture<='0';
84
                                        set_ce_ctr_clock<='0';
85
                                        shift_enable<='0';
86
                                        start_error<='0';
87
                                        stop_error<='0';
88
                                        rst_discrepancy<='1';
89
                                        IF ( ctr_bits_eq_9='1' ) THEN
90
                                                next_sreg<=STORE_DATA;
91
                                         ELSE
92
                                                next_sreg<=WAIT_NEXT_BIT;
93
                                        END IF;
94
                                WHEN CHECK_START_BIT =>
95
                                        incr_ctr_bits<='0';
96
                                        ld_parity_error<='0';
97
                                        load_data<='0';
98
                                        load_discrepancy<='0';
99
                                        new_data<='0';
100
                                        reset_busy<='0';
101
                                        reset_capture<='0';
102
                                        reset_ctr_bits<='0';
103
                                        reset_ctr_clock<='0';
104
                                        rst_ce_ctr_clock<='0';
105
                                        rst_discrepancy<='0';
106
                                        set_busy<='0';
107
                                        set_capture<='0';
108
                                        set_ce_ctr_clock<='0';
109
                                        shift_enable<='0';
110
                                        start_error<='0';
111
                                        stop_error<='0';
112
                                        IF ( sampled_bit='0' ) THEN
113
                                                next_sreg<=WAIT_NEXT_BIT;
114
                                         ELSE
115
                                                next_sreg<=START_BIT_ERROR;
116
                                        END IF;
117
                                WHEN CHECK_STOP_BIT =>
118
                                        incr_ctr_bits<='0';
119
                                        ld_parity_error<='0';
120
                                        load_data<='0';
121
                                        load_discrepancy<='0';
122
                                        new_data<='0';
123
                                        reset_busy<='0';
124
                                        reset_capture<='0';
125
                                        reset_ctr_bits<='0';
126
                                        reset_ctr_clock<='0';
127
                                        rst_ce_ctr_clock<='0';
128
                                        rst_discrepancy<='0';
129
                                        set_busy<='0';
130
                                        set_capture<='0';
131
                                        set_ce_ctr_clock<='0';
132
                                        shift_enable<='0';
133
                                        start_error<='0';
134
                                        stop_error<='0';
135
                                        IF ( sampled_bit='1' ) THEN
136
                                                next_sreg<=END_RECEIVING;
137
                                         ELSE
138
                                                next_sreg<=STOP_BIT_ERROR;
139
                                        END IF;
140
                                WHEN END_RECEIVING =>
141
                                        incr_ctr_bits<='0';
142
                                        ld_parity_error<='0';
143
                                        load_data<='0';
144
                                        load_discrepancy<='0';
145
                                        rst_discrepancy<='0';
146
                                        set_busy<='0';
147
                                        set_capture<='0';
148
                                        set_ce_ctr_clock<='0';
149
                                        shift_enable<='0';
150
                                        start_error<='0';
151
                                        stop_error<='0';
152
                                        reset_capture<='1';
153
                                        rst_ce_ctr_clock<='1';
154
                                        reset_ctr_clock<='1';
155
                                        reset_ctr_bits<='1';
156
                                        new_data<='1';
157
                                        reset_busy<='1';
158
                                        next_sreg<=IDLE;
159
                                WHEN IDLE =>
160
                                        incr_ctr_bits<='0';
161
                                        ld_parity_error<='0';
162
                                        load_data<='0';
163
                                        load_discrepancy<='0';
164
                                        new_data<='0';
165
                                        reset_busy<='0';
166
                                        reset_capture<='0';
167
                                        reset_ctr_bits<='0';
168
                                        reset_ctr_clock<='0';
169
                                        rst_ce_ctr_clock<='0';
170
                                        rst_discrepancy<='0';
171
                                        set_busy<='0';
172
                                        set_capture<='0';
173
                                        set_ce_ctr_clock<='0';
174
                                        shift_enable<='0';
175
                                        start_error<='0';
176
                                        stop_error<='0';
177
                                        IF ( fd_rxd='1' ) THEN
178
                                                next_sreg<=START_RECEIVING;
179
                                         ELSE
180
                                                next_sreg<=IDLE;
181
                                        END IF;
182
                                WHEN SHIFT_BIT =>
183
                                        ld_parity_error<='0';
184
                                        load_data<='0';
185
                                        new_data<='0';
186
                                        reset_busy<='0';
187
                                        reset_capture<='0';
188
                                        reset_ctr_bits<='0';
189
                                        reset_ctr_clock<='0';
190
                                        rst_ce_ctr_clock<='0';
191
                                        rst_discrepancy<='0';
192
                                        set_busy<='0';
193
                                        set_capture<='0';
194
                                        set_ce_ctr_clock<='0';
195
                                        start_error<='0';
196
                                        stop_error<='0';
197
                                        shift_enable<='1';
198
                                        incr_ctr_bits<='1';
199
                                        load_discrepancy<='1';
200
                                        next_sreg<=CHECK_9_BITS;
201
                                WHEN START_BIT_ERROR =>
202
                                        incr_ctr_bits<='0';
203
                                        ld_parity_error<='0';
204
                                        load_data<='0';
205
                                        load_discrepancy<='0';
206
                                        new_data<='0';
207
                                        reset_ctr_bits<='0';
208
                                        rst_discrepancy<='0';
209
                                        set_busy<='0';
210
                                        set_capture<='0';
211
                                        set_ce_ctr_clock<='0';
212
                                        shift_enable<='0';
213
                                        stop_error<='0';
214
                                        reset_capture<='1';
215
                                        rst_ce_ctr_clock<='1';
216
                                        reset_ctr_clock<='1';
217
                                        start_error<='1';
218
                                        reset_busy<='1';
219
                                        next_sreg<=IDLE;
220
                                WHEN START_RECEIVING =>
221
                                        incr_ctr_bits<='0';
222
                                        ld_parity_error<='0';
223
                                        load_data<='0';
224
                                        load_discrepancy<='0';
225
                                        new_data<='0';
226
                                        reset_busy<='0';
227
                                        reset_capture<='0';
228
                                        reset_ctr_bits<='0';
229
                                        reset_ctr_clock<='0';
230
                                        rst_ce_ctr_clock<='0';
231
                                        rst_discrepancy<='0';
232
                                        shift_enable<='0';
233
                                        start_error<='0';
234
                                        stop_error<='0';
235
                                        set_capture<='1';
236
                                        set_ce_ctr_clock<='1';
237
                                        set_busy<='1';
238
                                        IF ( last_sample='1' ) THEN
239
                                                next_sreg<=CHECK_START_BIT;
240
                                         ELSE
241
                                                next_sreg<=START_RECEIVING;
242
                                        END IF;
243
                                WHEN STOP_BIT_ERROR =>
244
                                        incr_ctr_bits<='0';
245
                                        ld_parity_error<='0';
246
                                        load_data<='0';
247
                                        load_discrepancy<='0';
248
                                        new_data<='0';
249
                                        reset_busy<='0';
250
                                        reset_capture<='0';
251
                                        reset_ctr_bits<='0';
252
                                        reset_ctr_clock<='0';
253
                                        rst_ce_ctr_clock<='0';
254
                                        rst_discrepancy<='0';
255
                                        set_busy<='0';
256
                                        set_capture<='0';
257
                                        set_ce_ctr_clock<='0';
258
                                        shift_enable<='0';
259
                                        start_error<='0';
260
                                        stop_error<='1';
261
                                        next_sreg<=END_RECEIVING;
262
                                WHEN STORE_DATA =>
263
                                        incr_ctr_bits<='0';
264
                                        load_discrepancy<='0';
265
                                        new_data<='0';
266
                                        reset_busy<='0';
267
                                        reset_capture<='0';
268
                                        reset_ctr_bits<='0';
269
                                        reset_ctr_clock<='0';
270
                                        rst_ce_ctr_clock<='0';
271
                                        rst_discrepancy<='0';
272
                                        set_busy<='0';
273
                                        set_capture<='0';
274
                                        set_ce_ctr_clock<='0';
275
                                        shift_enable<='0';
276
                                        start_error<='0';
277
                                        stop_error<='0';
278
                                        ld_parity_error<='1';
279
                                        load_data<='1';
280
                                        next_sreg<=WAIT_STOP_BIT;
281
                                WHEN WAIT_NEXT_BIT =>
282
                                        incr_ctr_bits<='0';
283
                                        ld_parity_error<='0';
284
                                        load_data<='0';
285
                                        load_discrepancy<='0';
286
                                        new_data<='0';
287
                                        reset_busy<='0';
288
                                        reset_capture<='0';
289
                                        reset_ctr_bits<='0';
290
                                        reset_ctr_clock<='0';
291
                                        rst_ce_ctr_clock<='0';
292
                                        rst_discrepancy<='0';
293
                                        set_busy<='0';
294
                                        set_capture<='0';
295
                                        set_ce_ctr_clock<='0';
296
                                        shift_enable<='0';
297
                                        start_error<='0';
298
                                        stop_error<='0';
299
                                        IF ( last_sample='1' ) THEN
300
                                                next_sreg<=SHIFT_BIT;
301
                                         ELSE
302
                                                next_sreg<=WAIT_NEXT_BIT;
303
                                        END IF;
304
                                WHEN WAIT_STOP_BIT =>
305
                                        incr_ctr_bits<='0';
306
                                        ld_parity_error<='0';
307
                                        load_data<='0';
308
                                        load_discrepancy<='0';
309
                                        new_data<='0';
310
                                        reset_busy<='0';
311
                                        reset_capture<='0';
312
                                        reset_ctr_bits<='0';
313
                                        reset_ctr_clock<='0';
314
                                        rst_ce_ctr_clock<='0';
315
                                        rst_discrepancy<='0';
316
                                        set_busy<='0';
317
                                        set_capture<='0';
318
                                        set_ce_ctr_clock<='0';
319
                                        shift_enable<='0';
320
                                        start_error<='0';
321
                                        stop_error<='0';
322
                                        IF ( last_sample='1' ) THEN
323
                                                next_sreg<=CHECK_STOP_BIT;
324
                                         ELSE
325
                                                next_sreg<=WAIT_STOP_BIT;
326
                                        END IF;
327
                                WHEN OTHERS =>
328
                        END CASE;
329
                END IF;
330
        END PROCESS;
331
END BEHAVIOR;

powered by: WebSVN 2.1.0

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