Skip to content

Commit bcd00e3

Browse files
committed
[DSLX] Add advanced RunLengthEncoder
This encoder is capable of ingesting multiple symbols and produces multiple compressed pairs. It should offer faster compression in exchange for area used. Signed-off-by: Maciej Dudek <[email protected]>
1 parent 0c95190 commit bcd00e3

6 files changed

+2703
-0
lines changed

xls/modules/rle/BUILD

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,215 @@ xls_benchmark_ir(
106106
},
107107
)
108108

109+
xls_dslx_library(
110+
name = "rle_enc_adv_reduce_stage_dslx",
111+
srcs = [
112+
"rle_enc_adv_reduce_stage.x",
113+
],
114+
deps = [
115+
":rle_common_dslx"
116+
],
117+
)
118+
119+
xls_dslx_test(
120+
name = "rle_enc_adv_reduce_stage_dslx_test",
121+
dslx_test_args = {
122+
"compare": "none",
123+
},
124+
library = "rle_enc_adv_reduce_stage_dslx",
125+
)
126+
127+
xls_dslx_test(
128+
name = "rle_enc_adv_reduce_stage_dslx_ir_test",
129+
dslx_test_args = {
130+
"compare": "interpreter",
131+
},
132+
library = "rle_enc_adv_reduce_stage_dslx",
133+
)
134+
135+
xls_dslx_test(
136+
name = "rle_enc_adv_reduce_stage_dslx_jit_test",
137+
dslx_test_args = {
138+
"compare": "jit",
139+
},
140+
library = "rle_enc_adv_reduce_stage_dslx",
141+
)
142+
143+
xls_dslx_library(
144+
name = "rle_enc_adv_realign_stage_dslx",
145+
srcs = [
146+
"rle_enc_adv_realign_stage.x",
147+
],
148+
deps = [
149+
":rle_common_dslx"
150+
],
151+
)
152+
153+
xls_dslx_test(
154+
name = "rle_enc_adv_realign_stage_dslx_test",
155+
dslx_test_args = {
156+
"compare": "none",
157+
},
158+
library = "rle_enc_adv_realign_stage_dslx",
159+
)
160+
161+
xls_dslx_test(
162+
name = "rle_enc_adv_realign_stage_dslx_ir_test",
163+
dslx_test_args = {
164+
"compare": "interpreter",
165+
},
166+
library = "rle_enc_adv_realign_stage_dslx",
167+
)
168+
169+
xls_dslx_test(
170+
name = "rle_enc_adv_realign_stage_dslx_jit_test",
171+
dslx_test_args = {
172+
"compare": "jit",
173+
},
174+
library = "rle_enc_adv_realign_stage_dslx",
175+
)
176+
177+
xls_dslx_library(
178+
name = "rle_enc_adv_core_dslx",
179+
srcs = [
180+
"rle_enc_adv_core.x",
181+
],
182+
deps = [
183+
":rle_common_dslx"
184+
],
185+
)
186+
187+
xls_dslx_test(
188+
name = "rle_enc_adv_core_dslx_test",
189+
dslx_test_args = {
190+
"compare": "none",
191+
},
192+
library = "rle_enc_adv_core_dslx",
193+
)
194+
195+
xls_dslx_test(
196+
name = "rle_enc_adv_core_dslx_ir_test",
197+
dslx_test_args = {
198+
"compare": "interpreter",
199+
},
200+
library = "rle_enc_adv_core_dslx",
201+
)
202+
203+
xls_dslx_test(
204+
name = "rle_enc_adv_core_dslx_jit_test",
205+
dslx_test_args = {
206+
"compare": "jit",
207+
},
208+
library = "rle_enc_adv_core_dslx",
209+
)
210+
211+
xls_dslx_library(
212+
name = "rle_enc_adv_adjust_width_stage_dslx",
213+
srcs = [
214+
"rle_enc_adv_adjust_width_stage.x",
215+
],
216+
deps = [
217+
":rle_common_dslx"
218+
],
219+
)
220+
221+
xls_dslx_test(
222+
name = "rle_enc_adv_adjust_width_stage_dslx_test",
223+
dslx_test_args = {
224+
"compare": "none",
225+
},
226+
library = "rle_enc_adv_adjust_width_stage_dslx",
227+
)
228+
229+
xls_dslx_test(
230+
name = "rle_enc_adv_adjust_width_stage_dslx_ir_test",
231+
dslx_test_args = {
232+
"compare": "interpreter",
233+
},
234+
library = "rle_enc_adv_adjust_width_stage_dslx",
235+
)
236+
237+
xls_dslx_test(
238+
name = "rle_enc_adv_adjust_width_stage_dslx_jit_test",
239+
dslx_test_args = {
240+
"compare": "jit",
241+
},
242+
library = "rle_enc_adv_adjust_width_stage_dslx",
243+
)
244+
245+
xls_dslx_library(
246+
name = "rle_enc_adv_dslx",
247+
srcs = [
248+
"rle_enc_adv.x",
249+
],
250+
deps = [
251+
":rle_common_dslx",
252+
":rle_enc_adv_reduce_stage_dslx",
253+
":rle_enc_adv_realign_stage_dslx",
254+
":rle_enc_adv_core_dslx",
255+
":rle_enc_adv_adjust_width_stage_dslx",
256+
],
257+
)
258+
259+
xls_dslx_test(
260+
name = "rle_enc_adv_dslx_test",
261+
dslx_test_args = {
262+
"compare": "none",
263+
},
264+
library = "rle_enc_adv_dslx",
265+
)
266+
267+
xls_dslx_test(
268+
name = "rle_enc_adv_dslx_ir_test",
269+
dslx_test_args = {
270+
"compare": "interpreter",
271+
},
272+
library = "rle_enc_adv_dslx",
273+
)
274+
275+
xls_dslx_test(
276+
name = "rle_enc_adv_dslx_jit_test",
277+
dslx_test_args = {
278+
"compare": "jit",
279+
},
280+
library = "rle_enc_adv_dslx",
281+
)
282+
283+
xls_dslx_ir(
284+
name = "rle_enc_adv_ir",
285+
dslx_top = "RunLengthEncoder8_8_4_2",
286+
library = "rle_enc_adv_dslx",
287+
ir_file = "rle_enc_adv.ir",
288+
)
289+
290+
xls_ir_opt_ir(
291+
name = "rle_enc_adv_opt_ir",
292+
src = "rle_enc_adv.ir",
293+
top = "__xls_modules_rle_rle_enc_adv_core__RunLengthEncoder8_8_4_2__RunLengthEncoderAdvanced__RunLengthEncoderAdvancedCoreStage_0__8_4_8_next",
294+
)
295+
296+
xls_ir_verilog(
297+
name = "rle_enc_adv_verilog",
298+
src = ":rle_enc_adv_opt_ir.opt.ir",
299+
verilog_file = "rle_enc_adv.v",
300+
codegen_args = {
301+
"module_name": "rle_enc_adv",
302+
"delay_model": "unit",
303+
"pipeline_stages": "2",
304+
"reset": "rst",
305+
"use_system_verilog": "false",
306+
},
307+
)
308+
309+
xls_benchmark_ir(
310+
name = "rle_enc_adv_ir_benchmark",
311+
src = ":rle_enc_adv_opt_ir.opt.ir",
312+
benchmark_ir_args = {
313+
"pipeline_stages": "2",
314+
"delay_model": "unit",
315+
}
316+
)
317+
109318
xls_dslx_library(
110319
name = "rle_dec_dslx",
111320
srcs = [

0 commit comments

Comments
 (0)