A comprehensive template repository for developing IP blocks following Vyges standards and best practices.
This template follows the correct Vyges naming convention to ensure consistency and ease of customization:
Level | Example | Description |
---|---|---|
Repository Name | fast-fourier-transform-ip |
Descriptive repository name |
Block Name | fft |
Short, unique identifier |
Module Name | memory |
Specific functionality |
RTL File Name | fft_memory.sv |
MUST be block-name_module-name.sv |
fast-fourier-transform-ip/ # Repository name
βββ rtl/
β βββ fft_memory.sv # fft_memory.sv (block-name_module-name)
βββ integration/
β βββ fft_memory_wrapper.v # fft_memory_wrapper.v
βββ tb/sv_tb/
β βββ tb_fft_memory.sv # tb_fft_memory.sv
βββ docs/
βββ fft-architecture.md # fft-architecture.md
βββ fft-design_spec.md # fft-design_spec.md
git clone https://github.com/vyges/vyges-ip-template.git my-ip-block
cd my-ip-block
Edit the Makefile
to set your IP block details:
# IP Block Configuration
BLOCK_NAME := fft
MODULE_NAME := memory
TOP_MODULE := fft_memory
# RTL file (MUST follow block-name_module-name.sv)
mv rtl/example_core.sv rtl/fft_memory.sv
# Integration wrapper
mv integration/example_wrapper.v integration/fft_memory_wrapper.v
# Testbench
mv tb/sv_tb/tb_example.sv tb/sv_tb/tb_fft_memory.sv
# Documentation
mv docs/example-architecture.md docs/fft-architecture.md
mv docs/example-design_spec.md docs/fft-design_spec.md
make check # Check tool availability
make info # Show IP block information
make build # Test build process
Only hardware IP content is licensed under Apache-2.0. Template structure and AI context files are proprietary Vyges components.
What's Apache-2.0 Licensed:
- RTL files and hardware designs you create
- IP documentation and specifications you write
- Testbenches and verification code you develop
- Design constraints and configurations you create
What's NOT Apache-2.0 Licensed:
- Template structure and directory organization
- Build processes and CI/CD workflows
- Pre-installed tools and tooling scripts
- AI context files (
.vyges-ai-context.json
,.copilot-chat-context.md
) - Template metadata and configuration templates
Usage Terms:
- You can use the template for IP development
- You can create and modify hardware IP content
- You cannot redistribute the template structure
- AI context files are provided for use only within this template
See LICENSE_SCOPE.md and NOTICE for complete details.
The Makefile
uses these key variables for customization:
Variable | Purpose | Example |
---|---|---|
BLOCK_NAME |
IP block identifier | fft |
MODULE_NAME |
RTL module name | memory |
TOP_MODULE |
Top-level module | fft_memory |
RTL_FILES |
RTL source files | rtl/*.sv |
TB_FILES |
Testbench files | tb/sv_tb/*.sv |
The build system uses patterns for minimal customization:
# Generic file patterns (minimal changes needed)
RTL_FILES := rtl/*.sv
TB_FILES := tb/sv_tb/*.sv
INTEGRATION_FILES := integration/*.v
CONSTRAINT_FILES := constraints/*.sdc constraints/*.xdc
Documentation follows the ${block}-${type}.md
pattern:
- Architecture:
example-architecture.md
βfft-architecture.md
- Design Spec:
example-design_spec.md
βfft-design_spec.md
make help
- Show comprehensive helpmake info
- Display IP block informationmake check
- Check tool availabilitymake customize
- Show customization guide
make build
- Build all targetsmake clean
- Clean all build artifactsmake create-dirs
- Create build directories
make synth
- Run synthesis with Yosysmake synth-clean
- Clean synthesis results
make sim
- Run simulation with Verilatormake sim-fallback
- Run simulation with Icarusmake sim-clean
- Clean simulation results
make lint
- Run linting checksmake coverage
- Run coverage analysismake formal
- Run formal verification
make docs
- Generate documentationmake report
- Generate build reports
make list-files
- List all source filesmake process-rtl
- Process RTL files (template)make process-tb
- Process testbench files (template)
- Yosys: Synthesis and linting
- Verilator: Primary simulation (recommended)
- Icarus: Fallback simulation
# Ubuntu/Debian
sudo apt install yosys verilator iverilog
# macOS
brew install yosys verilator icarus-verilog
# CentOS/RHEL
sudo yum install yosys verilator iverilog
The Makefile automatically detects available tools and provides fallbacks:
- Timeout: Uses
timeout
on Linux,gtimeout
or Perl fallback on macOS - Simulation: Falls back from Verilator to Icarus if needed
- Purpose: High-level design overview
- Audience: System architects and integrators
- Content: Block diagram, interfaces, operational modes
- Purpose: Detailed implementation specification
- Audience: RTL developers and verification engineers
- Content: Functional spec, timing requirements, verification strategy
- Inputs: End with
_i
suffix - Outputs: End with
_o
suffix - Active-low: Use
_n
suffix (e.g.,reset_n_i
)
- Assertions: Use
YOSYS
define for synthesis - SystemVerilog: Full IEEE 1800-2017 support
- Synthesis: Optimized for Yosys flow
- Coverage: Comprehensive functional coverage
- Assertions: Property-based verification
- Testbench: Structured test methodology
- Wrappers: Easy integration into larger designs
- Parameters: Configurable for different use cases
- Interfaces: Standard handshaking protocols
- Design: Implement RTL in
rtl/
directory - Verify: Create testbench in
tb/sv_tb/
directory - Integrate: Add wrapper in
integration/
directory - Document: Update documentation in
docs/
directory - Test: Use
make build
for comprehensive testing
The template includes GitHub Actions support:
- Automated Testing: Runs on Ubuntu with multiple tools
- Build Verification: Synthesis and simulation validation
- Quality Checks: Linting and coverage analysis
module example_core #(
parameter int DATA_WIDTH = 32,
parameter int ADDR_WIDTH = 8
) (
input logic clk_i,
input logic reset_n_i,
// ... other signals
);
// Implementation follows Vyges standards
endmodule
module tb_example;
// Clock and reset generation
// DUT instantiation
// Test stimulus and verification
// Coverage and assertions
endmodule
module example_wrapper #(
// Parameter forwarding
) (
// Interface signals
);
// Module instantiation
// Glue logic if needed
endmodule
- Fork the template repository
- Create a feature branch
- Implement your improvements
- Test with multiple IP blocks
- Submit a pull request
- Maintain backward compatibility
- Document all changes
- Test with real IP examples
- Follow existing patterns
- Vyges Website: https://vyges.com
- IP Catalog: https://vyges.com/products/vycatalog/
- Documentation: https://vyges.com/docs
- GitHub Issues: Report bugs and request features
- Discussions: Join community discussions
- Examples: Browse existing IP implementations
- Email: [email protected]
- Support: https://vyges.com/support
This template is licensed under the Apache-2.0 License. See the LICENSE file for details.
- Yosys Team: For the excellent synthesis tool
- Verilator Team: For fast simulation capabilities
- Icarus Team: For open-source Verilog simulation
- Vyges Community: For feedback and contributions
Happy IP Development! π
For questions or support, please refer to the documentation or contact the Vyges team.