GHDL support added.

Output signal is calculated by parsing VCD file
parent 07f49352
This diff is collapsed.
...@@ -407,13 +407,13 @@ class Filter(): ...@@ -407,13 +407,13 @@ class Filter():
warnings.simplefilter('error') warnings.simplefilter('error')
try: try:
self.b, self.a = self.calculate_filter_coefficients() self.b, self.a = self.calculate_filter_coefficients()
except ValueError, exVE: except ValueError as exVE:
warningMessage = '%s' % exVE warningMessage = '%s' % exVE
except ZeroDivisionError, exZDE: except ZeroDivisionError as exZDE:
warningMessage = '%s' % exZDE warningMessage = '%s' % exZDE
except RuntimeWarning, exRW: except RuntimeWarning as exRW:
warningMessage = '%s' % exRW warningMessage = '%s' % exRW
except signal.BadCoefficients, exBC: except signal.BadCoefficients as exBC:
warningMessage = '%s' % exBC warningMessage = '%s' % exBC
if warningMessage != '': if warningMessage != '':
...@@ -487,12 +487,12 @@ class Filter(): ...@@ -487,12 +487,12 @@ class Filter():
labelFilterStructure = QLabel('Structure:') labelFilterStructure = QLabel('Structure:')
self.comboFilterStructure = QComboBox() self.comboFilterStructure = QComboBox()
self.comboFilterStructure.addItem("Direct Form I Transposed") self.comboFilterStructure.addItem("Direct_Form_I_Transposed")
self.comboFilterStructure.addItem("Direct Form II Transposed") self.comboFilterStructure.addItem("Direct_Form_II_Transposed")
self.comboFilterStructure.addItem("Direct Form I") self.comboFilterStructure.addItem("Direct_Form_I")
self.comboFilterStructure.addItem("Parallel") self.comboFilterStructure.addItem("Parallel")
self.comboFilterStructure.addItem("Cascade") self.comboFilterStructure.addItem("Cascade")
self.comboFilterStructure.addItem("Direct Form II") self.comboFilterStructure.addItem("Direct_Form_II")
self.comboFilterStructure.setEditable(True) self.comboFilterStructure.setEditable(True)
self.comboFilterStructure.lineEdit().setReadOnly(True) self.comboFilterStructure.lineEdit().setReadOnly(True)
self.comboFilterStructure.lineEdit().setAlignment(Qt.AlignRight) self.comboFilterStructure.lineEdit().setAlignment(Qt.AlignRight)
...@@ -514,7 +514,7 @@ class Filter(): ...@@ -514,7 +514,7 @@ class Filter():
self.comboFilterOverflow.setItemData(ii, Qt.AlignRight, Qt.TextAlignmentRole) self.comboFilterOverflow.setItemData(ii, Qt.AlignRight, Qt.TextAlignmentRole)
#self.connect(self.comboFilterStructure, SIGNAL('currentIndexChanged(int)'), self.on_parameter_change) #self.connect(self.comboFilterStructure, SIGNAL('currentIndexChanged(int)'), self.on_parameter_change)
# TODO: the connected method is still provisional, it forces to DF I Transposed # TODO: the connected method is still provisional, it forces to DF I Transposed
self.connect(self.comboFilterStructure, SIGNAL('currentIndexChanged(int)'), self.on_overflow_change) self.connect(self.comboFilterOverflow, SIGNAL('currentIndexChanged(int)'), self.on_overflow_change)
labelResponseType = QLabel('Filtering Method:') labelResponseType = QLabel('Filtering Method:')
...@@ -1010,10 +1010,11 @@ class Filter(): ...@@ -1010,10 +1010,11 @@ class Filter():
return vboxMain return vboxMain
def on_structure_change(self): def on_structure_change(self):
# TODO: provisional, check the structure change and force to DF1 Trans # TODO: provisional, check the structure change and force to DF1 Trans
activeStructure = str(self.comboFilterStructure.currentText()) activeStructure = str(self.comboFilterStructure.currentText())
if activeStructure == 'Direct Form I Transposed': if activeStructure == 'Direct_Form_I_Transposed':
self.on_parameter_change() self.on_parameter_change()
else: else:
QMessageBox.information(self, 'Filter Structure', QMessageBox.information(self, 'Filter Structure',
...@@ -1021,6 +1022,7 @@ class Filter(): ...@@ -1021,6 +1022,7 @@ class Filter():
% activeStructure, % activeStructure,
QMessageBox.Ok) QMessageBox.Ok)
self.comboFilterStructure.setCurrentIndex(0) self.comboFilterStructure.setCurrentIndex(0)
def on_overflow_change(self): def on_overflow_change(self):
# TODO: provisional, check the structure change and force to DF1 Trans # TODO: provisional, check the structure change and force to DF1 Trans
......
...@@ -45,11 +45,6 @@ import sys, os, random ...@@ -45,11 +45,6 @@ import sys, os, random
from PyQt4.QtCore import * from PyQt4.QtCore import *
from PyQt4.QtGui import * from PyQt4.QtGui import *
#import matplotlib
#from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
#from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar
#from matplotlib.figure import Figure
class LibreFDATool( class LibreFDATool(
QMainWindow, QMainWindow,
...@@ -62,6 +57,9 @@ class LibreFDATool( ...@@ -62,6 +57,9 @@ class LibreFDATool(
stimulusUpdatedSignal = pyqtSignal() stimulusUpdatedSignal = pyqtSignal()
filterUpdatedSignal = pyqtSignal() filterUpdatedSignal = pyqtSignal()
simulatorUpdatedSignal = pyqtSignal() simulatorUpdatedSignal = pyqtSignal()
simulatorBeginSignal = pyqtSignal()
simulatorEndSignal = pyqtSignal()
def __init__(self): def __init__(self):
QMainWindow.__init__(self) QMainWindow.__init__(self)
...@@ -75,6 +73,8 @@ class LibreFDATool( ...@@ -75,6 +73,8 @@ class LibreFDATool(
self.stimulusUpdatedSignal.connect(self.on_stimulus_updated) self.stimulusUpdatedSignal.connect(self.on_stimulus_updated)
self.filterUpdatedSignal.connect(self.on_filter_updated) self.filterUpdatedSignal.connect(self.on_filter_updated)
self.simulatorUpdatedSignal.connect(self.on_simulator_updated) self.simulatorUpdatedSignal.connect(self.on_simulator_updated)
self.simulatorBeginSignal.connect(self.on_simulator_begin)
self.simulatorEndSignal.connect(self.on_simulator_end)
self.runSimulator() self.runSimulator()
...@@ -245,8 +245,9 @@ class LibreFDATool( ...@@ -245,8 +245,9 @@ class LibreFDATool(
scalingX = 1 scalingX = 1
scalingC = 1 scalingC = 1
self.execute_simulation(self.b, self.a, self.execute_simulation(self.b, self.a, self.x,
self.x, str(self.textFilterName.text()), 'vhdl', str(self.textFilterName.text()), str(self.comboSimulatorLanguage.currentText()),
str(self.comboSimulatorEngine.currentText()), str(self.comboFilterStructure.currentText()),
busX, busY, busC, busX, busY, busC,
scalingX, scalingC) scalingX, scalingC)
...@@ -275,6 +276,16 @@ class LibreFDATool( ...@@ -275,6 +276,16 @@ class LibreFDATool(
#QMessageBox.information(self, 'Simulator Updated', #QMessageBox.information(self, 'Simulator Updated',
# 'This is only a message', QMessageBox.Ok) # 'This is only a message', QMessageBox.Ok)
self.status_text.setText('Simulator configuration has been updated') self.status_text.setText('Simulator configuration has been updated')
def on_simulator_begin(self):
#QMessageBox.information(self, 'Simulator Begin',
# 'This is only a message', QMessageBox.Ok)
self.status_text.setText('Simulation started...')
def on_simulator_end(self):
#QMessageBox.information(self, 'Simulator End',
# 'This is only a message', QMessageBox.Ok)
self.status_text.setText('Simulation ended!!')
def main(): def main():
app = QApplication(sys.argv) app = QApplication(sys.argv)
......
...@@ -111,11 +111,11 @@ def analyze_pole_zero(figure, b, a, p, q, grid): ...@@ -111,11 +111,11 @@ def analyze_pole_zero(figure, b, a, p, q, grid):
p2 = np.roots(a2) p2 = np.roots(a2)
z2 = np.roots(b2) z2 = np.roots(b2)
except ValueError, exVE: except ValueError as exVE:
warningMessage = '%s' % exVE warningMessage = '%s' % exVE
except ZeroDivisionError, exZDE: except ZeroDivisionError as exZDE:
warningMessage = '%s' % exZDE warningMessage = '%s' % exZDE
except RuntimeWarning, exRW: except RuntimeWarning as exRW:
warningMessage = '%s' % exRW warningMessage = '%s' % exRW
if warningMessage != '': if warningMessage != '':
...@@ -192,11 +192,11 @@ def analyze_frequency_response(figure, b, a, p, q, grid): ...@@ -192,11 +192,11 @@ def analyze_frequency_response(figure, b, a, p, q, grid):
wd,hd = signal.freqz(b2,a2) wd,hd = signal.freqz(b2,a2)
hd_dB = 20 * log10 (abs(hd)) hd_dB = 20 * log10 (abs(hd))
except ValueError, exVE: except ValueError as exVE:
warningMessage = '%s' % exVE warningMessage = '%s' % exVE
except ZeroDivisionError, exZDE: except ZeroDivisionError as exZDE:
warningMessage = '%s' % exZDE warningMessage = '%s' % exZDE
except RuntimeWarning, exRW: except RuntimeWarning as exRW:
warningMessage = '%s' % exRW warningMessage = '%s' % exRW
......
This diff is collapsed.
...@@ -43,6 +43,8 @@ class Simulator(Simcore): ...@@ -43,6 +43,8 @@ class Simulator(Simcore):
# Declare signals that will be sended to other classes # Declare signals that will be sended to other classes
simulatorUpdatedSignal = pyqtSignal() simulatorUpdatedSignal = pyqtSignal()
simulatorBeginSignal = pyqtSignal()
simulatorEndSignal = pyqtSignal()
...@@ -73,7 +75,7 @@ class Simulator(Simcore): ...@@ -73,7 +75,7 @@ class Simulator(Simcore):
elif selectedPlot == 'Power Spectrum': elif selectedPlot == 'Power Spectrum':
scopePower(self.figSimulator, simulatorWaves, grid) scopePower(self.figSimulator, simulatorWaves, grid)
else: else:
scopeDual(self.figSimulator, simulatorWaves, grid) scopeTime(self.figSimulator, simulatorWaves, grid)
# Change pushbutton state # Change pushbutton state
self.pbUpdateFilter.setDisabled(True) self.pbUpdateFilter.setDisabled(True)
...@@ -84,6 +86,7 @@ class Simulator(Simcore): ...@@ -84,6 +86,7 @@ class Simulator(Simcore):
def execute_simulation(self, b, a, x, def execute_simulation(self, b, a, x,
name, language, name, language,
engine, structure,
busX, busY, busC, busX, busY, busC,
scalingX, scalingC): scalingX, scalingC):
""" Redraws the figure """ Redraws the figure
...@@ -94,16 +97,19 @@ class Simulator(Simcore): ...@@ -94,16 +97,19 @@ class Simulator(Simcore):
warningMessage = '' warningMessage = ''
warnings.simplefilter('error') warnings.simplefilter('error')
try: try:
self.simulatorBeginSignal.emit()
self.yfloat = signal.lfilter(b, a, x) self.yfloat = signal.lfilter(b, a, x)
self.yhdl = self.simfilter(b, a, x, self.yhdl = self.simfilter(b, a, x,
'testfilt', 'vhdl', structure, language,
engine, name,
busX, busY, busC, busX, busY, busC,
scalingX, scalingC) scalingX, scalingC)
except ValueError, exVE: self.simulatorEndSignal.emit()
except ValueError as exVE:
warningMessage = '%s' % exVE warningMessage = '%s' % exVE
except ZeroDivisionError, exZDE: except ZeroDivisionError as exZDE:
warningMessage = '%s' % exZDE warningMessage = '%s' % exZDE
except RuntimeWarning, exRW: except RuntimeWarning as exRW:
warningMessage = '%s' % exRW warningMessage = '%s' % exRW
if warningMessage != '': if warningMessage != '':
...@@ -156,14 +162,14 @@ class Simulator(Simcore): ...@@ -156,14 +162,14 @@ class Simulator(Simcore):
labelSimulatorLanguage = QLabel('HDL Language:') labelSimulatorLanguage = QLabel('HDL Language:')
self.comboSimulatorLanguage = QComboBox() self.comboSimulatorLanguage = QComboBox()
self.comboSimulatorLanguage.addItem("Verilog")
self.comboSimulatorLanguage.addItem("VHDL") self.comboSimulatorLanguage.addItem("VHDL")
self.comboSimulatorLanguage.addItem("Verilog")
self.comboSimulatorLanguage.setEditable(True) self.comboSimulatorLanguage.setEditable(True)
self.comboSimulatorLanguage.lineEdit().setReadOnly(True) self.comboSimulatorLanguage.lineEdit().setReadOnly(True)
self.comboSimulatorLanguage.lineEdit().setAlignment(Qt.AlignRight) self.comboSimulatorLanguage.lineEdit().setAlignment(Qt.AlignRight)
for ii in range(self.comboSimulatorLanguage.count()): for ii in range(self.comboSimulatorLanguage.count()):
self.comboSimulatorLanguage.setItemData(ii, Qt.AlignRight, Qt.TextAlignmentRole) self.comboSimulatorLanguage.setItemData(ii, Qt.AlignRight, Qt.TextAlignmentRole)
self.connect(self.comboSimulatorLanguage, SIGNAL('currentIndexChanged(int)'), self.on_simulator_modified) self.connect(self.comboSimulatorLanguage, SIGNAL('currentIndexChanged(int)'), self.on_language_modified)
labelSimulatorScope = QLabel('Output Scope:') labelSimulatorScope = QLabel('Output Scope:')
self.comboSimulatorScope = QComboBox() self.comboSimulatorScope = QComboBox()
...@@ -240,7 +246,7 @@ class Simulator(Simcore): ...@@ -240,7 +246,7 @@ class Simulator(Simcore):
hboxWorkFolder.addWidget(labelWorkFolder) hboxWorkFolder.addWidget(labelWorkFolder)
hboxWorkFolder.addWidget(self.textWorkFolder) hboxWorkFolder.addWidget(self.textWorkFolder)
hboxWorkFolder.addWidget(self.pbWorkFolder) hboxWorkFolder.addWidget(self.pbWorkFolder)
hboxWorkFolder.setStretch(0,4) hboxWorkFolder.setStretch(0,5)
hboxWorkFolder.setStretch(1,4) hboxWorkFolder.setStretch(1,4)
hboxWorkFolder.setStretch(2,1) hboxWorkFolder.setStretch(2,1)
...@@ -280,4 +286,15 @@ class Simulator(Simcore): ...@@ -280,4 +286,15 @@ class Simulator(Simcore):
self.simulatorUpdatedSignal.emit() self.simulatorUpdatedSignal.emit()
def on_language_modified(self):
# TODO: provisional, check the structure change and force to DF1 Trans
activeLanguage = str(self.comboSimulatorLanguage.currentText())
if activeLanguage == 'VHDL':
self.on_simulator_modified()
else:
QMessageBox.information(self, 'Simulation Language',
'Sorry, but %s is not supported yet!'
% activeLanguage,
QMessageBox.Ok)
self.comboSimulatorLanguage.setCurrentIndex(0)
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment