21 #ifndef OPHIDIAN_PARSING_VERILOG_H
22 #define OPHIDIAN_PARSING_VERILOG_H
37 std::vector< std::pair<std::string, std::string> > pinnet_pairs;
40 pinnet_pairs.reserve(5);
43 bool operator==(
const module & o)
const {
44 bool result=pinnet_pairs.size()==o.pinnet_pairs.size();
45 if(!result)
return false;
46 for(std::size_t i=0; i<pinnet_pairs.size();++i)
47 if(pinnet_pairs[i].first!=o.pinnet_pairs[i].first||pinnet_pairs[i].second!=o.pinnet_pairs[i].second)
49 return type==o.type&&name==o.name;
55 std::vector<std::string> m_inputs;
56 std::vector<std::string> m_outputs;
57 std::vector<std::string> m_wires;
58 std::vector<module> m_modules;
60 std::size_t m_pin_count;
61 std::size_t m_net_count;
63 std::vector<std::string> tokenize(std::string line);
65 bool read_line_as_tokens(std::istream &in, std::vector<std::string> & tokens);
66 bool read_module(std::istream & in, std::string & token);
67 bool read_primary_input(std::istream & in, std::string & token);
68 bool read_primary_output(std::istream & in, std::string & token);
69 bool read_cell_inst(std::istream & in, std::string &cell_type, std::string &cell_inst, std::vector<std::pair<std::string, std::string> > &pin_net_pairs);
72 bool read_wire(std::istream & in, std::string & token);
74 void read(
const std::string & filename);
78 verilog(
const std::string & filename);
81 const std::string & design()
const {
85 const std::vector<std::string> & inputs()
const {
89 const std::vector<std::string> & outputs()
const {
93 const std::vector<std::string> & wires()
const {
97 const std::vector<module> & modules()
const {
101 std::size_t cell_count()
const {
102 return m_modules.size();
105 std::size_t net_count()
const {
109 std::size_t pin_count()
const {
118 #endif // OPHIDIAN_PARSING_VERILOG_H