Ultra RAM on True Dual Port RAM

6 views (last 30 days)
Nick
Nick on 23 Dec 2024
Commented: Dan on 21 Mar 2025
HI,
I try to design True Dual Port RAM on Ultra RAM. I use block primitive True Dual Port RAM in 2024a and set RAMDirective 'ultra'. Generated code has this attribute. But when implemen step in Vivado, i have info, that attribute ultra is ignored because invalid write mode. And after implementing my RAM design by block RAM, but i need based on Ultra RAM
Please, give advice about this problem

Accepted Answer

Kiran Kintali
Kiran Kintali on 23 Dec 2024
Please do attach your sample model as a test case.
This is a known issue and HDL Coder R&D team have reported the issue to Vivado community. See the discussion here https://adaptivesupport.amd.com/s/question/0D74U000007ua50SAA/detail?language=en_US
See the attached model RAM based FIR filter.
Here are the code generation settings
%FPGA DUT Subsystem: 'hdlcoderfirram/FIR_RAM'
>> hdlsaveparams('hdlcoderfirram/FIR_RAM')
hdlset_param('hdlcoderfirram', 'HDLGenerateWebview', 'on');
hdlset_param('hdlcoderfirram', 'HDLSubsystem', 'hdlcoderfirram/FIR_RAM');
hdlset_param('hdlcoderfirram', 'InitializeBlockRAM', 'off');
hdlset_param('hdlcoderfirram', 'NoResetInitializationMode', 'None');
hdlset_param('hdlcoderfirram', 'ProjectFolder', 'hdl_prj');
hdlset_param('hdlcoderfirram', 'ResetType', 'Synchronous');
hdlset_param('hdlcoderfirram', 'SynthesisTool', 'Xilinx Vivado');
hdlset_param('hdlcoderfirram', 'SynthesisToolChipFamily', 'Virtex UltraScale+');
hdlset_param('hdlcoderfirram', 'SynthesisToolDeviceName', 'xcvu9p-flga2104-2L-e');
hdlset_param('hdlcoderfirram', 'TargetDirectory', 'hdl_prj\hdlsrc');
hdlset_param('hdlcoderfirram', 'TargetFrequency', 400);
hdlset_param('hdlcoderfirram', 'TargetLanguage', 'Verilog');
hdlset_param('hdlcoderfirram', 'Traceability', 'on');
hdlset_param('hdlcoderfirram/FIR_RAM/Dual Port RAM', 'RAMDirective', 'ultra');
hdlset_param('hdlcoderfirram/FIR_RAM/Dual Port RAM System', 'RAMDirective', 'ultra');
Generate HDL Code with the settings
>> makehdl('hdlcoderfirram/FIR_RAM')
### Working on the model hdlcoderfirram
### Generating HDL for hdlcoderfirram/FIR_RAM
### Using the config set for model hdlcoderfirram for HDL code generation parameters.
### Running HDL checks on the model 'hdlcoderfirram'.
### Begin compilation of the model 'hdlcoderfirram'...
### Begin compilation of the model 'hdlcoderfirram'...
### Working on the model 'hdlcoderfirram'...
### Working on... GenerateModel
### Begin model generation 'gm_hdlcoderfirram'...
### Copying DUT to the generated model....
### Model generation complete.
### Generated model saved at hdl_prj\hdlsrc\hdlcoderfirram\gm_hdlcoderfirram.slx
### Begin Verilog Code Generation for 'hdlcoderfirram'.
### Begin Verilog Code Generation for 'FIR_RAM_tc'.
### Working on FIR_RAM_tc as hdl_prj\hdlsrc\hdlcoderfirram\FIR_RAM_tc.v.
### Code Generation for 'FIR_RAM_tc' completed.
### Working on... Traceability
### Working on... HDLGenerateWebview
### Working on hdlcoderfirram/FIR_RAM/FIR_Addr as hdl_prj\hdlsrc\hdlcoderfirram\FIR_Addr.v.
### Working on hdlcoderfirram/FIR_RAM/DualPortRAM_generic as hdl_prj\hdlsrc\hdlcoderfirram\DualPortRAM_generic.v.
### Working on hdlcoderfirram/FIR_RAM/DualPortRAM_generic as hdl_prj\hdlsrc\hdlcoderfirram\DualPortRAM_generic_block.v.
### Working on hdlcoderfirram/FIR_RAM as hdl_prj\hdlsrc\hdlcoderfirram\FIR_RAM.v.
### Code Generation for 'hdlcoderfirram' completed.
### Generating HTML files for code generation report at index.html
### Creating HDL Code Generation Check Report FIR_RAM_report.html
### HDL check for 'hdlcoderfirram' complete with 0 errors, 5 warnings, and 0 messages.
### HDL code generation complete.
>>
Look at the generated code files
>> cd hdl_prj\hdlsrc\hdlcoderfirram\
>> !grep ultra *.*
DualPortRAM_generic.v: (* ram_style = "ultra" *) reg[DataWidth - 1:0] ram [2**AddrWidth - 1:0];
DualPortRAM_generic_block.v: (* ram_style = "ultra" *) reg[DataWidth - 1:0] ram [2**AddrWidth - 1:0];
>>
After applying the RAM_STYLE attribute as “ultra” the Vivado Synthesis does not infer URAMs. The following warning can be seen in Vivado Synthesis:
The ram_style = "ultra" set on RAM "Subsystem/u_Dual_Port_RAM/ram_reg" is ignored because invalid write mode
HDL Coder team is working with AMD to address the coding style. Please reach out to tech support for additional help.
  4 Comments
Nick
Nick on 24 Dec 2024
Great, the best, thanks a lot!
Dan
Dan on 21 Mar 2025
Hello, would you be able to provide an update on this as we are running in to the same issue.

Sign in to comment.

More Answers (0)

Products


Release

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!