* Initial plan
* Fix nonconstant index error by using unpacked structs and arrays
Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>
* Add comprehensive tests for Questa compatibility with instance arrays
Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>
* Add intermediate signals for interface array fanin to fix Questa compatibility
Questa simulator rejects indexing interface arrays with non-constant variables in procedural blocks (always_comb). This fix creates intermediate unpacked array signals that are assigned from interface arrays using generate loops (with genvar), then references those intermediates in the fanin logic.
Changes:
- Added fanin_intermediate_gen.py to generate intermediate signals
- Modified APB3/APB4/AXI4-Lite cpuif classes to use intermediates for interface arrays
- Updated templates to include intermediate signal section
- Intermediate signals use genvar indexing (legal) instead of variable indexing (illegal in Questa)
Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>
* Fix type checking and formatting issues in fanin intermediate generator
- Added proper null checks for node.array_dimensions to avoid type errors
- Used getattr() to safely access is_interface and _interface attributes
- Added early returns when interface is None to prevent errors
- Fixed formatting issues in fanin_intermediate_gen.py
- All type checks now pass (only pre-existing errors remain in other files)
- All 67 tests still pass
Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>
* Fix test collection when cocotb is not installed
The cocotb test files (test_runner.py) have imports that fail at module level when cocotb is not installed, causing pytest collection to fail. This prevents running tests in environments without cocotb dependencies.
Solution: Updated conftest.py to conditionally ignore cocotb tests when cocotb is not available, allowing tests to pass in both environments (with and without cocotb).
- When cocotb is available: only ignore test_register_access.py files (existing behavior)
- When cocotb is not available: ignore all files under cocotb/** directories
This allows CI to run all 67 non-simulation tests successfully without requiring cocotb/verilator dependencies for basic testing.
Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>
* add default for unpacked struct
* cocotb is test dependancy
* Refactor fanin intermediate signal logic to cpuif level
Moved the interface-specific signal assignment logic from fanin_intermediate_gen.py to individual cpuif classes (APB3Cpuif, APB4Cpuif, AXI4LiteCpuif). This follows better architecture principles where each cpuif knows which signals it needs.
Changes:
- Added fanin_intermediate_assignments() method to BaseCpuif
- Implemented fanin_intermediate_assignments() in APB3Cpuif, APB4Cpuif, and AXI4LiteCpuif
- Updated FaninIntermediateGenerator to call the cpuif method instead of checking interface type
- Removed interface type checking logic from fanin_intermediate_gen.py
This makes the code more maintainable and follows the single responsibility principle - each cpuif class knows its own signal requirements.
Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>
* Initial plan
* Fix non-synthesizable code for nested addrmaps with arrays
Fixed bug where array dimensions were used instead of strides in decode logic.
For nested addrmaps with arrays like inner[4] @ 0x0 += 0x100, the generated
code was incorrectly using the dimension (4) instead of the stride (0x100).
This resulted in non-synthesizable SystemVerilog with incorrect address decoding.
The fix calculates proper strides for each dimension, including support for
multi-dimensional arrays like [2][3] where each dimension has a different stride.
Added comprehensive tests to prevent regression.
Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>
* Improve code comments for stride calculation clarity
Added more detailed comments explaining the stride calculation logic,
including a concrete example showing how strides are calculated for
multi-dimensional arrays.
Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>
* Initial plan
* Fix --unroll CLI argument to properly unroll arrays
Updated check_is_array() method and all CPUIF implementations to correctly detect and handle unrolled array elements. When unroll=True, each array element is now treated as an individual instance instead of being repeated as an array.
Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>
* Add comprehensive tests for --unroll functionality
Created tests to verify that array elements are correctly unrolled into individual instances when --unroll flag is used. Also fixed conftest.py fixture to keep temp files for later reference.
Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: arnavsacheti <36746504+arnavsacheti@users.noreply.github.com>