-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathxillydemo.v
217 lines (185 loc) · 6 KB
/
xillydemo.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
module xillydemo
(
input PCIE_PERST_B_LS,
input PCIE_REFCLK_N,
input PCIE_REFCLK_P,
input [7:0] PCIE_RX_N,
input [7:0] PCIE_RX_P,
output [3:0] GPIO_LED,
output [7:0] PCIE_TX_N,
output [7:0] PCIE_TX_P
);
// Clock and quiesce
wire bus_clk;
wire quiesce;
// Memory array
reg [7:0] demoarray[0:31];
// Wires related to /dev/xillybus_mem_8
wire user_r_mem_8_rden;
wire user_r_mem_8_empty;
reg [7:0] user_r_mem_8_data;
wire user_r_mem_8_eof;
wire user_r_mem_8_open;
wire user_w_mem_8_wren;
wire user_w_mem_8_full;
wire [7:0] user_w_mem_8_data;
wire user_w_mem_8_open;
wire [4:0] user_mem_8_addr;
wire user_mem_8_addr_update;
// Wires related to /dev/xillybus_read_32
wire user_r_read_32_rden;
wire user_r_read_32_empty;
wire [31:0] user_r_read_32_data;
wire user_r_read_32_eof;
wire user_r_read_32_open;
// Wires related to /dev/xillybus_read_8
wire user_r_read_8_rden;
wire user_r_read_8_empty;
wire [7:0] user_r_read_8_data;
wire user_r_read_8_eof;
wire user_r_read_8_open;
// Wires related to /dev/xillybus_write_32
wire user_w_write_32_wren;
wire user_w_write_32_full;
wire [31:0] user_w_write_32_data;
wire user_w_write_32_open;
// Wires related to /dev/xillybus_write_8
wire user_w_write_8_wren;
wire user_w_write_8_full;
wire [7:0] user_w_write_8_data;
wire user_w_write_8_open;
xillybus xillybus_ins (
// Ports related to /dev/xillybus_mem_8
// FPGA to CPU signals:
.user_r_mem_8_rden(user_r_mem_8_rden),
.user_r_mem_8_empty(user_r_mem_8_empty),
.user_r_mem_8_data(user_r_mem_8_data),
.user_r_mem_8_eof(user_r_mem_8_eof),
.user_r_mem_8_open(user_r_mem_8_open),
// CPU to FPGA signals:
.user_w_mem_8_wren(user_w_mem_8_wren),
.user_w_mem_8_full(user_w_mem_8_full),
.user_w_mem_8_data(user_w_mem_8_data),
.user_w_mem_8_open(user_w_mem_8_open),
// Address signals:
.user_mem_8_addr(user_mem_8_addr),
.user_mem_8_addr_update(user_mem_8_addr_update),
// Ports related to /dev/xillybus_read_32
// FPGA to CPU signals:
.user_r_read_32_rden(user_r_read_32_rden),
.user_r_read_32_empty(user_r_read_32_empty),
.user_r_read_32_data(user_r_read_32_data),
.user_r_read_32_eof(user_r_read_32_eof),
.user_r_read_32_open(user_r_read_32_open),
// Ports related to /dev/xillybus_write_32
// CPU to FPGA signals:
.user_w_write_32_wren(user_w_write_32_wren),
.user_w_write_32_full(user_w_write_32_full),
.user_w_write_32_data(user_w_write_32_data),
.user_w_write_32_open(user_w_write_32_open),
// Ports related to /dev/xillybus_read_8
// FPGA to CPU signals:
.user_r_read_8_rden(user_r_read_8_rden),
.user_r_read_8_empty(user_r_read_8_empty),
.user_r_read_8_data(user_r_read_8_data),
.user_r_read_8_eof(user_r_read_8_eof),
.user_r_read_8_open(user_r_read_8_open),
// Ports related to /dev/xillybus_write_8
// CPU to FPGA signals:
.user_w_write_8_wren(user_w_write_8_wren),
.user_w_write_8_full(user_w_write_8_full),
.user_w_write_8_data(user_w_write_8_data),
.user_w_write_8_open(user_w_write_8_open),
// Signals to top level
.PCIE_PERST_B_LS(PCIE_PERST_B_LS),
.PCIE_REFCLK_N(PCIE_REFCLK_N),
.PCIE_REFCLK_P(PCIE_REFCLK_P),
.PCIE_RX_N(PCIE_RX_N),
.PCIE_RX_P(PCIE_RX_P),
.GPIO_LED(GPIO_LED),
.PCIE_TX_N(PCIE_TX_N),
.PCIE_TX_P(PCIE_TX_P),
.bus_clk(bus_clk),
.quiesce(quiesce)
);
// A simple inferred RAM
always @(posedge bus_clk)
begin
if (user_w_mem_8_wren)
demoarray[user_mem_8_addr] <= user_w_mem_8_data;
if (user_r_mem_8_rden)
user_r_mem_8_data <= demoarray[user_mem_8_addr];
end
assign user_r_mem_8_empty = 0;
assign user_r_mem_8_eof = 0;
assign user_w_mem_8_full = 0;
// Wires related to HLS_wrapper
wire [31:0] in_r_dout;
wire in_r_read;
wire hls_fifo_rd_en;
reg in_r_empty_n;
wire [31:0] out_r_din;
wire out_r_full;
wire out_r_write;
wire [7:0] debug_out_din;
wire debug_out_full;
wire debug_out_write;
fifo_32x512 fifo_to_function
(
.clk(bus_clk),
.srst(!user_w_write_32_open),
.din(user_w_write_32_data),
.wr_en(user_w_write_32_wren),
.rd_en(hls_fifo_rd_en),
.dout(in_r_dout),
.full(user_w_write_32_full),
.empty(hls_fifo_empty)
);
assign hls_fifo_rd_en = !hls_fifo_empty && (in_r_read || !in_r_empty_n);
always @(posedge bus_clk)
if (!user_w_write_32_open)
in_r_empty_n <= 0;
else if (hls_fifo_rd_en)
in_r_empty_n <= 1;
else if (in_r_read)
in_r_empty_n <= 0;
fifo_32x512 fifo_from_function
(
.clk(bus_clk),
.srst(!user_r_read_32_open),
.din(out_r_din),
.wr_en(out_r_write),
.rd_en(user_r_read_32_rden),
.dout(user_r_read_32_data),
.full(out_r_full),
.empty(user_r_read_32_empty)
);
assign user_r_read_32_eof = 0;
fifo_8x2048 fifo_8
(
.clk(bus_clk),
.srst(!user_r_read_8_open),
.din(debug_out_din),
.wr_en(debug_out_write),
.rd_en(user_r_read_8_rden),
.dout(user_r_read_8_data),
.full(debug_out_full),
.empty(user_r_read_8_empty)
);
assign user_r_read_8_eof = 0;
assign user_w_write_8_full = 1; // Not used, hence always full
xillybus_wrapper HLS_wrapper
(
.ap_clk(bus_clk),
.ap_rst(!user_w_write_32_open || !user_r_read_32_open),
.debug_ready(!debug_out_full || !user_r_read_8_open),
.debug_out(debug_out_din),
.debug_out_ap_vld(debug_out_write),
.in_r_dout(in_r_dout),
.in_r_empty_n(in_r_empty_n),
.in_r_read(in_r_read),
.out_r_din(out_r_din),
.out_r_full_n(!out_r_full),
.out_r_write(out_r_write)
);
endmodule