|
degate 0.1.1
|
Base class for code generators. More...
#include <CodeTemplateGenerator.h>

Public Types | |
| enum | PORT_FUNCTION_TYPE { CLOCK, RESET, ENABLE, Q, NOT_Q, D, SELECT } |
| typedef std::map< std::string, bool > | port_direction_type |
Public Member Functions | |
| CodeTemplateGenerator (std::string const &_entity_name, std::string const &_description, std::string const &_logic_class) | |
| virtual | ~CodeTemplateGenerator () |
| virtual void | add_port (std::string const &port_name, bool is_inport) |
| virtual std::string | generate () const =0 |
Protected Member Functions | |
| virtual std::vector< std::string > | get_inports () const |
| Get a list of input ports. | |
| virtual std::vector< std::string > | get_outports () const |
| Get a list of output ports. | |
| virtual std::vector< std::string > | get_ports () const |
| Get a list of ports. | |
| std::string | get_port_name_by_type (PORT_FUNCTION_TYPE t) const |
Get the name of the port, that is most likely of the type t. | |
| std::string | get_first_port_name_not_in (std::vector< std::string > const &ports, std::vector< std::string > const &blacklist) const |
Get the first port name from ports that is not contained in blacklist. | |
| std::string | get_first_port_name_not_in (std::vector< std::string > const &ports, std::string const &blacklist_item) const |
Get the first port name from ports that is not equal to blacklist_item. | |
| virtual std::string | generate_identifier (std::string const &name, std::string const &prefix="") const =0 |
| template<typename Container > | |
| Container | generate_identifier (Container const &c, std::string const &prefix="") const |
Protected Attributes | |
| std::string | entity_name |
| std::string | description |
| std::string | logic_class |
| port_direction_type | port_direction |
Base class for code generators.
Definition at line 37 of file CodeTemplateGenerator.h.
| typedef std::map<std::string, bool> degate::CodeTemplateGenerator::port_direction_type |
Definition at line 39 of file CodeTemplateGenerator.h.
| CodeTemplateGenerator::CodeTemplateGenerator | ( | std::string const & | _entity_name, |
| std::string const & | _description, | ||
| std::string const & | _logic_class | ||
| ) |
Definition at line 30 of file CodeTemplateGenerator.cc.
: entity_name(_entity_name), description(_description), logic_class(_logic_class) { }
| CodeTemplateGenerator::~CodeTemplateGenerator | ( | ) | [virtual] |
Definition at line 38 of file CodeTemplateGenerator.cc.
{
}
| void CodeTemplateGenerator::add_port | ( | std::string const & | port_name, |
| bool | is_inport | ||
| ) | [virtual] |
Definition at line 42 of file CodeTemplateGenerator.cc.
References port_direction.
Referenced by degate::VerilogModuleGenerator::VerilogModuleGenerator().
{
std::string lc = port_name;
std::transform(lc.begin(), lc.end(), lc.begin(), ::tolower);
port_direction[lc] = is_inport;
}

| virtual std::string degate::CodeTemplateGenerator::generate | ( | ) | const [pure virtual] |
| Container degate::CodeTemplateGenerator::generate_identifier | ( | Container const & | c, |
| std::string const & | prefix = "" |
||
| ) | const [inline, protected] |
Definition at line 100 of file CodeTemplateGenerator.h.
References generate_identifier().
{
Container new_c;
BOOST_FOREACH(typename Container::value_type const& s, c) {
new_c.push_back(generate_identifier(s, prefix));
}
return new_c;
}

| virtual std::string degate::CodeTemplateGenerator::generate_identifier | ( | std::string const & | name, |
| std::string const & | prefix = "" |
||
| ) | const [protected, pure virtual] |
Implemented in degate::VerilogCodeTemplateGenerator, and degate::VHDLCodeTemplateGenerator.
Referenced by generate_identifier(), and degate::VHDLTBCodeTemplateGenerator::generate_signals().

| std::string CodeTemplateGenerator::get_first_port_name_not_in | ( | std::vector< std::string > const & | ports, |
| std::string const & | blacklist_item | ||
| ) | const [protected] |
Get the first port name from ports that is not equal to blacklist_item.
Definition at line 113 of file CodeTemplateGenerator.cc.
References get_first_port_name_not_in().
{
std::vector<std::string> v(1);
v[0] = blacklist_item;
return get_first_port_name_not_in(ports, v);
}

| std::string CodeTemplateGenerator::get_first_port_name_not_in | ( | std::vector< std::string > const & | ports, |
| std::vector< std::string > const & | blacklist | ||
| ) | const [protected] |
Get the first port name from ports that is not contained in blacklist.
Definition at line 100 of file CodeTemplateGenerator.cc.
Referenced by degate::VerilogCodeTemplateGenerator::generate_impl(), and get_first_port_name_not_in().
{
typedef std::vector<std::string>::const_iterator iter;
BOOST_FOREACH(std::string const& p_name, ports) {
iter i = std::find(blacklist.begin(), blacklist.end(), p_name);
if(i == blacklist.end()) return p_name;
}
return "";
}

| std::vector< std::string > CodeTemplateGenerator::get_inports | ( | ) | const [protected, virtual] |
Get a list of input ports.
Definition at line 120 of file CodeTemplateGenerator.cc.
References port_direction.
Referenced by degate::VHDLTBCodeTemplateGenerator::generate(), degate::VerilogTBCodeTemplateGenerator::generate(), degate::VHDLCodeTemplateGenerator::generate_impl(), degate::VerilogCodeTemplateGenerator::generate_impl(), degate::VerilogTBCodeTemplateGenerator::generate_module(), degate::VerilogCodeTemplateGenerator::generate_port_definition(), degate::VHDLCodeTemplateGenerator::generate_port_description(), degate::VerilogCodeTemplateGenerator::generate_port_list(), and degate::VHDLTBCodeTemplateGenerator::generate_signals().
{
std::vector<std::string> ports;
BOOST_FOREACH(port_direction_type::value_type const& p, port_direction)
if(p.second == true) ports.push_back(p.first);
std::sort(ports.begin(), ports.end());
return ports;
}

