OpenASIP 2.2
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes | List of all members
OperationImplementationDialog Class Reference

#include <OperationImplementationDialog.hh>

Inheritance diagram for OperationImplementationDialog:
Inheritance graph
Collaboration diagram for OperationImplementationDialog:
Collaboration graph

Public Member Functions

 OperationImplementationDialog ()
 Constructor.
 
virtual ~OperationImplementationDialog ()=default
 
void onOK (wxCommandEvent &)
 
void onAddVhdlImplFile (wxFileDirPickerEvent &)
 
void onAddVerilogImplFile (wxFileDirPickerEvent &)
 
void onDeleteListItem (wxCommandEvent &)
 
void onAddListItem (wxCommandEvent &)
 
void onAddVHDLVariable (wxCommandEvent &)
 
void onAddVerilogVariable (wxCommandEvent &)
 

Private Member Functions

void addAvailableResourcesToList ()
 
std::string sanitize (const wxString &path)
 

Private Attributes

wxListCtrl * availableResourceList_
 
wxListCtrl * addedResourceList_
 
wxListCtrl * addedVariableList_
 
wxTextCtrl * nameCtrl_
 
wxFilePickerCtrl * pick1_
 
wxFilePickerCtrl * pick2_
 
wxFilePickerCtrl * pick11_
 
wxFilePickerCtrl * pick21_
 
wxFilePickerCtrl * pick_vhdl_init_
 
wxFilePickerCtrl * pick_vlog_init_
 
wxFilePickerCtrl * pick31_
 
wxSpinCtrl * latencyWheel_
 

Detailed Description

Definition at line 41 of file OperationImplementationDialog.hh.

Constructor & Destructor Documentation

◆ OperationImplementationDialog()

OperationImplementationDialog::onAddVerilogImplFile OperationImplementationDialog::onAddVerilogVariable OperationImplementationDialog::OperationImplementationDialog ( )

Constructor.

Definition at line 65 of file OperationImplementationDialog.cc.

