yowasp-yosys 0.40.0.68.post721.dev0__py3-none-any.whl → 0.42.0.0.post734__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- // The core logic primitive of the Cyclone V/10GX is the Adaptive Logic Module
1
+ // The core logic primitive of the Cyclone V is the Adaptive Logic Module
2
2
  // (ALM). Each ALM is made up of an 8-input, 2-output look-up table, covered
3
3
  // in this file, connected to combinational outputs, a carry chain, and four
4
4
  // D flip-flops (which are covered as MISTRAL_FF in dff_sim.v).
@@ -77,14 +77,6 @@
77
77
  // SUMOUT 368 1342 1323 887 927 - 785 -
78
78
  // CARRYOUT 71 1082 1062 866 813 - 1198 -
79
79
 
80
- // Arria V LUT output timings (picoseconds):
81
- //
82
- // CARRY A B C D E F G
83
- // COMBOUT - 387 375 316 317 - 76 319 (LUT6)
84
- // COMBOUT - 387 375 316 317 218 76 319 (LUT7)
85
- // SUMOUT 249 744 732 562 576 - 511 -
86
- // CARRYOUT 19 629 623 530 514 - 696 -
87
-
88
80
  (* abc9_lut=2, lib_whitebox *)
89
81
  module MISTRAL_ALUT6(input A, B, C, D, E, F, output Q);
90
82
 
@@ -100,26 +92,6 @@ specify
100
92
  (F => Q) = 97;
101
93
  endspecify
102
94
  `endif
103
- `ifdef arriav
104
- specify
105
- (A => Q) = 387;
106
- (B => Q) = 375;
107
- (C => Q) = 316;
108
- (D => Q) = 317;
109
- (E => Q) = 319;
110
- (F => Q) = 76;
111
- endspecify
112
- `endif
113
- `ifdef cyclone10gx
114
- specify
115
- (A => Q) = 275;
116
- (B => Q) = 272;
117
- (C => Q) = 175;
118
- (D => Q) = 165;
119
- (E => Q) = 162;
120
- (F => Q) = 53;
121
- endspecify
122
- `endif
123
95
 
124
96
  assign Q = LUT >> {F, E, D, C, B, A};
125
97
 
@@ -140,24 +112,6 @@ specify
140
112
  (E => Q) = 97;
141
113
  endspecify
142
114
  `endif
143
- `ifdef arriav
144
- specify
145
- (A => Q) = 375;
146
- (B => Q) = 316;
147
- (C => Q) = 317;
148
- (D => Q) = 319;
149
- (E => Q) = 76;
150
- endspecify
151
- `endif
152
- `ifdef cyclone10gx
153
- specify
154
- (A => Q) = 272;
155
- (B => Q) = 175;
156
- (C => Q) = 165;
157
- (D => Q) = 162;
158
- (E => Q) = 53;
159
- endspecify
160
- `endif
161
115
 
162
116
  assign Q = LUT >> {E, D, C, B, A};
163
117
 
@@ -177,22 +131,6 @@ specify
177
131
  (D => Q) = 97;
178
132
  endspecify
179
133
  `endif
180
- `ifdef arriav
181
- specify
182
- (A => Q) = 316;
183
- (B => Q) = 317;
184
- (C => Q) = 319;
185
- (D => Q) = 76;
186
- endspecify
187
- `endif
188
- `ifdef cyclone10gx
189
- specify
190
- (A => Q) = 175;
191
- (B => Q) = 165;
192
- (C => Q) = 162;
193
- (D => Q) = 53;
194
- endspecify
195
- `endif
196
134
 
197
135
  assign Q = LUT >> {D, C, B, A};
198
136
 
@@ -211,20 +149,6 @@ specify
211
149
  (C => Q) = 97;
212
150
  endspecify
213
151
  `endif
214
- `ifdef arriav
215
- specify
216
- (A => Q) = 316;
217
- (B => Q) = 317;
218
- (C => Q) = 76;
219
- endspecify
220
- `endif
221
- `ifdef cyclone10gx
222
- specify
223
- (A => Q) = 165;
224
- (B => Q) = 162;
225
- (C => Q) = 53;
226
- endspecify
227
- `endif
228
152
 
229
153
  assign Q = LUT >> {C, B, A};
230
154
 
@@ -242,18 +166,6 @@ specify
242
166
  (B => Q) = 97;
243
167
  endspecify
244
168
  `endif
245
- `ifdef arriav
246
- specify
247
- (A => Q) = 316;
248
- (B => Q) = 76;
249
- endspecify
250
- `endif
251
- `ifdef cyclone10gx
252
- specify
253
- (A => Q) = 162;
254
- (B => Q) = 53;
255
- endspecify
256
- `endif
257
169
 
258
170
  assign Q = LUT >> {B, A};
259
171
 
@@ -268,16 +180,6 @@ specify
268
180
  (A => Q) = 97;
269
181
  endspecify
270
182
  `endif
271
- `ifdef arriav
272
- specify
273
- (A => Q) = 76;
274
- endspecify
275
- `endif
276
- `ifdef cyclone10gx
277
- specify
278
- (A => Q) = 53;
279
- endspecify
280
- `endif
281
183
 
282
184
  assign Q = ~A;
283
185
 
@@ -306,40 +208,6 @@ specify
306
208
  (CI => CO) = 36; // Divided by 2 to account for there being two ALUT_ARITHs in an ALM)
307
209
  endspecify
