mirror of
https://github.com/YosysHQ/yosys
synced 2025-12-10 05:43:23 +00:00
44 lines
870 B
Text
44 lines
870 B
Text
module retention_cell (B1, B2B, CK, D, Q, RD, SE, SI);
|
|
reg Q1, QN1;
|
|
wire Q1_clear, Q1_preset;
|
|
reg Q2, QN2;
|
|
input B1;
|
|
input B2B;
|
|
input CK;
|
|
input D;
|
|
output Q;
|
|
assign Q = Q1; // "Q1"
|
|
input RD;
|
|
input SE;
|
|
input SI;
|
|
always @(posedge CK, posedge Q1_clear, posedge Q1_preset) begin
|
|
if (Q1_clear) begin
|
|
Q1 <= 0;
|
|
end
|
|
else if (Q1_preset) begin
|
|
Q1 <= 1;
|
|
end
|
|
else begin
|
|
Q1 <= ((D&(~SE))|(SI&SE));
|
|
end
|
|
end
|
|
always @(posedge CK, posedge Q1_clear, posedge Q1_preset) begin
|
|
if (Q1_clear) begin
|
|
QN1 <= 1;
|
|
end
|
|
else if (Q1_preset) begin
|
|
QN1 <= 0;
|
|
end
|
|
else begin
|
|
QN1 <= ~(((D&(~SE))|(SI&SE)));
|
|
end
|
|
end
|
|
assign Q1_clear = (((~B2B)&(~Q2))|(~RD));
|
|
assign Q1_preset = ((~B2B)&Q2);
|
|
always @* begin
|
|
if (B1) begin
|
|
Q2 <= Q1;
|
|
QN2 <= ~(Q1);
|
|
end
|
|
end
|
|
endmodule
|