66 : wxDialog(NULL, -1, "Add Operation Implementation", wxDefaultPosition,
67 wxSize(700, 900), wxRESIZE_BORDER) {
68 wxBoxSizer* vbox = new wxBoxSizer(wxVERTICAL);
69 wxBoxSizer* hbox1 = new wxBoxSizer(wxHORIZONTAL);
70
71 wxButton* okButton = new wxButton(
72 this, wxID_OK, wxT("Ok"), wxDefaultPosition, wxSize(70, 30));
73 wxButton* closeButton = new wxButton(
74 this, wxID_CANCEL, wxT("Cancel"), wxDefaultPosition, wxSize(70, 30));
75
76 wxButton* addVHDLVariableButton =
77 new wxButton(this, BUTTON_ADD_VHDL_VAR, wxT("Add"));
78 wxButton* addVerilogVariableButton =
79 new wxButton(this, BUTTON_ADD_VERILOG_VAR, wxT("Add"));
80
81 wxButton* addButton = new wxButton(this, wxID_ADD, wxT(""));
82 wxButton* delButton = new wxButton(this, wxID_DELETE, wxT(""));
83
84 hbox1->Add(okButton, 1);
85 hbox1->Add(closeButton, 1, wxLEFT, 5);
86
87 wxFlexGridSizer* flex1 = new wxFlexGridSizer(13, 2, 9, 25);
88
89 wxStaticText* title1 = new wxStaticText(this, -1, wxT("Name"));
90 wxStaticText* title2 =
91 new wxStaticText(this, -1, wxT("VHDL Op Implementation file"));
92 wxStaticText* title3 =
93 new wxStaticText(this, -1, wxT("Verilog Op Implementation file"));
94 wxStaticText* title21 =
95 new wxStaticText(this, -1, wxT("VHDL Post-Op Implementation file"));
96 wxStaticText* title31 =
97 new wxStaticText(this, -1, wxT("Verilog Post-Op Implementation file"));
98 wxStaticText* title_vhdl_init =
99 new wxStaticText(this, -1, wxT("VHDL Initial Implementation file"));
100 wxStaticText* title_vlog_init =
101 new wxStaticText(this, -1, wxT("Verilog Initial Implementation file"));
102 wxStaticText* title41 =
103 new wxStaticText(this, -1, wxT("Optional IPXACT bus definition file"));
104 wxStaticText* title4 =
105 new wxStaticText(this, -1, wxT("Selected resources"));
106 wxStaticText* title5 =
107 new wxStaticText(this, -1, wxT("Selected resources"));
108 wxStaticText* title6 =
109 new wxStaticText(this, -1, wxT("Add VHDL Variable"));
110 wxStaticText* title7 =
111 new wxStaticText(this, -1, wxT("Add Verilog Variable"));
112 wxStaticText* title_latency = new wxStaticText(this, -1, wxT("Latency"));
113
114 nameCtrl_ = new wxTextCtrl(this, -1);
115
116 pick1_ = new wxFilePickerCtrl(this, BUTTON_MODEL_VHDL, "",
117 "Select VHDL Op Implementation File", "*.vhd;*.vhdl", wxDefaultPosition,
118 wxDefaultSize, wxFLP_OPEN | wxFLP_FILE_MUST_EXIST | wxFLP_SMALL);
119 pick2_ = new wxFilePickerCtrl(this, BUTTON_MODEL_VERILOG, "",
120 "Select Verilog Op Implementation File", "*.vh;*.v", wxDefaultPosition,
121 wxDefaultSize, wxFLP_OPEN | wxFLP_FILE_MUST_EXIST | wxFLP_SMALL);
122 pick11_ = new wxFilePickerCtrl(this, BUTTON_POSTMODEL_VHDL, "",
123 "Select VHDL Post-Op Implementation File", "*.vhd;*.vhdl", wxDefaultPosition,
124 wxDefaultSize, wxFLP_OPEN | wxFLP_FILE_MUST_EXIST | wxFLP_SMALL);
125 pick21_ = new wxFilePickerCtrl(this, BUTTON_POSTMODEL_VERILOG, "",
126 "Select Verilog Post-Op Implementation File", "*.vh;*.v", wxDefaultPosition,
127 wxDefaultSize, wxFLP_OPEN | wxFLP_FILE_MUST_EXIST | wxFLP_SMALL);
128 pick_vhdl_init_ = new wxFilePickerCtrl(this, BUTTON_INITIAL_VHDL, "",
129 "Select VHDL Initial Implementation File", "*.vhd;*.vhdl", wxDefaultPosition,
130 wxDefaultSize, wxFLP_OPEN | wxFLP_FILE_MUST_EXIST | wxFLP_SMALL);
131 pick_vlog_init_ = new wxFilePickerCtrl(this, BUTTON_INITIAL_VERILOG, "",
132 "Select Verilog Initial Implementation File", "*.vh;*.v", wxDefaultPosition,
133 wxDefaultSize, wxFLP_OPEN | wxFLP_FILE_MUST_EXIST | wxFLP_SMALL);
134 pick31_ = new wxFilePickerCtrl(this, BUTTON_IPXACT_ABSDEF, "",
135 "Select IPXACT Bus Abstraction Definition File", "*.xml", wxDefaultPosition,
136 wxDefaultSize, wxFLP_OPEN | wxFLP_FILE_MUST_EXIST | wxFLP_SMALL);
137 latencyWheel_ = new wxSpinCtrl(this);
138
139 flex1->Add(title1);
140 flex1->Add(nameCtrl_, 1, wxEXPAND);
141 flex1->Add(title2);
142 flex1->Add(pick1_, 1, wxEXPAND);
143 flex1->Add(title3);
144 flex1->Add(pick2_, 1, wxEXPAND);
145 flex1->Add(title21);
146 flex1->Add(pick11_, 1, wxEXPAND);
147 flex1->Add(title31);
148 flex1->Add(pick21_, 1, wxEXPAND);
149 flex1->Add(title_vhdl_init);
150 flex1->Add(pick_vhdl_init_, 1, wxEXPAND);
151 flex1->Add(title_vlog_init);
152 flex1->Add(pick_vlog_init_, 1, wxEXPAND);
153 flex1->Add(title41);
154 flex1->Add(pick31_, 1, wxEXPAND);
155 flex1->Add(title6);
156 flex1->Add(addVHDLVariableButton, 1, wxEXPAND);
157 flex1->Add(title7);
158 flex1->Add(addVerilogVariableButton, 1, wxEXPAND);
159 flex1->Add(title4);
160 flex1->Add(addButton, 1, wxEXPAND);
161 flex1->Add(title5);
162 flex1->Add(delButton, 1, wxEXPAND);
163 flex1->Add(title_latency);
164 flex1->Add(latencyWheel_, 1, wxEXPAND);
165
166 addedResourceList_ = new wxListCtrl(
167 this, -1, wxDefaultPosition, wxDefaultSize, wxLC_REPORT);
168 addedResourceList_->AppendColumn(
169 "Added Resource", wxLIST_FORMAT_LEFT, 400);
170 addedResourceList_->AppendColumn("id", wxLIST_FORMAT_LEFT, 30);
171 addedResourceList_->AppendColumn("Count", wxLIST_FORMAT_LEFT, 120);
172
173 addedVariableList_ = new wxListCtrl(
174 this, -1, wxDefaultPosition, wxDefaultSize, wxLC_REPORT);
175 addedVariableList_->AppendColumn(
176 "Added Variable", wxLIST_FORMAT_LEFT, 200);
177 addedVariableList_->AppendColumn("width", wxLIST_FORMAT_LEFT, 120);
178 addedVariableList_->AppendColumn("type", wxLIST_FORMAT_LEFT, 120);
179 addedVariableList_->AppendColumn("language", wxLIST_FORMAT_LEFT, 120);
180
181 availableResourceList_ = new wxListCtrl(
182 this, -1, wxDefaultPosition, wxDefaultSize, wxLC_REPORT);
183 availableResourceList_->AppendColumn(
184 "Available Resource", wxLIST_FORMAT_LEFT, 170);
185 availableResourceList_->AppendColumn("id", wxLIST_FORMAT_LEFT, 30);
186
187 wxBoxSizer* hbox2 = new wxBoxSizer(wxHORIZONTAL);
188 hbox2->Add(flex1, 1, wxALL | wxEXPAND, 15);
189 hbox2->Add(availableResourceList_, 1, wxALL | wxEXPAND, 15);
191
192 vbox->Add(hbox2, 1, wxALL | wxEXPAND, 15);
193 vbox->Add(addedResourceList_, 1, wxALL | wxEXPAND, 15);
194 vbox->Add(addedVariableList_, 1, wxALL | wxEXPAND, 15);
195 vbox->Add(hbox1, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, 10);
196
197 SetSizer(vbox);
198 Centre();
199 ShowModal();
200 Destroy();
201}

