Initial implementation of techlib support for GreenPAK latches. Instantiation only...
authorAndrew Zonenberg <azonenberg@drawersteak.com>
Tue, 6 Dec 2016 05:22:41 +0000 (21:22 -0800)
committerAndrew Zonenberg <azonenberg@drawersteak.com>
Tue, 6 Dec 2016 05:22:41 +0000 (21:22 -0800)
techlibs/greenpak4/cells_map.v
techlibs/greenpak4/cells_sim.v

index 111a77a14eda59656c1ab8ab804fb04ec1653f96..f8fb2569a12c5ed699ea6521b17c087dbe91e7ef 100644 (file)
@@ -50,6 +50,58 @@ module GP_DFFRI(input D, CLK, nRST, output reg nQ);
        );
 endmodule
 
+module GP_DLATCHS(input D, nCLK, nSET, output reg Q);
+       parameter [0:0] INIT = 1'bx;
+       GP_DLATCHSR #(
+               .INIT(INIT),
+               .SRMODE(1'b1),
+       ) _TECHMAP_REPLACE_ (
+               .D(D),
+               .nCLK(nCLK),
+               .nSR(nSET),
+               .Q(Q)
+       );
+endmodule
+
+module GP_DLATCHR(input D, nCLK, nRST, output reg Q);
+       parameter [0:0] INIT = 1'bx;
+       GP_DLATCHSR #(
+               .INIT(INIT),
+               .SRMODE(1'b0),
+       ) _TECHMAP_REPLACE_ (
+               .D(D),
+               .nCLK(nCLK),
+               .nSR(nRST),
+               .Q(Q)
+       );
+endmodule
+
+module GP_DLATCHSI(input D, nCLK, nSET, output reg nQ);
+       parameter [0:0] INIT = 1'bx;
+       GP_DLATCHSRI #(
+               .INIT(INIT),
+               .SRMODE(1'b1),
+       ) _TECHMAP_REPLACE_ (
+               .D(D),
+               .nCLK(nCLK),
+               .nSR(nSET),
+               .nQ(nQ)
+       );
+endmodule
+
+module GP_DLATCHRI(input D, nCLK, nRST, output reg nQ);
+       parameter [0:0] INIT = 1'bx;
+       GP_DLATCHSRI #(
+               .INIT(INIT),
+               .SRMODE(1'b0),
+       ) _TECHMAP_REPLACE_ (
+               .D(D),
+               .nCLK(nCLK),
+               .nSR(nRST),
+               .nQ(nQ)
+       );
+endmodule
+
 module GP_OBUFT(input IN, input OE, output OUT);
        GP_IOBUF _TECHMAP_REPLACE_ (
                .IN(IN),
index 80746be0fd3ae8e4d8ff3a06b520bb3f760720cd..1b3a6603802555d80b79fa38c00aeb9a10ade790 100644 (file)
@@ -240,6 +240,74 @@ module GP_DFFSRI(input D, CLK, nSR, output reg nQ);
        end
 endmodule
 
+module GP_DLATCHR(input D, input nCLK, input nRST, output reg Q);
+       parameter [0:0] INIT = 1'bx;
+       initial Q = INIT;
+       always @(*) begin
+               if(!nRST)
+                       Q <= 1'b0;
+               else if(!nCLK)
+                       Q <= D;
+       end
+endmodule
+
+module GP_DLATCHRI(input D, input nCLK, input nRST, output reg Q);
+       parameter [0:0] INIT = 1'bx;
+       initial Q = INIT;
+       always @(*) begin
+               if(!nRST)
+                       Q <= 1'b1;
+               else if(!nCLK)
+                       Q <= ~D;
+       end
+endmodule
+
+module GP_DLATCHS(input D, input nCLK, input nSET, output reg Q);
+       parameter [0:0] INIT = 1'bx;
+       initial Q = INIT;
+       always @(*) begin
+               if(!nSET)
+                       Q <= 1'b1;
+               else if(!nCLK)
+                       Q <= D;
+       end
+endmodule
+
+module GP_DLATCHSI(input D, input nCLK, input nSET, output reg Q);
+       parameter [0:0] INIT = 1'bx;
+       initial Q = INIT;
+       always @(*) begin
+               if(!nSET)
+                       Q <= 1'b0;
+               else if(!nCLK)
+                       Q <= ~D;
+       end
+endmodule
+
+module GP_DLATCHSR(input D, input nCLK, input nSR, output reg Q);
+       parameter [0:0] INIT = 1'bx;
+       parameter[0:0] SRMODE = 1'bx;
+       initial Q = INIT;
+       always @(*) begin
+               if(!nSR)
+                       Q <= SRMODE;
+               else if(!nCLK)
+                       Q <= D;
+       end
+endmodule
+
+module GP_DLATCHSRI(input D, input nCLK, input nSR, output reg Q);
+       parameter [0:0] INIT = 1'bx;
+       parameter[0:0] SRMODE = 1'bx;
+       initial Q = INIT;
+       always @(*) begin
+               if(!nSR)
+                       Q <= ~SRMODE;
+               else if(!nCLK)
+                       Q <= ~D;
+       end
+endmodule
+
 module GP_EDGEDET(input IN, output reg OUT);
 
        parameter EDGE_DIRECTION = "RISING";