ecp5: Do not use specify in generate in cells_sim.v.
authorMarcelina Koƛcielnicka <mwk@0x04.net>
Mon, 21 Feb 2022 15:30:42 +0000 (16:30 +0100)
committerJacob Lifshay <programmerjake@gmail.com>
Thu, 26 May 2022 02:36:44 +0000 (19:36 -0700)
(cherry picked from commit d0f4d0b153572ddee5f19831f40b9c40eb480db0)

techlibs/ecp5/cells_sim.v

index 357fd917302935883cfe6f0c351bf4175c2cdd7e..ecc6d85848d655a8b11c8821362ab89bd20fbb36 100644 (file)
@@ -355,37 +355,24 @@ module TRELLIS_FF(input CLK, LSR, CE, DI, M, output reg Q);
                end
        endgenerate
 
-       generate
-               // TODO
-               if (CLKMUX == "INV")
-                       specify
-                               $setup(DI, negedge CLK, 0);
-                               $setup(CE, negedge CLK, 0);
-                               $setup(LSR, negedge CLK, 0);
-`ifndef YOSYS
-                               if (SRMODE == "ASYNC" && muxlsr) (negedge CLK => (Q : srval)) = 0;
-`else
-                               if (SRMODE == "ASYNC" && muxlsr) (LSR => Q) = 0;        // Technically, this should be an edge sensitive path
-                                                                                       // but for facilitating a bypass box, let's pretend it's
-                                                                                       // a simple path
-`endif
-                               if (!muxlsr && muxce) (negedge CLK => (Q : DI)) = 0;
-                       endspecify
-               else
-                       specify
-                               $setup(DI, posedge CLK, 0);
-                               $setup(CE, posedge CLK, 0);
-                               $setup(LSR, posedge CLK, 0);
+       specify
+               $setup(DI, negedge CLK &&& CLKMUX == "INV", 0);
+               $setup(CE, negedge CLK &&& CLKMUX == "INV", 0);
+               $setup(LSR, negedge CLK &&& CLKMUX == "INV", 0);
+               $setup(DI, posedge CLK &&& CLKMUX != "INV", 0);
+               $setup(CE, posedge CLK &&& CLKMUX != "INV", 0);
+               $setup(LSR, posedge CLK &&& CLKMUX != "INV", 0);
 `ifndef YOSYS
-                               if (SRMODE == "ASYNC" && muxlsr) (posedge CLK => (Q : srval)) = 0;
+               if (SRMODE == "ASYNC" && muxlsr && CLKMUX == "INV") (negedge CLK => (Q : srval)) = 0;
+               if (SRMODE == "ASYNC" && muxlsr && CLKMUX != "INV") (posedge CLK => (Q : srval)) = 0;
 `else
-                               if (SRMODE == "ASYNC" && muxlsr) (LSR => Q) = 0;        // Technically, this should be an edge sensitive path
-                                                                                       // but for facilitating a bypass box, let's pretend it's
-                                                                                       // a simple path
+               if (SRMODE == "ASYNC" && muxlsr) (LSR => Q) = 0;        // Technically, this should be an edge sensitive path
+                                                                       // but for facilitating a bypass box, let's pretend it's
+                                                                       // a simple path
 `endif
-                               if (!muxlsr && muxce) (posedge CLK => (Q : DI)) = 0;
-                       endspecify
-       endgenerate
+               if (!muxlsr && muxce && CLKMUX == "INV") (negedge CLK => (Q : DI)) = 0;
+               if (!muxlsr && muxce && CLKMUX != "INV") (posedge CLK => (Q : DI)) = 0;
+       endspecify
 endmodule
 
 // ---------------------------------------