use prefix instead of lib_name when building modules, then use lib_name for standard cell modules
This commit is contained in:
parent
2fbb88d25b
commit
a308a13d7c
|
@ -76,9 +76,9 @@ endmodule //End Of Module static_dff
|
|||
//-----------------------------------------------------
|
||||
module sc_dff_compact (
|
||||
/* Global ports go first */
|
||||
input pReset, // Reset input
|
||||
input reset, // Reset input
|
||||
//input set, // set input
|
||||
input prog_clk, // Clock Input
|
||||
input clk, // Clock Input
|
||||
/* Local ports follow */
|
||||
input D, // Data Input
|
||||
output Q, // Q output
|
||||
|
@ -88,8 +88,8 @@ output Qb // Q output
|
|||
reg q_reg;
|
||||
|
||||
//-------------Code Starts Here---------
|
||||
always @ ( posedge prog_clk or posedge pReset /*or posedge set*/)
|
||||
if (pReset) begin
|
||||
always @ ( posedge clk or posedge reset /*or posedge set*/)
|
||||
if (reset) begin
|
||||
q_reg <= 1'b0;
|
||||
//end else if (set) begin
|
||||
// q_reg <= 1'b1;
|
||||
|
|
|
@ -321,12 +321,12 @@
|
|||
<input_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<output_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<pass_gate_logic circuit_model_name="TGATEX1"/>
|
||||
<port type="input" prefix="pReset" lib_name="pReset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<port type="input" prefix="pReset" lib_name="reset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<!-- <port type="input" prefix="pSet" size="1" is_global="true" default_val="0" is_set="true" is_prog="true"/> -->
|
||||
<port type="input" prefix="D" lib_name="D" size="1"/>
|
||||
<port type="output" prefix="Q" lib_name="Q" size="1"/>
|
||||
<port type="output" prefix="Qb" lib_name="Qb" size="1"/>
|
||||
<port type="clock" prefix="prog_clk" lib_name="prog_clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
<port type="clock" prefix="prog_clk" lib_name="clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
</circuit_model>
|
||||
<circuit_model type="iopad" name="iopad" prefix="iopad" spice_netlist="${OPENFPGA_PATH}/openfpga_flow/SpiceNetlists/io.sp" verilog_netlist="${OPENFPGA_PATH}/openfpga_flow/VerilogNetlists/io.v">
|
||||
<design_technology type="cmos"/>
|
||||
|
|
|
@ -379,12 +379,12 @@
|
|||
<input_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<output_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<pass_gate_logic circuit_model_name="TGATEX1"/>
|
||||
<port type="input" prefix="pReset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<port type="input" prefix="pReset" lib_name="reset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<!-- <port type="input" prefix="pSet" size="1" is_global="true" default_val="0" is_set="true" is_prog="true"/> -->
|
||||
<port type="input" prefix="D" size="1"/>
|
||||
<port type="output" prefix="Q" size="1"/>
|
||||
<port type="output" prefix="Qb" size="1"/>
|
||||
<port type="clock" prefix="prog_clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
<port type="clock" prefix="prog_clk" lib_name="clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
</circuit_model>
|
||||
<circuit_model type="iopad" name="iopad" prefix="iopad" spice_netlist="${OPENFPGA_PATH}/openfpga_flow/SpiceNetlists/io.sp" verilog_netlist="${OPENFPGA_PATH}/openfpga_flow/VerilogNetlists/io.v">
|
||||
<design_technology type="cmos"/>
|
||||
|
|
|
@ -379,12 +379,12 @@
|
|||
<input_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<output_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<pass_gate_logic circuit_model_name="TGATEX1"/>
|
||||
<port type="input" prefix="pReset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<port type="input" prefix="pReset" lib_name="reset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<!-- <port type="input" prefix="pSet" size="1" is_global="true" default_val="0" is_set="true" is_prog="true"/> -->
|
||||
<port type="input" prefix="D" size="1"/>
|
||||
<port type="output" prefix="Q" size="1"/>
|
||||
<port type="output" prefix="Qb" size="1"/>
|
||||
<port type="clock" prefix="prog_clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
<port type="clock" prefix="prog_clk" lib_name="clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
</circuit_model>
|
||||
<circuit_model type="iopad" name="iopad" prefix="iopad" spice_netlist="${OPENFPGA_PATH}/openfpga_flow/SpiceNetlists/io.sp" verilog_netlist="${OPENFPGA_PATH}/openfpga_flow/VerilogNetlists/io.v">
|
||||
<design_technology type="cmos"/>
|
||||
|
|
|
@ -379,12 +379,12 @@
|
|||
<input_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<output_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<pass_gate_logic circuit_model_name="TGATEX1"/>
|
||||
<port type="input" prefix="pReset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<port type="input" prefix="pReset" lib_name="reset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<!-- <port type="input" prefix="pSet" size="1" is_global="true" default_val="0" is_set="true" is_prog="true"/> -->
|
||||
<port type="input" prefix="D" size="1"/>
|
||||
<port type="output" prefix="Q" size="1"/>
|
||||
<port type="output" prefix="Qb" size="1"/>
|
||||
<port type="clock" prefix="prog_clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
<port type="clock" prefix="prog_clk" lib_name="clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
</circuit_model>
|
||||
<circuit_model type="iopad" name="iopad" prefix="iopad" spice_netlist="${OPENFPGA_PATH}/openfpga_flow/SpiceNetlists/io.sp" verilog_netlist="${OPENFPGA_PATH}/openfpga_flow/VerilogNetlists/io.v">
|
||||
<design_technology type="cmos"/>
|
||||
|
|
|
@ -377,12 +377,12 @@
|
|||
<input_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<output_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<pass_gate_logic circuit_model_name="TGATEX1"/>
|
||||
<port type="input" prefix="pReset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<port type="input" prefix="pReset" lib_name="reset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<!-- <port type="input" prefix="pSet" size="1" is_global="true" default_val="0" is_set="true" is_prog="true"/> -->
|
||||
<port type="input" prefix="D" size="1"/>
|
||||
<port type="output" prefix="Q" size="1"/>
|
||||
<port type="output" prefix="Qb" size="1"/>
|
||||
<port type="clock" prefix="prog_clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
<port type="clock" prefix="prog_clk" lib_name="clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
</circuit_model>
|
||||
<circuit_model type="iopad" name="iopad" prefix="iopad" spice_netlist="${OPENFPGA_PATH}/openfpga_flow/SpiceNetlists/io.sp" verilog_netlist="${OPENFPGA_PATH}/openfpga_flow/VerilogNetlists/io.v">
|
||||
<design_technology type="cmos"/>
|
||||
|
|
|
@ -379,12 +379,12 @@
|
|||
<input_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<output_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<pass_gate_logic circuit_model_name="TGATEX1"/>
|
||||
<port type="input" prefix="pReset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<port type="input" prefix="pReset" lib_name="reset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<!-- <port type="input" prefix="pSet" size="1" is_global="true" default_val="0" is_set="true" is_prog="true"/> -->
|
||||
<port type="input" prefix="D" size="1"/>
|
||||
<port type="output" prefix="Q" size="1"/>
|
||||
<port type="output" prefix="Qb" size="1"/>
|
||||
<port type="clock" prefix="prog_clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
<port type="clock" prefix="prog_clk" lib_name="clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
</circuit_model>
|
||||
<circuit_model type="iopad" name="iopad" prefix="iopad" spice_netlist="${OPENFPGA_PATH}/openfpga_flow/SpiceNetlists/io.sp" verilog_netlist="${OPENFPGA_PATH}/openfpga_flow/VerilogNetlists/io.v">
|
||||
<design_technology type="cmos"/>
|
||||
|
|
|
@ -379,12 +379,12 @@
|
|||
<input_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<output_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<pass_gate_logic circuit_model_name="TGATEX1"/>
|
||||
<port type="input" prefix="pReset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<port type="input" prefix="pReset" lib_name="reset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<!-- <port type="input" prefix="pSet" size="1" is_global="true" default_val="0" is_set="true" is_prog="true"/> -->
|
||||
<port type="input" prefix="D" size="1"/>
|
||||
<port type="output" prefix="Q" size="1"/>
|
||||
<port type="output" prefix="Qb" size="1"/>
|
||||
<port type="clock" prefix="prog_clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
<port type="clock" prefix="prog_clk" lib_name="clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
</circuit_model>
|
||||
<circuit_model type="iopad" name="iopad" prefix="iopad" spice_netlist="${OPENFPGA_PATH}/openfpga_flow/SpiceNetlists/io.sp" verilog_netlist="${OPENFPGA_PATH}/openfpga_flow/VerilogNetlists/io.v">
|
||||
<design_technology type="cmos"/>
|
||||
|
|
|
@ -379,12 +379,12 @@
|
|||
<input_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<output_buffer exist="on" circuit_model_name="INV1X"/>
|
||||
<pass_gate_logic circuit_model_name="TGATEX1"/>
|
||||
<port type="input" prefix="pReset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<port type="input" prefix="pReset" lib_name="reset" size="1" is_global="true" default_val="0" is_reset="true" is_prog="true"/>
|
||||
<!-- <port type="input" prefix="pSet" size="1" is_global="true" default_val="0" is_set="true" is_prog="true"/> -->
|
||||
<port type="input" prefix="D" size="1"/>
|
||||
<port type="output" prefix="Q" size="1"/>
|
||||
<port type="output" prefix="Qb" size="1"/>
|
||||
<port type="clock" prefix="prog_clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
<port type="clock" prefix="prog_clk" lib_name="clk" size="1" is_global="true" default_val="0" is_prog="true"/>
|
||||
</circuit_model>
|
||||
<circuit_model type="iopad" name="iopad" prefix="iopad" spice_netlist="${OPENFPGA_PATH}/openfpga_flow/SpiceNetlists/io.sp" verilog_netlist="${OPENFPGA_PATH}/openfpga_flow/VerilogNetlists/io.v">
|
||||
<design_technology type="cmos"/>
|
||||
|
|
|
@ -410,7 +410,7 @@ size_t check_circuit_library_ports(const CircuitLibrary& circuit_lib) {
|
|||
for (size_t iport = 0; iport < global_ports.size() - 1; ++iport) {
|
||||
for (size_t jport = iport + 1; jport < global_ports.size(); ++jport) {
|
||||
/* Bypass those do not share the same name */
|
||||
if (0 != circuit_lib.port_lib_name(global_ports[iport]).compare(circuit_lib.port_lib_name(global_ports[jport]))) {
|
||||
if (0 != circuit_lib.port_prefix(global_ports[iport]).compare(circuit_lib.port_prefix(global_ports[jport]))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -421,7 +421,7 @@ size_t check_circuit_library_ports(const CircuitLibrary& circuit_lib) {
|
|||
if (circuit_lib.port_default_value(global_ports[iport]) != circuit_lib.port_default_value(global_ports[jport])) {
|
||||
vpr_printf(TIO_MESSAGE_ERROR,
|
||||
"Global ports %s from circuit model %s and %s share the same name but have different dfefault values(%lu and %lu)!\n",
|
||||
circuit_lib.port_lib_name(global_ports[iport]).c_str(),
|
||||
circuit_lib.port_prefix(global_ports[iport]).c_str(),
|
||||
circuit_lib.model_name(iport_parent_model).c_str(),
|
||||
circuit_lib.model_name(jport_parent_model).c_str(),
|
||||
circuit_lib.port_default_value(global_ports[iport]),
|
||||
|
@ -433,7 +433,7 @@ size_t check_circuit_library_ports(const CircuitLibrary& circuit_lib) {
|
|||
if (circuit_lib.port_is_reset(global_ports[iport]) != circuit_lib.port_is_reset(global_ports[jport])) {
|
||||
vpr_printf(TIO_MESSAGE_ERROR,
|
||||
"Global ports %s from circuit model %s and %s share the same name but have different is_reset attributes!\n",
|
||||
circuit_lib.port_lib_name(global_ports[iport]).c_str(),
|
||||
circuit_lib.port_prefix(global_ports[iport]).c_str(),
|
||||
circuit_lib.model_name(iport_parent_model).c_str(),
|
||||
circuit_lib.model_name(jport_parent_model).c_str()
|
||||
);
|
||||
|
@ -442,7 +442,7 @@ size_t check_circuit_library_ports(const CircuitLibrary& circuit_lib) {
|
|||
if (circuit_lib.port_is_set(global_ports[iport]) != circuit_lib.port_is_set(global_ports[jport])) {
|
||||
vpr_printf(TIO_MESSAGE_ERROR,
|
||||
"Global ports %s from circuit model %s and %s share the same name but have different is_set attributes!\n",
|
||||
circuit_lib.port_lib_name(global_ports[iport]).c_str(),
|
||||
circuit_lib.port_prefix(global_ports[iport]).c_str(),
|
||||
circuit_lib.model_name(iport_parent_model).c_str(),
|
||||
circuit_lib.model_name(jport_parent_model).c_str()
|
||||
);
|
||||
|
@ -451,7 +451,7 @@ size_t check_circuit_library_ports(const CircuitLibrary& circuit_lib) {
|
|||
if (circuit_lib.port_is_config_enable(global_ports[iport]) != circuit_lib.port_is_config_enable(global_ports[jport])) {
|
||||
vpr_printf(TIO_MESSAGE_ERROR,
|
||||
"Global ports %s from circuit model %s and %s share the same name but have different is_config_enable attributes!\n",
|
||||
circuit_lib.port_lib_name(global_ports[iport]).c_str(),
|
||||
circuit_lib.port_prefix(global_ports[iport]).c_str(),
|
||||
circuit_lib.model_name(iport_parent_model).c_str(),
|
||||
circuit_lib.model_name(jport_parent_model).c_str()
|
||||
);
|
||||
|
@ -460,7 +460,7 @@ size_t check_circuit_library_ports(const CircuitLibrary& circuit_lib) {
|
|||
if (circuit_lib.port_is_prog(global_ports[iport]) != circuit_lib.port_is_prog(global_ports[jport])) {
|
||||
vpr_printf(TIO_MESSAGE_ERROR,
|
||||
"Global ports %s from circuit model %s and %s share the same name but have different is_prog attributes!\n",
|
||||
circuit_lib.port_lib_name(global_ports[iport]).c_str(),
|
||||
circuit_lib.port_prefix(global_ports[iport]).c_str(),
|
||||
circuit_lib.model_name(iport_parent_model).c_str(),
|
||||
circuit_lib.model_name(jport_parent_model).c_str()
|
||||
);
|
||||
|
|
|
@ -226,7 +226,7 @@ std::vector<CircuitPortId> find_circuit_library_global_ports(const CircuitLibrar
|
|||
/* Check if a same port with the same name has already been in the list */
|
||||
bool add_to_list = true;
|
||||
for (const auto& global_port : global_ports) {
|
||||
if (0 == circuit_lib.port_lib_name(port).compare(circuit_lib.port_lib_name(global_port))) {
|
||||
if (0 == circuit_lib.port_prefix(port).compare(circuit_lib.port_prefix(global_port))) {
|
||||
/* Same name, skip list update */
|
||||
add_to_list = false;
|
||||
break;
|
||||
|
|
|
@ -462,6 +462,15 @@ ModulePortId ModuleManager::add_port(const ModuleId& module,
|
|||
return port;
|
||||
}
|
||||
|
||||
/* Set a name for a module port */
|
||||
void ModuleManager::set_module_port_name(const ModuleId& module, const ModulePortId& module_port,
|
||||
const std::string& port_name) {
|
||||
/* Validate the id of module port */
|
||||
VTR_ASSERT( valid_module_port_id(module, module_port) );
|
||||
|
||||
ports_[module][module_port].set_name(port_name);
|
||||
}
|
||||
|
||||
/* Set a name for a module */
|
||||
void ModuleManager::set_module_name(const ModuleId& module, const std::string& name) {
|
||||
/* Validate the id of module */
|
||||
|
|
|
@ -127,6 +127,8 @@ class ModuleManager {
|
|||
/* Add a port to a module */
|
||||
ModulePortId add_port(const ModuleId& module,
|
||||
const BasicPort& port_info, const enum e_module_port_type& port_type);
|
||||
/* Set a name for a module port */
|
||||
void set_module_port_name(const ModuleId& module, const ModulePortId& module_port, const std::string& port_name);
|
||||
/* Set a name for a module */
|
||||
void set_module_name(const ModuleId& module, const std::string& name);
|
||||
/* Set a port to be a wire */
|
||||
|
|
|
@ -36,7 +36,7 @@ ModuleId add_circuit_model_to_module_manager(ModuleManager& module_manager,
|
|||
/* Add ports */
|
||||
/* Find global ports and add one by one */
|
||||
for (const auto& port : circuit_lib.model_global_ports(circuit_model, false)) {
|
||||
BasicPort port_info(circuit_lib.port_lib_name(port), circuit_lib.port_size(port));
|
||||
BasicPort port_info(circuit_lib.port_prefix(port), circuit_lib.port_size(port));
|
||||
module_manager.add_port(module, port_info, ModuleManager::MODULE_GLOBAL_PORT);
|
||||
}
|
||||
|
||||
|
@ -56,7 +56,7 @@ ModuleId add_circuit_model_to_module_manager(ModuleManager& module_manager,
|
|||
/* Input ports (ignore all the global ports when searching the circuit_lib */
|
||||
for (const auto& kv : port_type2type_map) {
|
||||
for (const auto& port : circuit_lib.model_ports_by_type(circuit_model, kv.first, true)) {
|
||||
BasicPort port_info(circuit_lib.port_lib_name(port), circuit_lib.port_size(port));
|
||||
BasicPort port_info(circuit_lib.port_prefix(port), circuit_lib.port_size(port));
|
||||
module_manager.add_port(module, port_info, kv.second);
|
||||
}
|
||||
}
|
||||
|
@ -397,7 +397,7 @@ void add_primitive_pb_type_module_nets(ModuleManager& module_manager,
|
|||
BasicPort src_port = module_manager.module_port(pb_type_module, src_module_port_id);
|
||||
|
||||
/* Get the des module port id */
|
||||
std::string des_module_port_name = circuit_lib.port_lib_name(pb_type_port->circuit_model_port);
|
||||
std::string des_module_port_name = circuit_lib.port_prefix(pb_type_port->circuit_model_port);
|
||||
ModulePortId des_module_port_id = module_manager.find_module_port(child_module, des_module_port_name);
|
||||
VTR_ASSERT(ModulePortId::INVALID() != des_module_port_id);
|
||||
BasicPort des_port = module_manager.module_port(child_module, des_module_port_id);
|
||||
|
@ -558,11 +558,11 @@ void add_module_nets_between_logic_and_memory_sram_bus(ModuleManager& module_man
|
|||
std::vector<std::string> logic_model_sram_port_names;
|
||||
/* Regular sram port goes first */
|
||||
for (CircuitPortId regular_sram_port : find_circuit_regular_sram_ports(circuit_lib, logic_model)) {
|
||||
logic_model_sram_port_names.push_back(circuit_lib.port_lib_name(regular_sram_port));
|
||||
logic_model_sram_port_names.push_back(circuit_lib.port_prefix(regular_sram_port));
|
||||
}
|
||||
/* Mode-select sram port goes first */
|
||||
for (CircuitPortId mode_select_sram_port : find_circuit_mode_select_sram_ports(circuit_lib, logic_model)) {
|
||||
logic_model_sram_port_names.push_back(circuit_lib.port_lib_name(mode_select_sram_port));
|
||||
logic_model_sram_port_names.push_back(circuit_lib.port_prefix(mode_select_sram_port));
|
||||
}
|
||||
/* Find the port ids in the memory */
|
||||
std::vector<ModulePortId> logic_module_sram_port_ids;
|
||||
|
@ -594,11 +594,11 @@ void add_module_nets_between_logic_and_memory_sram_bus(ModuleManager& module_man
|
|||
std::vector<std::string> logic_model_sramb_port_names;
|
||||
/* Regular sram port goes first */
|
||||
for (CircuitPortId regular_sram_port : find_circuit_regular_sram_ports(circuit_lib, logic_model)) {
|
||||
logic_model_sramb_port_names.push_back(circuit_lib.port_lib_name(regular_sram_port) + std::string("_inv"));
|
||||
logic_model_sramb_port_names.push_back(circuit_lib.port_prefix(regular_sram_port) + std::string("_inv"));
|
||||
}
|
||||
/* Mode-select sram port goes first */
|
||||
for (CircuitPortId mode_select_sram_port : find_circuit_mode_select_sram_ports(circuit_lib, logic_model)) {
|
||||
logic_model_sramb_port_names.push_back(circuit_lib.port_lib_name(mode_select_sram_port) + std::string("_inv"));
|
||||
logic_model_sramb_port_names.push_back(circuit_lib.port_prefix(mode_select_sram_port) + std::string("_inv"));
|
||||
}
|
||||
/* Find the port ids in the memory */
|
||||
std::vector<ModulePortId> logic_module_sramb_port_ids;
|
||||
|
|
|
@ -132,6 +132,15 @@ ModuleManager build_device_module_graph(const t_vpr_setup& vpr_setup,
|
|||
arch.sram_inf.verilog_sram_inf_orgz->type, sram_model,
|
||||
TRUE == vpr_setup.FPGA_SPICE_Opts.compact_routing_hierarchy);
|
||||
|
||||
/* Now a critical correction has to be done!
|
||||
* In the module construction, we always use prefix of ports because they are binded
|
||||
* to the ports in architecture description (logic blocks etc.)
|
||||
* To interface with standard cell, we should
|
||||
* rename the ports of primitive modules using lib_name instead of prefix
|
||||
* (which have no children and are probably linked to a standard cell!)
|
||||
*/
|
||||
rename_primitive_module_port_names(module_manager, arch.spice->circuit_lib);
|
||||
|
||||
/* End time count */
|
||||
clock_t t_end = clock();
|
||||
|
||||
|
|
|
@ -232,7 +232,7 @@ void build_user_defined_modules(ModuleManager& module_manager,
|
|||
VTR_ASSERT (1 == circuit_lib.port_size(output_ports[0]));
|
||||
|
||||
/* Add a mid-output port to the module */
|
||||
BasicPort module_mid_output_port(generate_segment_wire_mid_output_name(circuit_lib.port_lib_name(output_ports[0])), circuit_lib.port_size(output_ports[0]));
|
||||
BasicPort module_mid_output_port(generate_segment_wire_mid_output_name(circuit_lib.port_prefix(output_ports[0])), circuit_lib.port_size(output_ports[0]));
|
||||
module_manager.add_port(module_id, module_mid_output_port, ModuleManager::MODULE_OUTPUT_PORT);
|
||||
}
|
||||
|
||||
|
@ -288,3 +288,40 @@ void build_constant_generator_modules(ModuleManager& module_manager) {
|
|||
"took %.2g seconds\n",
|
||||
run_time_sec);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* This function will rename the ports of primitive modules
|
||||
* using lib_name instead of prefix
|
||||
* Primitive modules are defined as those modules in the module manager
|
||||
* which have user defined netlists
|
||||
********************************************************************/
|
||||
void rename_primitive_module_port_names(ModuleManager& module_manager,
|
||||
const CircuitLibrary& circuit_lib) {
|
||||
for (const CircuitModelId& model : circuit_lib.models()) {
|
||||
/* We only care about user-defined models */
|
||||
if ( (true == circuit_lib.model_verilog_netlist(model).empty())
|
||||
&& (true == circuit_lib.model_verilog_netlist(model).empty()) ) {
|
||||
continue;
|
||||
}
|
||||
/* Skip Routing channel wire models because they need a different name. Do it later */
|
||||
if (SPICE_MODEL_CHAN_WIRE == circuit_lib.model_type(model)) {
|
||||
continue;
|
||||
}
|
||||
/* Find the module in module manager */
|
||||
ModuleId module = module_manager.find_module(circuit_lib.model_name(model));
|
||||
/* We must find one! */
|
||||
VTR_ASSERT(true == module_manager.valid_module_id(module));
|
||||
|
||||
/* Rename all the ports to use lib_name! */
|
||||
for (const CircuitPortId& model_port : circuit_lib.model_ports(model)) {
|
||||
/* Find the module port in module manager. We used prefix when creating the ports */
|
||||
ModulePortId module_port = module_manager.find_module_port(module, circuit_lib.port_prefix(model_port));
|
||||
/* We must find one! */
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(module, module_port));
|
||||
/* Name it with lib_name */
|
||||
module_manager.set_module_port_name(module, module_port, circuit_lib.port_lib_name(model_port));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -13,4 +13,7 @@ void build_user_defined_modules(ModuleManager& module_manager,
|
|||
|
||||
void build_constant_generator_modules(ModuleManager& module_manager);
|
||||
|
||||
void rename_primitive_module_port_names(ModuleManager& module_manager,
|
||||
const CircuitLibrary& circuit_lib);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -369,7 +369,7 @@ void build_primitive_block_module(ModuleManager& module_manager,
|
|||
for (auto port : primitive_model_inout_ports) {
|
||||
BasicPort module_port(generate_fpga_global_io_port_name(std::string(gio_inout_prefix), circuit_lib, primitive_model), circuit_lib.port_size(port));
|
||||
ModulePortId primitive_gpio_port_id = module_manager.add_port(primitive_module, module_port, ModuleManager::MODULE_GPIO_PORT);
|
||||
ModulePortId logic_gpio_port_id = module_manager.find_module_port(logic_module, circuit_lib.port_lib_name(port));
|
||||
ModulePortId logic_gpio_port_id = module_manager.find_module_port(logic_module, circuit_lib.port_prefix(port));
|
||||
BasicPort logic_gpio_port = module_manager.module_port(logic_module, logic_gpio_port_id);
|
||||
VTR_ASSERT(logic_gpio_port.get_width() == module_port.get_width());
|
||||
|
||||
|
@ -530,7 +530,7 @@ void add_module_pb_graph_pin_interc(ModuleManager& module_manager,
|
|||
/* First net is to connect input of src_pb_graph_node to input of the wire module */
|
||||
add_module_pb_graph_pin2pin_net(module_manager, pb_module,
|
||||
wire_module, wire_instance,
|
||||
circuit_lib.port_lib_name(interc_model_inputs[0]),
|
||||
circuit_lib.port_prefix(interc_model_inputs[0]),
|
||||
0, /* wire input port has only 1 pin */
|
||||
module_name_prefix,
|
||||
src_pb_graph_pin,
|
||||
|
@ -539,7 +539,7 @@ void add_module_pb_graph_pin_interc(ModuleManager& module_manager,
|
|||
/* Second net is to connect output of the wire module to output of des_pb_graph_pin */
|
||||
add_module_pb_graph_pin2pin_net(module_manager, pb_module,
|
||||
wire_module, wire_instance,
|
||||
circuit_lib.port_lib_name(interc_model_outputs[0]),
|
||||
circuit_lib.port_prefix(interc_model_outputs[0]),
|
||||
0, /* wire output port has only 1 pin */
|
||||
module_name_prefix,
|
||||
des_pb_graph_pin,
|
||||
|
@ -610,7 +610,7 @@ void add_module_pb_graph_pin_interc(ModuleManager& module_manager,
|
|||
/* Add a net, set its source and sink */
|
||||
add_module_pb_graph_pin2pin_net(module_manager, pb_module,
|
||||
mux_module, mux_instance,
|
||||
circuit_lib.port_lib_name(interc_model_inputs[0]),
|
||||
circuit_lib.port_prefix(interc_model_inputs[0]),
|
||||
mux_input_pin_id,
|
||||
module_name_prefix,
|
||||
src_pb_graph_pin,
|
||||
|
@ -623,7 +623,7 @@ void add_module_pb_graph_pin_interc(ModuleManager& module_manager,
|
|||
/* Add a net to wire the output of the multiplexer to des_pb_graph_pin */
|
||||
add_module_pb_graph_pin2pin_net(module_manager, pb_module,
|
||||
mux_module, mux_instance,
|
||||
circuit_lib.port_lib_name(interc_model_outputs[0]),
|
||||
circuit_lib.port_prefix(interc_model_outputs[0]),
|
||||
0, /* MUX should have only 1 pin in its output port */
|
||||
module_name_prefix,
|
||||
des_pb_graph_pin,
|
||||
|
|
|
@ -82,36 +82,36 @@ void build_lut_module(ModuleManager& module_manager,
|
|||
/* Add each global port */
|
||||
for (const auto& port : lut_global_ports) {
|
||||
/* Configure each global port */
|
||||
BasicPort global_port(circuit_lib.port_lib_name(port), circuit_lib.port_size(port));
|
||||
BasicPort global_port(circuit_lib.port_prefix(port), circuit_lib.port_size(port));
|
||||
module_manager.add_port(lut_module, global_port, ModuleManager::MODULE_GLOBAL_PORT);
|
||||
}
|
||||
/* Add each input port */
|
||||
for (const auto& port : lut_input_ports) {
|
||||
BasicPort input_port(circuit_lib.port_lib_name(port), circuit_lib.port_size(port));
|
||||
BasicPort input_port(circuit_lib.port_prefix(port), circuit_lib.port_size(port));
|
||||
module_manager.add_port(lut_module, input_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
/* Set the port to be wire-connection */
|
||||
module_manager.set_port_is_wire(lut_module, input_port.get_name(), true);
|
||||
}
|
||||
/* Add each output port */
|
||||
for (const auto& port : lut_output_ports) {
|
||||
BasicPort output_port(circuit_lib.port_lib_name(port), circuit_lib.port_size(port));
|
||||
BasicPort output_port(circuit_lib.port_prefix(port), circuit_lib.port_size(port));
|
||||
module_manager.add_port(lut_module, output_port, ModuleManager::MODULE_OUTPUT_PORT);
|
||||
/* Set the port to be wire-connection */
|
||||
module_manager.set_port_is_wire(lut_module, output_port.get_name(), true);
|
||||
}
|
||||
/* Add each regular (not mode select) SRAM port */
|
||||
for (const auto& port : lut_regular_sram_ports) {
|
||||
BasicPort mem_port(circuit_lib.port_lib_name(port), circuit_lib.port_size(port));
|
||||
BasicPort mem_port(circuit_lib.port_prefix(port), circuit_lib.port_size(port));
|
||||
module_manager.add_port(lut_module, mem_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
BasicPort mem_inv_port(std::string(circuit_lib.port_lib_name(port) + "_inv"), circuit_lib.port_size(port));
|
||||
BasicPort mem_inv_port(std::string(circuit_lib.port_prefix(port) + "_inv"), circuit_lib.port_size(port));
|
||||
module_manager.add_port(lut_module, mem_inv_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
}
|
||||
|
||||
/* Add each mode-select SRAM port */
|
||||
for (const auto& port : lut_mode_select_sram_ports) {
|
||||
BasicPort mem_port(circuit_lib.port_lib_name(port), circuit_lib.port_size(port));
|
||||
BasicPort mem_port(circuit_lib.port_prefix(port), circuit_lib.port_size(port));
|
||||
module_manager.add_port(lut_module, mem_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
BasicPort mem_inv_port(std::string(circuit_lib.port_lib_name(port) + "_inv"), circuit_lib.port_size(port));
|
||||
BasicPort mem_inv_port(std::string(circuit_lib.port_prefix(port) + "_inv"), circuit_lib.port_size(port));
|
||||
module_manager.add_port(lut_module, mem_inv_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
}
|
||||
|
||||
|
@ -149,7 +149,7 @@ void build_lut_module(ModuleManager& module_manager,
|
|||
std::string tri_state_map = circuit_lib.port_tri_state_map(lut_input_ports[0]);
|
||||
size_t mode_select_port_lsb = 0;
|
||||
for (const auto& pin : circuit_lib.pins(lut_input_ports[0])) {
|
||||
ModulePortId lut_module_input_port_id = module_manager.find_module_port(lut_module, circuit_lib.port_lib_name(lut_input_ports[0]));
|
||||
ModulePortId lut_module_input_port_id = module_manager.find_module_port(lut_module, circuit_lib.port_prefix(lut_input_ports[0]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(lut_module, lut_module_input_port_id));
|
||||
|
||||
/* Create a module net for the connection */
|
||||
|
@ -222,13 +222,13 @@ void build_lut_module(ModuleManager& module_manager,
|
|||
ModuleNetId gate_sram_net = module_manager.create_module_net(lut_module);
|
||||
|
||||
/* Find the module port id of the SRAM port of LUT module */
|
||||
ModulePortId lut_module_mode_select_port_id = module_manager.find_module_port(lut_module, circuit_lib.port_lib_name(lut_mode_select_sram_ports[0]));
|
||||
ModulePortId lut_module_mode_select_port_id = module_manager.find_module_port(lut_module, circuit_lib.port_prefix(lut_mode_select_sram_ports[0]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(lut_module, lut_module_mode_select_port_id));
|
||||
/* Set the source of the net to an mode-select SRAM port of the LUT module */
|
||||
module_manager.add_module_net_source(lut_module, gate_sram_net, lut_module, 0, lut_module_mode_select_port_id, mode_select_port_lsb);
|
||||
|
||||
/* Find the module port id of the SRAM port of LUT module */
|
||||
ModulePortId gate_module_input0_port_id = module_manager.find_module_port(gate_module, circuit_lib.port_lib_name(gate_input_ports[0]));
|
||||
ModulePortId gate_module_input0_port_id = module_manager.find_module_port(gate_module, circuit_lib.port_prefix(gate_input_ports[0]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(gate_module, gate_module_input0_port_id));
|
||||
/* Set the sink of the net to an input[0] port of the gate module */
|
||||
VTR_ASSERT(1 == module_manager.module_port(gate_module, gate_module_input0_port_id).get_width());
|
||||
|
@ -237,7 +237,7 @@ void build_lut_module(ModuleManager& module_manager,
|
|||
}
|
||||
|
||||
/* Use the existing net to connect to the input[1] port of the gate module */
|
||||
ModulePortId gate_module_input1_port_id = module_manager.find_module_port(gate_module, circuit_lib.port_lib_name(gate_input_ports[1]));
|
||||
ModulePortId gate_module_input1_port_id = module_manager.find_module_port(gate_module, circuit_lib.port_prefix(gate_input_ports[1]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(gate_module, gate_module_input1_port_id));
|
||||
VTR_ASSERT(1 == module_manager.module_port(gate_module, gate_module_input1_port_id).get_width());
|
||||
for (const size_t& gate_pin : module_manager.module_port(gate_module, gate_module_input1_port_id).pins()) {
|
||||
|
@ -246,7 +246,7 @@ void build_lut_module(ModuleManager& module_manager,
|
|||
|
||||
/* Create a module net for the output connection */
|
||||
ModuleNetId gate_output_net = module_manager.create_module_net(lut_module);
|
||||
ModulePortId gate_module_output_port_id = module_manager.find_module_port(gate_module, circuit_lib.port_lib_name(gate_output_ports[0]));
|
||||
ModulePortId gate_module_output_port_id = module_manager.find_module_port(gate_module, circuit_lib.port_prefix(gate_output_ports[0]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(gate_module, gate_module_output_port_id));
|
||||
BasicPort gate_module_output_port = module_manager.module_port(gate_module, gate_module_output_port_id);
|
||||
VTR_ASSERT(1 == gate_module_output_port.get_width());
|
||||
|
@ -326,7 +326,7 @@ void build_lut_module(ModuleManager& module_manager,
|
|||
* 3. Data input of LUT MUX module to SRAM port of LUT
|
||||
* 4. Data output of LUT MUX module to output ports of LUT
|
||||
*/
|
||||
ModulePortId lut_mux_sram_port_id = module_manager.find_module_port(lut_mux_module, circuit_lib.port_lib_name(lut_regular_sram_ports[0]));
|
||||
ModulePortId lut_mux_sram_port_id = module_manager.find_module_port(lut_mux_module, circuit_lib.port_prefix(lut_regular_sram_ports[0]));
|
||||
BasicPort lut_mux_sram_port = module_manager.module_port(lut_mux_module, lut_mux_sram_port_id);
|
||||
VTR_ASSERT(lut_mux_sram_port.get_width() == lut_mux_sram_nets.size());
|
||||
/* Wire the port to lut_mux_sram_net */
|
||||
|
@ -334,7 +334,7 @@ void build_lut_module(ModuleManager& module_manager,
|
|||
module_manager.add_module_net_sink(lut_module, lut_mux_sram_nets[pin], lut_mux_module, lut_mux_instance, lut_mux_sram_port_id, pin);
|
||||
}
|
||||
|
||||
ModulePortId lut_mux_sram_inv_port_id = module_manager.find_module_port(lut_mux_module, std::string(circuit_lib.port_lib_name(lut_regular_sram_ports[0]) + "_inv"));
|
||||
ModulePortId lut_mux_sram_inv_port_id = module_manager.find_module_port(lut_mux_module, std::string(circuit_lib.port_prefix(lut_regular_sram_ports[0]) + "_inv"));
|
||||
BasicPort lut_mux_sram_inv_port = module_manager.module_port(lut_mux_module, lut_mux_sram_inv_port_id);
|
||||
VTR_ASSERT(lut_mux_sram_inv_port.get_width() == lut_mux_sram_inv_nets.size());
|
||||
/* Wire the port to lut_mux_sram_net */
|
||||
|
@ -351,9 +351,9 @@ void build_lut_module(ModuleManager& module_manager,
|
|||
* |
|
||||
* net
|
||||
*/
|
||||
ModulePortId lut_sram_port_id = module_manager.find_module_port(lut_module, circuit_lib.port_lib_name(lut_regular_sram_ports[0]));
|
||||
ModulePortId lut_sram_port_id = module_manager.find_module_port(lut_module, circuit_lib.port_prefix(lut_regular_sram_ports[0]));
|
||||
BasicPort lut_sram_port = module_manager.module_port(lut_module, lut_sram_port_id);
|
||||
ModulePortId lut_mux_input_port_id = module_manager.find_module_port(lut_mux_module, circuit_lib.port_lib_name(lut_input_ports[0]));
|
||||
ModulePortId lut_mux_input_port_id = module_manager.find_module_port(lut_mux_module, circuit_lib.port_prefix(lut_input_ports[0]));
|
||||
BasicPort lut_mux_input_port = module_manager.module_port(lut_mux_module, lut_mux_input_port_id);
|
||||
VTR_ASSERT(lut_mux_input_port.get_width() == lut_sram_port.get_width());
|
||||
/* Wire the port to lut_mux_sram_net */
|
||||
|
@ -364,9 +364,9 @@ void build_lut_module(ModuleManager& module_manager,
|
|||
}
|
||||
|
||||
for (const auto& port : lut_output_ports) {
|
||||
ModulePortId lut_output_port_id = module_manager.find_module_port(lut_module, circuit_lib.port_lib_name(port));
|
||||
ModulePortId lut_output_port_id = module_manager.find_module_port(lut_module, circuit_lib.port_prefix(port));
|
||||
BasicPort lut_output_port = module_manager.module_port(lut_module, lut_output_port_id);
|
||||
ModulePortId lut_mux_output_port_id = module_manager.find_module_port(lut_mux_module, circuit_lib.port_lib_name(port));
|
||||
ModulePortId lut_mux_output_port_id = module_manager.find_module_port(lut_mux_module, circuit_lib.port_prefix(port));
|
||||
BasicPort lut_mux_output_port = module_manager.module_port(lut_mux_module, lut_mux_output_port_id);
|
||||
VTR_ASSERT(lut_mux_output_port.get_width() == lut_output_port.get_width());
|
||||
/* Wire the port to lut_mux_sram_net */
|
||||
|
|
|
@ -48,8 +48,8 @@ void add_module_input_nets_to_mem_modules(ModuleManager& module_manager,
|
|||
const size_t& child_instance) {
|
||||
/* Wire inputs of parent module to inputs of child modules */
|
||||
for (const auto& port : circuit_ports) {
|
||||
ModulePortId src_port_id = module_manager.find_module_port(mem_module, circuit_lib.port_lib_name(port));
|
||||
ModulePortId sink_port_id = module_manager.find_module_port(child_module, circuit_lib.port_lib_name(port));
|
||||
ModulePortId src_port_id = module_manager.find_module_port(mem_module, circuit_lib.port_prefix(port));
|
||||
ModulePortId sink_port_id = module_manager.find_module_port(child_module, circuit_lib.port_prefix(port));
|
||||
for (size_t pin_id = 0; pin_id < module_manager.module_port(mem_module, sink_port_id).pins().size(); ++pin_id) {
|
||||
ModuleNetId net = module_manager.create_module_net(mem_module);
|
||||
/* Source pin is shifted by the number of memories */
|
||||
|
@ -82,8 +82,8 @@ void add_module_output_nets_to_mem_modules(ModuleManager& module_manager,
|
|||
const size_t& child_instance) {
|
||||
/* Wire inputs of parent module to inputs of child modules */
|
||||
for (const auto& port : circuit_ports) {
|
||||
ModulePortId src_port_id = module_manager.find_module_port(child_module, circuit_lib.port_lib_name(port));
|
||||
ModulePortId sink_port_id = module_manager.find_module_port(mem_module, circuit_lib.port_lib_name(port));
|
||||
ModulePortId src_port_id = module_manager.find_module_port(child_module, circuit_lib.port_prefix(port));
|
||||
ModulePortId sink_port_id = module_manager.find_module_port(mem_module, circuit_lib.port_prefix(port));
|
||||
for (size_t pin_id = 0; pin_id < module_manager.module_port(child_module, src_port_id).pins().size(); ++pin_id) {
|
||||
ModuleNetId net = module_manager.create_module_net(mem_module);
|
||||
/* Source pin is shifted by the number of memories */
|
||||
|
@ -121,7 +121,7 @@ std::vector<ModuleNetId> add_module_output_nets_to_chain_mem_modules(ModuleManag
|
|||
std::vector<ModuleNetId> module_nets;
|
||||
|
||||
/* Wire inputs of parent module to inputs of child modules */
|
||||
ModulePortId src_port_id = module_manager.find_module_port(child_module, circuit_lib.port_lib_name(circuit_port));
|
||||
ModulePortId src_port_id = module_manager.find_module_port(child_module, circuit_lib.port_prefix(circuit_port));
|
||||
ModulePortId sink_port_id = module_manager.find_module_port(mem_module, mem_module_output_name);
|
||||
for (size_t pin_id = 0; pin_id < module_manager.module_port(child_module, src_port_id).pins().size(); ++pin_id) {
|
||||
ModuleNetId net = module_manager.create_module_net(mem_module);
|
||||
|
@ -188,19 +188,19 @@ void add_module_nets_to_cmos_memory_chain_module(ModuleManager& module_manager,
|
|||
net_src_port_id = module_manager.find_module_port(net_src_module_id, src_port_name);
|
||||
|
||||
/* Find the port name of next memory module */
|
||||
std::string sink_port_name = circuit_lib.port_lib_name(model_input_port);
|
||||
std::string sink_port_name = circuit_lib.port_prefix(model_input_port);
|
||||
net_sink_module_id = module_manager.configurable_children(parent_module)[mem_index];
|
||||
net_sink_instance_id = module_manager.configurable_child_instances(parent_module)[mem_index];
|
||||
net_sink_port_id = module_manager.find_module_port(net_sink_module_id, sink_port_name);
|
||||
} else {
|
||||
/* Find the port name of previous memory module */
|
||||
std::string src_port_name = circuit_lib.port_lib_name(model_output_port);
|
||||
std::string src_port_name = circuit_lib.port_prefix(model_output_port);
|
||||
net_src_module_id = module_manager.configurable_children(parent_module)[mem_index - 1];
|
||||
net_src_instance_id = module_manager.configurable_child_instances(parent_module)[mem_index - 1];
|
||||
net_src_port_id = module_manager.find_module_port(net_src_module_id, src_port_name);
|
||||
|
||||
/* Find the port name of next memory module */
|
||||
std::string sink_port_name = circuit_lib.port_lib_name(model_input_port);
|
||||
std::string sink_port_name = circuit_lib.port_prefix(model_input_port);
|
||||
net_sink_module_id = module_manager.configurable_children(parent_module)[mem_index];
|
||||
net_sink_instance_id = module_manager.configurable_child_instances(parent_module)[mem_index];
|
||||
net_sink_port_id = module_manager.find_module_port(net_sink_module_id, sink_port_name);
|
||||
|
@ -239,7 +239,7 @@ void add_module_nets_to_cmos_memory_chain_module(ModuleManager& module_manager,
|
|||
* net sink is the configuration chain tail of the primitive module
|
||||
*/
|
||||
/* Find the port name of previous memory module */
|
||||
std::string src_port_name = circuit_lib.port_lib_name(model_output_port);
|
||||
std::string src_port_name = circuit_lib.port_prefix(model_output_port);
|
||||
ModuleId net_src_module_id = module_manager.configurable_children(parent_module).back();
|
||||
size_t net_src_instance_id = module_manager.configurable_child_instances(parent_module).back();
|
||||
ModulePortId net_src_port_id = module_manager.find_module_port(net_src_module_id, src_port_name);
|
||||
|
@ -311,12 +311,12 @@ void build_memory_standalone_module(ModuleManager& module_manager,
|
|||
|
||||
/* Add each input port */
|
||||
for (const auto& port : sram_input_ports) {
|
||||
BasicPort input_port(circuit_lib.port_lib_name(port), num_mems);
|
||||
BasicPort input_port(circuit_lib.port_prefix(port), num_mems);
|
||||
module_manager.add_port(mem_module, input_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
}
|
||||
/* Add each output port: port width should match the number of memories */
|
||||
for (const auto& port : sram_output_ports) {
|
||||
BasicPort output_port(circuit_lib.port_lib_name(port), num_mems);
|
||||
BasicPort output_port(circuit_lib.port_prefix(port), num_mems);
|
||||
module_manager.add_port(mem_module, output_port, ModuleManager::MODULE_OUTPUT_PORT);
|
||||
}
|
||||
|
||||
|
@ -500,29 +500,29 @@ void build_memory_bank_module(ModuleManager& module_manager,
|
|||
/* Add module ports: the ports come from the SRAM modules */
|
||||
/* Add each input port */
|
||||
for (const auto& port : sram_input_ports) {
|
||||
BasicPort input_port(circuit_lib.port_lib_name(port), num_mems * circuit_lib.port_size(port));
|
||||
BasicPort input_port(circuit_lib.port_prefix(port), num_mems * circuit_lib.port_size(port));
|
||||
module_manager.add_port(mem_module, input_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
}
|
||||
/* Add each output port: port width should match the number of memories */
|
||||
for (const auto& port : sram_output_ports) {
|
||||
BasicPort output_port(circuit_lib.port_lib_name(port), num_mems * circuit_lib.port_size(port));
|
||||
BasicPort output_port(circuit_lib.port_prefix(port), num_mems * circuit_lib.port_size(port));
|
||||
module_manager.add_port(mem_module, output_port, ModuleManager::MODULE_OUTPUT_PORT);
|
||||
}
|
||||
/* Add each output port: port width should match the number of memories */
|
||||
for (const auto& port : sram_bl_ports) {
|
||||
BasicPort bl_port(circuit_lib.port_lib_name(port), num_mems * circuit_lib.port_size(port));
|
||||
BasicPort bl_port(circuit_lib.port_prefix(port), num_mems * circuit_lib.port_size(port));
|
||||
module_manager.add_port(mem_module, bl_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
}
|
||||
for (const auto& port : sram_blb_ports) {
|
||||
BasicPort blb_port(circuit_lib.port_lib_name(port), num_mems * circuit_lib.port_size(port));
|
||||
BasicPort blb_port(circuit_lib.port_prefix(port), num_mems * circuit_lib.port_size(port));
|
||||
module_manager.add_port(mem_module, blb_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
}
|
||||
for (const auto& port : sram_wl_ports) {
|
||||
BasicPort wl_port(circuit_lib.port_lib_name(port), num_mems * circuit_lib.port_size(port));
|
||||
BasicPort wl_port(circuit_lib.port_prefix(port), num_mems * circuit_lib.port_size(port));
|
||||
module_manager.add_port(mem_module, wl_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
}
|
||||
for (const auto& port : sram_wlb_ports) {
|
||||
BasicPort wlb_port(circuit_lib.port_lib_name(port), num_mems * circuit_lib.port_size(port));
|
||||
BasicPort wlb_port(circuit_lib.port_prefix(port), num_mems * circuit_lib.port_size(port));
|
||||
module_manager.add_port(mem_module, wlb_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
}
|
||||
|
||||
|
|
|
@ -74,25 +74,25 @@ void build_cmos_mux_branch_body(ModuleManager& module_manager,
|
|||
|
||||
/* Find the module ports of tgate module */
|
||||
/* Input port is the data path input of the tgate, whose size must be 1 ! */
|
||||
ModulePortId tgate_module_input = module_manager.find_module_port(tgate_module_id, circuit_lib.port_lib_name(tgate_input_ports[0]));
|
||||
ModulePortId tgate_module_input = module_manager.find_module_port(tgate_module_id, circuit_lib.port_prefix(tgate_input_ports[0]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(tgate_module_id, tgate_module_input));
|
||||
BasicPort tgate_module_input_port = module_manager.module_port(tgate_module_id, tgate_module_input);
|
||||
VTR_ASSERT(1 == tgate_module_input_port.get_width());
|
||||
|
||||
/* Mem port is the memory of the tgate, whose size must be 1 ! */
|
||||
ModulePortId tgate_module_mem = module_manager.find_module_port(tgate_module_id, circuit_lib.port_lib_name(tgate_input_ports[1]));
|
||||
ModulePortId tgate_module_mem = module_manager.find_module_port(tgate_module_id, circuit_lib.port_prefix(tgate_input_ports[1]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(tgate_module_id, tgate_module_mem));
|
||||
BasicPort tgate_module_mem_port = module_manager.module_port(tgate_module_id, tgate_module_mem);
|
||||
VTR_ASSERT(1 == tgate_module_mem_port.get_width());
|
||||
|
||||
/* Mem inv port is the inverted memory of the tgate, whose size must be 1 ! */
|
||||
ModulePortId tgate_module_mem_inv = module_manager.find_module_port(tgate_module_id, circuit_lib.port_lib_name(tgate_input_ports[2]));
|
||||
ModulePortId tgate_module_mem_inv = module_manager.find_module_port(tgate_module_id, circuit_lib.port_prefix(tgate_input_ports[2]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(tgate_module_id, tgate_module_mem_inv));
|
||||
BasicPort tgate_module_mem_inv_port = module_manager.module_port(tgate_module_id, tgate_module_mem_inv);
|
||||
VTR_ASSERT(1 == tgate_module_mem_inv_port.get_width());
|
||||
|
||||
/* Output port is the data path output of the tgate, whose size must be 1 ! */
|
||||
ModulePortId tgate_module_output = module_manager.find_module_port(tgate_module_id, circuit_lib.port_lib_name(tgate_output_ports[0]));
|
||||
ModulePortId tgate_module_output = module_manager.find_module_port(tgate_module_id, circuit_lib.port_prefix(tgate_output_ports[0]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(tgate_module_id, tgate_module_output));
|
||||
BasicPort tgate_module_output_port = module_manager.module_port(tgate_module_id, tgate_module_output);
|
||||
VTR_ASSERT(1 == tgate_module_output_port.get_width());
|
||||
|
@ -300,26 +300,26 @@ void build_rram_mux_branch_module(ModuleManager& module_manager,
|
|||
std::vector<CircuitPortId> prog_enable_ports = circuit_lib.model_global_ports_by_type(mux_model, SPICE_MODEL_PORT_INPUT, true, true);
|
||||
for (const auto& port : prog_enable_ports) {
|
||||
/* Configure each global port */
|
||||
BasicPort global_port(circuit_lib.port_lib_name(port), circuit_lib.port_size(port));
|
||||
BasicPort global_port(circuit_lib.port_prefix(port), circuit_lib.port_size(port));
|
||||
module_manager.add_port(mux_module, global_port, ModuleManager::MODULE_GLOBAL_PORT);
|
||||
}
|
||||
|
||||
/* Add each input port */
|
||||
BasicPort input_port(circuit_lib.port_lib_name(mux_input_ports[0]), num_inputs);
|
||||
BasicPort input_port(circuit_lib.port_prefix(mux_input_ports[0]), num_inputs);
|
||||
module_manager.add_port(mux_module, input_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
|
||||
/* Add each output port */
|
||||
BasicPort output_port(circuit_lib.port_lib_name(mux_output_ports[0]), num_outputs);
|
||||
BasicPort output_port(circuit_lib.port_prefix(mux_output_ports[0]), num_outputs);
|
||||
module_manager.add_port(mux_module, output_port, ModuleManager::MODULE_OUTPUT_PORT);
|
||||
|
||||
/* Add RRAM programming ports,
|
||||
* RRAM MUXes require one more pair of BLB and WL
|
||||
* to configure the memories. See schematic for details
|
||||
*/
|
||||
BasicPort blb_port(circuit_lib.port_lib_name(mux_blb_ports[0]), num_mems + 1);
|
||||
BasicPort blb_port(circuit_lib.port_prefix(mux_blb_ports[0]), num_mems + 1);
|
||||
module_manager.add_port(mux_module, blb_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
|
||||
BasicPort wl_port(circuit_lib.port_lib_name(mux_wl_ports[0]), num_mems + 1);
|
||||
BasicPort wl_port(circuit_lib.port_prefix(mux_wl_ports[0]), num_mems + 1);
|
||||
module_manager.add_port(mux_module, wl_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
|
||||
/* Note: we do not generate the internal structure of the ReRAM-based MUX
|
||||
|
@ -398,20 +398,20 @@ void build_cmos_mux_module_mux2_multiplexing_structure(ModuleManager& module_man
|
|||
std::vector<BasicPort> std_cell_module_input_ports;
|
||||
/* Input 0 port is the first data path input of the tgate, whose size must be 1 ! */
|
||||
for (size_t port_id = 0; port_id < 2; ++port_id) {
|
||||
std_cell_module_inputs.push_back(module_manager.find_module_port(std_cell_module_id, circuit_lib.port_lib_name(std_cell_input_ports[port_id])));
|
||||
std_cell_module_inputs.push_back(module_manager.find_module_port(std_cell_module_id, circuit_lib.port_prefix(std_cell_input_ports[port_id])));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(std_cell_module_id, std_cell_module_inputs[port_id]));
|
||||
std_cell_module_input_ports.push_back(module_manager.module_port(std_cell_module_id, std_cell_module_inputs[port_id]));
|
||||
VTR_ASSERT(1 == std_cell_module_input_ports[port_id].get_width());
|
||||
}
|
||||
|
||||
/* Mem port is the memory of the standard cell MUX2, whose size must be 1 ! */
|
||||
ModulePortId std_cell_module_mem = module_manager.find_module_port(std_cell_module_id, circuit_lib.port_lib_name(std_cell_input_ports[2]));
|
||||
ModulePortId std_cell_module_mem = module_manager.find_module_port(std_cell_module_id, circuit_lib.port_prefix(std_cell_input_ports[2]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(std_cell_module_id, std_cell_module_mem));
|
||||
BasicPort std_cell_module_mem_port = module_manager.module_port(std_cell_module_id, std_cell_module_mem);
|
||||
VTR_ASSERT(1 == std_cell_module_mem_port.get_width());
|
||||
|
||||
/* Output port is the data path output of the standard cell MUX2, whose size must be 1 ! */
|
||||
ModulePortId std_cell_module_output = module_manager.find_module_port(std_cell_module_id, circuit_lib.port_lib_name(std_cell_output_ports[0]));
|
||||
ModulePortId std_cell_module_output = module_manager.find_module_port(std_cell_module_id, circuit_lib.port_prefix(std_cell_output_ports[0]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(std_cell_module_id, std_cell_module_output));
|
||||
BasicPort std_cell_module_output_port = module_manager.module_port(std_cell_module_id, std_cell_module_output);
|
||||
VTR_ASSERT(1 == std_cell_module_output_port.get_width());
|
||||
|
@ -745,7 +745,7 @@ vtr::vector<MuxInputId, ModuleNetId> build_mux_module_input_buffers(ModuleManage
|
|||
VTR_ASSERT(1 == mux_input_ports.size());
|
||||
|
||||
/* Get the input port from MUX module */
|
||||
ModulePortId module_input_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_lib_name(mux_input_ports[0]));
|
||||
ModulePortId module_input_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_prefix(mux_input_ports[0]));
|
||||
VTR_ASSERT(ModulePortId::INVALID() != module_input_port_id);
|
||||
/* Get the port from module */
|
||||
BasicPort module_input_port = module_manager.module_port(mux_module, module_input_port_id);
|
||||
|
@ -860,7 +860,7 @@ vtr::vector<MuxOutputId, ModuleNetId> build_mux_module_output_buffers(ModuleMana
|
|||
/* Iterate over all the outputs in the MUX module */
|
||||
for (const auto& output_port : mux_output_ports) {
|
||||
/* Get the output port from MUX module */
|
||||
ModulePortId module_output_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_lib_name(output_port));
|
||||
ModulePortId module_output_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_prefix(output_port));
|
||||
VTR_ASSERT(ModulePortId::INVALID() != module_output_port_id);
|
||||
/* Get the port from module */
|
||||
BasicPort module_output_port = module_manager.module_port(mux_module, module_output_port_id);
|
||||
|
@ -968,7 +968,7 @@ void build_mux_module_local_encoders_and_memory_nets(ModuleManager& module_manag
|
|||
/* Add mem and mem_inv nets here */
|
||||
size_t mem_net_cnt = 0;
|
||||
for (const auto& port : mux_sram_ports) {
|
||||
ModulePortId mem_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_lib_name(port));
|
||||
ModulePortId mem_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_prefix(port));
|
||||
BasicPort mem_port = module_manager.module_port(mux_module, mem_port_id);
|
||||
for (const size_t& pin : mem_port.pins()) {
|
||||
MuxMemId mem_id = MuxMemId(mem_net_cnt);
|
||||
|
@ -983,7 +983,7 @@ void build_mux_module_local_encoders_and_memory_nets(ModuleManager& module_manag
|
|||
/* Add mem and mem_inv nets here */
|
||||
size_t mem_inv_net_cnt = 0;
|
||||
for (const auto& port : mux_sram_ports) {
|
||||
ModulePortId mem_inv_port_id = module_manager.find_module_port(mux_module, std::string(circuit_lib.port_lib_name(port) + "_inv"));
|
||||
ModulePortId mem_inv_port_id = module_manager.find_module_port(mux_module, std::string(circuit_lib.port_prefix(port) + "_inv"));
|
||||
BasicPort mem_inv_port = module_manager.module_port(mux_module, mem_inv_port_id);
|
||||
for (const size_t& pin : mem_inv_port.pins()) {
|
||||
MuxMemId mem_id = MuxMemId(mem_inv_net_cnt);
|
||||
|
@ -1003,9 +1003,9 @@ void build_mux_module_local_encoders_and_memory_nets(ModuleManager& module_manag
|
|||
BasicPort decoder_data_inv_port(generate_mux_local_decoder_data_inv_port_name(), mux_graph.num_memory_bits());
|
||||
|
||||
/* Local port to record the LSB and MSB of each level, here, we deposite (0, 0) */
|
||||
ModulePortId mux_module_sram_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_lib_name(mux_sram_ports[0]));
|
||||
ModulePortId mux_module_sram_inv_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_lib_name(mux_sram_ports[0]) + "_inv");
|
||||
BasicPort lvl_addr_port(circuit_lib.port_lib_name(mux_sram_ports[0]), 0);
|
||||
ModulePortId mux_module_sram_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_prefix(mux_sram_ports[0]));
|
||||
ModulePortId mux_module_sram_inv_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_prefix(mux_sram_ports[0]) + "_inv");
|
||||
BasicPort lvl_addr_port(circuit_lib.port_prefix(mux_sram_ports[0]), 0);
|
||||
BasicPort lvl_data_port(decoder_data_port.get_name(), 0);
|
||||
BasicPort lvl_data_inv_port(decoder_data_inv_port.get_name(), 0);
|
||||
|
||||
|
@ -1161,7 +1161,7 @@ void build_cmos_mux_module(ModuleManager& module_manager,
|
|||
*/
|
||||
size_t input_port_cnt = 0;
|
||||
for (const auto& port : mux_input_ports) {
|
||||
BasicPort input_port(circuit_lib.port_lib_name(port), num_inputs);
|
||||
BasicPort input_port(circuit_lib.port_prefix(port), num_inputs);
|
||||
module_manager.add_port(mux_module, input_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
/* Update counter */
|
||||
input_port_cnt++;
|
||||
|
@ -1173,7 +1173,7 @@ void build_cmos_mux_module(ModuleManager& module_manager,
|
|||
vtr::vector<MuxInputId, ModuleNetId> mux_input_nets = build_mux_module_input_buffers(module_manager, circuit_lib, mux_module, mux_model, mux_graph);
|
||||
|
||||
for (const auto& port : mux_output_ports) {
|
||||
BasicPort output_port(circuit_lib.port_lib_name(port), num_outputs);
|
||||
BasicPort output_port(circuit_lib.port_prefix(port), num_outputs);
|
||||
if (SPICE_MODEL_LUT == circuit_lib.model_type(mux_model)) {
|
||||
output_port.set_width(circuit_lib.port_size(port));
|
||||
}
|
||||
|
@ -1185,9 +1185,9 @@ void build_cmos_mux_module(ModuleManager& module_manager,
|
|||
|
||||
size_t sram_port_cnt = 0;
|
||||
for (const auto& port : mux_sram_ports) {
|
||||
BasicPort mem_port(circuit_lib.port_lib_name(port), num_mems);
|
||||
BasicPort mem_port(circuit_lib.port_prefix(port), num_mems);
|
||||
module_manager.add_port(mux_module, mem_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
BasicPort mem_inv_port(std::string(circuit_lib.port_lib_name(port) + "_inv"), num_mems);
|
||||
BasicPort mem_inv_port(std::string(circuit_lib.port_prefix(port) + "_inv"), num_mems);
|
||||
module_manager.add_port(mux_module, mem_inv_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
/* Update counter */
|
||||
sram_port_cnt++;
|
||||
|
@ -1305,13 +1305,13 @@ void build_rram_mux_module(ModuleManager& module_manager,
|
|||
/* Add each global port */
|
||||
for (const auto& port : mux_global_ports) {
|
||||
/* Configure each global port */
|
||||
BasicPort global_port(circuit_lib.port_lib_name(port), circuit_lib.port_size(port));
|
||||
BasicPort global_port(circuit_lib.port_prefix(port), circuit_lib.port_size(port));
|
||||
module_manager.add_port(module_id, global_port, ModuleManager::MODULE_GLOBAL_PORT);
|
||||
}
|
||||
/* Add each input port */
|
||||
size_t input_port_cnt = 0;
|
||||
for (const auto& port : mux_input_ports) {
|
||||
BasicPort input_port(circuit_lib.port_lib_name(port), num_inputs);
|
||||
BasicPort input_port(circuit_lib.port_prefix(port), num_inputs);
|
||||
module_manager.add_port(module_id, input_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
/* Update counter */
|
||||
input_port_cnt++;
|
||||
|
@ -1320,7 +1320,7 @@ void build_rram_mux_module(ModuleManager& module_manager,
|
|||
VTR_ASSERT(1 == input_port_cnt);
|
||||
|
||||
for (const auto& port : mux_output_ports) {
|
||||
BasicPort output_port(circuit_lib.port_lib_name(port), num_outputs);
|
||||
BasicPort output_port(circuit_lib.port_prefix(port), num_outputs);
|
||||
if (SPICE_MODEL_LUT == circuit_lib.model_type(circuit_model)) {
|
||||
output_port.set_width(circuit_lib.port_size(port));
|
||||
}
|
||||
|
@ -1332,7 +1332,7 @@ void build_rram_mux_module(ModuleManager& module_manager,
|
|||
/* IMPORTANT: RRAM-based MUX has an additional BLB pin per level
|
||||
* So, the actual port width of BLB should be added by the number of levels of the MUX graph
|
||||
*/
|
||||
BasicPort blb_port(circuit_lib.port_lib_name(port), num_mems + mux_graph.num_levels());
|
||||
BasicPort blb_port(circuit_lib.port_prefix(port), num_mems + mux_graph.num_levels());
|
||||
module_manager.add_port(module_id, blb_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
}
|
||||
|
||||
|
@ -1341,7 +1341,7 @@ void build_rram_mux_module(ModuleManager& module_manager,
|
|||
/* IMPORTANT: RRAM-based MUX has an additional WL pin per level
|
||||
* So, the actual port width of WL should be added by the number of levels of the MUX graph
|
||||
*/
|
||||
BasicPort wl_port(circuit_lib.port_lib_name(port), num_mems + mux_graph.num_levels());
|
||||
BasicPort wl_port(circuit_lib.port_prefix(port), num_mems + mux_graph.num_levels());
|
||||
module_manager.add_port(module_id, wl_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
}
|
||||
|
||||
|
|
|
@ -259,7 +259,7 @@ void build_switch_block_mux_module(ModuleManager& module_manager,
|
|||
std::vector<CircuitPortId> mux_model_input_ports = circuit_lib.model_ports_by_type(mux_model, SPICE_MODEL_PORT_INPUT, true);
|
||||
VTR_ASSERT(1 == mux_model_input_ports.size());
|
||||
/* Find the module port id of the input port */
|
||||
ModulePortId mux_input_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_lib_name(mux_model_input_ports[0]));
|
||||
ModulePortId mux_input_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_prefix(mux_model_input_ports[0]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(mux_module, mux_input_port_id));
|
||||
BasicPort mux_input_port = module_manager.module_port(mux_module, mux_input_port_id);
|
||||
|
||||
|
@ -278,7 +278,7 @@ void build_switch_block_mux_module(ModuleManager& module_manager,
|
|||
std::vector<CircuitPortId> mux_model_output_ports = circuit_lib.model_ports_by_type(mux_model, SPICE_MODEL_PORT_OUTPUT, true);
|
||||
VTR_ASSERT(1 == mux_model_output_ports.size());
|
||||
/* Use the port name convention in the circuit library */
|
||||
ModulePortId mux_output_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_lib_name(mux_model_output_ports[0]));
|
||||
ModulePortId mux_output_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_prefix(mux_model_output_ports[0]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(mux_module, mux_output_port_id));
|
||||
BasicPort mux_output_port = module_manager.module_port(mux_module, mux_output_port_id);
|
||||
ModulePortId sb_output_port_id = find_switch_block_module_chan_port(module_manager, sb_module, rr_gsb, chan_side, cur_rr_node, OUT_PORT);
|
||||
|
@ -733,7 +733,7 @@ void build_connection_block_mux_module(ModuleManager& module_manager,
|
|||
std::vector<CircuitPortId> mux_model_input_ports = circuit_lib.model_ports_by_type(mux_model, SPICE_MODEL_PORT_INPUT, true);
|
||||
VTR_ASSERT(1 == mux_model_input_ports.size());
|
||||
/* Find the module port id of the input port */
|
||||
ModulePortId mux_input_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_lib_name(mux_model_input_ports[0]));
|
||||
ModulePortId mux_input_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_prefix(mux_model_input_ports[0]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(mux_module, mux_input_port_id));
|
||||
BasicPort mux_input_port = module_manager.module_port(mux_module, mux_input_port_id);
|
||||
|
||||
|
@ -752,7 +752,7 @@ void build_connection_block_mux_module(ModuleManager& module_manager,
|
|||
std::vector<CircuitPortId> mux_model_output_ports = circuit_lib.model_ports_by_type(mux_model, SPICE_MODEL_PORT_OUTPUT, true);
|
||||
VTR_ASSERT(1 == mux_model_output_ports.size());
|
||||
/* Use the port name convention in the circuit library */
|
||||
ModulePortId mux_output_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_lib_name(mux_model_output_ports[0]));
|
||||
ModulePortId mux_output_port_id = module_manager.find_module_port(mux_module, circuit_lib.port_prefix(mux_model_output_ports[0]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(mux_module, mux_output_port_id));
|
||||
BasicPort mux_output_port = module_manager.module_port(mux_module, mux_output_port_id);
|
||||
ModulePortId cb_output_port_id = find_connection_block_module_ipin_port(module_manager, cb_module, rr_gsb, grids, cur_rr_node);
|
||||
|
|
|
@ -92,13 +92,13 @@ void add_module_nets_clb2clb_direct_connection(ModuleManager& module_manager,
|
|||
/* Find inputs and outputs of the direct circuit module */
|
||||
std::vector<CircuitPortId> direct_input_ports = circuit_lib.model_ports_by_type(direct.circuit_model, SPICE_MODEL_PORT_INPUT, true);
|
||||
VTR_ASSERT(1 == direct_input_ports.size());
|
||||
ModulePortId direct_input_port_id = module_manager.find_module_port(direct_module, circuit_lib.port_lib_name(direct_input_ports[0]));
|
||||
ModulePortId direct_input_port_id = module_manager.find_module_port(direct_module, circuit_lib.port_prefix(direct_input_ports[0]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(direct_module, direct_input_port_id));
|
||||
VTR_ASSERT(1 == module_manager.module_port(direct_module, direct_input_port_id).get_width());
|
||||
|
||||
std::vector<CircuitPortId> direct_output_ports = circuit_lib.model_ports_by_type(direct.circuit_model, SPICE_MODEL_PORT_OUTPUT, true);
|
||||
VTR_ASSERT(1 == direct_output_ports.size());
|
||||
ModulePortId direct_output_port_id = module_manager.find_module_port(direct_module, circuit_lib.port_lib_name(direct_output_ports[0]));
|
||||
ModulePortId direct_output_port_id = module_manager.find_module_port(direct_module, circuit_lib.port_prefix(direct_output_ports[0]));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(direct_module, direct_output_port_id));
|
||||
VTR_ASSERT(1 == module_manager.module_port(direct_module, direct_output_port_id).get_width());
|
||||
|
||||
|
|
|
@ -93,7 +93,7 @@ void build_routing_wire_module(ModuleManager& module_manager,
|
|||
ModuleId wire_module = add_circuit_model_to_module_manager(module_manager, circuit_lib, wire_model, wire_subckt_name);
|
||||
|
||||
/* Add a mid-output port to the module */
|
||||
BasicPort module_mid_output_port(generate_segment_wire_mid_output_name(circuit_lib.port_lib_name(output_ports[0])), circuit_lib.port_size(output_ports[0]));
|
||||
BasicPort module_mid_output_port(generate_segment_wire_mid_output_name(circuit_lib.port_prefix(output_ports[0])), circuit_lib.port_size(output_ports[0]));
|
||||
module_manager.add_port(wire_module, module_mid_output_port, ModuleManager::MODULE_OUTPUT_PORT);
|
||||
}
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ void print_verilog_power_gated_invbuf_body(std::fstream& fp,
|
|||
print_verilog_comment(fp, std::string("----- Verilog codes of a power-gated inverter -----"));
|
||||
|
||||
/* Create a sensitive list */
|
||||
fp << "\treg " << circuit_lib.port_lib_name(output_port) << "_reg;" << std::endl;
|
||||
fp << "\treg " << circuit_lib.port_prefix(output_port) << "_reg;" << std::endl;
|
||||
|
||||
fp << "\talways @(" << std::endl;
|
||||
/* Power-gate port first*/
|
||||
|
@ -49,9 +49,9 @@ void print_verilog_power_gated_invbuf_body(std::fstream& fp,
|
|||
if (0 < &power_gate_port - &power_gate_ports[0]) {
|
||||
fp << ",";
|
||||
}
|
||||
fp << circuit_lib.port_lib_name(power_gate_port);
|
||||
fp << circuit_lib.port_prefix(power_gate_port);
|
||||
}
|
||||
fp << circuit_lib.port_lib_name(input_port) << ") begin" << std::endl;
|
||||
fp << circuit_lib.port_prefix(input_port) << ") begin" << std::endl;
|
||||
|
||||
/* Dump the case of power-gated */
|
||||
fp << "\t\tif (";
|
||||
|
@ -71,14 +71,14 @@ void print_verilog_power_gated_invbuf_body(std::fstream& fp,
|
|||
fp << "~";
|
||||
}
|
||||
|
||||
fp << circuit_lib.port_lib_name(power_gate_port) << "[" << power_gate_pin << "])";
|
||||
fp << circuit_lib.port_prefix(power_gate_port) << "[" << power_gate_pin << "])";
|
||||
|
||||
port_cnt++; /* Update port counter*/
|
||||
}
|
||||
}
|
||||
|
||||
fp << ") begin" << std::endl;
|
||||
fp << "\t\t\tassign " << circuit_lib.port_lib_name(output_port) << "_reg = ";
|
||||
fp << "\t\t\tassign " << circuit_lib.port_prefix(output_port) << "_reg = ";
|
||||
|
||||
/* Branch on the type of inverter/buffer:
|
||||
* 1. If this is an inverter or an tapered(multi-stage) buffer with odd number of stages,
|
||||
|
@ -93,12 +93,12 @@ void print_verilog_power_gated_invbuf_body(std::fstream& fp,
|
|||
fp << "~";
|
||||
}
|
||||
|
||||
fp << circuit_lib.port_lib_name(input_port) << ";" << std::endl;
|
||||
fp << circuit_lib.port_prefix(input_port) << ";" << std::endl;
|
||||
fp << "\t\tend else begin" << std::endl;
|
||||
fp << "\t\t\tassign " << circuit_lib.port_lib_name(output_port) << "_reg = 1'bz;" << std::endl;
|
||||
fp << "\t\t\tassign " << circuit_lib.port_prefix(output_port) << "_reg = 1'bz;" << std::endl;
|
||||
fp << "\t\tend" << std::endl;
|
||||
fp << "\tend" << std::endl;
|
||||
fp << "\tassign " << circuit_lib.port_lib_name(output_port) << " = " << circuit_lib.port_lib_name(output_port) << "_reg;" << std::endl;
|
||||
fp << "\tassign " << circuit_lib.port_prefix(output_port) << " = " << circuit_lib.port_prefix(output_port) << "_reg;" << std::endl;
|
||||
}
|
||||
|
||||
/************************************************
|
||||
|
@ -116,7 +116,7 @@ void print_verilog_invbuf_body(std::fstream& fp,
|
|||
|
||||
print_verilog_comment(fp, std::string("----- Verilog codes of a regular inverter -----"));
|
||||
|
||||
fp << "\tassign " << circuit_lib.port_lib_name(output_port) << " = (" << circuit_lib.port_lib_name(input_port) << " === 1'bz)? $random : ";
|
||||
fp << "\tassign " << circuit_lib.port_prefix(output_port) << " = (" << circuit_lib.port_prefix(input_port) << " === 1'bz)? $random : ";
|
||||
|
||||
/* Branch on the type of inverter/buffer:
|
||||
* 1. If this is an inverter or an tapered(multi-stage) buffer with odd number of stages,
|
||||
|
@ -131,7 +131,7 @@ void print_verilog_invbuf_body(std::fstream& fp,
|
|||
fp << "~";
|
||||
}
|
||||
|
||||
fp << circuit_lib.port_lib_name(input_port) << ";" << std::endl;
|
||||
fp << circuit_lib.port_prefix(input_port) << ";" << std::endl;
|
||||
}
|
||||
|
||||
/************************************************
|
||||
|
@ -282,8 +282,8 @@ void print_verilog_passgate_module(ModuleManager& module_manager,
|
|||
/* Dump logics: we propagate input to the output when the gate is '1'
|
||||
* the input is blocked from output when the gate is '0'
|
||||
*/
|
||||
fp << "\tassign " << circuit_lib.port_lib_name(output_ports[0]) << " = ";
|
||||
fp << circuit_lib.port_lib_name(input_ports[1]) << " ? " << circuit_lib.port_lib_name(input_ports[0]);
|
||||
fp << "\tassign " << circuit_lib.port_prefix(output_ports[0]) << " = ";
|
||||
fp << circuit_lib.port_prefix(input_ports[1]) << " ? " << circuit_lib.port_prefix(input_ports[0]);
|
||||
fp << " : 1'bz;" << std::endl;
|
||||
|
||||
/* Print timing info */
|
||||
|
@ -329,7 +329,7 @@ void print_verilog_and_or_gate_body(std::fstream& fp,
|
|||
|
||||
for (const auto& output_port : output_ports) {
|
||||
for (const auto& output_pin : circuit_lib.pins(output_port)) {
|
||||
BasicPort output_port_info(circuit_lib.port_lib_name(output_port), output_pin, output_pin);
|
||||
BasicPort output_port_info(circuit_lib.port_prefix(output_port), output_pin, output_pin);
|
||||
fp << "\tassign " << generate_verilog_port(VERILOG_PORT_CONKT, output_port_info);
|
||||
fp << " = ";
|
||||
|
||||
|
@ -341,7 +341,7 @@ void print_verilog_and_or_gate_body(std::fstream& fp,
|
|||
fp << " " << gate_verilog_operator << " ";
|
||||
}
|
||||
|
||||
BasicPort input_port_info(circuit_lib.port_lib_name(input_port), input_pin, input_pin);
|
||||
BasicPort input_port_info(circuit_lib.port_prefix(input_port), input_pin, input_pin);
|
||||
fp << generate_verilog_port(VERILOG_PORT_CONKT, input_port_info);
|
||||
|
||||
/* Increment the counter for port */
|
||||
|
@ -413,10 +413,10 @@ void print_verilog_mux2_gate_body(std::fstream& fp,
|
|||
* the third input is the select port
|
||||
*/
|
||||
fp << "\tassign ";
|
||||
BasicPort out_port_info(circuit_lib.port_lib_name(output_ports[0]), 0, 0);
|
||||
BasicPort sel_port_info(circuit_lib.port_lib_name(input_ports[2]), 0, 0);
|
||||
BasicPort in0_port_info(circuit_lib.port_lib_name(input_ports[0]), 0, 0);
|
||||
BasicPort in1_port_info(circuit_lib.port_lib_name(input_ports[1]), 0, 0);
|
||||
BasicPort out_port_info(circuit_lib.port_prefix(output_ports[0]), 0, 0);
|
||||
BasicPort sel_port_info(circuit_lib.port_prefix(input_ports[2]), 0, 0);
|
||||
BasicPort in0_port_info(circuit_lib.port_prefix(input_ports[0]), 0, 0);
|
||||
BasicPort in1_port_info(circuit_lib.port_prefix(input_ports[1]), 0, 0);
|
||||
|
||||
fp << generate_verilog_port(VERILOG_PORT_CONKT, out_port_info);
|
||||
fp << " = ";
|
||||
|
|
|
@ -538,18 +538,18 @@ void generate_verilog_rram_mux_branch_module(ModuleManager& module_manager,
|
|||
VTR_ASSERT(true == module_manager.valid_module_id(module_id));
|
||||
|
||||
/* Find each input port */
|
||||
BasicPort input_port(circuit_lib.port_lib_name(mux_input_ports[0]), num_inputs);
|
||||
BasicPort input_port(circuit_lib.port_prefix(mux_input_ports[0]), num_inputs);
|
||||
|
||||
/* Find each output port */
|
||||
BasicPort output_port(circuit_lib.port_lib_name(mux_output_ports[0]), num_outputs);
|
||||
BasicPort output_port(circuit_lib.port_prefix(mux_output_ports[0]), num_outputs);
|
||||
|
||||
/* Find RRAM programming ports,
|
||||
* RRAM MUXes require one more pair of BLB and WL
|
||||
* to configure the memories. See schematic for details
|
||||
*/
|
||||
BasicPort blb_port(circuit_lib.port_lib_name(mux_blb_ports[0]), num_mems + 1);
|
||||
BasicPort blb_port(circuit_lib.port_prefix(mux_blb_ports[0]), num_mems + 1);
|
||||
|
||||
BasicPort wl_port(circuit_lib.port_lib_name(mux_wl_ports[0]), num_mems + 1);
|
||||
BasicPort wl_port(circuit_lib.port_prefix(mux_wl_ports[0]), num_mems + 1);
|
||||
|
||||
/* dump module definition + ports */
|
||||
print_verilog_module_declaration(fp, module_manager, module_id);
|
||||
|
@ -633,7 +633,7 @@ void generate_verilog_cmos_mux_module_input_buffers(ModuleManager& module_manage
|
|||
VTR_ASSERT(1 == mux_input_ports.size());
|
||||
|
||||
/* Get the input port from MUX module */
|
||||
ModulePortId module_input_port_id = module_manager.find_module_port(module_id, circuit_lib.port_lib_name(mux_input_ports[0]));
|
||||
ModulePortId module_input_port_id = module_manager.find_module_port(module_id, circuit_lib.port_prefix(mux_input_ports[0]));
|
||||
VTR_ASSERT(ModulePortId::INVALID() != module_input_port_id);
|
||||
/* Get the port from module */
|
||||
BasicPort module_input_port = module_manager.module_port(module_id, module_input_port_id);
|
||||
|
@ -721,7 +721,7 @@ void generate_verilog_cmos_mux_module_output_buffers(ModuleManager& module_manag
|
|||
/* Iterate over all the outputs in the MUX module */
|
||||
for (const auto& output_port : mux_output_ports) {
|
||||
/* Get the output port from MUX module */
|
||||
ModulePortId module_output_port_id = module_manager.find_module_port(module_id, circuit_lib.port_lib_name(output_port));
|
||||
ModulePortId module_output_port_id = module_manager.find_module_port(module_id, circuit_lib.port_prefix(output_port));
|
||||
VTR_ASSERT(ModulePortId::INVALID() != module_output_port_id);
|
||||
/* Get the port from module */
|
||||
BasicPort module_output_port = module_manager.module_port(module_id, module_output_port_id);
|
||||
|
@ -918,7 +918,7 @@ void generate_verilog_rram_mux_module_multiplexing_structure(ModuleManager& modu
|
|||
for (const auto& mem : mems) {
|
||||
/* Generate the port info of each mem node:
|
||||
*/
|
||||
BasicPort branch_node_blb_port(circuit_lib.port_lib_name(mux_blb_ports[0]), size_t(mem), size_t(mem));
|
||||
BasicPort branch_node_blb_port(circuit_lib.port_prefix(mux_blb_ports[0]), size_t(mem), size_t(mem));
|
||||
branch_node_blb_ports.push_back(branch_node_blb_port);
|
||||
}
|
||||
/* Every stage, we have an additonal BLB and WL in controlling purpose
|
||||
|
@ -930,7 +930,7 @@ void generate_verilog_rram_mux_module_multiplexing_structure(ModuleManager& modu
|
|||
*
|
||||
* output_node_level is always larger than the mem_level by 1
|
||||
*/
|
||||
branch_node_blb_ports.push_back(BasicPort(circuit_lib.port_lib_name(mux_blb_ports[0]),
|
||||
branch_node_blb_ports.push_back(BasicPort(circuit_lib.port_prefix(mux_blb_ports[0]),
|
||||
mux_graph.num_memory_bits() + output_node_level - 1,
|
||||
mux_graph.num_memory_bits() + output_node_level - 1)
|
||||
);
|
||||
|
@ -949,7 +949,7 @@ void generate_verilog_rram_mux_module_multiplexing_structure(ModuleManager& modu
|
|||
}
|
||||
|
||||
/* Link nodes to BLB ports for the branch module */
|
||||
ModulePortId module_blb_port_id = module_manager.find_module_port(branch_module_id, circuit_lib.port_lib_name(mux_blb_ports[0]));
|
||||
ModulePortId module_blb_port_id = module_manager.find_module_port(branch_module_id, circuit_lib.port_prefix(mux_blb_ports[0]));
|
||||
VTR_ASSERT(ModulePortId::INVALID() != module_blb_port_id);
|
||||
/* Get the port from module */
|
||||
BasicPort module_blb_port = module_manager.module_port(branch_module_id, module_blb_port_id);
|
||||
|
@ -959,7 +959,7 @@ void generate_verilog_rram_mux_module_multiplexing_structure(ModuleManager& modu
|
|||
for (const auto& mem : mems) {
|
||||
/* Generate the port info of each mem node:
|
||||
*/
|
||||
BasicPort branch_node_blb_port(circuit_lib.port_lib_name(mux_wl_ports[0]), size_t(mem), size_t(mem));
|
||||
BasicPort branch_node_blb_port(circuit_lib.port_prefix(mux_wl_ports[0]), size_t(mem), size_t(mem));
|
||||
branch_node_wl_ports.push_back(branch_node_blb_port);
|
||||
}
|
||||
/* Every stage, we have an additonal BLB and WL in controlling purpose
|
||||
|
@ -971,7 +971,7 @@ void generate_verilog_rram_mux_module_multiplexing_structure(ModuleManager& modu
|
|||
*
|
||||
* output_node_level is always larger than the mem_level by 1
|
||||
*/
|
||||
branch_node_wl_ports.push_back(BasicPort(circuit_lib.port_lib_name(mux_wl_ports[0]),
|
||||
branch_node_wl_ports.push_back(BasicPort(circuit_lib.port_prefix(mux_wl_ports[0]),
|
||||
mux_graph.num_memory_bits() + output_node_level - 1,
|
||||
mux_graph.num_memory_bits() + output_node_level - 1)
|
||||
);
|
||||
|
@ -990,7 +990,7 @@ void generate_verilog_rram_mux_module_multiplexing_structure(ModuleManager& modu
|
|||
}
|
||||
|
||||
/* Link nodes to BLB ports for the branch module */
|
||||
ModulePortId module_wl_port_id = module_manager.find_module_port(branch_module_id, circuit_lib.port_lib_name(mux_wl_ports[0]));
|
||||
ModulePortId module_wl_port_id = module_manager.find_module_port(branch_module_id, circuit_lib.port_prefix(mux_wl_ports[0]));
|
||||
VTR_ASSERT(ModulePortId::INVALID() != module_wl_port_id);
|
||||
/* Get the port from module */
|
||||
BasicPort module_wl_port = module_manager.module_port(branch_module_id, module_wl_port_id);
|
||||
|
@ -1107,13 +1107,13 @@ void generate_verilog_rram_mux_module(ModuleManager& module_manager,
|
|||
/* Add each global port */
|
||||
for (const auto& port : mux_global_ports) {
|
||||
/* Configure each global port */
|
||||
BasicPort global_port(circuit_lib.port_lib_name(port), circuit_lib.port_size(port));
|
||||
BasicPort global_port(circuit_lib.port_prefix(port), circuit_lib.port_size(port));
|
||||
module_manager.add_port(module_id, global_port, ModuleManager::MODULE_GLOBAL_PORT);
|
||||
}
|
||||
/* Add each input port */
|
||||
size_t input_port_cnt = 0;
|
||||
for (const auto& port : mux_input_ports) {
|
||||
BasicPort input_port(circuit_lib.port_lib_name(port), num_inputs);
|
||||
BasicPort input_port(circuit_lib.port_prefix(port), num_inputs);
|
||||
module_manager.add_port(module_id, input_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
/* Update counter */
|
||||
input_port_cnt++;
|
||||
|
@ -1122,7 +1122,7 @@ void generate_verilog_rram_mux_module(ModuleManager& module_manager,
|
|||
VTR_ASSERT(1 == input_port_cnt);
|
||||
|
||||
for (const auto& port : mux_output_ports) {
|
||||
BasicPort output_port(circuit_lib.port_lib_name(port), num_outputs);
|
||||
BasicPort output_port(circuit_lib.port_prefix(port), num_outputs);
|
||||
if (SPICE_MODEL_LUT == circuit_lib.model_type(circuit_model)) {
|
||||
output_port.set_width(circuit_lib.port_size(port));
|
||||
}
|
||||
|
@ -1134,7 +1134,7 @@ void generate_verilog_rram_mux_module(ModuleManager& module_manager,
|
|||
/* IMPORTANT: RRAM-based MUX has an additional BLB pin per level
|
||||
* So, the actual port width of BLB should be added by the number of levels of the MUX graph
|
||||
*/
|
||||
BasicPort blb_port(circuit_lib.port_lib_name(port), num_mems + mux_graph.num_levels());
|
||||
BasicPort blb_port(circuit_lib.port_prefix(port), num_mems + mux_graph.num_levels());
|
||||
module_manager.add_port(module_id, blb_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
}
|
||||
|
||||
|
@ -1143,7 +1143,7 @@ void generate_verilog_rram_mux_module(ModuleManager& module_manager,
|
|||
/* IMPORTANT: RRAM-based MUX has an additional WL pin per level
|
||||
* So, the actual port width of WL should be added by the number of levels of the MUX graph
|
||||
*/
|
||||
BasicPort wl_port(circuit_lib.port_lib_name(port), num_mems + mux_graph.num_levels());
|
||||
BasicPort wl_port(circuit_lib.port_prefix(port), num_mems + mux_graph.num_levels());
|
||||
module_manager.add_port(module_id, wl_port, ModuleManager::MODULE_INPUT_PORT);
|
||||
}
|
||||
|
||||
|
|
|
@ -120,7 +120,7 @@ void print_verilog_preconfig_top_module_connect_global_ports(std::fstream& fp,
|
|||
CircuitPortId linked_circuit_port_id = CircuitPortId::INVALID();
|
||||
/* Find the circuit port with the same name */
|
||||
for (const CircuitPortId& circuit_port_id : global_ports) {
|
||||
if (0 != module_global_port.get_name().compare(circuit_lib.port_lib_name(circuit_port_id))) {
|
||||
if (0 != module_global_port.get_name().compare(circuit_lib.port_prefix(circuit_port_id))) {
|
||||
continue;
|
||||
}
|
||||
linked_circuit_port_id = circuit_port_id;
|
||||
|
|
|
@ -3134,7 +3134,7 @@ void add_user_defined_verilog_modules(ModuleManager& module_manager,
|
|||
VTR_ASSERT (1 == circuit_lib.port_size(output_ports[0]));
|
||||
|
||||
/* Add a mid-output port to the module */
|
||||
BasicPort module_mid_output_port(generate_segment_wire_mid_output_name(circuit_lib.port_lib_name(output_ports[0])), circuit_lib.port_size(output_ports[0]));
|
||||
BasicPort module_mid_output_port(generate_segment_wire_mid_output_name(circuit_lib.port_prefix(output_ports[0])), circuit_lib.port_size(output_ports[0]));
|
||||
module_manager.add_port(module_id, module_mid_output_port, ModuleManager::MODULE_OUTPUT_PORT);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -109,7 +109,7 @@ void print_verilog_top_testbench_global_ports_stimuli(std::fstream& fp,
|
|||
* connect it to the local wire of operating clock
|
||||
*/
|
||||
/* Find the module port */
|
||||
ModulePortId module_global_port = module_manager.find_module_port(top_module, circuit_lib.port_lib_name(model_global_port));
|
||||
ModulePortId module_global_port = module_manager.find_module_port(top_module, circuit_lib.port_prefix(model_global_port));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(top_module, module_global_port));
|
||||
|
||||
BasicPort stimuli_clock_port;
|
||||
|
@ -141,7 +141,7 @@ void print_verilog_top_testbench_global_ports_stimuli(std::fstream& fp,
|
|||
}
|
||||
/* Reach here, it means we have a configuration done port to deal with */
|
||||
/* Find the module port */
|
||||
ModulePortId module_global_port = module_manager.find_module_port(top_module, circuit_lib.port_lib_name(model_global_port));
|
||||
ModulePortId module_global_port = module_manager.find_module_port(top_module, circuit_lib.port_prefix(model_global_port));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(top_module, module_global_port));
|
||||
|
||||
BasicPort stimuli_config_done_port(std::string(top_tb_config_done_port_name), 1);
|
||||
|
@ -170,7 +170,7 @@ void print_verilog_top_testbench_global_ports_stimuli(std::fstream& fp,
|
|||
}
|
||||
/* Reach here, it means we have a reset port to deal with */
|
||||
/* Find the module port */
|
||||
ModulePortId module_global_port = module_manager.find_module_port(top_module, circuit_lib.port_lib_name(model_global_port));
|
||||
ModulePortId module_global_port = module_manager.find_module_port(top_module, circuit_lib.port_prefix(model_global_port));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(top_module, module_global_port));
|
||||
|
||||
BasicPort stimuli_reset_port;
|
||||
|
@ -212,7 +212,7 @@ void print_verilog_top_testbench_global_ports_stimuli(std::fstream& fp,
|
|||
}
|
||||
/* Reach here, it means we have a set port to deal with */
|
||||
/* Find the module port */
|
||||
ModulePortId module_global_port = module_manager.find_module_port(top_module, circuit_lib.port_lib_name(model_global_port));
|
||||
ModulePortId module_global_port = module_manager.find_module_port(top_module, circuit_lib.port_prefix(model_global_port));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(top_module, module_global_port));
|
||||
|
||||
BasicPort stimuli_set_port;
|
||||
|
@ -256,7 +256,7 @@ void print_verilog_top_testbench_global_ports_stimuli(std::fstream& fp,
|
|||
|
||||
/* Reach here, it means we have a port to deal with */
|
||||
/* Find the module port and wire it to constant values */
|
||||
ModulePortId module_global_port = module_manager.find_module_port(top_module, circuit_lib.port_lib_name(model_global_port));
|
||||
ModulePortId module_global_port = module_manager.find_module_port(top_module, circuit_lib.port_prefix(model_global_port));
|
||||
VTR_ASSERT(true == module_manager.valid_module_port_id(top_module, module_global_port));
|
||||
|
||||
BasicPort module_port = module_manager.module_port(top_module, module_global_port);
|
||||
|
|
Loading…
Reference in New Issue