308
210
  `endif
309
- `ifdef arriav
310
- specify
311
- (A => SO) = 744;
312
- (B => SO) = 732;
313
- (C => SO) = 562;
314
- (D0 => SO) = 576;
315
- (D1 => SO) = 511;
316
- (CI => SO) = 249;
317
-
318
- (A => CO) = 629;
319
- (B => CO) = 623;
320
- (C => CO) = 530;
321
- (D0 => CO) = 514;
322
- (D1 => CO) = 696;
323
- (CI => CO) = 10; // Divided by 2 to account for there being two ALUT_ARITHs in an ALM)
324
- endspecify
325
- `endif
326
- `ifdef cyclone10gx
327
- specify
328
- (A => SO) = 644;
329
- (B => SO) = 477;
330
- (C => SO) = 416;
331
- (D0 => SO) = 380;
332
- (D1 => SO) = 431;
333
- (CI => SO) = 276;
334
-
335
- (A => CO) = 525;
336
- (B => CO) = 433;
337
- (C => CO) = 712;
338
- (D0 => CO) = 653;
339
- (D1 => CO) = 593;
340
- (CI => CO) = 16;
341
- endspecify
342
- `endif
343
211
 
344
212
  wire q0, q1;
345
213
 
@@ -349,283 +217,3 @@ assign q1 = LUT1 >> {D1, C, B, A};
349
217
  assign {CO, SO} = q0 + !q1 + CI;
350
218
 
351
219
  endmodule
352
-
353
-
354
- /*
355
- // A, B, C0, C1, E0, E1, F0, F1: data inputs
356
- // CARRYIN: carry input
357
- // SHAREIN: shared-arithmetic input
358
- // CLK0, CLK1, CLK2: clock inputs
359
- //
360
- // COMB0, COMB1: combinational outputs
361
- // FF0, FF1, FF2, FF3: DFF outputs
362
- // SUM0, SUM1: adder outputs
363
- // CARRYOUT: carry output
364
- // SHAREOUT: shared-arithmetic output
365
- module MISTRAL_ALM(
366
- input A, B, C0, C1, E0, E1, F0, F1, CARRYIN, SHAREIN, // LUT path
367
- input CLK0, CLK1, CLK2, AC0, AC1, // FF path
368
- output COMB0, COMB1, SUM0, SUM1, CARRYOUT, SHAREOUT,
369
- output FF0, FF1, FF2, FF3
370
- );
371
-
372
- parameter LUT0 = 16'b0000;
373
- parameter LUT1 = 16'b0000;
374
- parameter LUT2 = 16'b0000;
375
- parameter LUT3 = 16'b0000;
376
-
377
- parameter INIT0 = 1'b0;
378
- parameter INIT1 = 1'b0;
379
- parameter INIT2 = 1'b0;
380
- parameter INIT3 = 1'b0;
381
-
382
- parameter C0_MUX = "C0";
383
- parameter C1_MUX = "C1";
384
-
385
- parameter F0_MUX = "VCC";
386
- parameter F1_MUX = "GND";
387
-
388
- parameter FEEDBACK0 = "FF0";
389
- parameter FEEDBACK1 = "FF2";
390
-
391
- parameter ADD_MUX = "LUT";
392
-
393
- parameter DFF01_DATA_MUX = "COMB";
394
- parameter DFF23_DATA_MUX = "COMB";
395
-
396
- parameter DFF0_CLK = "CLK0";
397
- parameter DFF1_CLK = "CLK0";
398
- parameter DFF2_CLK = "CLK0";
399
- parameter DFF3_CLK = "CLK0";
400
-
401
- parameter DFF0_AC = "AC0";
402
- parameter DFF1_AC = "AC0";
403
- parameter DFF2_AC = "AC0";
404
- parameter DFF3_AC = "AC0";
405
-
406
- // Feedback muxes from the flip-flop outputs.
407
- wire ff_feedback_mux0, ff_feedback_mux1;
408
-
409
- // C-input muxes which can be set to also use the F-input.
410
- wire c0_input_mux, c1_input_mux;
411
-
412
- // F-input muxes which can be set to a constant to allow LUT5 use.
413
- wire f0_input_mux, f1_input_mux;
414
-
415
- // Adder input muxes to select between shared-arithmetic mode and arithmetic mode.
416
- wire add0_input_mux, add1_input_mux;
417
-
418
- // Combinational-output muxes for LUT #1 and LUT #3
419
- wire lut1_comb_mux, lut3_comb_mux;
420
-
421
- // Sum-output muxes for LUT #1 and LUT #3
422
- wire lut1_sum_mux, lut3_sum_mux;
423
-
424
- // DFF data-input muxes
425
- wire dff01_data_mux, dff23_data_mux;
426
-
427
- // DFF clock selectors
428
- wire dff0_clk, dff1_clk, dff2_clk, dff3_clk;
429
-
430
- // DFF asynchronous-clear selectors
431
- wire dff0_ac, dff1_ac, dff2_ac, dff3_ac;
432
-
433
- // LUT, DFF and adder output wires for routing.
434
- wire lut0_out, lut1a_out, lut1b_out, lut2_out, lut3a_out, lut3b_out;
435
- wire dff0_out, dff1_out, dff2_out, dff3_out;
436
- wire add0_sum, add1_sum, add0_carry, add1_carry;
437
-
438
- generate
439
- if (FEEDBACK0 === "FF0")
440
- assign ff_feedback_mux0 = dff0_out;
441
- else if (FEEDBACK0 === "FF1")
442
- assign ff_feedback_mux0 = dff1_out;
443
- else
444
- $error("Invalid FEEDBACK0 setting!");
445
-
446
- if (FEEDBACK1 == "FF2")
447
- assign ff_feedback_mux1 = dff2_out;
448
- else if (FEEDBACK1 == "FF3")
449
- assign ff_feedback_mux1 = dff3_out;
450
- else
451
- $error("Invalid FEEDBACK1 setting!");
452
-
453
- if (C0_MUX === "C0")
454
- assign c0_input_mux = C0;
455
- else if (C0_MUX === "F1")
456
- assign c0_input_mux = F1;
457
- else if (C0_MUX === "FEEDBACK1")
458
- assign c0_input_mux = ff_feedback_mux1;
459
- else
460
- $error("Invalid C0_MUX setting!");
461
-
462
- if (C1_MUX === "C1")
463
- assign c1_input_mux = C1;
464
- else if (C1_MUX === "F0")
465
- assign c1_input_mux = F0;
466
- else if (C1_MUX === "FEEDBACK0")
467
- assign c1_input_mux = ff_feedback_mux0;
468
- else
469
- $error("Invalid C1_MUX setting!");
470
-
471
- // F0 == VCC is LUT5
472
- // F0 == F0 is LUT6
473
- // F0 == FEEDBACK is unknown
474
- if (F0_MUX === "VCC")
475
- assign f0_input_mux = 1'b1;
476
- else if (F0_MUX === "F0")
477
- assign f0_input_mux = F0;
478
- else if (F0_MUX === "FEEDBACK0")
479
- assign f0_input_mux = ff_feedback_mux0;
480
- else
481
- $error("Invalid F0_MUX setting!");
482
-
483
- // F1 == GND is LUT5
484
- // F1 == F1 is LUT6
485
- // F1 == FEEDBACK is unknown
486
- if (F1_MUX === "GND")
487
- assign f1_input_mux = 1'b0;
488
- else if (F1_MUX === "F1")
489
- assign f1_input_mux = F1;
490
- else if (F1_MUX === "FEEDBACK1")
491
- assign f1_input_mux = ff_feedback_mux1;
492
- else
493
- $error("Invalid F1_MUX setting!");
494
-
495
- if (ADD_MUX === "LUT") begin
496
- assign add0_input_mux = ~lut1_sum_mux;
497
- assign add1_input_mux = ~lut3_sum_mux;
498
- end else if (ADD_MUX === "SHARE") begin
499
- assign add0_input_mux = SHAREIN;
500
- assign add1_input_mux = lut1_comb_mux;
501
- end else
502
- $error("Invalid ADD_MUX setting!");
503
-
504
- if (DFF01_DATA_MUX === "COMB")
505
- assign dff01_data_mux = COMB0;
506
- else if (DFF01_DATA_MUX === "SUM")
507
- assign dff01_data_mux = SUM0;
508
- else
509
- $error("Invalid DFF01_DATA_MUX setting!");
510
-
511
- if (DFF23_DATA_MUX === "COMB")
512
- assign dff23_data_mux = COMB0;
513
- else if (DFF23_DATA_MUX === "SUM")
514
- assign dff23_data_mux = SUM0;
515
- else
516
- $error("Invalid DFF23_DATA_MUX setting!");
517
-
518
- if (DFF0_CLK === "CLK0")
519
- assign dff0_clk = CLK0;
520
- else if (DFF0_CLK === "CLK1")
521
- assign dff0_clk = CLK1;
522
- else if (DFF0_CLK === "CLK2")
523
- assign dff0_clk = CLK2;
524
- else
525
- $error("Invalid DFF0_CLK setting!");
526
-
527
- if (DFF1_CLK === "CLK0")
528
- assign dff1_clk = CLK0;
529
- else if (DFF1_CLK === "CLK1")
530
- assign dff1_clk = CLK1;
531
- else if (DFF1_CLK === "CLK2")
532
- assign dff1_clk = CLK2;
533
- else
534
- $error("Invalid DFF1_CLK setting!");
535
-
536
- if (DFF2_CLK === "CLK0")
537
- assign dff2_clk = CLK0;
538
- else if (DFF2_CLK === "CLK1")
539
- assign dff2_clk = CLK1;
540
- else if (DFF2_CLK === "CLK2")
541
- assign dff2_clk = CLK2;
542
- else
543
- $error("Invalid DFF2_CLK setting!");
544
-
545
- if (DFF3_CLK === "CLK0")
546
- assign dff3_clk = CLK0;
547
- else if (DFF3_CLK === "CLK1")
548
- assign dff3_clk = CLK1;
549
- else if (DFF3_CLK === "CLK2")
550
- assign dff3_clk = CLK2;
551
- else
552
- $error("Invalid DFF3_CLK setting!");
553
-
554
- if (DFF0_AC === "AC0")
555
- assign dff0_ac = AC0;
556
- else if (DFF0_AC === "AC1")
557
- assign dff0_ac = AC1;
558
- else
559
- $error("Invalid DFF0_AC setting!");
560
-
561
- if (DFF1_AC === "AC0")
562
- assign dff1_ac = AC0;
563
- else if (DFF1_AC === "AC1")
564
- assign dff1_ac = AC1;
565
- else
566
- $error("Invalid DFF1_AC setting!");
567
-
568
- if (DFF2_AC === "AC0")
569
- assign dff2_ac = AC0;
570
- else if (DFF2_AC === "AC1")
571
- assign dff2_ac = AC1;
572
- else
573
- $error("Invalid DFF2_AC setting!");
574
-
575
- if (DFF3_AC === "AC0")
576
- assign dff3_ac = AC0;
577
- else if (DFF3_AC === "AC1")
578
- assign dff3_ac = AC1;
579
- else
580
- $error("Invalid DFF3_AC setting!");
581
-
582
- endgenerate
583
-
584
- // F0 on the Quartus diagram
585
- MISTRAL_ALUT4 #(.LUT(LUT0)) lut0 (.A(A), .B(B), .C(C0), .D(c1_input_mux), .Q(lut0_out));
586
-
587
- // F2 on the Quartus diagram
588
- MISTRAL_ALUT4 #(.LUT(LUT1)) lut1_comb (.A(A), .B(B), .C(C0), .D(c1_input_mux), .Q(lut1_comb_mux));
589
- MISTRAL_ALUT4 #(.LUT(LUT1)) lut1_sum (.A(A), .B(B), .C(C0), .D(E0), .Q(lut1_sum_mux));
590
-
591
- // F1 on the Quartus diagram
592
- MISTRAL_ALUT4 #(.LUT(LUT2)) lut2 (.A(A), .B(B), .C(C1), .D(c0_input_mux), .Q(lut2_out));
593
-
594
- // F3 on the Quartus diagram
595
- MISTRAL_ALUT4 #(.LUT(LUT3)) lut3_comb (.A(A), .B(B), .C(C1), .D(c0_input_mux), .Q(lut3_comb_mux));
596
- MISTRAL_ALUT4 #(.LUT(LUT3)) lut3_sum (.A(A), .B(B), .C(C1), .D(E1), .Q(lut3_sum_mux));
597
-
598
- MISTRAL_FF #(.INIT(INIT0)) dff0 (.D(dff01_data_mux), .CLK(dff0_clk), .ACn(dff0_ac), .Q(dff0_out));
599
- MISTRAL_FF #(.INIT(INIT1)) dff1 (.D(dff01_data_mux), .CLK(dff1_clk), .ACn(dff1_ac), .Q(dff1_out));
600
- MISTRAL_FF #(.INIT(INIT2)) dff2 (.D(dff23_data_mux), .CLK(dff2_clk), .ACn(dff2_ac), .Q(dff2_out));
601
- MISTRAL_FF #(.INIT(INIT3)) dff3 (.D(dff23_data_mux), .CLK(dff3_clk), .ACn(dff3_ac), .Q(dff3_out));
602
-
603
- // Adders
604
- assign {add0_carry, add0_sum} = CARRYIN + lut0_out + lut1_sum_mux;
605
- assign {add1_carry, add1_sum} = add0_carry + lut2_out + lut3_sum_mux;
606
-
607
- // COMBOUT outputs on the Quartus diagram
608
- assign COMB0 = E0 ? (f0_input_mux ? lut3_comb_mux : lut1_comb_mux)
609
- : (f0_input_mux ? lut2_out : lut0_out);
610
-
611
- assign COMB1 = E1 ? (f1_input_mux ? lut3_comb_mux : lut1_comb_mux)
612
- : (f1_input_mux ? lut2_out : lut0_out);
613
-
614
- // SUMOUT output on the Quartus diagram
615
- assign SUM0 = add0_sum;
616
- assign SUM1 = add1_sum;
617
-
618
- // COUT output on the Quartus diagram
619
- assign CARRYOUT = add1_carry;
620
-
621
- // SHAREOUT output on the Quartus diagram
622
- assign SHAREOUT = lut3_comb_mux;
623
-
624
- // REGOUT outputs on the Quartus diagram
625
- assign FF0 = dff0_out;
626
- assign FF1 = dff1_out;
627
- assign FF2 = dff2_out;
628
- assign FF3 = dff3_out;
629
-
630
- endmodule
631
- */
@@ -77,38 +77,6 @@ specify
77
77
  if (ACLR === 1'b0) (ACLR => Q) = 282;
78
78
  endspecify
79
79
  `endif
