Visible to Intel only — GUID: mwh1409958823802
Ixiasoft
Visible to Intel only — GUID: mwh1409958823802
Ixiasoft
3.10.2. Generated Components
Generated components change their generation output (HDL) based on their parameterization. If a component is generated, then any component that may instantiate it with multiple parameter sets must also be considered generated, since its HDL changes with its parameterization. This case has an effect that propagates up to the top-level of a design.
Since generated components are generated for each unique parameterized instantiation, when implementing the add_hdl_instance command, you cannot use the same fixed name (specified using instance_name) for the different variants of the child HDL instances. To facilitate unique naming for the wrapper of each unique parameterized instantiation of child HDL instances, you must use the following command so that Platform Designer generates a unique name for each wrapper. You can then access this unique wrapper name with a fileset callback so that the instances are instantiated inside the component's top-level HDL.
- To declare auto-generated fixed names for wrappers, use the command:
set_instance_property instance_name HDLINSTANCE_USE_GENERATED_NAME \ true
Note: You can only use this command with a generated component in the global context, or in an elaboration callback. - To obtain auto-generated fixed name with a fileset callback, use the command:
get_instance_property instance_name HDLINSTANCE_GET_GENERATED_NAME
Note: You can only use this command with a fileset callback. This command returns the value of the auto-generated fixed name, which you can then use to instantiate inside the top-level HDL.
Typical Usage of the add_hdl_instance Command for Generated Components
Platform Designer generates a wrapper file for the instance name specified in the _hw.tcl file.
package require -exact qsys 14.0
set_module_property name generated_toplevel_component
set_module_property ELABORATION_CALLBACK elaborate
add_fileset QUARTUS_SYNTH QUARTUS_SYNTH generate
add_fileset SIM_VERILOG SIM_VERILOG generate
add_fileset SIM_VHDL SIM_VHDL generate
proc elaborate {} {
# Actual API to instantiate an IP Core
add_hdl_instance emif_instance_name altera_mem_if_ddr3_emif
# Make sure the parameters are set appropriately
set_instance_parameter_value emif_instance_name SPEED_GRADE {7}
...
# instruct Platform Designer to use auto generated fixed name
set_instance_property emif_instance_name \
HDLINSTANCE_USE_GENERATED_NAME 1
}
proc generate { entity_name } {
# get the autogenerated name for emif_instance_name added
# via add_hdl_instance
set autogeneratedfixedname [get_instance_property \
emif_instance_name HDLINSTANCE_GET_GENERATED_NAME]
set fileID [open "generated_toplevel_component.v" r]
set temp ""
# read the contents of the file
while {[eof $fileID] != 1} {
gets $fileID lineInfo
# replace the top level entity name with the name provided
# during generation
regsub -all "substitute_entity_name_here" $lineInfo \
"${entity_name}" lineInfo
# replace the autogenerated name for emif_instance_name added
# via add_hdl_instance
regsub -all "substitute_autogenerated_emifinstancename_here" \
$lineInfo"${autogeneratedfixedname}" lineInfo \
append temp "${lineInfo}\n"
}
# adding a top level component file
add_fileset_file ${entity_name}.v VERILOG TEXT $temp
}
Top-Level HDL Instance and Wrapper File Created By Platform Designer
// Top Level Component HDL
module substitute_entity_name_here (input_wire, output_wire,
inout_wire);
input [31:0] input_wire;
output [31:0] output_wire;
inout [31:0] inout_wire;
// Instantiation of the instance added via add_hdl_instance
// command. This is an example of how the instance added
// via add_hdl_instance command can be used
// in the top-level file of the component.
substitute_autogenerated_emifinstancename_here
fixed_name_instantiation_in_top_level (
.pll_ref_clk (input_wire), // pll_ref_clk.clk
.global_reset_n (input_wire), // global_reset.reset_n
.soft_reset_n (input_wire), // soft_reset.reset_n
...
... );
endmodule
// Wrapper for added HDL instance
// generated_toplevel_component_0_emif_instance_name.v is the
// auto generated //emif_instance_name
// Generated using ACDS version 13.
`timescale 1 ps / 1 ps
module generated_toplevel_component_0_emif_instance_name (
input wire pll_ref_clk, // pll_ref_clk.clk
input wire global_reset_n, // global_reset.reset_n
input wire soft_reset_n, // soft_reset.reset_n
output wire afi_clk, // afi_clk.clk
...
...);
example_addhdlinstance_system_add_hdl_instance_example_0_emif
_instance_name_emif_instance_name emif_instance_name (
.pll_ref_clk (pll_ref_clk), // pll_ref_clk.clk
.global_reset_n (global_reset_n), // global_reset.reset_n
.soft_reset_n (soft_reset_n), // soft_reset.reset_n
...
...);
endmodule