Skip to content

Implement FF in IO blocks. #298

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 4, 2025
Merged

Implement FF in IO blocks. #298

merged 1 commit into from
Jan 4, 2025

Conversation

yrabbit
Copy link
Collaborator

@yrabbit yrabbit commented Dec 14, 2024

There are three registers in IO blocks: IREG, OREG, and TREG. Not in all of them, but only where there is IOLOGIC because these registers are part of it.

Hence the first limitation: if FF is placed in an IO block, the rest of the IOLOGIC cannot be used.

The second limitation is related to the fact that all three registers have common wires CLK, ClockEnable and LocalSetReset and this dictates the types of flipflop's - let's say DFF (in Gowin's implementation) requires a constant connection CE to VCC, so you can not use in the same IO block DFFE, which CE is a signal.

There are three registers in IO blocks: IREG, OREG, and TREG. Not in all
of them, but only where there is IOLOGIC because these registers are
part of it.

Hence the first limitation: if FF is placed in an IO block, the rest of
the IOLOGIC cannot be used.

The second limitation is related to the fact that all three registers
have common wires CLK, ClockEnable and LocalSetReset and this dictates
the types of flipflop's - let's say DFF (in Gowin's implementation)
requires a constant connection CE to VCC, so you can not use in the same
IO block DFFE, which CE is a signal.

Signed-off-by: YRabbit <[email protected]>
@uis246
Copy link
Contributor

uis246 commented Dec 14, 2024

Isn't OREG a subset of ODDR/OSER modes?

@yrabbit
Copy link
Collaborator Author

yrabbit commented Dec 14, 2024

Maybe at the lowest level Gowin borrows some transistors from ODDR/OSER to make this flipflop, but I have strong doubts about that - there aren't enough IO blocks for this saving to make any difference.

So I think it's a normal separate register whose output is connected to MUX, which by the way doesn't allow to use any other iologic if OREG is used :)

oreg

@yrabbit yrabbit marked this pull request as ready for review January 1, 2025 12:42
@yrabbit yrabbit merged commit 53d746d into YosysHQ:master Jan 4, 2025
11 of 14 checks passed
@yrabbit yrabbit deleted the ioregs-m branch January 4, 2025 20:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants