btor backend: add option to not include internal names
[yosys.git] / techlibs / greenpak4 / cells_sim_digital.v
index fc481975c0faddd884c4975b5f4b632f70b6ea02..43d35d08f33c4c3c66ee49e585c756139de0bdf4 100644 (file)
@@ -57,48 +57,52 @@ module GP_COUNT14(input CLK, input wire RST, output reg OUT);
                case(RESET_MODE)
 
                        "RISING": begin
-                               always @(posedge CLK or posedge RST) begin
-                                       count           <= count - 1'd1;
-                                       if(count == 0)
-                                               count   <= COUNT_TO;
-
+                               always @(posedge CLK, posedge RST) begin
                                        if(RST)
-                                               count   <= 0;
+                                               count           <= 0;
+                                       else begin
+                                               count           <= count - 1'd1;
+                                               if(count == 0)
+                                                       count   <= COUNT_TO;
+                                       end
                                end
                        end
 
                        "FALLING": begin
-                               always @(posedge CLK or negedge RST) begin
-                                       count           <= count - 1'd1;
-                                       if(count == 0)
-                                               count   <= COUNT_TO;
-
+                               always @(posedge CLK, negedge RST) begin
                                        if(!RST)
-                                               count   <= 0;
+                                               count           <= 0;
+                                       else begin
+                                               count           <= count - 1'd1;
+                                               if(count == 0)
+                                                       count   <= COUNT_TO;
+                                       end
                                end
                        end
 
                        "BOTH": begin
                                initial begin
-                                       $display("Both-edge reset mode for GP_COUNT8 not implemented");
+                                       $display("Both-edge reset mode for GP_COUNT14 not implemented");
                                        $finish;
                                end
                        end
 
                        "LEVEL": begin
-                               always @(posedge CLK or posedge RST) begin
-                                       count           <= count - 1'd1;
-                                       if(count == 0)
-                                               count   <= COUNT_TO;
-
+                               always @(posedge CLK, posedge RST) begin
                                        if(RST)
-                                               count   <= 0;
+                                               count           <= 0;
+
+                                       else begin
+                                               count           <= count - 1'd1;
+                                               if(count == 0)
+                                                       count   <= COUNT_TO;
+                                       end
                                end
                        end
 
                        default: begin
                                initial begin
-                                       $display("Invalid RESET_MODE on GP_COUNT8");
+                                       $display("Invalid RESET_MODE on GP_COUNT14");
                                        $finish;
                                end
                        end
