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

Subversion Repositories socgen

[/] [socgen/] [trunk/] [common/] [opencores.org/] [Testbench/] [bfms/] [uart_model/] [rtl/] [verilog/] [top.rtl] - Blame information for rev 133

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 131 jt_eaton
 
2
 
3
reg              rx_parity_enable;               // 0 = no parity bit sent; 1= parity bit sent
4
reg              rx_parity    ;
5
reg              rx_force_parity    ;
6
reg              rx_stop_value;                  // value out for stop bit
7
reg              rx_start_detect;
8
reg [7:0]        rx_shift_buffer;
9
reg              rx_parity_calc;
10
reg              rx_parity_samp;
11
reg              rx_parity_error;
12
reg              rx_frame_err;
13
reg              exp_rx_frame_err;
14
reg              mask_rx_frame_err;
15
 
16
 
17
reg              rx_frame_rdy;
18
 
19
 
20
reg              rx_baud_enable;
21
wire             rx_stop_cnt;
22
wire             rx_last_cnt;
23
wire [7:0]       next_rx_shift_buffer;
24
wire             next_rx_parity_calc;
25
wire             next_rx_parity_samp;
26
wire             next_rx_frame_err;
27
 
28
 
29
reg              rxd_pad_sig;
30
reg [1:0]        rx_rdy_del;
31
reg [SIZE-1:0]   rx_baudgen;
32
reg              edge_enable;
33
reg  [SIZE-1:0]  divide_cnt;
34
 
35
 
36
   wire xmit_enable;
37
reg         txd_parity_enable;
38
reg         txd_force_parity;
39
reg         txd_parity;
40
reg         txd_load;
41
reg         txd_break;
42
reg  [7:0]  txd_data_in;
43
wire        txd_buffer_empty;
44
 
45
 
46
//
47
//   watch for start bit
48
//
49
 
50
 
51
 
52
always@(posedge clk)
53
  if(reset)
54
  begin
55
   rx_parity_enable     <= 1'b0;
56
   rx_parity            <= 1'b0;
57
   rx_force_parity      <= 1'b0;
58
   rx_stop_value        <= 1'b1;
59
   exp_rx_frame_err     <= 1'b0;
60
   exp_rx_parity_err    <= 1'b0;
61
   exp_rx_shift_buffer  <= 8'h00;
62
   mask_rx_frame_err    <= 1'b0;
63
   mask_rx_parity_err   <= 1'b0;
64
   mask_rx_shift_buffer <= 8'h00;
65
   txd_parity_enable    <= 1'b0;
66
   txd_force_parity     <= 1'b0;
67
   txd_parity           <= 1'b0;
68
   txd_load             <= 1'b0;
69
   txd_break            <= 1'b0;
70
   txd_data_in          <= 8'h00;
71
  end
72
 
73
 
74
 
75
 
76 133 jt_eaton
 
77 131 jt_eaton
wire    prb_rx_frame_err;
78
 
79
assign  prb_rx_shift_buffer =  rx_shift_buffer;
80
assign  prb_rx_frame_err    =  rx_frame_err;
81
assign  prb_rx_parity_err   =  rx_parity_error;
82 133 jt_eaton
assign  drv_rx_shift_buffer =  8'bzzzzzzzz;
83
assign  drv_rx_parity_err   =  1'bz;
84 131 jt_eaton
 
85 133 jt_eaton
/*
86 131 jt_eaton
io_probe_def
87
#(.MESG   ("uart data receive error"),
88
  .WIDTH  (8)
89
  )
90
rx_shift_buffer_prb
91
(
92
  .clk           ( clk ),
93 133 jt_eaton
  .drive_value   ( drv_rx_shift_buffer ),
94
  .expected_value( exp_rx_shift_buffer ),
95 131 jt_eaton
  .mask          ( mask_rx_shift_buffer),
96 133 jt_eaton
  .signal        ( prb_rx_shift_buffer )
97 131 jt_eaton
);
98
 
99
 
100
io_probe_def
101
#(.MESG   ("uart parity error"))
102
rx_parity_err_prb
103
(
104
  .clk           ( clk ),
105 133 jt_eaton
  .drive_value   ( drv_rx_parity_err ),
106
  .expected_value( exp_rx_parity_err ),
107 131 jt_eaton
  .mask          ( mask_rx_parity_err),
108 133 jt_eaton
  .signal        ( prb_rx_parity_err )
109 131 jt_eaton
);
110
 
111 133 jt_eaton
*/
112 131 jt_eaton
 
113
 
114
 
115
 
116
 
117
 
118
 
119
 
120
 
121
 
