Configure Custom Synthesis Attributes for Simulink Blocks
This example shows how to configure custom synthesis attributes for the model and propagate them to the generated HDL code. You can assign the custom attributes to the Simulink blocks or the design-under-test (DUT) based on the synthesis tool, and generate HDL code that includes the respective synthesis attribute.
Open Model
Open the model. This model contains Single Port RAM System, Gain, and Delay blocks.
mdl = 'SynthesisAttributesExampleModel'; dut = [mdl '/HDL_DUT']; open_system(mdl);
Set Custom Synthesis Attributes
You can set the SynthesisAttributes
to the blocks and subsystems in the model by using hdlset_param
function. In this example the ram_style
synthesis attribute is set on the Single Port RAM block, the use_dsp
synthesis attribute is set on the Gain block, the max_fanout
and mark_debug
synthesis attributes are set on the Delay block, and the keep_hierarchy
synthesis attribute is set on the Subsystem. This example uses the Xilinix® Vivado® synthesis tool.
hdlset_param([dut '/SinglePortRAMSystem'], 'SynthesisAttributes', {{'ram_style', 'ultra'}}); hdlset_param([dut '/Gain'], 'SynthesisAttributes', {{'use_dsp', 'yes'}}); hdlset_param([dut '/Delay'], 'SynthesisAttributes', {{{'max_fanout', '5'}},{{'mark_debug', 'true'}}}); hdlset_param(dut, 'SynthesisAttributes', {{'keep_hierarchy', 'yes'}});
Generate HDL Code
You can generate VDHL code for your design under test(DUT) by using the makehdl
function. Since the synthesis attributes are independent of target language, you can use the same synthesis attributes to generate Verilog and SystemVerilog code. To generate VHDL code for DUT subsystem, run this command on your MATLAB command window.
load_system(mdl); makehdl(dut, 'TargetLanguage', 'VHDL');
### Working on the model <a href="matlab:open_system('SynthesisAttributesExampleModel')">SynthesisAttributesExampleModel</a> ### Generating HDL for <a href="matlab:open_system('SynthesisAttributesExampleModel/HDL_DUT')">SynthesisAttributesExampleModel/HDL_DUT</a> ### Using the config set for model <a href="matlab:configset.showParameterGroup('SynthesisAttributesExampleModel', { 'HDL Code Generation' } )">SynthesisAttributesExampleModel</a> for HDL code generation parameters. ### Running HDL checks on the model 'SynthesisAttributesExampleModel'. ### Begin compilation of the model 'SynthesisAttributesExampleModel'... ### Working on the model 'SynthesisAttributesExampleModel'... ### Working on... <a href="matlab:configset.internal.open('SynthesisAttributesExampleModel', 'GenerateModel')">GenerateModel</a> ### Begin model generation 'gm_SynthesisAttributesExampleModel'... ### Copying DUT to the generated model.... ### Model generation complete. ### Generated model saved at <a href="matlab:open_system('hdlsrc/SynthesisAttributesExampleModel/gm_SynthesisAttributesExampleModel.slx')">hdlsrc/SynthesisAttributesExampleModel/gm_SynthesisAttributesExampleModel.slx</a> ### Begin VHDL Code Generation for 'SynthesisAttributesExampleModel'. ### Working on SynthesisAttributesExampleModel/HDL_DUT/SinglePortRAM_generic as hdlsrc/SynthesisAttributesExampleModel/SinglePortRAM_generic.vhd. ### Working on SynthesisAttributesExampleModel/HDL_DUT as hdlsrc/SynthesisAttributesExampleModel/HDL_DUT.vhd. ### Generating package file hdlsrc/SynthesisAttributesExampleModel/HDL_DUT_pkg.vhd. ### Code Generation for 'SynthesisAttributesExampleModel' completed. ### Generating HTML files for code generation report at <a href="matlab:hdlcoder.report.openDdg('/tmp/Bdoc24b_2679053_1553714/tp38ea261c/hdlcoder-ex62929635/hdlsrc/SynthesisAttributesExampleModel/html/SynthesisAttributesExampleModel_codegen_rpt.html')">SynthesisAttributesExampleModel_codegen_rpt.html</a> ### Creating HDL Code Generation Check Report file:///tmp/Bdoc24b_2679053_1553714/tp38ea261c/hdlcoder-ex62929635/hdlsrc/SynthesisAttributesExampleModel/HDL_DUT_report.html ### HDL check for 'SynthesisAttributesExampleModel' complete with 0 errors, 0 warnings, and 0 messages. ### HDL code generation complete.
HDL Coder generates the SinglePortRAM_generic.vhd file. The generated VHDL code contains the synthesis attributes, as shown in the code snippet.
ATTRIBUTE ram_style : string;
ATTRIBUTE ram_style OF ram : SIGNAL IS "ultra";
Similarly in the HDL_DUT.vhd file.
ATTRIBUTE keep_hierarchy : string; ATTRIBUTE keep_hierarchy OF rtl : ARCHITECTURE IS "yes";
ATTRIBUTE use_dsp : string; ATTRIBUTE max_fanout : integer; ATTRIBUTE mark_debug : boolean;
ATTRIBUTE use_dsp OF Gain_out1 : SIGNAL IS "yes"; ATTRIBUTE max_fanout OF Delay_reg : SIGNAL IS 5; ATTRIBUTE mark_debug OF Delay_out1 : SIGNAL IS true;