-
Notifications
You must be signed in to change notification settings - Fork 799
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
[hw,prim,ram_1/2p] Add DFT response channel #25654
Conversation
99fb686
to
33d3543
Compare
4295be8
to
764cfcb
Compare
764cfcb
to
3dd7974
Compare
Hehe, here's the ports variant! This PR raises the question (again?), "How should we handle tech lib-specific ports that aren't part of the generic prim abstraction?". #25533 and #25625 raise the question , "How should we handle tech lib-specific parameters that aren't part of the generic prim abstraction?" (Of course, #25625 also asks whether we should implement tiling above the generic prim abstraction layer, which would allow it to avoid answering the question about the layer below, but it is roped in because the other PR tiles memories via a totally different dimension.) For parameters, we have a hodgepodge of stuff, especially parameters that are only useful to specific families of FPGAs. Do we just keep stuffing parameters at the generic abstraction layer and give them inert defaults, then possibly expose them all at the top level? For ports, there is technically the option of connecting across hierarchies (unlike parameters, since In any case, here it looks like we've got a prim_ram_1p_pkg that isn't a virtual core, so how do integrators tune |
3dd7974
to
11a0600
Compare
While I agree that you might be able to connect those ports manually through tooling, I don't like it as it adds much more burden. Making this connection across different uncore environments, testbenches, etc. It's just another way of introducing bugs rather than creating it explicitly via the port definitions. Hehe, a virtual core package definition is exactly what I aim for. That will be implemented as soon as the proper tooling for that is available. Partners can then overwrite the request and response structure to their needs and not need to mess with any workarounds.
I think we need to differentiate a little bit on what tiling means. Does tiling change the hierarchy, i.e., do we create different multiple instances of prim? Or does it affect the internal organization of a prim instance? For the former, I would argue that it can or maybe should be implemented as part of the non-tech prim. The second is something different. An ASIC ram primitive also might now be necessarily organized as Nx32 RAMs. But that is something I think that should be internal, as it is abstracted away from OT. |
254dc26
to
00be38f
Compare
00be38f
to
c0bb7a4
Compare
hw/vendor/lowrisc_ibex/dv/uvm/icache/dv/prim_badbit/prim_badbit_ram_1p.sv
Outdated
Show resolved
Hide resolved
0f26128
to
cce4140
Compare
Signed-off-by: Robert Schilling <[email protected]>
Signed-off-by: Robert Schilling <[email protected]>
Signed-off-by: Andreas Kurth <[email protected]>
Signed-off-by: Robert Schilling <[email protected]>
cce4140
to
d8274c2
Compare
CI uses *.vbl to build a common waiver for the whole design and misses top-level waivers due to a different file extension Signed-off-by: Robert Schilling <[email protected]>
CHANGE AUTHORIZED: hw/ip/i2c/data/i2c.hjson This PR adds DFT response signals to prims/macros. No functional change. |
CHANGE AUTHORIZED: hw/ip/i2c/data/i2c.hjson |
The DFT logic of the underlying RAM macros might have a response channel. This PR adds a new package definition for the prim_ram_1p and prim_ram_2p type of RAM and routes the signal up to the top-level. For the generic implementation of prim_ram_1p, this DFT signal only contains a logic signal that is tied to 0.
In Earlgrey, the DFT outputs are currently left open. In Darjeeling, they are connected to the top-level interface.
Regarding Ibex:
Ibex also uses RAM instances. There we have a chicken-egg problem. We first need to introduce the definition to OT, then update Ibex, and then re-vendor and add the port to rv_core_ibex. At Ibex level, multi-tiled caches are not yet feeding their output signals to the top level.
Edit: Actually, I think there is an interlocked dependency, which cannot be solved alas having one repo CI broken for a short time?