◆ ~OperationImplementationDialog()

virtual OperationImplementationDialog::~OperationImplementationDialog ( )
virtualdefault

Member Function Documentation

◆ addAvailableResourcesToList()

void OperationImplementationDialog::addAvailableResourcesToList ( )
private

Definition at line 204 of file OperationImplementationDialog.cc.

204 {
205 HDB::HDBManager* manager = wxGetApp().mainFrame().hdbManager();
206 std::set<RowID> resource_ids =
208 for (const auto id : resource_ids) {
211 int idx = availableResourceList_->GetItemCount();
212 availableResourceList_->InsertItem(idx, resource.name);
213 availableResourceList_->SetItem(idx, 1, std::to_string(resource.id));
214 }
215}
OperationImplementationResource OperationImplementationResourceByID(RowID id) const
std::set< RowID > OperationImplementationResourceIDs() const

References availableResourceList_, HDB::OperationImplementationResource::id, HDB::OperationImplementationResource::name, HDB::HDBManager::OperationImplementationResourceByID(), and HDB::HDBManager::OperationImplementationResourceIDs().

Here is the call graph for this function:

◆ onAddListItem()

void OperationImplementationDialog::onAddListItem ( wxCommandEvent &  )

Definition at line 331 of file OperationImplementationDialog.cc.

