mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-24 01:25:33 +00:00
Add $aldff and $aldffe: flip-flops with async load.
This commit is contained in:
parent
fbd70f28f0
commit
ec2b5548fe
9 changed files with 527 additions and 2 deletions
|
@ -133,6 +133,55 @@ endmodule
|
|||
"""
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_ALDFF_{C:N|P}{L:N|P}_ (D, C, L, AD, Q)
|
||||
//-
|
||||
//- A {C:negative|positive} edge D-type flip-flop with {L:negative|positive} polarity async load.
|
||||
//-
|
||||
//- Truth table: D C L AD | Q
|
||||
//- ----------+---
|
||||
//- - - {L:0|1} a | a
|
||||
//- d {C:\\|/} - - | d
|
||||
//- - - - - | q
|
||||
//-
|
||||
module \$_ALDFF_{C:N|P}{L:N|P}_ (D, C, L, AD, Q);
|
||||
input D, C, L, AD;
|
||||
output reg Q;
|
||||
always @({C:neg|pos}edge C or {L:neg|pos}edge L) begin
|
||||
if (L == {L:0|1})
|
||||
Q <= AD;
|
||||
else
|
||||
Q <= D;
|
||||
end
|
||||
endmodule
|
||||
""",
|
||||
"""
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_ALDFFE_{C:N|P}{L:N|P}{E:N|P}_ (D, C, L, AD, E, Q)
|
||||
//-
|
||||
//- A {C:negative|positive} edge D-type flip-flop with {L:negative|positive} polarity async load and {E:negative|positive}
|
||||
//- polarity clock enable.
|
||||
//-
|
||||
//- Truth table: D C L AD E | Q
|
||||
//- ------------+---
|
||||
//- - - {L:0|1} a - | a
|
||||
//- d {C:\\|/} - - {E:0|1} | d
|
||||
//- - - - - - | q
|
||||
//-
|
||||
module \$_ALDFFE_{C:N|P}{L:N|P}{E:N|P}_ (D, C, L, AD, E, Q);
|
||||
input D, C, L, AD, E;
|
||||
output reg Q;
|
||||
always @({C:neg|pos}edge C or {L:neg|pos}edge L) begin
|
||||
if (L == {L:0|1})
|
||||
Q <= AD;
|
||||
else if (E == {E:0|1})
|
||||
Q <= D;
|
||||
end
|
||||
endmodule
|
||||
""",
|
||||
"""
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_DFFSR_{C:N|P}{S:N|P}{R:N|P}_ (C, S, R, D, Q)
|
||||
//-
|
||||
//- A {C:negative|positive} edge D-type flip-flop with {S:negative|positive} polarity set and {R:negative|positive}
|
||||
|
|
|
@ -1252,6 +1252,290 @@ always @(posedge C or posedge R) begin
|
|||
end
|
||||
endmodule
|
||||
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_ALDFF_NN_ (D, C, L, AD, Q)
|
||||
//-
|
||||
//- A negative edge D-type flip-flop with negative polarity async load.
|
||||
//-
|
||||
//- Truth table: D C L AD | Q
|
||||
//- ----------+---
|
||||
//- - - 0 a | a
|
||||
//- d \ - - | d
|
||||
//- - - - - | q
|
||||
//-
|
||||
module \$_ALDFF_NN_ (D, C, L, AD, Q);
|
||||
input D, C, L, AD;
|
||||
output reg Q;
|
||||
always @(negedge C or negedge L) begin
|
||||
if (L == 0)
|
||||
Q <= AD;
|
||||
else
|
||||
Q <= D;
|
||||
end
|
||||
endmodule
|
||||
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_ALDFF_NP_ (D, C, L, AD, Q)
|
||||
//-
|
||||
//- A negative edge D-type flip-flop with positive polarity async load.
|
||||
//-
|
||||
//- Truth table: D C L AD | Q
|
||||
//- ----------+---
|
||||
//- - - 1 a | a
|
||||
//- d \ - - | d
|
||||
//- - - - - | q
|
||||
//-
|
||||
module \$_ALDFF_NP_ (D, C, L, AD, Q);
|
||||
input D, C, L, AD;
|
||||
output reg Q;
|
||||
always @(negedge C or posedge L) begin
|
||||
if (L == 1)
|
||||
Q <= AD;
|
||||
else
|
||||
Q <= D;
|
||||
end
|
||||
endmodule
|
||||
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_ALDFF_PN_ (D, C, L, AD, Q)
|
||||
//-
|
||||
//- A positive edge D-type flip-flop with negative polarity async load.
|
||||
//-
|
||||
//- Truth table: D C L AD | Q
|
||||
//- ----------+---
|
||||
//- - - 0 a | a
|
||||
//- d / - - | d
|
||||
//- - - - - | q
|
||||
//-
|
||||
module \$_ALDFF_PN_ (D, C, L, AD, Q);
|
||||
input D, C, L, AD;
|
||||
output reg Q;
|
||||
always @(posedge C or negedge L) begin
|
||||
if (L == 0)
|
||||
Q <= AD;
|
||||
else
|
||||
Q <= D;
|
||||
end
|
||||
endmodule
|
||||
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_ALDFF_PP_ (D, C, L, AD, Q)
|
||||
//-
|
||||
//- A positive edge D-type flip-flop with positive polarity async load.
|
||||
//-
|
||||
//- Truth table: D C L AD | Q
|
||||
//- ----------+---
|
||||
//- - - 1 a | a
|
||||
//- d / - - | d
|
||||
//- - - - - | q
|
||||
//-
|
||||
module \$_ALDFF_PP_ (D, C, L, AD, Q);
|
||||
input D, C, L, AD;
|
||||
output reg Q;
|
||||
always @(posedge C or posedge L) begin
|
||||
if (L == 1)
|
||||
Q <= AD;
|
||||
else
|
||||
Q <= D;
|
||||
end
|
||||
endmodule
|
||||
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_ALDFFE_NNN_ (D, C, L, AD, E, Q)
|
||||
//-
|
||||
//- A negative edge D-type flip-flop with negative polarity async load and negative
|
||||
//- polarity clock enable.
|
||||
//-
|
||||
//- Truth table: D C L AD E | Q
|
||||
//- ------------+---
|
||||
//- - - 0 a - | a
|
||||
//- d \ - - 0 | d
|
||||
//- - - - - - | q
|
||||
//-
|
||||
module \$_ALDFFE_NNN_ (D, C, L, AD, E, Q);
|
||||
input D, C, L, AD, E;
|
||||
output reg Q;
|
||||
always @(negedge C or negedge L) begin
|
||||
if (L == 0)
|
||||
Q <= AD;
|
||||
else if (E == 0)
|
||||
Q <= D;
|
||||
end
|
||||
endmodule
|
||||
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_ALDFFE_NNP_ (D, C, L, AD, E, Q)
|
||||
//-
|
||||
//- A negative edge D-type flip-flop with negative polarity async load and positive
|
||||
//- polarity clock enable.
|
||||
//-
|
||||
//- Truth table: D C L AD E | Q
|
||||
//- ------------+---
|
||||
//- - - 0 a - | a
|
||||
//- d \ - - 1 | d
|
||||
//- - - - - - | q
|
||||
//-
|
||||
module \$_ALDFFE_NNP_ (D, C, L, AD, E, Q);
|
||||
input D, C, L, AD, E;
|
||||
output reg Q;
|
||||
always @(negedge C or negedge L) begin
|
||||
if (L == 0)
|
||||
Q <= AD;
|
||||
else if (E == 1)
|
||||
Q <= D;
|
||||
end
|
||||
endmodule
|
||||
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_ALDFFE_NPN_ (D, C, L, AD, E, Q)
|
||||
//-
|
||||
//- A negative edge D-type flip-flop with positive polarity async load and negative
|
||||
//- polarity clock enable.
|
||||
//-
|
||||
//- Truth table: D C L AD E | Q
|
||||
//- ------------+---
|
||||
//- - - 1 a - | a
|
||||
//- d \ - - 0 | d
|
||||
//- - - - - - | q
|
||||
//-
|
||||
module \$_ALDFFE_NPN_ (D, C, L, AD, E, Q);
|
||||
input D, C, L, AD, E;
|
||||
output reg Q;
|
||||
always @(negedge C or posedge L) begin
|
||||
if (L == 1)
|
||||
Q <= AD;
|
||||
else if (E == 0)
|
||||
Q <= D;
|
||||
end
|
||||
endmodule
|
||||
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_ALDFFE_NPP_ (D, C, L, AD, E, Q)
|
||||
//-
|
||||
//- A negative edge D-type flip-flop with positive polarity async load and positive
|
||||
//- polarity clock enable.
|
||||
//-
|
||||
//- Truth table: D C L AD E | Q
|
||||
//- ------------+---
|
||||
//- - - 1 a - | a
|
||||
//- d \ - - 1 | d
|
||||
//- - - - - - | q
|
||||
//-
|
||||
module \$_ALDFFE_NPP_ (D, C, L, AD, E, Q);
|
||||
input D, C, L, AD, E;
|
||||
output reg Q;
|
||||
always @(negedge C or posedge L) begin
|
||||
if (L == 1)
|
||||
Q <= AD;
|
||||
else if (E == 1)
|
||||
Q <= D;
|
||||
end
|
||||
endmodule
|
||||
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_ALDFFE_PNN_ (D, C, L, AD, E, Q)
|
||||
//-
|
||||
//- A positive edge D-type flip-flop with negative polarity async load and negative
|
||||
//- polarity clock enable.
|
||||
//-
|
||||
//- Truth table: D C L AD E | Q
|
||||
//- ------------+---
|
||||
//- - - 0 a - | a
|
||||
//- d / - - 0 | d
|
||||
//- - - - - - | q
|
||||
//-
|
||||
module \$_ALDFFE_PNN_ (D, C, L, AD, E, Q);
|
||||
input D, C, L, AD, E;
|
||||
output reg Q;
|
||||
always @(posedge C or negedge L) begin
|
||||
if (L == 0)
|
||||
Q <= AD;
|
||||
else if (E == 0)
|
||||
Q <= D;
|
||||
end
|
||||
endmodule
|
||||
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_ALDFFE_PNP_ (D, C, L, AD, E, Q)
|
||||
//-
|
||||
//- A positive edge D-type flip-flop with negative polarity async load and positive
|
||||
//- polarity clock enable.
|
||||
//-
|
||||
//- Truth table: D C L AD E | Q
|
||||
//- ------------+---
|
||||
//- - - 0 a - | a
|
||||
//- d / - - 1 | d
|
||||
//- - - - - - | q
|
||||
//-
|
||||
module \$_ALDFFE_PNP_ (D, C, L, AD, E, Q);
|
||||
input D, C, L, AD, E;
|
||||
output reg Q;
|
||||
always @(posedge C or negedge L) begin
|
||||
if (L == 0)
|
||||
Q <= AD;
|
||||
else if (E == 1)
|
||||
Q <= D;
|
||||
end
|
||||
endmodule
|
||||
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_ALDFFE_PPN_ (D, C, L, AD, E, Q)
|
||||
//-
|
||||
//- A positive edge D-type flip-flop with positive polarity async load and negative
|
||||
//- polarity clock enable.
|
||||
//-
|
||||
//- Truth table: D C L AD E | Q
|
||||
//- ------------+---
|
||||
//- - - 1 a - | a
|
||||
//- d / - - 0 | d
|
||||
//- - - - - - | q
|
||||
//-
|
||||
module \$_ALDFFE_PPN_ (D, C, L, AD, E, Q);
|
||||
input D, C, L, AD, E;
|
||||
output reg Q;
|
||||
always @(posedge C or posedge L) begin
|
||||
if (L == 1)
|
||||
Q <= AD;
|
||||
else if (E == 0)
|
||||
Q <= D;
|
||||
end
|
||||
endmodule
|
||||
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_ALDFFE_PPP_ (D, C, L, AD, E, Q)
|
||||
//-
|
||||
//- A positive edge D-type flip-flop with positive polarity async load and positive
|
||||
//- polarity clock enable.
|
||||
//-
|
||||
//- Truth table: D C L AD E | Q
|
||||
//- ------------+---
|
||||
//- - - 1 a - | a
|
||||
//- d / - - 1 | d
|
||||
//- - - - - - | q
|
||||
//-
|
||||
module \$_ALDFFE_PPP_ (D, C, L, AD, E, Q);
|
||||
input D, C, L, AD, E;
|
||||
output reg Q;
|
||||
always @(posedge C or posedge L) begin
|
||||
if (L == 1)
|
||||
Q <= AD;
|
||||
else if (E == 1)
|
||||
Q <= D;
|
||||
end
|
||||
endmodule
|
||||
|
||||
// |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
|
||||
//-
|
||||
//- $_DFFSR_NNN_ (C, S, R, D, Q)
|
||||
|
|
|
@ -1890,6 +1890,30 @@ endmodule
|
|||
|
||||
// --------------------------------------------------------
|
||||
|
||||
module \$aldff (CLK, ALOAD, AD, D, Q);
|
||||
|
||||
parameter WIDTH = 0;
|
||||
parameter CLK_POLARITY = 1'b1;
|
||||
parameter ALOAD_POLARITY = 1'b1;
|
||||
|
||||
input CLK, ALOAD;
|
||||
input [WIDTH-1:0] AD;
|
||||
input [WIDTH-1:0] D;
|
||||
output reg [WIDTH-1:0] Q;
|
||||
wire pos_clk = CLK == CLK_POLARITY;
|
||||
wire pos_aload = ALOAD == ALOAD_POLARITY;
|
||||
|
||||
always @(posedge pos_clk, posedge pos_aload) begin
|
||||
if (pos_aload)
|
||||
Q <= AD;
|
||||
else
|
||||
Q <= D;
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
// --------------------------------------------------------
|
||||
|
||||
module \$sdff (CLK, SRST, D, Q);
|
||||
|
||||
parameter WIDTH = 0;
|
||||
|
@ -1939,6 +1963,31 @@ endmodule
|
|||
|
||||
// --------------------------------------------------------
|
||||
|
||||
module \$aldffe (CLK, ALOAD, AD, EN, D, Q);
|
||||
|
||||
parameter WIDTH = 0;
|
||||
parameter CLK_POLARITY = 1'b1;
|
||||
parameter EN_POLARITY = 1'b1;
|
||||
parameter ALOAD_POLARITY = 1'b1;
|
||||
|
||||
input CLK, ALOAD, EN;
|
||||
input [WIDTH-1:0] D;
|
||||
input [WIDTH-1:0] AD;
|
||||
output reg [WIDTH-1:0] Q;
|
||||
wire pos_clk = CLK == CLK_POLARITY;
|
||||
wire pos_aload = ALOAD == ALOAD_POLARITY;
|
||||
|
||||
always @(posedge pos_clk, posedge pos_aload) begin
|
||||
if (pos_aload)
|
||||
Q <= AD;
|
||||
else if (EN == EN_POLARITY)
|
||||
Q <= D;
|
||||
end
|
||||
|
||||
endmodule
|
||||
|
||||
// --------------------------------------------------------
|
||||
|
||||
module \$sdffe (CLK, SRST, EN, D, Q);
|
||||
|
||||
parameter WIDTH = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue