ip-designer
Skill1 starsChanged 2 months agoApache-2.0View on GitHub
Design, implement, and verify reusable Buckyball hardware IP, including Chisel hierarchy, shared parameters, verification-top RTL export, common UVM components, and coverage closure. Use for IP work such as AXI, Bank, and BankSet; use chip-designer for chip topology and ball-align for Ball semantics across software and hardware.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- yang0/handraw-styletheir own version, first seen Oct 8, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- yang0/handraw-style★ 7.2ksame name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository25 other files it gives its agents.
- agent-runtimeSkill
- ball-alignSkill
- canvas-clientSkill
- checkSkill
- chip-designerSkill
- collaboration-panelSkill
- debug-bemuSkill
- debug-compilerSkill
- debug-p2eSkill
- debug-performanceSkill
- debug-verilatorSkill
- domain-modelingSkill
- graph-contractSkill
- grillingSkill
- grill-with-docsSkill
- model-optimizeSkill
- model-portSkill
- model-recipeSkill
- plugin-verifySkill
- programming-principlesSkill
- repo-installSkill
- reportSkill
- role-identitySkill
- waveformSkill
- workload-testsSkill
The file
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 3 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 18
Follow the neighboring axis IP: mark reusable module classes @instantiable, expose their IO with @public, and instantiate children through …
- Distinctive: line 22
Update actual callers when changing module names, parameter ownership, or instantiation style.
- Distinctive: line 39
Use shared pieces before adding IP-local infrastructure:
- Distinctive: line 50
Use an explicit testbench drive/sample schedule.
- Very specific: line 61
Keep generated SRAM models in separate split SystemVerilog files so their coverage exclude_file directives apply only to the memory models.
- Very specific: line 65
Use bbdev/api/steps/uvm/scripts/uvm_common.py reporting support.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Buckyball IP Design
Develop an IP as a reusable module with an explicit interface contract and independently verified tops. Use the repository's existing implementation and verification infrastructure. This skill records IP-specific conventions; general coding principles remain in programming-principles.
Establish the Contract
Identify the intended tops and their responsibilities before restructuring existing code. Resolve address units, capacity, masking, response behavior, reset behavior, backpressure, ordering, and required concurrency from the user's requirements and callers. Preserve explicit choices across iterations; an existing implementation is evidence, not the specification.
Distinguish storage organization from access semantics. A scratchpad is not synonymous with a collection of banks. Renaming an existing controller does not establish the intended composition or interface. Do not silently trade parallel access for serialized service: make the outstanding-request and throughput contract explicit.
Chisel Hierarchy and Parameters
- Follow the neighboring
axisIP: mark reusable module classes@instantiable, expose their IO with@public, and instantiate children throughInstantiate(new Child(p)), withInstance[Child]where a type is declared. Classes still extendModule. - A composite IP must instantiate the leaf modules whose behavior it reuses. Do not duplicate their storage or datapath implementation inside the composite.
- For a homogeneous hierarchy, use one shared parameter object and derive widths and capacities from it. Do not introduce per-instance parameter lists for identical children.
- For Bank specifically, retain only
BankSetParams: bothBank(p)andBankSet(p)receive it, and all children use the samep. Do not recreateBankParamsor pass depth separately. - Update actual callers when changing module names, parameter ownership, or instantiation style. Avoid unnecessary hierarchy-name prefixes in IP class names.
Package and Export
The IP verification loader resolves each IP through [paths] in arch/uvm.toml. Shared IPs live in arch/src/main/scala/framework/ip/<ip>/; module-specific IPs live under their owning module. Each IP owns:
build.sc: independent Mill build and the selected main class.src/main/scala/: Chisel interfaces, implementation, parameters, andEmit.scala.src/csrc/: Rust reference model and DPI binding, built through Cargo.src/main/resources/: DUT wiring, IP-specific verification behavior, filelists, and reviewed exclusions.
Keep one Emit.scala entrypoint. Export only the agreed verification tops and always pass --split-verilog to firtool, producing one SystemVerilog file per module. Put each top's split output in its own directory. Do not independently elaborate every internal module or add wrappers solely for emission. The emitter directly constructs new Top(p); child instantiation inside a module uses Instantiate.
Bank currently has two selected tops: Bank and BankSet. Other IPs need their own agreed set. Each testbench compiles its selected top's generated RTL filelist, including all required child modules exactly once. Keep the UVM filelists and loader aligned with the split output directories. Inspect the generated filelists, filenames, and module hierarchy after changing exports.
Reuse Verification Infrastructure
Use shared pieces before adding IP-local infrastructure:
verify/uvm/src/ip/: reference-model interface, checked environment, ordered scoreboard, test timeout and completion control.verify/uvm/src/protocol/axis/: AXI4-Stream interface, items, source agent, monitor, sink backpressure, assertions, and protocol coverage.
Move genuinely reusable protocol behavior into verify; keep DUT wiring, interface-specific translation, reference-model semantics, scenarios, and functional coverage points local. Do not force a Bank request interface into AXI merely to reuse a driver. Current shared AXI components parameterize data width and cover TDATA, TKEEP, and TLAST; inspect and extend them when additional protocol fields are required.
Connect observed input handshakes to the reference model and observed outputs to result checking. Keep model semantics independent of RTL scheduling. Define what reset cancels and what memory contents it preserves; do not invent initialized contents for uninitialized memory.
A sequence finishing is not evidence that outputs were checked. Wait for the required comparisons and retain unmatched transactions until they are reported or explicitly cancelled by the reset contract. Fix demonstrated framework defects in the framework and add only the focused regression needed to establish the fix.
Use an explicit testbench drive/sample schedule. Falling-edge stimulus is a scheduling choice, not a DUT requirement. If adopting rising-edge-only operation, use a shared clocking-block or equivalent scheduling contract; never mechanically replace edge names and introduce races.
Build and Run
Register the IP in the project-owned arch/uvm.toml. Keep design registration and DUT-specific verification outside the generic verify framework. Add it to a chip's [uvm].ips only when it belongs in that chip's default regression. The current loader discovers resource *.f files, uses <stem>_tb as each top, and selects protocol_test; align the artifacts with these conventions.
Filelists use @VERIFY@, @RESOURCES@, and @RTL@. Use project bbdev_uvm_build(chip=..., ip=...) and bbdev_uvm_run(chip=..., ip=...) MCP tools and poll returned tasks to completion. Diagnose service failures separately from compile or RTL failures; do not silently substitute a private build flow. For coverage-only changes, reuse the existing simulation database through the repository's reporting implementation when RTL and stimulus are unchanged.
Close Coverage, Then Stop
- Establish the exact parameter configuration, DUT instance scope, and verification purpose. Derive scenarios from interface invariants, identified failure risks, and observed faults. Respect explicitly agreed coverage targets; a Bank-specific 100% goal is not a default for every IP. Keep raw DUT metrics separate from testbench/protocol coverage, and do not grow scenarios or exclusion lists merely to improve a score.
- Keep generated SRAM models in separate split SystemVerilog files so their
coverage exclude_filedirectives apply only to the memory models. Check that the report contains coverage data for the parent DUT and its intended child modules; missing metrics are not a coverage success. - Inspect individual holes. Add or adjust stimulus for reachable behavior. Prefer adjusting existing scenarios over adding random iterations. Compare coverage before and after deleting potentially redundant stimulus; keep the deletion only when relevant coverage and checks remain intact.
- Waive only identified objects with a reason: constants, constraints of the legal-input contract, assertion-failure diagnostics outside the normal functional coverage scope, or conditions proven unreachable by the control structure. Distinguish environmental assumptions from design invariants. Do not waive an item simply because the current test never exercises it, and never exclude logic by generated names such as
_GEN. - For VCS, export candidates with URG
-dump full_exclusions, then select the reviewed objects into a same-stem resource.elfile. Preserve the tool-generated instance, metric checksum, object signature, and specific bit range or condition vector. Annotate each exclusion. Do not blanket-exclude an entire signal or expression when only part is justified. - Use
bbdev/api/steps/uvm/scripts/uvm_common.pyreporting support. It retains the full report and provides DUTrtl_raw/andrtl/reports. Validate exclusions against the current tool-exported checksums before applying them; URG may otherwise remap stale entries by signature. Never use-excl_bypass_checksto make obsolete waivers apply. - Once the agreed coverage target and functional checks pass, stop. Reopen testing for a relevant design change, a demonstrated bug, or a new coverage gap. Do not add cases merely because more cases can be imagined.
Report the tested configuration and scope, functional outcome, raw versus waived coverage, and any remaining gaps. Coverage closure for one configuration does not establish all parameter combinations or performance requirements.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