331 {
332 long item = -1;
333
334 for (;;) {
335 item = availableResourceList_->GetNextItem(
336 item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
337 if (item == -1)
338 break;
339 std::string name =
340 availableResourceList_->GetItemText(item, 0).ToStdString();
341 std::string id =
342 availableResourceList_->GetItemText(item, 1).ToStdString();
343
344 bool found = false;
345 int idx = addedResourceList_->GetItemCount();
346 for (int i = 0; i < idx; ++i) {
347 if (addedResourceList_->GetItemText(i, 0).ToStdString() == name) {
348 std::istringstream iss(
349 addedResourceList_->GetItemText(i, 2).ToStdString());
350 int int_id;
351 iss >> int_id;
352 addedResourceList_->SetItem(i, 2, std::to_string(++int_id));
353 found = true;
354 break;
355 }
356 }
357 if (!found) {
358 addedResourceList_->InsertItem(idx, name);
359 addedResourceList_->SetItem(idx, 1, id);
360 addedResourceList_->SetItem(idx, 2, "1");
361 }
362 }
363}

References addedResourceList_, and availableResourceList_.

◆ onAddVerilogImplFile()

void OperationImplementationDialog::onAddVerilogImplFile ( wxFileDirPickerEvent &  )

Definition at line 302 of file OperationImplementationDialog.cc.

302{}

◆ onAddVerilogVariable()

void OperationImplementationDialog::onAddVerilogVariable ( wxCommandEvent &  )

Definition at line 310 of file OperationImplementationDialog.cc.

310 {
311 VariableDialog dialog(addedVariableList_, "Verilog");
312}

References addedVariableList_.

◆ onAddVhdlImplFile()

void OperationImplementationDialog::onAddVhdlImplFile ( wxFileDirPickerEvent &  )

Definition at line 299 of file OperationImplementationDialog.cc.

299{}

◆ onAddVHDLVariable()

void OperationImplementationDialog::onAddVHDLVariable ( wxCommandEvent &  )

Definition at line 305 of file OperationImplementationDialog.cc.

305 {
306 VariableDialog dialog(addedVariableList_, "VHDL");
307}

References addedVariableList_.

◆ onDeleteListItem()

void OperationImplementationDialog::onDeleteListItem ( wxCommandEvent &  )

Definition at line 315 of file OperationImplementationDialog.cc.

315 {
316 long item = -1;
317
318 for (;;) {
319 item = addedResourceList_->GetNextItem(
320 item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
321 if (item == -1)
322 break;
323 addedResourceList_->DeleteItem(item);
324 if (addedResourceList_->GetItemCount() == 0 ||
325 item == addedResourceList_->GetItemCount())
326 break;
327 }
328}

References addedResourceList_.

◆ onOK()

void OperationImplementationDialog::onOK ( wxCommandEvent &  )

Definition at line 233 of file OperationImplementationDialog.cc.

233 {
235 HDB::HDBManager* manager = wxGetApp().mainFrame().hdbManager();
236
237 operation.name = nameCtrl_->GetLineText(0);
238 if (operation.name.length() < 1) {
239 wxMessageBox(
240 wxT("Give the operation some name."), wxT("Error"), wxICON_ERROR);
241 return;
242 }
243
244 operation.implFileVhdl = sanitize(pick1_->GetPath());
245 if (operation.implFileVhdl.length() < 1) {
246 wxMessageBox(wxT("Give the operation VHDL implementation file."),
247 wxT("Error"), wxICON_ERROR);
248 return;
249 }
250
251 operation.implFileVerilog = sanitize(pick2_->GetPath());
252
253 operation.postOpImplFileVhdl = sanitize(pick11_->GetPath());
254 operation.postOpImplFileVerilog = sanitize(pick21_->GetPath());
255 operation.initialImplFileVhdl = sanitize(pick_vhdl_init_->GetPath());
256 operation.initialImplFileVerilog = sanitize(pick_vlog_init_->GetPath());
257 operation.absBusDefFile = sanitize(pick31_->GetPath());
258 operation.latency = latencyWheel_->GetValue();
259
260 long items = addedResourceList_->GetItemCount();
261 for (long i = 0; i < items; ++i) {
263 std::istringstream iss(
264 addedResourceList_->GetItemText(i, 1).ToStdString());
265 iss >> resource.id;
266 std::istringstream iss2(
267 addedResourceList_->GetItemText(i, 2).ToStdString());
268 iss2 >> resource.count;
269 operation.resources.emplace_back(resource);
270 }
271
272 items = addedVariableList_->GetItemCount();
273 for (long i = 0; i < items; ++i) {
274 std::string name =
275 addedVariableList_->GetItemText(i, 0).ToStdString();
276 std::string width =
277 addedVariableList_->GetItemText(i, 1).ToStdString();
278 std::string type =
279 addedVariableList_->GetItemText(i, 2).ToStdString();
280 std::string lang =
281 addedVariableList_->GetItemText(i, 3).ToStdString();
282 if (lang == "VHDL") {
283 operation.vhdlVariables.emplace_back(
284 HDB::Variable{name, width, type, true});
285 } else if (lang == "Verilog") {
286 operation.verilogVariables.emplace_back(
287 HDB::Variable{name, width, type, true});
288 } else {
289 throw std::runtime_error("Unknown language");
290 }
291 }
292
293 manager->addOperationImplementation(operation);
294 wxGetApp().mainFrame().browser()->update();
295 EndModal(wxID_OK);
296}
void addOperationImplementation(const OperationImplementation &operation)
std::string sanitize(const wxString &path)
std::vector< Variable > verilogVariables
std::vector< OperationImplementationResource > resources
std::vector< Variable > vhdlVariables

References HDB::OperationImplementation::absBusDefFile, addedResourceList_, addedVariableList_, HDB::HDBManager::addOperationImplementation(), HDB::OperationImplementationResource::count, HDB::OperationImplementationResource::id, HDB::OperationImplementation::implFileVerilog, HDB::OperationImplementation::implFileVhdl, HDB::OperationImplementation::initialImplFileVerilog, HDB::OperationImplementation::initialImplFileVhdl, HDB::OperationImplementation::latency, latencyWheel_, HDB::OperationImplementation::name, nameCtrl_, pick11_, pick1_, pick21_, pick2_, pick31_, pick_vhdl_init_, pick_vlog_init_, HDB::OperationImplementation::postOpImplFileVerilog, HDB::OperationImplementation::postOpImplFileVhdl, HDB::OperationImplementation::resources, sanitize(), HDB::OperationImplementation::verilogVariables, and HDB::OperationImplementation::vhdlVariables.

Here is the call graph for this function:

◆ sanitize()

std::string OperationImplementationDialog::sanitize ( const wxString &  path)
private

Definition at line 218 of file OperationImplementationDialog.cc.

218 {
219 HDB::HDBManager* manager = wxGetApp().mainFrame().hdbManager();
220 std::string es(path);
221 std::string s(manager->fileName());
222 size_t i = s.rfind('/', s.length());
223 if (i != std::string::npos) {
224 s = s.substr(0, i + 1);
225 if (es.find(s) == 0) {
226 return es.substr(s.length());
227 }
228 }
229 return es;
230}
std::string fileName() const

References HDB::HDBManager::fileName().

Referenced by onOK().

Here is the call graph for this function:

Member Data Documentation

◆ addedResourceList_

wxListCtrl* OperationImplementationDialog::addedResourceList_
private

Definition at line 58 of file OperationImplementationDialog.hh.

Referenced by onAddListItem(), onDeleteListItem(), and onOK().

◆ addedVariableList_

wxListCtrl* OperationImplementationDialog::addedVariableList_
private

Definition at line 59 of file OperationImplementationDialog.hh.

Referenced by onAddVerilogVariable(), onAddVHDLVariable(), and onOK().

◆ availableResourceList_

wxListCtrl* OperationImplementationDialog::availableResourceList_
private

Definition at line 57 of file OperationImplementationDialog.hh.

Referenced by addAvailableResourcesToList(), and onAddListItem().

◆ latencyWheel_

wxSpinCtrl* OperationImplementationDialog::latencyWheel_
private

Definition at line 68 of file OperationImplementationDialog.hh.

Referenced by onOK().

◆ nameCtrl_

wxTextCtrl* OperationImplementationDialog::nameCtrl_
private

Definition at line 60 of file OperationImplementationDialog.hh.

Referenced by onOK().

◆ pick11_

wxFilePickerCtrl* OperationImplementationDialog::pick11_
private

Definition at line 63 of file OperationImplementationDialog.hh.

Referenced by onOK().

◆ pick1_

wxFilePickerCtrl* OperationImplementationDialog::pick1_
private

Definition at line 61 of file OperationImplementationDialog.hh.

Referenced by onOK().

◆ pick21_

wxFilePickerCtrl* OperationImplementationDialog::pick21_
private

Definition at line 64 of file OperationImplementationDialog.hh.

Referenced by onOK().

◆ pick2_

wxFilePickerCtrl* OperationImplementationDialog::pick2_
private

Definition at line 62 of file OperationImplementationDialog.hh.

Referenced by onOK().

◆ pick31_

wxFilePickerCtrl* OperationImplementationDialog::pick31_
private

Definition at line 67 of file OperationImplementationDialog.hh.

Referenced by onOK().

◆ pick_vhdl_init_

wxFilePickerCtrl* OperationImplementationDialog::pick_vhdl_init_
private

Definition at line 65 of file OperationImplementationDialog.hh.

Referenced by onOK().

◆ pick_vlog_init_

wxFilePickerCtrl* OperationImplementationDialog::pick_vlog_init_
private

Definition at line 66 of file OperationImplementationDialog.hh.

Referenced by onOK().


The documentation for this class was generated from the following files: