A comprehensive template repository for developing IP blocks following Vyges standards and best practices. Powered by VyContext AI assistant for intelligent development.
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
Simply tell the AI assistant what you want to build:
# In your AI-powered IDE (Cursor/VSCode with VyContext):
"Initialize this project as an FFT memory controller IP following Vyges conventions"
# VyContext automatically:
# - Updates vyges-metadata.json with your IP details
# - Customizes .vyges-ip-template.yml for your project
# - Creates directory structure based on role requirements
# - Generates initial RTL and verification files
Install the Vyges VyContext extension for AI-powered development:
For VS Code (Marketplace):
# Install from VSCode Marketplace
code --install-extension vyges.vycontext
For Cursor IDE (Bundled):
# Install bundled extension (no marketplace available)
cursor --install-extension extensions/cursor/vycontext-0.1.0.vsix
Benefits:
- π§ AI Context: Automatic hardware IP context injection
- π§ Tool Integration: Synthesis and verification tool guidance
- π Standards: Enforced naming conventions and patterns
- π Natural Language: "Create UART controller RTL following Vyges conventions"
- π Auto Structure: Creates directories and files based on
vyges-ip.yml
- π Authentication: Secure access to Vyges services
- π Tier-Based: Features based on your subscription tier
Status Check: Ctrl+Shift+P
β "Vyges VyContext: Show Status"
Use natural language commands with VyContext:
# AI commands for development:
"Add APB interface to the FFT memory controller"
"Create SystemVerilog testbench with coverage"
"Set up FPGA flow for Xilinx Zynq"
"Generate documentation from metadata"
"Add FIFO support with configurable depth"
# VyContext automatically:
# - Creates/modifies RTL files following naming conventions
# - Generates testbenches and verification code
# - Updates metadata and configuration files
# - Creates directory structure as needed
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
- VyContext Integration and
vyges-ip.yml
configuration - 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
- VyContext integration is provided for use only within this template
See LICENSE_SCOPE.md and NOTICE for complete details.
The easiest way to customize your IP is through natural language commands:
# Tell VyContext what you want:
"Customize this project for an AES encryption IP with 128-bit data width"
"Add AXI4-Lite interface to the UART controller"
"Create mixed-signal ADC controller with SPICE models"
"Set up dual-clock domain crossing for the FIFO"
VyContext manages all configuration through natural language:
File | Purpose | VyContext Commands |
---|---|---|
vyges-metadata.json |
IP metadata and specifications | "Update metadata with AES encryption IP details" |
.vyges-ip-template.yml |
Role-based configuration | "Configure for mixed-signal designer role" |
Makefile |
Build system configuration | "Set up build system for FPGA synthesis" |
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
- Initialize: "Initialize this project as [IP type] following Vyges conventions"
- Design: "Create RTL for [specific functionality] with [interface type]"
- Verify: "Generate SystemVerilog testbench with coverage and assertions"
- Integrate: "Create SoC integration wrapper with [bus protocol]"
- Document: "Generate documentation from metadata and RTL analysis"
- Test: Use
make build
for comprehensive testing
- Design: "Create UART controller RTL with APB interface"
- Verify: "Generate SystemVerilog testbench with coverage"
- Integrate: "Create SoC integration wrapper with AXI4"
- Document: "Generate documentation from metadata and RTL analysis"
- Test: Use
make build
for comprehensive testing
The template uses .vyges-ip-template.yml
for intelligent role-based development:
Role | Focus Area | VyContext Commands |
---|---|---|
ip_dev | Core RTL development | "Create UART controller RTL with APB interface" |
verification | Testbench and validation | "Generate UVM testbench with functional coverage" |
integrator | SoC integration | "Create AXI4 wrapper for the UART controller" |
fpga_prototyper | FPGA implementation | "Set up Vivado flow for Zynq-7000" |
mixed_signal | Analog/mixed-signal | "Add PLL and ADC interface to the controller" |
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
- No Manual File Editing: Just describe what you want
- Automatic Convention Compliance: All generated code follows Vyges standards
- Intelligent Context: Understands your role and project requirements
- Progressive Enhancement: Build complexity incrementally
# Project Setup
"Initialize this as a CAN bus controller IP following Vyges conventions"
# RTL Development
"Create CAN controller RTL with 8 TX/RX buffers and error handling"
"Add DMA interface for high-speed data transfer"
"Implement configurable baud rate with fractional divider"
# Verification
"Generate SystemVerilog testbench with protocol compliance tests"
"Add functional coverage for all CAN frame types"
"Create formal properties for timing constraints"
# Integration
"Create AXI4-Lite wrapper for register access"
"Generate SoC integration manifest with address map"
"Add interrupt controller interface"
# Documentation
"Generate comprehensive README from metadata and RTL analysis"
"Create timing diagrams for all interfaces"
"Document power and area characteristics"
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: team@vyges.com
- 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.