80
- `ifdef arriav
81
- specify
82
- if (ENA && ACLR !== 1'b0 && !SCLR && !SLOAD) (posedge CLK => (Q : DATAIN)) = 470;
83
- if (ENA && SCLR) (posedge CLK => (Q : 1'b0)) = 633;
84
- if (ENA && !SCLR && SLOAD) (posedge CLK => (Q : SDATA)) = 439;
85
-
86
- $setup(DATAIN, posedge CLK, /* -170 */ 0);
87
- $setup(ENA, posedge CLK, /* -170 */ 0);
88
- $setup(SCLR, posedge CLK, /* -170 */ 0);
89
- $setup(SLOAD, posedge CLK, /* -170 */ 0);
90
- $setup(SDATA, posedge CLK, /* -170 */ 0);
91
-
92
- if (ACLR === 1'b0) (ACLR => Q) = 215;
93
- endspecify
94
- `endif
95
- `ifdef cyclone10gx
96
- specify
97
- // TODO (long-term): investigate these numbers.
98
- // It seems relying on the Quartus Timing Analyzer was not the best idea; it's too fiddly.
99
- if (ENA && ACLR !== 1'b0 && !SCLR && !SLOAD) (posedge CLK => (Q : DATAIN)) = 219;
100
- if (ENA && SCLR) (posedge CLK => (Q : 1'b0)) = 219;
101
- if (ENA && !SCLR && SLOAD) (posedge CLK => (Q : SDATA)) = 219;
102
-
103
- $setup(DATAIN, posedge CLK, 268);
104
- $setup(ENA, posedge CLK, 268);
105
- $setup(SCLR, posedge CLK, 268);
106
- $setup(SLOAD, posedge CLK, 268);
107
- $setup(SDATA, posedge CLK, 268);
108
-
109
- if (ACLR === 1'b0) (ACLR => Q) = 0;
110
- endspecify
111
- `endif
112
80
 
