41
41
module glip_uart_toplevel
42
42
#(parameter FREQ = 32'hx ,
43
43
parameter BAUD = 115200 ,
44
+ parameter WIDTH = 8 ,
44
45
parameter XILINX_TARGET_DEVICE = "7SERIES" )
45
46
(
46
47
// Clock & Reset
47
- input clk_io,
48
- input clk_logic,
49
- input rst,
48
+ input clk_io,
49
+ input clk_logic,
50
+ input rst,
50
51
51
52
// GLIP FIFO Interface
52
- input [7 :0 ] fifo_out_data,
53
- input fifo_out_valid,
54
- output fifo_out_ready,
55
- output [7 :0 ] fifo_in_data,
56
- output fifo_in_valid,
57
- input fifo_in_ready,
53
+ input [WIDTH - 1 :0 ] fifo_out_data,
54
+ input fifo_out_valid,
55
+ output fifo_out_ready,
56
+ output [WIDTH - 1 :0 ] fifo_in_data,
57
+ output fifo_in_valid,
58
+ input fifo_in_ready,
58
59
59
60
// GLIP Control Interface
60
- output logic_rst,
61
- output com_rst,
61
+ output logic_rst,
62
+ output com_rst,
62
63
63
64
// UART Interface
64
- input uart_rx,
65
- output uart_tx,
66
- input uart_cts,
67
- output uart_rts,
65
+ input uart_rx,
66
+ output uart_tx,
67
+ input uart_cts,
68
+ output uart_rts,
68
69
69
70
// Error signal if failure on the line
70
- output reg error
71
+ output reg error
71
72
);
72
73
74
+ wire [7 :0 ] fifo_out_data_scale;
75
+ wire fifo_out_valid_scale;
76
+ wire fifo_out_ready_scale;
77
+ wire [7 :0 ] fifo_in_data_scale;
78
+ wire fifo_in_valid_scale;
79
+ wire fifo_in_ready_scale;
80
+
73
81
wire [7 :0 ] ingress_in_data;
74
82
wire ingress_in_valid;
75
83
wire ingress_in_ready;
@@ -99,9 +107,9 @@ module glip_uart_toplevel
99
107
assign ingress_out_ready = ~ in_buffer_almost_full;
100
108
assign ingress_buffer_valid = ~ in_buffer_empty;
101
109
assign ingress_buffer_ready = ~ in_fifo_full;
102
- assign fifo_in_valid = ~ in_fifo_empty;
110
+ assign fifo_in_valid_scale = ~ in_fifo_empty;
103
111
assign egress_in_valid = ~ out_fifo_empty;
104
- assign fifo_out_ready = ~ out_fifo_full;
112
+ assign fifo_out_ready_scale = ~ out_fifo_full;
105
113
106
114
assign uart_rts = 0 ;
107
115
@@ -116,6 +124,40 @@ module glip_uart_toplevel
116
124
end
117
125
end
118
126
127
+ generate
128
+ if (WIDTH == 8 ) begin
129
+ assign fifo_out_data_scale = fifo_out_data;
130
+ assign fifo_out_valid_scale = fifo_out_valid;
131
+ assign fifo_out_ready = fifo_out_ready_scale;
132
+ assign fifo_in_data = fifo_in_data_scale;
133
+ assign fifo_in_valid = fifo_in_valid_scale;
134
+ assign fifo_in_ready_scale = fifo_in_ready;
135
+ end else if (WIDTH == 16 ) begin
136
+ glip_upscale
137
+ #(.IN_SIZE(8 ))
138
+ u_upscale(.clk (clk_io),
139
+ .rst (com_rst),
140
+ .in_data (fifo_in_data_scale),
141
+ .in_valid (fifo_in_valid_scale),
142
+ .in_ready (fifo_in_ready_scale),
143
+ .out_data (fifo_in_data),
144
+ .out_valid (fifo_in_valid),
145
+ .out_ready (fifo_in_ready));
146
+
147
+ glip_downscale
148
+ #(.OUT_SIZE(8 ))
149
+ u_downscale(.clk (clk_io),
150
+ .rst (com_rst),
151
+ .in_data (fifo_out_data),
152
+ .in_valid (fifo_out_valid),
153
+ .in_ready (fifo_out_ready),
154
+ .out_data (fifo_out_data_scale),
155
+ .out_valid (fifo_out_valid_scale),
156
+ .out_ready (fifo_out_ready_scale));
157
+
158
+ end
159
+ endgenerate
160
+
119
161
/* glip_uart_control AUTO_TEMPLATE(
120
162
.clk (clk_io),
121
163
.error (control_error),
@@ -224,7 +266,7 @@ module glip_uart_toplevel
224
266
in_fifo
225
267
(.ALMOSTEMPTY (),
226
268
.ALMOSTFULL (),
227
- .DO (fifo_in_data [7 :0 ]),
269
+ .DO (fifo_in_data_scale [7 :0 ]),
228
270
.EMPTY (in_fifo_empty),
229
271
.FULL (in_fifo_full),
230
272
.RDCOUNT (),
@@ -233,7 +275,7 @@ module glip_uart_toplevel
233
275
.WRERR (),
234
276
.DI (ingress_buffer_data[7 :0 ]),
235
277
.RDCLK (clk_logic),
236
- .RDEN (fifo_in_ready ),
278
+ .RDEN (fifo_in_ready_scale ),
237
279
.RST (com_rst),
238
280
.WRCLK (clk_io),
239
281
.WREN (ingress_buffer_valid)
@@ -258,12 +300,12 @@ module glip_uart_toplevel
258
300
.RDERR (),
259
301
.WRCOUNT (),
260
302
.WRERR (),
261
- .DI (fifo_out_data [7 :0 ]),
303
+ .DI (fifo_out_data_scale [7 :0 ]),
262
304
.RDCLK (clk_io),
263
305
.RDEN (egress_in_ready),
264
306
.RST (com_rst),
265
307
.WRCLK (clk_logic),
266
- .WREN (fifo_out_valid )
308
+ .WREN (fifo_out_valid_scale )
267
309
);
268
310
269
311
endmodule // glip_uart_toplevel
0 commit comments