@@ -141,21 +145,7 @@ module GP_COUNT14_ADV(input CLK, input RST, output reg OUT,
                case(RESET_MODE)
 
                        "RISING": begin
-                               always @(posedge CLK or posedge RST) begin
-
-                                       //Main counter
-                                       if(KEEP) begin
-                                       end
-                                       else if(UP)
-                                               count           <= count + 1'd1;
-                                       else
-                                               count           <= count - 1'd1;
-
-                                       //Wrapping
-                                       if(count == 0 && !UP)
-                                               count   <= COUNT_TO;
-                                       if(count == 14'h3fff && UP)
-                                               count   <= COUNT_TO;
+                               always @(posedge CLK, posedge RST) begin
 
                                        //Resets
                                        if(RST) begin
@@ -165,25 +155,25 @@ module GP_COUNT14_ADV(input CLK, input RST, output reg OUT,
                                                        count   <= COUNT_TO;
                                        end
 
-                               end
-                       end
-
-                       "FALLING": begin
-                               always @(posedge CLK or negedge RST) begin
-
-                                       //Main counter
-                                       if(KEEP) begin
+                                       else if(KEEP) begin
                                        end
-                                       else if(UP)
+                                       else if(UP) begin
                                                count           <= count + 1'd1;
-                                       else
+                                               if(count == 14'h3fff)
+                                                       count   <= COUNT_TO;
+                                       end
+                                       else begin
                                                count           <= count - 1'd1;
 
-                                       //Wrapping
-                                       if(count == 0 && !UP)
-                                               count   <= COUNT_TO;
-                                       if(count == 14'h3fff && UP)
-                                               count   <= COUNT_TO;
+                                               if(count == 0)
+                                                       count   <= COUNT_TO;
+                                       end
+
+                               end
+                       end
+
+                       "FALLING": begin
+                               always @(posedge CLK, negedge RST) begin
 
                                        //Resets
                                        if(!RST) begin
@@ -193,6 +183,20 @@ module GP_COUNT14_ADV(input CLK, input RST, output reg OUT,
                                                        count   <= COUNT_TO;
                                        end
 
+                                       else if(KEEP) begin
+                                       end
+                                       else if(UP) begin
+                                               count           <= count + 1'd1;
+                                               if(count == 14'h3fff)
+                                                       count   <= COUNT_TO;
+                                       end
+                                       else begin
+                                               count           <= count - 1'd1;
+
+                                               if(count == 0)
+                                                       count   <= COUNT_TO;
+                                       end
+
                                end
                        end
 
@@ -204,21 +208,7 @@ module GP_COUNT14_ADV(input CLK, input RST, output reg OUT,
                        end
 
                        "LEVEL": begin
-                               always @(posedge CLK or posedge RST) begin
-
-                                       //Main counter
-                                       if(KEEP) begin
-                                       end
-                                       else if(UP)
-                                               count           <= count + 1'd1;
-                                       else
-                                               count           <= count - 1'd1;
-
-                                       //Wrapping
-                                       if(count == 0 && !UP)
-                                               count   <= COUNT_TO;
-                                       if(count == 14'h3fff && UP)
-                                               count   <= COUNT_TO;
+                               always @(posedge CLK, posedge RST) begin
 
                                        //Resets
                                        if(RST) begin
@@ -228,6 +218,24 @@ module GP_COUNT14_ADV(input CLK, input RST, output reg OUT,
                                                        count   <= COUNT_TO;
                                        end
 
+                                       else begin
+
+                                               if(KEEP) begin
+                                               end
+                                               else if(UP) begin
+                                                       count           <= count + 1'd1;
+                                                       if(count == 14'h3fff)
+                                                               count   <= COUNT_TO;
+                                               end
+                                               else begin
+                                                       count           <= count - 1'd1;
+
+                                                       if(count == 0)
+                                                               count   <= COUNT_TO;
+                                               end
+
+                                       end
+
                                end
                        end
 
@@ -276,21 +284,7 @@ module GP_COUNT8_ADV(input CLK, input RST, output reg OUT,
                case(RESET_MODE)
 
                        "RISING": begin
-                               always @(posedge CLK or posedge RST) begin
-
-                                       //Main counter
-                                       if(KEEP) begin
-                                       end
-                                       else if(UP)
-                                               count           <= count + 1'd1;
-                                       else
-                                               count           <= count - 1'd1;
-
-                                       //Wrapping
-                                       if(count == 0 && !UP)
-                                               count   <= COUNT_TO;
-                                       if(count == 8'hff && UP)
-                                               count   <= COUNT_TO;
+                               always @(posedge CLK, posedge RST) begin
 
                                        //Resets
                                        if(RST) begin
@@ -300,25 +294,26 @@ module GP_COUNT8_ADV(input CLK, input RST, output reg OUT,
                                                        count   <= COUNT_TO;
                                        end
 
-                               end
-                       end
-
-                       "FALLING": begin
-                               always @(posedge CLK or negedge RST) begin
-
                                        //Main counter
-                                       if(KEEP) begin
+                                       else if(KEEP) begin
                                        end
-                                       else if(UP)
+                                       else if(UP) begin
                                                count           <= count + 1'd1;
-                                       else
+                                               if(count == 8'hff)
+                                                       count   <= COUNT_TO;
+                                       end
+                                       else begin
                                                count           <= count - 1'd1;
 
-                                       //Wrapping
-                                       if(count == 0 && !UP)
-                                               count   <= COUNT_TO;
-                                       if(count == 8'hff && UP)
-                                               count   <= COUNT_TO;
+                                               if(count == 0)
+                                                       count   <= COUNT_TO;
+                                       end
+
+                               end
+                       end
+
+                       "FALLING": begin
+                               always @(posedge CLK, negedge RST) begin
 
                                        //Resets
                                        if(!RST) begin
@@ -328,6 +323,21 @@ module GP_COUNT8_ADV(input CLK, input RST, output reg OUT,
                                                        count   <= COUNT_TO;
                                        end
 
+                                       //Main counter
+                                       else if(KEEP) begin
+                                       end
+                                       else if(UP) begin
+                                               count           <= count + 1'd1;
+                                               if(count == 8'hff)
+                                                       count   <= COUNT_TO;
+                                       end
+                                       else begin
+                                               count           <= count - 1'd1;
+
+                                               if(count == 0)
+                                                       count   <= COUNT_TO;
+                                       end
+
                                end
                        end
 
@@ -339,21 +349,7 @@ module GP_COUNT8_ADV(input CLK, input RST, output reg OUT,
                        end
 
                        "LEVEL": begin
-                               always @(posedge CLK or posedge RST) begin
-
-                                       //Main counter
-                                       if(KEEP) begin
-                                       end
-                                       else if(UP)
-                                               count           <= count + 1'd1;
-                                       else
-                                               count           <= count - 1'd1;
-
-                                       //Wrapping
-                                       if(count == 0 && !UP)
-                                               count   <= COUNT_TO;
-                                       if(count == 8'hff && UP)
-                                               count   <= COUNT_TO;
+                               always @(posedge CLK, posedge RST) begin
 
                                        //Resets
                                        if(RST) begin
@@ -363,6 +359,23 @@ module GP_COUNT8_ADV(input CLK, input RST, output reg OUT,
                                                        count   <= COUNT_TO;
                                        end
 
+                                       else begin
+
+                                               if(KEEP) begin
+                                               end
+                                               else if(UP) begin
+                                                       count           <= count + 1'd1;
+                                                       if(count == 8'hff)
+                                                               count   <= COUNT_TO;
+                                               end
+                                               else begin
+                                                       count           <= count - 1'd1;
+
+                                                       if(count == 0)
+                                                               count   <= COUNT_TO;
+                                               end
+                                       end
+
                                end
                        end
 
@@ -401,7 +414,7 @@ module GP_COUNT8(
        //Combinatorially output underflow flag whenever we wrap low
        always @(*) begin
                OUT <= (count == 8'h0);
-               OUT <= count;
+               POUT <= count;
        end
 
        //POR or SYSRST reset value is COUNT_TO. Datasheet is unclear but conversations w/ Silego confirm.
@@ -410,24 +423,26 @@ module GP_COUNT8(
                case(RESET_MODE)
 
                        "RISING": begin
-                               always @(posedge CLK or posedge RST) begin
-                                       count           <= count - 1'd1;
-                                       if(count == 0)
-                                               count   <= COUNT_TO;
-
+                               always @(posedge CLK, posedge RST) begin
                                        if(RST)
                                                count   <= 0;
+                                       else begin
+                                               count           <= count - 1'd1;
+                                               if(count == 0)
+                                                       count   <= COUNT_TO;
+                                       end
                                end
                        end
 
                        "FALLING": begin
-                               always @(posedge CLK or negedge RST) begin
-                                       count           <= count - 1'd1;
-                                       if(count == 0)
-                                               count   <= COUNT_TO;
-
+                               always @(posedge CLK, negedge RST) begin
                                        if(!RST)
                                                count   <= 0;
+                                       else begin
+                                               count           <= count - 1'd1;
+                                               if(count == 0)
+                                                       count   <= COUNT_TO;
+                                       end
                                end
                        end
 
@@ -439,13 +454,15 @@ module GP_COUNT8(
                        end
 
                        "LEVEL": begin
-                               always @(posedge CLK or posedge RST) begin
-                                       count           <= count - 1'd1;
-                                       if(count == 0)
-                                               count   <= COUNT_TO;
-
+                               always @(posedge CLK, posedge RST) begin
                                        if(RST)
                                                count   <= 0;
+
+                                       else begin
+                                               count           <= count - 1'd1;
+                                               if(count == 0)
+                                                       count   <= COUNT_TO;
+                                       end
                                end
                        end
 
@@ -725,20 +742,24 @@ module GP_PGEN(input wire nRST, input wire CLK, output reg OUT);
        parameter PATTERN_DATA = 16'h0;
        parameter PATTERN_LEN = 5'd16;
 
+       localparam COUNT_MAX =  PATTERN_LEN - 1'h1;
+
        reg[3:0] count = 0;
-       always @(posedge CLK) begin
+       always @(posedge CLK, negedge nRST) begin
+
                if(!nRST)
-                       OUT <= PATTERN_DATA[0];
+                       count   <= 0;
 
                else begin
-                       count <= count + 1;
-                       OUT <= PATTERN_DATA[count];
-
-                       if( (count + 1) == PATTERN_LEN)
-                               count <= 0;
+                       count   <= count - 1'h1;
+                       if(count == 0)
+                               count <= COUNT_MAX;
                end
        end
 
+       always @(*)
+               OUT     = PATTERN_DATA[count];
+
 endmodule
 
 module GP_SHREG(input nRST, input CLK, input IN, output OUTA, output OUTB);