113
81
  initial begin
114
82
  // Altera flops initialise to zero.
@@ -1,7 +1,7 @@
1
1
  // The MLAB
2
2
  // --------
3
3
  // In addition to Logic Array Blocks (LABs) that contain ten Adaptive Logic
4
- // Modules (ALMs, see alm_sim.v), the Cyclone V/10GX also contain
4
+ // Modules (ALMs, see alm_sim.v), the Cyclone V also contains
5
5
  // Memory/Logic Array Blocks (MLABs) that can act as either ten ALMs, or utilise
6
6
  // the memory the ALM uses to store the look-up table data for general usage,
7
7
  // producing a 32 address by 20-bit block of memory. MLABs are spread out
@@ -14,11 +14,8 @@
14
14
  // or shift registers (by using the output of the Nth bit as input for the N+1th
15
15
  // bit).
16
16
  //
17
- // Oddly, instead of providing a block 32 address by 20-bit cell, Quartus asks
18
- // synthesis tools to build MLABs out of 32 address by 1-bit cells, and tries
19
- // to put these cells in the same MLAB during cell placement. Because of this
20
- // a MISTRAL_MLAB cell represents one of these 32 address by 1-bit cells, and
21
- // 20 of them represent a physical MLAB.
17
+ // For historical reasons a MISTRAL_MLAB cell represents a 32 address by 1-bit cell,
18
+ // and 20 of them represent a physical MLAB.
22
19
  //
23
20
  // How the MLAB works
24
21
  // ------------------
@@ -28,10 +25,7 @@
28
25
  // by the Yosys `memory_bram` pass, and it doesn't make sense to me to use
29
26
  // `techmap` just for the sake of renaming the cell ports.
30
27
  //
31
- // The MLAB can be initialised to any value, but unfortunately Quartus only
32
- // allows memory initialisation from a file. Since Yosys doesn't preserve input
33
- // file information, or write the contents of an `initial` block to a file,
34
- // Yosys can't currently initialise the MLAB in a way Quartus will accept.
28
+ // The MLAB can be initialised to any value.
35
29
  //
36
30
  // The MLAB takes in data from A1DATA at the rising edge of CLK1, and if A1EN
37
31
  // is high, writes it to the address in A1ADDR. A1EN can therefore be used to
@@ -39,9 +33,7 @@
39
33
  //
40
34
  // Simultaneously, the MLAB reads data from B1ADDR, and outputs it to B1DATA,
41
35
  // asynchronous to CLK1 and ignoring A1EN. If a synchronous read is needed
42
- // then the output can be fed to embedded flops. Presently, Yosys assumes
43
- // Quartus will pack external flops into the MLAB, but this is an assumption
44
- // that needs testing.
36
+ // then the output can be fed to embedded flops.
45
37
 
46
38
  // The vendor sim model outputs 'x for a very short period (a few
47
39
  // combinational delta cycles) after each write. This has been omitted from
@@ -69,33 +61,6 @@ specify
69
61
  (B1ADDR[4] => B1DATA) = 96;
70
62
  endspecify
71
63
  `endif
72
- `ifdef arriav
73
- specify
74
- $setup(A1ADDR, posedge CLK1, 62);
75
- $setup(A1DATA, posedge CLK1, 62);
76
- $setup(A1EN, posedge CLK1, 62);
77
-
78
- (B1ADDR[0] => B1DATA) = 370;
79
- (B1ADDR[1] => B1DATA) = 292;
80
- (B1ADDR[2] => B1DATA) = 218;
81
- (B1ADDR[3] => B1DATA) = 74;
82
- (B1ADDR[4] => B1DATA) = 177;
83
- endspecify
84
- `endif
85
- `ifdef cyclone10gx
86
- // TODO: Cyclone 10 GX timings; the below timings are for Cyclone V
87
- specify
88
- $setup(A1ADDR, posedge CLK1, 86);
89
- $setup(A1DATA, posedge CLK1, 86);
90
- $setup(A1EN, posedge CLK1, 86);
91
-
92
- (B1ADDR[0] => B1DATA) = 487;
93
- (B1ADDR[1] => B1DATA) = 475;
94
- (B1ADDR[2] => B1DATA) = 382;
95
- (B1ADDR[3] => B1DATA) = 284;
96
- (B1ADDR[4] => B1DATA) = 96;
97
- endspecify
98
- `endif
99
64
 
100
65
  always @(posedge CLK1)
101
66
  if (A1EN) mem[A1ADDR] <= A1DATA;
@@ -134,17 +99,6 @@ specify
134
99
  if (B1EN) (posedge CLK1 => (B1DATA : A1DATA)) = 1004;
135
100
  endspecify
136
101
  `endif
137
- `ifdef arriav
138
- specify
139
- $setup(A1ADDR, posedge CLK1, 97);
140
- $setup(A1DATA, posedge CLK1, 74);
141
- $setup(A1EN, posedge CLK1, 109);
142
- $setup(B1ADDR, posedge CLK1, 97);
143
- $setup(B1EN, posedge CLK1, 126);
144
-
145
- if (B1EN) (posedge CLK1 => (B1DATA : A1DATA)) = 787;
146
- endspecify
147
- `endif
148
102
 
149
103
  always @(posedge CLK1) begin
150
104
  if (!A1EN)
@@ -1,5 +1,5 @@
1
1
  // **AUTOGENERATED FILE** **DO NOT EDIT**
