Closed adrianf0 closed 5 years ago
Hi @adrianf0 , Thank you for using RgGen tool and opening the issue ! I need detail information to investigate the issue. Can you give me the log file?
Hi @taichi-ishitani , thank you for your tool!
I am enclosing a simple project I have built quickly. I used a register specification from conf/samples.csv. It's a simplified version of your samples.xls from which I removed arrays: Verilog doesn't support arrays in port section and Quartus (and a quite few other tools with limited support of SystemVerilog) needs a top-level module without interfaces in a port declaration (check: #118 ).
Setting _rtl/topVerilogwrappper.v as top and adding all other sources to a Quartus project makes it crashing during synthesis.
Problem Details Error: Internal Error: Sub-system: VRFX, File: /quartus/synth/vrfx/verific/verilog/veriname.cpp, Line: 640 ...
It seems to crash during the synthesis of the rggen-building-block-rt library.
I have also tried to simulate quickly the design in Questa. Unfortunately, it fails, claiming there is a bug in a file generated by RgGen:
# ** Fatal: (vsim-3695) ../rtl/block_0.sv(37): The interface port 'bus_if' must be passed an actual interface. Time: 0 ns Iteration: 0 Instance: /topVerilogwrapper/top/block/u_host_if File: ../rggen-building-block-rtl/rggen_host_if_axi4lite.sv FATAL ERROR while loading design Error loading design
Hi @adrianf0 , Thank you for your detail information.
Currently, RgGen supports APB only, AXI4 Lite is not supported. Can you edit configuration.yaml
, change the host_if
from axi4lite
to apb
and try again?
Detail:
I have not yet implemented the internal bus bridge module for AXI Lite. It has port definition only.
However, its port definition does not match current RgGen implementation. (Please refer the internal bus bridge for APB to know the current RgGen implementation.)
Therefore, the instantiation and the definition are not matched so Quartus crashed.
If you need to use AXI4 Lite, I will implement the bridge module during this week end.
Hi @adrianf0 ,
I implemented the bus bridge module for AXI4 Lite and committed it to the development branch. https://github.com/taichi-ishitani/rggen-building-block-rtl/commit/a1b35abded60a600be6674534199e22aa5f268f0
Following commands are to get the latest bridge module:
$ cd rggen-building-block-rtl
$ git pull
$ git checkout implementing_axi4lite_bridge
Also I updated your generated code and wrapper modules for your trial. RgGen.zip
Could you please try to use the latest bridge module and the generated code? I will commit the latest bridge module to master branch after confirming success of your trial.
Hi @taichi-ishitani Thank you for a prompt reply and a bugfix. In the latest version, Quartus complains that:
Error (10709): SystemVerilog error at block_0.sv(3): parameter with complex/aggregate value must have a type
The fix is to change in block_0:
module block_0 #( parameter ACCESS_PRIORITY = rggen_rtl_pkg::RGGEN_WRITE
to
module block_0 #( parameter rggen_rtl_pkg::rggen_direction ACCESS_PRIORITY = rggen_rtl_pkg::RGGEN_WRITE
Could you fix it in RgGen?
Hi @adrianf0 , Thank you for your feedback. This is RgGen's bug. I'm fixing it now.
After fixing block_0
module, does Quartus synthesis succeed?
Yes, by adding manually the datatype, the whole design passes Quartus synthesis (yet still to be confirmed whether it work in hardware actually).
How can I make use of your bugfixes? Will you push changes upstream so you I call gem update
or there is another way (I am new to Ruby)?
I have uploaded the latest RgGen to rubygems.
You can get it by gem update rggen
command.
I confirm that using the latest RgGen (0.7.2) and checking out _implementing_axi4litebridge branch of rggen-building-block-rtl I can pass synthesis in Quartus (18.0.0).
Good ! Thanks again for your using RgGen and opening the issue !!
The RTL code generated for an example register specification ( sample.xls ) crashes Quartus.
Tested with Quartus 18.0.0 Standard Edition (it has a limited support for SystemVerilog).