[HDL] Enriched DFF model in yosys technology library
This commit is contained in:
parent
ce6018e123
commit
5a519390ff
|
@ -95,7 +95,7 @@ module dff(
|
|||
endmodule
|
||||
|
||||
//-----------------------------
|
||||
// D-type flip-flop with asynchronous reset
|
||||
// D-type flip-flop with active-high asynchronous reset
|
||||
//-----------------------------
|
||||
(* abc9_flop, lib_whitebox *)
|
||||
module dffr(
|
||||
|
@ -125,3 +125,96 @@ module dffr(
|
|||
endcase
|
||||
endmodule
|
||||
|
||||
//-----------------------------
|
||||
// D-type flip-flop with active-high asynchronous set
|
||||
//-----------------------------
|
||||
(* abc9_flop, lib_whitebox *)
|
||||
module dffs(
|
||||
output reg Q,
|
||||
input D,
|
||||
input S,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_C_INVERTED" *)
|
||||
input C
|
||||
);
|
||||
parameter [0:0] INIT = 1'b0;
|
||||
parameter [0:0] IS_C_INVERTED = 1'b0;
|
||||
initial Q = INIT;
|
||||
case(|IS_C_INVERTED)
|
||||
1'b0:
|
||||
always @(posedge C or posedge S)
|
||||
if (S == 1'b1)
|
||||
Q <= 1'b1;
|
||||
else
|
||||
Q <= D;
|
||||
1'b1:
|
||||
always @(negedge C or posedge S)
|
||||
if (S == 1'b1)
|
||||
Q <= 1'b1;
|
||||
else
|
||||
Q <= D;
|
||||
endcase
|
||||
endmodule
|
||||
|
||||
//-----------------------------
|
||||
// D-type flip-flop with active-low asynchronous reset
|
||||
//-----------------------------
|
||||
(* abc9_flop, lib_whitebox *)
|
||||
module dffrn(
|
||||
output reg Q,
|
||||
input D,
|
||||
input RN,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_C_INVERTED" *)
|
||||
input C
|
||||
);
|
||||
parameter [0:0] INIT = 1'b0;
|
||||
parameter [0:0] IS_C_INVERTED = 1'b0;
|
||||
initial Q = INIT;
|
||||
case(|IS_C_INVERTED)
|
||||
1'b0:
|
||||
always @(posedge C or negedge RN)
|
||||
if (RN == 1'b0)
|
||||
Q <= 1'b0;
|
||||
else
|
||||
Q <= D;
|
||||
1'b1:
|
||||
always @(negedge C or negedge RN)
|
||||
if (RN == 1'b0)
|
||||
Q <= 1'b0;
|
||||
else
|
||||
Q <= D;
|
||||
endcase
|
||||
endmodule
|
||||
|
||||
//-----------------------------
|
||||
// D-type flip-flop with active-low asynchronous set
|
||||
//-----------------------------
|
||||
(* abc9_flop, lib_whitebox *)
|
||||
module dffsn(
|
||||
output reg Q,
|
||||
input D,
|
||||
input SN,
|
||||
(* clkbuf_sink *)
|
||||
(* invertible_pin = "IS_C_INVERTED" *)
|
||||
input C
|
||||
);
|
||||
parameter [0:0] INIT = 1'b0;
|
||||
parameter [0:0] IS_C_INVERTED = 1'b0;
|
||||
initial Q = INIT;
|
||||
case(|IS_C_INVERTED)
|
||||
1'b0:
|
||||
always @(posedge C or negedge SN)
|
||||
if (SN == 1'b0)
|
||||
Q <= 1'b1;
|
||||
else
|
||||
Q <= D;
|
||||
1'b1:
|
||||
always @(negedge C or negedge SN)
|
||||
if (SN == 1'b0)
|
||||
Q <= 1'b1;
|
||||
else
|
||||
Q <= D;
|
||||
endcase
|
||||
endmodule
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ module \$_DFF_P_ (D, C, Q);
|
|||
dff _TECHMAP_REPLACE_ (.Q(Q), .D(D), .C(C));
|
||||
endmodule
|
||||
|
||||
// Async reset
|
||||
// Async active-high reset
|
||||
module \$_DFF_PP0_ (D, C, R, Q);
|
||||
input D;
|
||||
input C;
|
||||
|
@ -16,3 +16,33 @@ module \$_DFF_PP0_ (D, C, R, Q);
|
|||
parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
|
||||
dffr _TECHMAP_REPLACE_ (.Q(Q), .D(D), .C(C), .R(R));
|
||||
endmodule
|
||||
|
||||
// Async active-high set
|
||||
module \$_DFF_PP1_ (D, C, R, Q);
|
||||
input D;
|
||||
input C;
|
||||
input R;
|
||||
output Q;
|
||||
parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
|
||||
dffs _TECHMAP_REPLACE_ (.Q(Q), .D(D), .C(C), .S(R));
|
||||
endmodule
|
||||
|
||||
// Async active-low reset
|
||||
module \$_DFF_PN0_ (D, C, R, Q);
|
||||
input D;
|
||||
input C;
|
||||
input R;
|
||||
output Q;
|
||||
parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
|
||||
dffrn _TECHMAP_REPLACE_ (.Q(Q), .D(D), .C(C), .RN(R));
|
||||
endmodule
|
||||
|
||||
// Async active-low set
|
||||
module \$_DFF_PN1_ (D, C, R, Q);
|
||||
input D;
|
||||
input C;
|
||||
input R;
|
||||
output Q;
|
||||
parameter _TECHMAP_WIREINIT_Q_ = 1'bx;
|
||||
dffsn _TECHMAP_REPLACE_ (.Q(Q), .D(D), .C(C), .SN(R));
|
||||
endmodule
|
||||
|
|
Loading…
Reference in New Issue