2
- // Generated by ../yosys-src/techlibs/quicklogic/qlf_k6n10f/generate_bram_types_sim.py at 2024-05-08 05:20:44.526176+00:00
2
+ // Generated by ../yosys-src/techlibs/quicklogic/qlf_k6n10f/generate_bram_types_sim.py at 2024-06-08 01:06:35.578524+00:00
3
3
  `timescale 1ns /10ps
4
4
 
5
5
  module TDP36K_BRAM_A_X1_B_X1_nonsplit (
yowasp_yosys/smtbmc.py CHANGED
@@ -719,6 +719,8 @@ def smt_extract_mask(smt_expr, mask):
719
719
  return combined_chunks, ''.join(mask_index_order[start:end] for start, end in chunks)[::-1]
720
720
 
721
721
  def smt_concat(exprs):
722
+ if not isinstance(exprs, (tuple, list)):
723
+ exprs = tuple(exprs)
722
724
  if not exprs:
723
725
  return ""
724
726
  if len(exprs) == 1:
@@ -818,6 +820,9 @@ def ywfile_constraints(inywfile, constr_assumes, map_steps=None, skip_x=False):
818
820
  if not bits_re.match(bits):
819
821
  raise ValueError("unsupported bit value in Yosys witness file")
820
822
 
823
+ if bits.count('?') == len(bits):
824
+ continue
825
+
821
826
  smt_expr = ywfile_signal(sig, map_steps.get(t, t))
822
827
 
823
828
  smt_expr, bits = smt_extract_mask(smt_expr, bits)
yowasp_yosys/yosys.wasm CHANGED
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: yowasp-yosys
3
- Version: 0.40.0.68.post721.dev0
3
+ Version: 0.42.0.0.post734
4
4
  Summary: Yosys Open SYnthesis Suite
5
5
  Author-email: Catherine <whitequark@whitequark.org>
6
6
  License: ISC
@@ -1,8 +1,8 @@
1
1
  yowasp_yosys/__init__.py,sha256=x--xPTzLWZNoX6H0B2E3a1HMZMk3di10gVnWVLJ92xc,1325
2
2
  yowasp_yosys/sby.py,sha256=5T0BrIqJ5vobWMd9nOEClXq0rlRxCXNPYycGGS0l7zc,18414
3
- yowasp_yosys/smtbmc.py,sha256=ZYbKxnxP3rGyGa_X6yiH3bevZ2YIUNqzeak4_VT9NWc,73594
3
+ yowasp_yosys/smtbmc.py,sha256=Tg2UXcVSr_mZlHO3ptWv5XTbPJ_Xd5a8fZMz0h2l7J0,73747
4
4
  yowasp_yosys/witness.py,sha256=m3iV2Nydm0p4G79VRaaX3lGul-nGnuxeKnx20MCJgi0,17279
5
- yowasp_yosys/yosys.wasm,sha256=lN4X0G0S8goHT836Q1fuOiLgeTDTJ-meCqwhlyFpg5I,21916673
5
+ yowasp_yosys/yosys.wasm,sha256=FUs48pJSQs_m-pkostvIJdm-ILddx9n249Qo-4sGn5I,21964151
6
6
  yowasp_yosys/share/abc9_map.v,sha256=uWDqMpBQTeeadH1BlHVwkCy2StKF892xbgBgMKLK5-w,923
7
7
  yowasp_yosys/share/abc9_model.v,sha256=IfMyEGOEUBdZyiVule0wMhrVYVYQpmSIcxygbgtHItI,653
8
8
  yowasp_yosys/share/abc9_unmap.v,sha256=w107Y3iJjMU6D_6_aYLf2NziXTnAhpa5_CFAwaYO1iU,638
@@ -164,21 +164,18 @@ yowasp_yosys/share/intel_alm/common/abc9_map.v,sha256=_pRCAl141RoQTKDxeoIU1NMz12
164
164
  yowasp_yosys/share/intel_alm/common/abc9_model.v,sha256=lkefmB4DWh-YVhXbueTpbs5qVcqpJ-y_AuggAPHMzwg,342
165
165
  yowasp_yosys/share/intel_alm/common/abc9_unmap.v,sha256=B8lu9UoGG9SzTgfggBRegKD9VhQbqqcwt9Vd1_vHNIE,352
166
166
  yowasp_yosys/share/intel_alm/common/alm_map.v,sha256=w_bLNDWc9-aHeAodjYU74W2ikbSCuaRnFkJD6zEPnzM,1504
167
- yowasp_yosys/share/intel_alm/common/alm_sim.v,sha256=Wu3KhPuxYPbwIPVQo2ZKcLIAkRNi9bhJWND97R2sCV0,16659
167
+ yowasp_yosys/share/intel_alm/common/alm_sim.v,sha256=yBL_JnYrMI-0z9UTBeIUZ-Apcfbhif9X-8dY1fWLC_Q,6106
168
168
  yowasp_yosys/share/intel_alm/common/arith_alm_map.v,sha256=srPc3OeJrQm-U92QZuDuzefNw-vJvfWO0A5kmlveIdk,2096
169
169
  yowasp_yosys/share/intel_alm/common/bram_m10k.txt,sha256=qphG5ja8xD8EZAhAYmhH52Y_y0VaZZqgVBYHdEiXxLg,578
170
170
  yowasp_yosys/share/intel_alm/common/bram_m10k_map.v,sha256=txXH4k8P3LNj9oECXCTZ0Rqi2oRx6TzIVIlPrQkyotI,746
171
- yowasp_yosys/share/intel_alm/common/bram_m20k.txt,sha256=1yO0sVVkXLlfBuijfUTaPq0Ky1taMjww5uUyNAcQqDM,780
172
- yowasp_yosys/share/intel_alm/common/bram_m20k_map.v,sha256=TpD8XXHPi0fD7R1B7Rqo-R99vt38k9DAp4yh_hz6bI4,696
173
171
  yowasp_yosys/share/intel_alm/common/dff_map.v,sha256=goG4G6DwaZvOOBCD6l0DxIhP91WFjeT-EhEe5apnhmE,579
174
- yowasp_yosys/share/intel_alm/common/dff_sim.v,sha256=T33JXEQJIW1pGq497geE_3eVPsOvFsxS9OOTMn7q--Q,4803
172
+ yowasp_yosys/share/intel_alm/common/dff_sim.v,sha256=mTnNHB7fvd51_m1MKuAY_cO6WXYsrsPLoGwIU_Bk2qQ,3656
175
173
  yowasp_yosys/share/intel_alm/common/dsp_map.v,sha256=v0qt2I74LNYX1JqqKIHegOCaRv2armuzXW9gOeAuVnE,891
176
174
  yowasp_yosys/share/intel_alm/common/dsp_sim.v,sha256=Djm4eu69FFgqrmaNyKLSysNeRnCkf8PpsdHVM1PC_3c,2238
177
175
  yowasp_yosys/share/intel_alm/common/lutram_mlab.txt,sha256=Dlw5w8Jo467DXHSHED2VmwUnBARwDARjdcGuXxBROT4,316
178
176
  yowasp_yosys/share/intel_alm/common/megafunction_bb.v,sha256=1yVRPbaX_namYyW_QQQh7_VHYKbBiTF_D_gvfhtV-FU,23589
179
- yowasp_yosys/share/intel_alm/common/mem_sim.v,sha256=awWsgzBg5T4nNKcXVQdNImgaqy6K0cVo1QQzbPq-4OM,5317
177
+ yowasp_yosys/share/intel_alm/common/mem_sim.v,sha256=71xsrYFCfHuU1qpTUdMuzy4l2pRimXfuhQIRLv4fiOE,3709
180
178
  yowasp_yosys/share/intel_alm/common/misc_sim.v,sha256=d9Jjp8auAnFuujhrHxU5YYcmI_ytAvMqYTGbWdp1GYI,562
181
- yowasp_yosys/share/intel_alm/common/quartus_rename.v,sha256=Hp4UJfU6zTZXy_5LL9arW-z1OUTLLx-qOVUPsxGrq7I,7552
182
179
  yowasp_yosys/share/intel_alm/cyclonev/cells_sim.v,sha256=iAydbW_CThciv_fHD7s09lzQesAjyMoIcD2jqDPfuOY,5522
183
180
  yowasp_yosys/share/lattice/arith_map_ccu2c.v,sha256=RvY-WCUdIQiHg-gXxgmu1ezfB1uTjQON4bMQxO6Ju-Y,2592
184
181
  yowasp_yosys/share/lattice/arith_map_ccu2d.v,sha256=bbvVq4xpfgHam4BBThzJbFJF68mWKoJVm8wBDNwcQKo,2596
@@ -245,7 +242,7 @@ yowasp_yosys/share/quicklogic/pp3/latches_map.v,sha256=UrGzRlwwITwA7mMlXhHlDFPiw
245
242
  yowasp_yosys/share/quicklogic/pp3/lut_map.v,sha256=BmijMS4EqVQPP2BPo2zgKStKPPhRLTf5kbcAtGKZEVs,928
246
243
  yowasp_yosys/share/quicklogic/qlf_k6n10f/TDP18K_FIFO.v,sha256=k1AVrwpOQ3vpxoWAbchRpmNbncYCYtVfDExz6VcmtBg,10404
247
244
  yowasp_yosys/share/quicklogic/qlf_k6n10f/arith_map.v,sha256=Ea7aX3l71nFxP1Az5NHtca-ZPnQmUmUvlWI-tVl4Bkk,2560
248
- yowasp_yosys/share/quicklogic/qlf_k6n10f/bram_types_sim.v,sha256=khaEKPbipSvt04NUbLTn_g3C97yA0etni3qXSvpEzC8,2551774
245
+ yowasp_yosys/share/quicklogic/qlf_k6n10f/bram_types_sim.v,sha256=Eg5hvCxNfgxlUVTx_tOiQ2UZFEkAmQK4SW_G8wxQoa4,2551774
249
246
  yowasp_yosys/share/quicklogic/qlf_k6n10f/brams_map.v,sha256=Iqj4w3Vna6W80liLUtDhAQKwciQNZWX3aFr9FDBU5o4,103558
250
247
  yowasp_yosys/share/quicklogic/qlf_k6n10f/brams_sim.v,sha256=mJXEws9AvJLeUBr3eJzxTEvN7Y89zpkNsoR2tpjLu-w,339634
251
248
  yowasp_yosys/share/quicklogic/qlf_k6n10f/cells_sim.v,sha256=70GVgjrXbld6c2yITFriyoJLqO8CAcHDyA8oUPfkItg,7347
@@ -294,8 +291,8 @@ yowasp_yosys/share/xilinx/xc5v_dsp_map.v,sha256=I4lg0RQ54fBBba_7NNvUgwS4tQ1yLIsU
294
291
  yowasp_yosys/share/xilinx/xc6s_dsp_map.v,sha256=gTxHocB-Dn5G4BplWgri_tLhT6DIO2S0X-yu4iBKYyk,562
295
292
  yowasp_yosys/share/xilinx/xc7_dsp_map.v,sha256=zrzreQi7mElrAMtrayxtiO_Bw00S6zsjSjSVcjmJPH0,884
296
293
  yowasp_yosys/share/xilinx/xcu_dsp_map.v,sha256=gzCgl1emrHGcigVmU0nP0pW7dlhQ01SaWwXzHHcqt-o,882
297
- yowasp_yosys-0.40.0.68.post721.dev0.dist-info/METADATA,sha256=xHeJU965qTAw5HOKAwNc5PlWTeA8NrsCa3aexM_EZOg,2613
298
- yowasp_yosys-0.40.0.68.post721.dev0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
299
- yowasp_yosys-0.40.0.68.post721.dev0.dist-info/entry_points.txt,sha256=p_9sIVi2ZqsqgYYo14PywYkwHYTa76fMEq3LxweXJpc,220
300
- yowasp_yosys-0.40.0.68.post721.dev0.dist-info/top_level.txt,sha256=_yiNT8kLYkcD1TEuUCzQ_MkON1c3xuIRV59zXds4zd4,13
301
- yowasp_yosys-0.40.0.68.post721.dev0.dist-info/RECORD,,
294
+ yowasp_yosys-0.42.0.0.post734.dist-info/METADATA,sha256=15K5uUtW0DxqJB1XjEd7PPIiSjOs4rb8xtKocfRrUx4,2607
295
+ yowasp_yosys-0.42.0.0.post734.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
296
+ yowasp_yosys-0.42.0.0.post734.dist-info/entry_points.txt,sha256=p_9sIVi2ZqsqgYYo14PywYkwHYTa76fMEq3LxweXJpc,220
297
+ yowasp_yosys-0.42.0.0.post734.dist-info/top_level.txt,sha256=_yiNT8kLYkcD1TEuUCzQ_MkON1c3xuIRV59zXds4zd4,13
298
+ yowasp_yosys-0.42.0.0.post734.dist-info/RECORD,,
@@ -1,33 +0,0 @@
1
- bram __MISTRAL_M20K_SDP
2
- init 1 # TODO: Re-enable when I figure out how BRAM init works
3
- abits 14 @D16384x1
4
- dbits 1 @D16384x1
5
- abits 13 @D8192x2
6
- dbits 2 @D8192x2
7
- abits 12 @D4096x4 @D4096x5
8
- dbits 4 @D4096x4
9
- dbits 5 @D4096x5
10
- abits 11 @D2048x8 @D2048x10
11
- dbits 8 @D2048x8
12
- dbits 10 @D2048x10
13
- abits 10 @D1024x16 @D1024x20
14
- dbits 16 @D1024x16
15
- dbits 20 @D1024x20
16
- abits 9 @D512x32 @D512x40
17
- dbits 32 @D512x32
18
- dbits 40 @D512x40
19
- groups 2
20
- ports 1 1
21
- wrmode 1 0
22
- # read enable; write enable + byte enables (only for multiples of 8)
23
- enable 1 1
24
- transp 0 0
25
- clocks 1 1
26
- clkpol 1 1
27
- endbram
28
-
29
-
30
- match __MISTRAL_M20K_SDP
31
- min efficiency 5
32
- make_transp
33
- endmatch
@@ -1,31 +0,0 @@
1
- module __MISTRAL_M20K_SDP(CLK1, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN);
2
-
3
- parameter CFG_ABITS = 10;
4
- parameter CFG_DBITS = 20;
5
- parameter CFG_ENABLE_A = 1;
6
- parameter CFG_ENABLE_B = 1;
7
-
8
- input CLK1;
9
- input [CFG_ABITS-1:0] A1ADDR, B1ADDR;
10
- input [CFG_DBITS-1:0] A1DATA;
11
- output [CFG_DBITS-1:0] B1DATA;
12
- input [CFG_ENABLE_A-1:0] A1EN, B1EN;
13
-
14
- altsyncram #(
15
- .operation_mode("dual_port"),
16
- .ram_block_type("m20k"),
17
- .widthad_a(CFG_ABITS),
18
- .width_a(CFG_DBITS),
19
- .widthad_b(CFG_ABITS),
20
- .width_b(CFG_DBITS),
21
- ) _TECHMAP_REPLACE_ (
22
- .address_a(A1ADDR),
23
- .data_a(A1DATA),
24
- .wren_a(A1EN),
25
- .address_b(B1ADDR),
26
- .q_b(B1DATA),
27
- .clock0(CLK1),
28
- .clock1(CLK1)
29
- );
30
-
31
- endmodule
@@ -1,311 +0,0 @@
1
- `ifdef cyclonev
2
- `define LCELL cyclonev_lcell_comb
3
- `define MAC cyclonev_mac
4
- `define MLAB cyclonev_mlab_cell
5
- `define RAM_BLOCK cyclonev_ram_block
6
- `define IBUF cyclonev_io_ibuf
7
- `define OBUF cyclonev_io_obuf
8
- `define CLKENA cyclonev_clkena
9
- `endif
10
- `ifdef arriav
11
- `define LCELL arriav_lcell_comb
12
- `define MAC arriav_mac
13
- `define MLAB arriav_mlab_cell
14
- `define RAM_BLOCK arriav_ram_block
15
- `define IBUF arriav_io_ibuf
16
- `define OBUF arriav_io_obuf
17
- `define CLKENA arriav_clkena
18
- `endif
19
- `ifdef cyclone10gx
20
- `define LCELL cyclone10gx_lcell_comb
21
- `define MAC cyclone10gx_mac
22
- `define MLAB cyclone10gx_mlab_cell
23
- `define RAM_BLOCK cyclone10gx_ram_block
24
- `define IBUF cyclone10gx_io_ibuf
25
- `define OBUF cyclone10gx_io_obuf
26
- `define CLKENA cyclone10gx_clkena
27
- `endif
28
-
29
- module __MISTRAL_VCC(output Q);
30
-
31
- MISTRAL_ALUT2 #(.LUT(4'b1111)) _TECHMAP_REPLACE_ (.A(1'b1), .B(1'b1), .Q(Q));
32
-
33
- endmodule
34
-
35
-
36
- module __MISTRAL_GND(output Q);
37
-
38
- MISTRAL_ALUT2 #(.LUT(4'b0000)) _TECHMAP_REPLACE_ (.A(1'b1), .B(1'b1), .Q(Q));
39
-
40
- endmodule
41
-
42
-
43
- module MISTRAL_FF(input DATAIN, CLK, ACLR, ENA, SCLR, SLOAD, SDATA, output reg Q);
44
-
45
- dffeas #(.power_up("low"), .is_wysiwyg("true")) _TECHMAP_REPLACE_ (.d(DATAIN), .clk(CLK), .clrn(ACLR), .ena(ENA), .sclr(SCLR), .sload(SLOAD), .asdata(SDATA), .q(Q));
46
-
47
- endmodule
48
-
49
-
50
- module MISTRAL_ALUT6(input A, B, C, D, E, F, output Q);
51
- parameter [63:0] LUT = 64'h0000_0000_0000_0000;
52
-
53
- `LCELL #(.lut_mask(LUT)) _TECHMAP_REPLACE_ (.dataa(A), .datab(B), .datac(C), .datad(D), .datae(E), .dataf(F), .combout(Q));
54
-
55
- endmodule
56
-
57
-
58
- module MISTRAL_ALUT5(input A, B, C, D, E, output Q);
59
- parameter [31:0] LUT = 32'h0000_0000;
60
-
61
- `LCELL #(.lut_mask({2{LUT}})) _TECHMAP_REPLACE_ (.dataa(A), .datab(B), .datac(C), .datad(D), .datae(E), .combout(Q));
62
-
63
- endmodule
64
-
65
-
66
- module MISTRAL_ALUT4(input A, B, C, D, output Q);
67
- parameter [15:0] LUT = 16'h0000;
68
-
69
- `LCELL #(.lut_mask({4{LUT}})) _TECHMAP_REPLACE_ (.dataa(A), .datab(B), .datac(C), .datad(D), .combout(Q));
70
-
71
- endmodule
72
-
73
-
74
- module MISTRAL_ALUT3(input A, B, C, output Q);
75
- parameter [7:0] LUT = 8'h00;
76
-
77
- `LCELL #(.lut_mask({8{LUT}})) _TECHMAP_REPLACE_ (.dataa(A), .datab(B), .datac(C), .combout(Q));
78
-
79
- endmodule
80
-
81
-
82
- module MISTRAL_ALUT2(input A, B, output Q);
83
- parameter [3:0] LUT = 4'h0;
84
-
85
- `LCELL #(.lut_mask({16{LUT}})) _TECHMAP_REPLACE_ (.dataa(A), .datab(B), .combout(Q));
86
-
87
- endmodule
88
-
89
-
90
- module MISTRAL_NOT(input A, output Q);
91
-
92
- NOT _TECHMAP_REPLACE_ (.IN(A), .OUT(Q));
93
-
94
- endmodule
95
-
96
-
97
- module MISTRAL_ALUT_ARITH(input A, B, C, D0, D1, CI, output SO, CO);
98
- parameter LUT0 = 16'h0000;
99
- parameter LUT1 = 16'h0000;
100
-
101
- `LCELL #(.lut_mask({16'h0, LUT1, 16'h0, LUT0})) _TECHMAP_REPLACE_ (.dataa(A), .datab(B), .datac(C), .datad(D0), .dataf(D1), .cin(CI), .sumout(SO), .cout(CO));
102
-
103
- endmodule
104
-
105
-
106
- module MISTRAL_MLAB(input [4:0] A1ADDR, input A1DATA, A1EN, CLK1, input [4:0] B1ADDR, output B1DATA);
107
-
108
- parameter _TECHMAP_CELLNAME_ = "";
109
-
110
- // Here we get to an unfortunate situation. The cell has a mem_init0 parameter,
111
- // which takes in a hexadecimal string that could be used to initialise RAM.
112
- // In the vendor simulation models, this appears to work fine, but Quartus,
113
- // either intentionally or not, forgets about this parameter and initialises the
114
- // RAM to zero.
115
- //
116
- // Because of this, RAM initialisation is presently disabled, but the source
117
- // used to generate mem_init0 is kept (commented out) in case this gets fixed
118
- // or an undocumented way to get Quartus to initialise from mem_init0 is found.
119
-
120
- `MLAB #(
121
- .logical_ram_name(_TECHMAP_CELLNAME_),
122
- .logical_ram_depth(32),
123
- .logical_ram_width(1),
124
- .mixed_port_feed_through_mode("Dont Care"),
125
- .first_bit_number(0),
126
- .first_address(0),
127
- .last_address(31),
128
- .address_width(5),
129
- .data_width(1),
130
- .byte_enable_mask_width(1),
131
- .port_b_data_out_clock("NONE"),
132
- // .mem_init0($sformatf("%08x", INIT))
133
- ) _TECHMAP_REPLACE_ (
134
- .portaaddr(A1ADDR),
135
- .portadatain(A1DATA),
136
- .portbaddr(B1ADDR),
137
- .portbdataout(B1DATA),
138
- .ena0(A1EN),
139
- .clk0(CLK1)
140
- );
141
-
142
- endmodule
143
-
144
-
145
- module MISTRAL_M10K(A1ADDR, A1DATA, A1EN, CLK1, B1ADDR, B1DATA, B1EN);
146
-
147
- parameter CFG_ABITS = 10;
148
- parameter CFG_DBITS = 10;
149
-
150
- parameter _TECHMAP_CELLNAME_ = "";
151
-
152
- input [CFG_ABITS-1:0] A1ADDR, B1ADDR;
153
- input [CFG_DBITS-1:0] A1DATA;
154
- input CLK1, A1EN, B1EN;
155
- output [CFG_DBITS-1:0] B1DATA;
156
-
157
- // Much like the MLAB, the M10K has mem_init[01234] parameters which would let
158
- // you initialise the RAM cell via hex literals. If they were implemented.
159
-
160
- // Since the MISTRAL_M10K block has an inverted write-enable (like the real hardware)
161
- // but the Quartus primitive expects a normal write-enable, we add an inverter.
162
- wire A1EN_N;
163
- NOT wren_inv (.IN(A1EN), .OUT(A1EN_N));
164
-
165
- `RAM_BLOCK #(
166
- .operation_mode("dual_port"),
167
- .logical_ram_name(_TECHMAP_CELLNAME_),
168
- .port_a_address_width(CFG_ABITS),
169
- .port_a_data_width(CFG_DBITS),
170
- .port_a_logical_ram_depth(2**CFG_ABITS),
171
- .port_a_logical_ram_width(CFG_DBITS),
172
- .port_a_first_address(0),
173
- .port_a_last_address(2**CFG_ABITS - 1),
174
- .port_a_first_bit_number(0),
175
- .port_b_address_width(CFG_ABITS),
176
- .port_b_data_width(CFG_DBITS),
177
- .port_b_logical_ram_depth(2**CFG_ABITS),
178
- .port_b_logical_ram_width(CFG_DBITS),
179
- .port_b_first_address(0),
180
- .port_b_last_address(2**CFG_ABITS - 1),
181
- .port_b_first_bit_number(0),
182
- .port_b_address_clock("clock0"),
183
- .port_b_read_enable_clock("clock0")
184
- ) ram_block (
185
- .portaaddr(A1ADDR),
186
- .portadatain(A1DATA),
187
- .portawe(A1EN_N),
188
- .portbaddr(B1ADDR),
189
- .portbdataout(B1DATA),
190
- .portbre(B1EN),
191
- .clk0(CLK1)
192
- );
193
-
194
- endmodule
195
-
196
-
197
- module MISTRAL_MUL27X27(input [26:0] A, B, output [53:0] Y);
198
-
199
- parameter A_SIGNED = 1;
200
- parameter B_SIGNED = 1;
201
-
202
- `MAC #(
203
- .ax_width(27),
204
- .signed_max(A_SIGNED ? "true" : "false"),
205
- .ay_scan_in_width(27),
206
- .signed_may(B_SIGNED ? "true" : "false"),
207
- .result_a_width(54),
208
- .operation_mode("M27x27")
209
- ) _TECHMAP_REPLACE_ (
210
- .ax(A),
211
- .ay(B),
212
- .resulta(Y)
213
- );
214
-
215
- endmodule
216
-
217
-
218
- module MISTRAL_MUL18X18(input [17:0] A, B, output [35:0] Y);
219
-
220
- parameter A_SIGNED = 1;
221
- parameter B_SIGNED = 1;
222
-
223
- `MAC #(
224
- .ax_width(18),
225
- .signed_max(A_SIGNED ? "true" : "false"),
226
- .ay_scan_in_width(18),
227
- .signed_may(B_SIGNED ? "true" : "false"),
228
- .result_a_width(36),
229
- .operation_mode("M18x18_FULL")
230
- ) _TECHMAP_REPLACE_ (
231
- .ax(A),
232
- .ay(B),
233
- .resulta(Y)
234
- );
235
-
236
- endmodule
237
-
238
-
239
- module MISTRAL_MUL9X9(input [8:0] A, B, output [17:0] Y);
240
-
241
- parameter A_SIGNED = 1;
242
- parameter B_SIGNED = 1;
243
-
244
- `MAC #(
245
- .ax_width(9),
246
- .signed_max(A_SIGNED ? "true" : "false"),
247
- .ay_scan_in_width(9),
248
- .signed_may(B_SIGNED ? "true" : "false"),
249
- .result_a_width(18),
250
- .operation_mode("M9x9")
251
- ) _TECHMAP_REPLACE_ (
252
- .ax(A),
253
- .ay(B),
254
- .resulta(Y)
255
- );
256
-
257
- endmodule
258
-
259
- module MISTRAL_IB(input PAD, output O);
260
- `IBUF #(
261
- .bus_hold("false"),
262
- .differential_mode("false")
263
- ) _TECHMAP_REPLACE_ (
264
- .i(PAD),
265
- .o(O)
266
- );
267
- endmodule
268
-
269
- module MISTRAL_OB(output PAD, input I, OE);
270
- `OBUF #(
271
- .bus_hold("false"),
272
- .differential_mode("false")
273
- ) _TECHMAP_REPLACE_ (
274
- .i(I),
275
- .o(PAD),
276
- .oe(OE)
277
- );
278
- endmodule
279
-
280
- module MISTRAL_IO(output PAD, input I, OE, output O);
281
- `IBUF #(
282
- .bus_hold("false"),
283
- .differential_mode("false")
284
- ) ibuf (
285
- .i(PAD),
286
- .o(O)
287
- );
288
-
289
- `OBUF #(
290
- .bus_hold("false"),
291
- .differential_mode("false")
292
- ) obuf (
293
- .i(I),
294
- .o(PAD),
295
- .oe(OE)
296
- );
297
- endmodule
298
-
299
- module MISTRAL_CLKBUF (input A, output Q);
300
- `CLKENA #(
301
- .clock_type("auto"),
302
- .ena_register_mode("always enabled"),
303
- .ena_register_power_up("high"),
304
- .disable_mode("low"),
305
- .test_syn("high")
306
- ) _TECHMAP_REPLACE_ (
307
- .inclk(A),
308
- .ena(1'b1),
309
- .outclk(Q)
310
- );
311
- endmodule