greenpak4: added model for GP_EDGEDET block
[yosys.git] / techlibs / greenpak4 / cells_sim.v
index ceec2869693c1a248b0c88dc9eae92b8feb210e8..8a1794fc16df1fcb455315a1274e1704750ac3b7 100644 (file)
@@ -165,6 +165,14 @@ module GP_DFF(input D, CLK, output reg Q);
        end
 endmodule
 
+module GP_DFFI(input D, CLK, output reg nQ);
+       parameter [0:0] INIT = 1'bx;
+       initial nQ = INIT;
+       always @(posedge CLK) begin
+               nQ <= ~D;
+       end
+endmodule
+
 module GP_DFFR(input D, CLK, nRST, output reg Q);
        parameter [0:0] INIT = 1'bx;
        initial Q = INIT;
@@ -176,6 +184,17 @@ module GP_DFFR(input D, CLK, nRST, output reg Q);
        end
 endmodule
 
+module GP_DFFRI(input D, CLK, nRST, output reg nQ);
+       parameter [0:0] INIT = 1'bx;
+       initial nQ = INIT;
+       always @(posedge CLK, negedge nRST) begin
+               if (!nRST)
+                       nQ <= 1'b1;
+               else
+                       nQ <= ~D;
+       end
+endmodule
+
 module GP_DFFS(input D, CLK, nSET, output reg Q);
        parameter [0:0] INIT = 1'bx;
        initial Q = INIT;
@@ -187,6 +206,17 @@ module GP_DFFS(input D, CLK, nSET, output reg Q);
        end
 endmodule
 
+module GP_DFFSI(input D, CLK, nSET, output reg nQ);
+       parameter [0:0] INIT = 1'bx;
+       initial nQ = INIT;
+       always @(posedge CLK, negedge nSET) begin
+               if (!nSET)
+                       nQ <= 1'b0;
+               else
+                       nQ <= ~D;
+       end
+endmodule
+
 module GP_DFFSR(input D, CLK, nSR, output reg Q);
        parameter [0:0] INIT = 1'bx;
        parameter [0:0] SRMODE = 1'bx;
@@ -199,6 +229,28 @@ module GP_DFFSR(input D, CLK, nSR, output reg Q);
        end
 endmodule
 
+module GP_DFFSRI(input D, CLK, nSR, output reg nQ);
+       parameter [0:0] INIT = 1'bx;
+       parameter [0:0] SRMODE = 1'bx;
+       initial nQ = INIT;
+       always @(posedge CLK, negedge nSR) begin
+               if (!nSR)
+                       nQ <= ~SRMODE;
+               else
+                       nQ <= ~D;
+       end
+endmodule
+
+module GP_EDGEDET(input IN, output reg OUT);
+
+       parameter EDGE_DIRECTION = "RISING";
+       parameter DELAY_STEPS = 1;
+       parameter GLITCH_FILTER = 0;
+       
+       //not implemented for simulation
+       
+endmodule
+
 module GP_IBUF(input IN, output OUT);
        assign OUT = IN;
 endmodule
@@ -367,7 +419,8 @@ endmodule
 //keep constraint needed to prevent optimization since we have no outputs
 (* keep *)
 module GP_SYSRESET(input RST);
-       parameter RESET_MODE = "RISING";
+       parameter RESET_MODE = "EDGE";
+       parameter EDGE_SPEED = 4;
        
        //cannot simulate whole system reset