| module dff(clk, d, q); | |
| input clk, d; | |
| output reg q; | |
| always @(posedge clk) | |
| q <= d; | |
| endmodule | |
| module dffa(clk, arst, d, q); | |
| input clk, arst, d; | |
| output reg q; | |
| always @(posedge clk or posedge arst) begin | |
| if (arst) | |
| q <= 1; | |
| else | |
| q <= d; | |
| end | |
| endmodule | |
| module dffa1(clk, arst, d, q); | |
| input clk, arst, d; | |
| output reg q; | |
| always @(posedge clk or negedge arst) begin | |
| if (~arst) | |
| q <= 0; | |
| else | |
| q <= d; | |
| end | |
| endmodule | |
| module dffa2(clk, arst, d, q); | |
| input clk, arst, d; | |
| output reg q; | |
| always @(posedge clk or negedge arst) begin | |
| if (!arst) | |
| q <= 0; | |
| else | |
| q <= d; | |
| end | |
| endmodule | |
| module dffa3(clk, arst, d, q); | |
| input clk, arst, d; | |
| output reg q; | |
| always @(posedge clk or negedge arst) begin | |
| if (~(!arst)) | |
| q <= d; | |
| else | |
| q <= 1; | |
| end | |
| endmodule | |
| module dffa4(clk, arst1, arst2, arst3, d, q); | |
| input clk, arst1, arst2, arst3, d; | |
| output reg q; | |
| always @(posedge clk, posedge arst1, posedge arst2, negedge arst3) begin | |
| if (arst1) | |
| q <= 0; | |
| else if (arst2) | |
| q <= 0; | |
| else if (!arst3) | |
| q <= 0; | |
| else | |
| q <= d; | |
| end | |
| endmodule | |
| // SR-Flip-Flops are on the edge of well defined Verilog constructs in terms of | |
| // simulation-implementation mismatches. The following testcases try to cover the | |
| // part that is defined and avoid the undefined cases. | |
| module dffsr1(clk, arst, d, q); | |
| input clk, arst, d; | |
| output reg q; | |
| always @(posedge clk, posedge arst) begin | |
| if (arst) | |
| q <= d^d; // constant expression -- but the frontend optimizer does not know that.. | |
| else | |
| q <= d; | |
| end | |
| endmodule | |
| module dffsr2(clk, preset, clear, d, q); | |
| input clk, preset, clear, d; | |
| output q; | |
| (* gentb_clock *) | |
| wire clk, preset, clear, d; | |
| dffsr2_sub uut (clk, preset && !clear, !preset && clear, d, q); | |
| endmodule | |
| (* gentb_skip *) | |
| module dffsr2_sub(clk, preset, clear, d, q); | |
| input clk, preset, clear, d; | |
| output reg q; | |
| always @(posedge clk, posedge preset, posedge clear) begin | |
| if (preset) | |
| q <= 1; | |
| else if (clear) | |
| q <= 0; | |
| else | |
| q <= d; | |
| end | |
| endmodule | |