122
always@(posedge clk)
123
if(reset)                 rx_baudgen <= CLKCNT;
124
else
125
if(rx_baudgen == 4'h0)    rx_baudgen <= CLKCNT;
126
else                      rx_baudgen <= rx_baudgen - 1'h1;
127
 
128
 
129
 
130
always@(posedge clk)
131
if(reset)                 edge_enable <= 1'b0;
132
else                      edge_enable <= (rx_baudgen == {SIZE{1'b0}});
133
 
134
 
135
 
136
 
137
 
138
 
139
always@(posedge clk)
140
if(reset)                                              rxd_pad_sig <= 1'b1;
141
else                                                   rxd_pad_sig <= txd_in;
142
 
143
 
144
always@(posedge clk)
145
if(reset)                                              rx_start_detect <= 1'b0;
146
else
147
if(rx_start_detect)
148
  begin
149
    if(rx_stop_cnt  && edge_enable )                      rx_start_detect <= !rxd_pad_sig;
150
    else
151
    if(rx_last_cnt)                                       rx_start_detect <= 1'b0;
152
    else                                               rx_start_detect <= 1'b1;
153
  end
154
else
155
if(!rxd_pad_sig )                                      rx_start_detect <= 1'b1;
156
else                                                   rx_start_detect <= rx_start_detect;
157
 
158
 
159
always@(posedge clk)
160
  if(reset)
161
    begin
162
    rx_frame_rdy <= 1'b0;
163
    rx_rdy_del   <= 2'b00;
164
    end
165
  else
166
    begin
167
    rx_frame_rdy <=  rx_rdy_del[1] ;
168
    rx_rdy_del   <=  {rx_rdy_del[0],rx_last_cnt};
169
    end
170
 
171
 
172
uart_model_serial_rcvr
173
#(.WIDTH(8),  .SIZE(4) )
174
serial_rcvr
175
 (
176
     .clk              ( clk                ),
177
     .reset            ( reset              ),
178
     .edge_enable      ( rx_baud_enable        ),
179
     .parity_enable    ( rx_parity_enable      ),
180
     .parity_type      ( {rx_force_parity, rx_parity }    ),
181
     .stop_cnt         ( rx_stop_cnt           ),
182
     .last_cnt         ( rx_last_cnt           ),
183
     .stop_value       ( rx_stop_value         ),
184
     .ser_in           ( txd_in             ),
185
     .shift_buffer     ( next_rx_shift_buffer  ),
186
     .parity_calc      ( next_rx_parity_calc   ),
187
     .parity_samp      ( next_rx_parity_samp   ),
188
     .frame_err        ( next_rx_frame_err     )
189
);
190
 
191
 
192
 
193
 
194
 
195
 
196
 
197
 
198
always@(posedge clk)
199
  if( reset || (!rx_start_detect))    rx_baud_enable    <= 1'b0;
200
  else
201
  if(!edge_enable)                    rx_baud_enable    <= 1'b0;
202
  else                                rx_baud_enable    <=  ( divide_cnt == 4'b1000 );
203
 
204
 
205
 
206
always@(posedge clk)
207
  if( reset || (!rx_start_detect))    divide_cnt    <= 4'b1111;
208
  else
209
  if(!edge_enable)                    divide_cnt    <= divide_cnt;
210
  else
211
  if(!(|divide_cnt))                  divide_cnt    <= 4'b1111;
212
  else                                divide_cnt    <= divide_cnt - 'b1;
213
 
214
 
215
 
216
 
217
 
218
 
219
always@(posedge clk)
220
  if(reset)
221
     begin
222
          rx_shift_buffer   <=  8'h00;
223
          rx_parity_calc    <=  1'b0;
224
          rx_parity_samp    <=  1'b0;
225
          rx_parity_error   <=  1'b0;
226
          rx_frame_err      <=  1'b0;
227
     end
228
  else
229
  if(rx_last_cnt )
230
      begin
231
          rx_shift_buffer   <=  next_rx_shift_buffer;
232
          rx_parity_calc    <=  next_rx_parity_calc;
233
          rx_parity_samp    <=  next_rx_parity_samp;
234
          rx_parity_error   <=  (next_rx_parity_samp ^ next_rx_parity_calc) && rx_parity_enable;
235
          rx_frame_err      <=  next_rx_frame_err;
236
      end
237
  else
238
     begin
239
          rx_shift_buffer   <=  rx_shift_buffer;
240
          rx_parity_calc    <=  rx_parity_calc;
241
          rx_parity_samp    <=  rx_parity_samp;
242
          rx_parity_error   <=  rx_parity_error;
243
          rx_frame_err      <=  rx_frame_err;
244
      end
245
 
246
 
247
/////////////////  Xmit
248
 
249
 
250
 
251
 
252
 
253
 
254
 
255
 
256
 
257
 
258
 
259
uart_model_divider
260
#(.SIZE(4))
261
x_divider  (
262
         .clk             ( clk             ),
263
         .reset           ( reset           ),
264
         .divider_in      ( 4'b1111         ),
265
         .enable          ( edge_enable     ),
266
         .divider_out     ( xmit_enable     )
267
         );
268
 
269
 
270
 
271
 
272
 
273
uart_model_serial_xmit
274
serial_xmit (
275
               .clk              ( clk                              ),
276
               .reset            ( reset                            ),
277
               .edge_enable      ( xmit_enable                      ),
278
               .parity_enable    ( txd_parity_enable                ),
279
               .two_stop_enable  ( 1'b0                             ),
280
               .parity_type      ( {txd_force_parity, txd_parity }  ),
281
               .load             ( txd_load                         ),
282
               .start_value      ( 1'b0                             ),
283
               .stop_value       (!txd_break                        ),
284
               .data             ( txd_data_in                      ),
285
               .buffer_empty     ( txd_buffer_empty                 ),
286
               .ser_out          ( rxd_out                          )
287
                );
288
 
289
 
290
 
291
 
292
 

powered by: WebSVN 2.1.0

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