Source file xpm_2022_1.ml
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
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
module Xpm_memory_tdpram = struct
module type P = sig
val memory_size : int
val memory_primitive : string
val clocking_mode : string
val ecc_mode : string
val ecc_type : string
val ecc_bit_range : string
val memory_init_file : string
val memory_init_param : string
val use_mem_init : int
val use_mem_init_mmi : int
val wakeup_time : string
val auto_sleep_time : int
val message_control : int
val use_embedded_constraint : int
val memory_optimization : string
val cascade_height : int
val sim_assert_chk : int
val write_protect : int
val write_data_width_a : int
val read_data_width_a : int
val byte_write_width_a : int
val addr_width_a : int
val read_reset_value_a : string
val read_latency_a : int
val write_mode_a : string
val rst_mode_a : string
val write_data_width_b : int
val read_data_width_b : int
val byte_write_width_b : int
val addr_width_b : int
val read_reset_value_b : string
val read_latency_b : int
val write_mode_b : string
val rst_mode_b : string
end
module P : P = struct
let memory_size = 2048
let memory_primitive = "auto"
let clocking_mode = "common_clock"
let ecc_mode = "no_ecc"
let ecc_type = "none"
let ecc_bit_range = "[7:0]"
let memory_init_file = "none"
let memory_init_param = ""
let use_mem_init = 1
let use_mem_init_mmi = 0
let wakeup_time = "disable_sleep"
let auto_sleep_time = 0
let message_control = 0
let use_embedded_constraint = 0
let memory_optimization = "true"
let cascade_height = 0
let sim_assert_chk = 0
let write_protect = 1
let write_data_width_a = 32
let read_data_width_a = 32
let byte_write_width_a = 32
let addr_width_a = 6
let read_reset_value_a = "0"
let read_latency_a = 2
let write_mode_a = "no_change"
let rst_mode_a = "SYNC"
let write_data_width_b = 32
let read_data_width_b = 32
let byte_write_width_b = 32
let addr_width_b = 6
let read_reset_value_b = "0"
let read_latency_b = 2
let write_mode_b = "no_change"
let rst_mode_b = "SYNC"
end
module Make (P : P) = struct
let params = [
Hardcaml.Parameter.create ~name:"MEMORY_SIZE" ~value:(Int P.memory_size);
Hardcaml.Parameter.create ~name:"MEMORY_PRIMITIVE" ~value:(String P.memory_primitive);
Hardcaml.Parameter.create ~name:"CLOCKING_MODE" ~value:(String P.clocking_mode);
Hardcaml.Parameter.create ~name:"ECC_MODE" ~value:(String P.ecc_mode);
Hardcaml.Parameter.create ~name:"ECC_TYPE" ~value:(String P.ecc_type);
Hardcaml.Parameter.create ~name:"ECC_BIT_RANGE" ~value:(String P.ecc_bit_range);
Hardcaml.Parameter.create ~name:"MEMORY_INIT_FILE" ~value:(String P.memory_init_file);
Hardcaml.Parameter.create ~name:"MEMORY_INIT_PARAM" ~value:(String P.memory_init_param);
Hardcaml.Parameter.create ~name:"USE_MEM_INIT" ~value:(Int P.use_mem_init);
Hardcaml.Parameter.create ~name:"USE_MEM_INIT_MMI" ~value:(Int P.use_mem_init_mmi);
Hardcaml.Parameter.create ~name:"WAKEUP_TIME" ~value:(String P.wakeup_time);
Hardcaml.Parameter.create ~name:"AUTO_SLEEP_TIME" ~value:(Int P.auto_sleep_time);
Hardcaml.Parameter.create ~name:"MESSAGE_CONTROL" ~value:(Int P.message_control);
Hardcaml.Parameter.create ~name:"USE_EMBEDDED_CONSTRAINT" ~value:(Int P.use_embedded_constraint);
Hardcaml.Parameter.create ~name:"MEMORY_OPTIMIZATION" ~value:(String P.memory_optimization);
Hardcaml.Parameter.create ~name:"CASCADE_HEIGHT" ~value:(Int P.cascade_height);
Hardcaml.Parameter.create ~name:"SIM_ASSERT_CHK" ~value:(Int P.sim_assert_chk);
Hardcaml.Parameter.create ~name:"WRITE_PROTECT" ~value:(Int P.write_protect);
Hardcaml.Parameter.create ~name:"WRITE_DATA_WIDTH_A" ~value:(Int P.write_data_width_a);
Hardcaml.Parameter.create ~name:"READ_DATA_WIDTH_A" ~value:(Int P.read_data_width_a);
Hardcaml.Parameter.create ~name:"BYTE_WRITE_WIDTH_A" ~value:(Int P.byte_write_width_a);
Hardcaml.Parameter.create ~name:"ADDR_WIDTH_A" ~value:(Int P.addr_width_a);
Hardcaml.Parameter.create ~name:"READ_RESET_VALUE_A" ~value:(String P.read_reset_value_a);
Hardcaml.Parameter.create ~name:"READ_LATENCY_A" ~value:(Int P.read_latency_a);
Hardcaml.Parameter.create ~name:"WRITE_MODE_A" ~value:(String P.write_mode_a);
Hardcaml.Parameter.create ~name:"RST_MODE_A" ~value:(String P.rst_mode_a);
Hardcaml.Parameter.create ~name:"WRITE_DATA_WIDTH_B" ~value:(Int P.write_data_width_b);
Hardcaml.Parameter.create ~name:"READ_DATA_WIDTH_B" ~value:(Int P.read_data_width_b);
Hardcaml.Parameter.create ~name:"BYTE_WRITE_WIDTH_B" ~value:(Int P.byte_write_width_b);
Hardcaml.Parameter.create ~name:"ADDR_WIDTH_B" ~value:(Int P.addr_width_b);
Hardcaml.Parameter.create ~name:"READ_RESET_VALUE_B" ~value:(String P.read_reset_value_b);
Hardcaml.Parameter.create ~name:"READ_LATENCY_B" ~value:(Int P.read_latency_b);
Hardcaml.Parameter.create ~name:"WRITE_MODE_B" ~value:(String P.write_mode_b);
Hardcaml.Parameter.create ~name:"RST_MODE_B" ~value:(String P.rst_mode_b);
]
module I = struct
type 'a t = {
sleep : 'a[@bits 1][@rtlname "sleep"];
clka : 'a[@bits 1][@rtlname "clka"];
rsta : 'a[@bits 1][@rtlname "rsta"];
ena : 'a[@bits 1][@rtlname "ena"];
regcea : 'a[@bits 1][@rtlname "regcea"];
wea : 'a[@bits ((((P.write_data_width_a / P.byte_write_width_a) - 1)) - (0) + 1)][@rtlname "wea"];
addra : 'a[@bits (((P.addr_width_a - 1)) - (0) + 1)][@rtlname "addra"];
dina : 'a[@bits (((P.write_data_width_a - 1)) - (0) + 1)][@rtlname "dina"];
injectsbiterra : 'a[@bits 1][@rtlname "injectsbiterra"];
injectdbiterra : 'a[@bits 1][@rtlname "injectdbiterra"];
clkb : 'a[@bits 1][@rtlname "clkb"];
rstb : 'a[@bits 1][@rtlname "rstb"];
enb : 'a[@bits 1][@rtlname "enb"];
regceb : 'a[@bits 1][@rtlname "regceb"];
web : 'a[@bits ((((P.write_data_width_b / P.byte_write_width_b) - 1)) - (0) + 1)][@rtlname "web"];
addrb : 'a[@bits (((P.addr_width_b - 1)) - (0) + 1)][@rtlname "addrb"];
dinb : 'a[@bits (((P.write_data_width_b - 1)) - (0) + 1)][@rtlname "dinb"];
injectsbiterrb : 'a[@bits 1][@rtlname "injectsbiterrb"];
injectdbiterrb : 'a[@bits 1][@rtlname "injectdbiterrb"];
}[@@deriving sexp_of, hardcaml]
end
module O = struct
type 'a t = {
douta : 'a[@bits (((P.read_data_width_a - 1)) - (0) + 1)][@rtlname "douta"];
sbiterra : 'a[@bits 1][@rtlname "sbiterra"];
dbiterra : 'a[@bits 1][@rtlname "dbiterra"];
doutb : 'a[@bits (((P.read_data_width_b - 1)) - (0) + 1)][@rtlname "doutb"];
sbiterrb : 'a[@bits 1][@rtlname "sbiterrb"];
dbiterrb : 'a[@bits 1][@rtlname "dbiterrb"];
}[@@deriving sexp_of, hardcaml]
end
module T = Hardcaml.Interface.Empty
open struct include Hardcaml.Instantiation.With_interface(I)(O) end
let create ?lib ?arch ?attributes ?instance ?(name="xpm_memory_tdpram") ?parameters inputs =
let parameters = Option.value ~default:params parameters in
create ?lib ?arch ?instance ?attributes ~parameters ~name inputs
end
end
module Xpm_fifo_async = struct
module type P = sig
val fifo_memory_type : string
val fifo_write_depth : int
val cascade_height : int
val related_clocks : int
val write_data_width : int
val read_mode : string
val fifo_read_latency : int
val full_reset_value : int
val use_adv_features : string
val read_data_width : int
val cdc_sync_stages : int
val wr_data_count_width : int
val prog_full_thresh : int
val rd_data_count_width : int
val prog_empty_thresh : int
val dout_reset_value : string
val ecc_mode : string
val sim_assert_chk : int
val wakeup_time : int
end
module P : P = struct
let fifo_memory_type = "auto"
let fifo_write_depth = 2048
let cascade_height = 0
let related_clocks = 0
let write_data_width = 32
let read_mode = "std"
let fifo_read_latency = 1
let full_reset_value = 0
let use_adv_features = "0707"
let read_data_width = 32
let cdc_sync_stages = 2
let wr_data_count_width = 1
let prog_full_thresh = 10
let rd_data_count_width = 1
let prog_empty_thresh = 10
let dout_reset_value = "0"
let ecc_mode = "no_ecc"
let sim_assert_chk = 0
let wakeup_time = 0
end
module Make (P : P) = struct
let params = [
Hardcaml.Parameter.create ~name:"FIFO_MEMORY_TYPE" ~value:(String P.fifo_memory_type);
Hardcaml.Parameter.create ~name:"FIFO_WRITE_DEPTH" ~value:(Int P.fifo_write_depth);
Hardcaml.Parameter.create ~name:"CASCADE_HEIGHT" ~value:(Int P.cascade_height);
Hardcaml.Parameter.create ~name:"RELATED_CLOCKS" ~value:(Int P.related_clocks);
Hardcaml.Parameter.create ~name:"WRITE_DATA_WIDTH" ~value:(Int P.write_data_width);
Hardcaml.Parameter.create ~name:"READ_MODE" ~value:(String P.read_mode);
Hardcaml.Parameter.create ~name:"FIFO_READ_LATENCY" ~value:(Int P.fifo_read_latency);
Hardcaml.Parameter.create ~name:"FULL_RESET_VALUE" ~value:(Int P.full_reset_value);
Hardcaml.Parameter.create ~name:"USE_ADV_FEATURES" ~value:(String P.use_adv_features);
Hardcaml.Parameter.create ~name:"READ_DATA_WIDTH" ~value:(Int P.read_data_width);
Hardcaml.Parameter.create ~name:"CDC_SYNC_STAGES" ~value:(Int P.cdc_sync_stages);
Hardcaml.Parameter.create ~name:"WR_DATA_COUNT_WIDTH" ~value:(Int P.wr_data_count_width);
Hardcaml.Parameter.create ~name:"PROG_FULL_THRESH" ~value:(Int P.prog_full_thresh);
Hardcaml.Parameter.create ~name:"RD_DATA_COUNT_WIDTH" ~value:(Int P.rd_data_count_width);
Hardcaml.Parameter.create ~name:"PROG_EMPTY_THRESH" ~value:(Int P.prog_empty_thresh);
Hardcaml.Parameter.create ~name:"DOUT_RESET_VALUE" ~value:(String P.dout_reset_value);
Hardcaml.Parameter.create ~name:"ECC_MODE" ~value:(String P.ecc_mode);
Hardcaml.Parameter.create ~name:"SIM_ASSERT_CHK" ~value:(Int P.sim_assert_chk);
Hardcaml.Parameter.create ~name:"WAKEUP_TIME" ~value:(Int P.wakeup_time);
]
module I = struct
type 'a t = {
sleep : 'a[@bits 1][@rtlname "sleep"];
rst : 'a[@bits 1][@rtlname "rst"];
wr_clk : 'a[@bits 1][@rtlname "wr_clk"];
wr_en : 'a[@bits 1][@rtlname "wr_en"];
din : 'a[@bits (((P.write_data_width - 1)) - (0) + 1)][@rtlname "din"];
rd_clk : 'a[@bits 1][@rtlname "rd_clk"];
rd_en : 'a[@bits 1][@rtlname "rd_en"];
injectsbiterr : 'a[@bits 1][@rtlname "injectsbiterr"];
injectdbiterr : 'a[@bits 1][@rtlname "injectdbiterr"];
}[@@deriving sexp_of, hardcaml]
end
module O = struct
type 'a t = {
full : 'a[@bits 1][@rtlname "full"];
prog_full : 'a[@bits 1][@rtlname "prog_full"];
wr_data_count : 'a[@bits (((P.wr_data_count_width - 1)) - (0) + 1)][@rtlname "wr_data_count"];
overflow : 'a[@bits 1][@rtlname "overflow"];
wr_rst_busy : 'a[@bits 1][@rtlname "wr_rst_busy"];
almost_full : 'a[@bits 1][@rtlname "almost_full"];
wr_ack : 'a[@bits 1][@rtlname "wr_ack"];
dout : 'a[@bits (((P.read_data_width - 1)) - (0) + 1)][@rtlname "dout"];
empty : 'a[@bits 1][@rtlname "empty"];
prog_empty : 'a[@bits 1][@rtlname "prog_empty"];
rd_data_count : 'a[@bits (((P.rd_data_count_width - 1)) - (0) + 1)][@rtlname "rd_data_count"];
underflow : 'a[@bits 1][@rtlname "underflow"];
rd_rst_busy : 'a[@bits 1][@rtlname "rd_rst_busy"];
almost_empty : 'a[@bits 1][@rtlname "almost_empty"];
data_valid : 'a[@bits 1][@rtlname "data_valid"];
sbiterr : 'a[@bits 1][@rtlname "sbiterr"];
dbiterr : 'a[@bits 1][@rtlname "dbiterr"];
}[@@deriving sexp_of, hardcaml]
end
module T = Hardcaml.Interface.Empty
open struct include Hardcaml.Instantiation.With_interface(I)(O) end
let create ?lib ?arch ?attributes ?instance ?(name="xpm_fifo_async") ?parameters inputs =
let parameters = Option.value ~default:params parameters in
create ?lib ?arch ?instance ?attributes ~parameters ~name inputs
end
end
module Xpm_fifo_sync = struct
module type P = sig
val fifo_memory_type : string
val fifo_write_depth : int
val cascade_height : int
val write_data_width : int
val read_mode : string
val fifo_read_latency : int
val full_reset_value : int
val use_adv_features : string
val read_data_width : int
val wr_data_count_width : int
val prog_full_thresh : int
val rd_data_count_width : int
val prog_empty_thresh : int
val dout_reset_value : string
val ecc_mode : string
val sim_assert_chk : int
val wakeup_time : int
end
module P : P = struct
let fifo_memory_type = "auto"
let fifo_write_depth = 2048
let cascade_height = 0
let write_data_width = 32
let read_mode = "std"
let fifo_read_latency = 1
let full_reset_value = 0
let use_adv_features = "0707"
let read_data_width = 32
let wr_data_count_width = 1
let prog_full_thresh = 10
let rd_data_count_width = 1
let prog_empty_thresh = 10
let dout_reset_value = "0"
let ecc_mode = "no_ecc"
let sim_assert_chk = 0
let wakeup_time = 0
end
module Make (P : P) = struct
let params = [
Hardcaml.Parameter.create ~name:"FIFO_MEMORY_TYPE" ~value:(String P.fifo_memory_type);
Hardcaml.Parameter.create ~name:"FIFO_WRITE_DEPTH" ~value:(Int P.fifo_write_depth);
Hardcaml.Parameter.create ~name:"CASCADE_HEIGHT" ~value:(Int P.cascade_height);
Hardcaml.Parameter.create ~name:"WRITE_DATA_WIDTH" ~value:(Int P.write_data_width);
Hardcaml.Parameter.create ~name:"READ_MODE" ~value:(String P.read_mode);
Hardcaml.Parameter.create ~name:"FIFO_READ_LATENCY" ~value:(Int P.fifo_read_latency);
Hardcaml.Parameter.create ~name:"FULL_RESET_VALUE" ~value:(Int P.full_reset_value);
Hardcaml.Parameter.create ~name:"USE_ADV_FEATURES" ~value:(String P.use_adv_features);
Hardcaml.Parameter.create ~name:"READ_DATA_WIDTH" ~value:(Int P.read_data_width);
Hardcaml.Parameter.create ~name:"WR_DATA_COUNT_WIDTH" ~value:(Int P.wr_data_count_width);
Hardcaml.Parameter.create ~name:"PROG_FULL_THRESH" ~value:(Int P.prog_full_thresh);
Hardcaml.Parameter.create ~name:"RD_DATA_COUNT_WIDTH" ~value:(Int P.rd_data_count_width);
Hardcaml.Parameter.create ~name:"PROG_EMPTY_THRESH" ~value:(Int P.prog_empty_thresh);
Hardcaml.Parameter.create ~name:"DOUT_RESET_VALUE" ~value:(String P.dout_reset_value);
Hardcaml.Parameter.create ~name:"ECC_MODE" ~value:(String P.ecc_mode);
Hardcaml.Parameter.create ~name:"SIM_ASSERT_CHK" ~value:(Int P.sim_assert_chk);
Hardcaml.Parameter.create ~name:"WAKEUP_TIME" ~value:(Int P.wakeup_time);
]
module I = struct
type 'a t = {
sleep : 'a[@bits 1][@rtlname "sleep"];
rst : 'a[@bits 1][@rtlname "rst"];
wr_clk : 'a[@bits 1][@rtlname "wr_clk"];
wr_en : 'a[@bits 1][@rtlname "wr_en"];
din : 'a[@bits (((P.write_data_width - 1)) - (0) + 1)][@rtlname "din"];
rd_en : 'a[@bits 1][@rtlname "rd_en"];
injectsbiterr : 'a[@bits 1][@rtlname "injectsbiterr"];
injectdbiterr : 'a[@bits 1][@rtlname "injectdbiterr"];
}[@@deriving sexp_of, hardcaml]
end
module O = struct
type 'a t = {
full : 'a[@bits 1][@rtlname "full"];
prog_full : 'a[@bits 1][@rtlname "prog_full"];
wr_data_count : 'a[@bits (((P.wr_data_count_width - 1)) - (0) + 1)][@rtlname "wr_data_count"];
overflow : 'a[@bits 1][@rtlname "overflow"];
wr_rst_busy : 'a[@bits 1][@rtlname "wr_rst_busy"];
almost_full : 'a[@bits 1][@rtlname "almost_full"];
wr_ack : 'a[@bits 1][@rtlname "wr_ack"];
dout : 'a[@bits (((P.read_data_width - 1)) - (0) + 1)][@rtlname "dout"];
empty : 'a[@bits 1][@rtlname "empty"];
prog_empty : 'a[@bits 1][@rtlname "prog_empty"];
rd_data_count : 'a[@bits (((P.rd_data_count_width - 1)) - (0) + 1)][@rtlname "rd_data_count"];
underflow : 'a[@bits 1][@rtlname "underflow"];
rd_rst_busy : 'a[@bits 1][@rtlname "rd_rst_busy"];
almost_empty : 'a[@bits 1][@rtlname "almost_empty"];
data_valid : 'a[@bits 1][@rtlname "data_valid"];
sbiterr : 'a[@bits 1][@rtlname "sbiterr"];
dbiterr : 'a[@bits 1][@rtlname "dbiterr"];
}[@@deriving sexp_of, hardcaml]
end
module T = Hardcaml.Interface.Empty
open struct include Hardcaml.Instantiation.With_interface(I)(O) end
let create ?lib ?arch ?attributes ?instance ?(name="xpm_fifo_sync") ?parameters inputs =
let parameters = Option.value ~default:params parameters in
create ?lib ?arch ?instance ?attributes ~parameters ~name inputs
end
end