| std::vector< std::string > CodeTemplateGenerator::get_outports | ( | ) | const [protected, virtual] |
Get a list of output ports.
Definition at line 130 of file CodeTemplateGenerator.cc.
References port_direction.
Referenced by degate::VHDLTBCodeTemplateGenerator::generate(), degate::VerilogTBCodeTemplateGenerator::generate(), degate::VHDLCodeTemplateGenerator::generate_impl(), degate::VerilogCodeTemplateGenerator::generate_impl(), degate::VerilogTBCodeTemplateGenerator::generate_module(), degate::VerilogCodeTemplateGenerator::generate_port_definition(), degate::VHDLCodeTemplateGenerator::generate_port_description(), degate::VerilogCodeTemplateGenerator::generate_port_list(), and degate::VHDLTBCodeTemplateGenerator::generate_signals().
{
std::vector<std::string> ports;
BOOST_FOREACH(port_direction_type::value_type const& p, port_direction)
if(p.second == false) ports.push_back(p.first);
std::sort(ports.begin(), ports.end());
return ports;
}

| std::string CodeTemplateGenerator::get_port_name_by_type | ( | CodeTemplateGenerator::PORT_FUNCTION_TYPE | t | ) | const [protected] |
Get the name of the port, that is most likely of the type t.
Definition at line 49 of file CodeTemplateGenerator.cc.
References CLOCK, D, ENABLE, NOT_Q, port_direction, Q, RESET, and SELECT.
Referenced by degate::VHDLTBCodeTemplateGenerator::generate(), degate::VHDLCodeTemplateGenerator::generate_impl(), and degate::VerilogCodeTemplateGenerator::generate_impl().
{
port_direction_type::const_iterator found;
if(t == CLOCK) {
if((port_direction.end() != (found = port_direction.find("clock"))) ||
(port_direction.end() != (found = port_direction.find("clk"))))
return found->first;
}
else if(t == RESET) {
if((port_direction.end() != (found = port_direction.find("/reset"))) ||
(port_direction.end() != (found = port_direction.find("!reset"))) ||
(port_direction.end() != (found = port_direction.find("reset"))) ||
(port_direction.end() != (found = port_direction.find("/rst"))) ||
(port_direction.end() != (found = port_direction.find("!rst"))) ||
(port_direction.end() != (found = port_direction.find("rst"))))
return found->first;
}
else if(t == ENABLE) {
if((port_direction.end() != (found = port_direction.find("en"))) ||
(port_direction.end() != (found = port_direction.find("enable"))) ||
(port_direction.end() != (found = port_direction.find("/en"))) ||
(port_direction.end() != (found = port_direction.find("!en"))) ||
(port_direction.end() != (found = port_direction.find("/enable"))) ||
(port_direction.end() != (found = port_direction.find("!enable"))))
return found->first;
}
else if(t == SELECT) {
if((port_direction.end() != (found = port_direction.find("select"))) ||
(port_direction.end() != (found = port_direction.find("sel"))) ||
(port_direction.end() != (found = port_direction.find("s"))))
return found->first;
}
else if(t == Q) {
if((port_direction.end() != (found = port_direction.find("q"))) )
return found->first;
}
else if(t == NOT_Q) {
if((port_direction.end() != (found = port_direction.find("!q"))) ||
(port_direction.end() != (found = port_direction.find("/q"))))
return found->first;
}
else if(t == D) {
if((port_direction.end() != (found = port_direction.find("d"))) )
return found->first;
}
return "";
}

| std::vector< std::string > CodeTemplateGenerator::get_ports | ( | ) | const [protected, virtual] |
Get a list of ports.
Definition at line 140 of file CodeTemplateGenerator.cc.
References port_direction.
Referenced by degate::VerilogTBCodeTemplateGenerator::generate_module().
{
std::vector<std::string> ports;
BOOST_FOREACH(port_direction_type::value_type const& p, port_direction)
ports.push_back(p.first);
std::sort(ports.begin(), ports.end());
return ports;
}

std::string degate::CodeTemplateGenerator::description [protected] |
Definition at line 55 of file CodeTemplateGenerator.h.
std::string degate::CodeTemplateGenerator::entity_name [protected] |
Definition at line 55 of file CodeTemplateGenerator.h.
Referenced by degate::VHDLTBCodeTemplateGenerator::generate(), degate::VHDLCodeTemplateGenerator::generate(), degate::VerilogTBCodeTemplateGenerator::generate(), degate::VerilogCodeTemplateGenerator::generate(), degate::VHDLTBCodeTemplateGenerator::generate_header(), degate::VHDLCodeTemplateGenerator::generate_header(), degate::VerilogTBCodeTemplateGenerator::generate_header(), and degate::VerilogCodeTemplateGenerator::generate_header().
std::string degate::CodeTemplateGenerator::logic_class [protected] |
Definition at line 55 of file CodeTemplateGenerator.h.
Referenced by degate::VHDLTBCodeTemplateGenerator::generate(), degate::VHDLCodeTemplateGenerator::generate(), degate::VerilogCodeTemplateGenerator::generate(), and degate::VHDLCodeTemplateGenerator::generate_impl().
Definition at line 56 of file CodeTemplateGenerator.h.
Referenced by add_port(), get_inports(), get_outports(), get_port_name_by_type(), and get_ports().
1.7.4