GHDL support added.

Output signal is calculated by parsing VCD file
parent 07f49352
This diff is collapsed.
......@@ -407,13 +407,13 @@ class Filter():
warnings.simplefilter('error')
try:
self.b, self.a = self.calculate_filter_coefficients()
except ValueError, exVE:
except ValueError as exVE:
warningMessage = '%s' % exVE
except ZeroDivisionError, exZDE:
except ZeroDivisionError as exZDE:
warningMessage = '%s' % exZDE
except RuntimeWarning, exRW:
except RuntimeWarning as exRW:
warningMessage = '%s' % exRW
except signal.BadCoefficients, exBC:
except signal.BadCoefficients as exBC:
warningMessage = '%s' % exBC
if warningMessage != '':
......@@ -487,12 +487,12 @@ class Filter():
labelFilterStructure = QLabel('Structure:')
self.comboFilterStructure = QComboBox()
self.comboFilterStructure.addItem("Direct Form I Transposed")
self.comboFilterStructure.addItem("Direct Form II Transposed")
self.comboFilterStructure.addItem("Direct Form I")
self.comboFilterStructure.addItem("Direct_Form_I_Transposed")
self.comboFilterStructure.addItem("Direct_Form_II_Transposed")
self.comboFilterStructure.addItem("Direct_Form_I")
self.comboFilterStructure.addItem("Parallel")
self.comboFilterStructure.addItem("Cascade")
self.comboFilterStructure.addItem("Direct Form II")
self.comboFilterStructure.addItem("Direct_Form_II")
self.comboFilterStructure.setEditable(True)
self.comboFilterStructure.lineEdit().setReadOnly(True)
self.comboFilterStructure.lineEdit().setAlignment(Qt.AlignRight)
......@@ -514,7 +514,7 @@ class Filter():
self.comboFilterOverflow.setItemData(ii, Qt.AlignRight, Qt.TextAlignmentRole)
#self.connect(self.comboFilterStructure, SIGNAL('currentIndexChanged(int)'), self.on_parameter_change)
# 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:')
......@@ -1010,10 +1010,11 @@ class Filter():
return vboxMain
def on_structure_change(self):
# TODO: provisional, check the structure change and force to DF1 Trans
activeStructure = str(self.comboFilterStructure.currentText())
if activeStructure == 'Direct Form I Transposed':
if activeStructure == 'Direct_Form_I_Transposed':
self.on_parameter_change()
else:
QMessageBox.information(self, 'Filter Structure',
......@@ -1022,6 +1023,7 @@ class Filter():
QMessageBox.Ok)
self.comboFilterStructure.setCurrentIndex(0)
def on_overflow_change(self):
# TODO: provisional, check the structure change and force to DF1 Trans
activeOverflow = str(self.comboFilterOverflow.currentText())
......
......@@ -45,11 +45,6 @@ import sys, os, random
from PyQt4.QtCore 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(
QMainWindow,
......@@ -62,6 +57,9 @@ class LibreFDATool(
stimulusUpdatedSignal = pyqtSignal()
filterUpdatedSignal = pyqtSignal()
simulatorUpdatedSignal = pyqtSignal()
simulatorBeginSignal = pyqtSignal()
simulatorEndSignal = pyqtSignal()
def __init__(self):
QMainWindow.__init__(self)
......@@ -75,6 +73,8 @@ class LibreFDATool(
self.stimulusUpdatedSignal.connect(self.on_stimulus_updated)
self.filterUpdatedSignal.connect(self.on_filter_updated)
self.simulatorUpdatedSignal.connect(self.on_simulator_updated)
self.simulatorBeginSignal.connect(self.on_simulator_begin)
self.simulatorEndSignal.connect(self.on_simulator_end)
self.runSimulator()
......@@ -245,8 +245,9 @@ class LibreFDATool(
scalingX = 1
scalingC = 1
self.execute_simulation(self.b, self.a,
self.x, str(self.textFilterName.text()), 'vhdl',
self.execute_simulation(self.b, self.a, self.x,
str(self.textFilterName.text()), str(self.comboSimulatorLanguage.currentText()),
str(self.comboSimulatorEngine.currentText()), str(self.comboFilterStructure.currentText()),
busX, busY, busC,
scalingX, scalingC)
......@@ -276,6 +277,16 @@ class LibreFDATool(
# 'This is only a message', QMessageBox.Ok)
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():
app = QApplication(sys.argv)
form = LibreFDATool()
......
......@@ -111,11 +111,11 @@ def analyze_pole_zero(figure, b, a, p, q, grid):
p2 = np.roots(a2)
z2 = np.roots(b2)
except ValueError, exVE:
except ValueError as exVE:
warningMessage = '%s' % exVE
except ZeroDivisionError, exZDE:
except ZeroDivisionError as exZDE:
warningMessage = '%s' % exZDE
except RuntimeWarning, exRW:
except RuntimeWarning as exRW:
warningMessage = '%s' % exRW
if warningMessage != '':
......@@ -192,11 +192,11 @@ def analyze_frequency_response(figure, b, a, p, q, grid):
wd,hd = signal.freqz(b2,a2)
hd_dB = 20 * log10 (abs(hd))
except ValueError, exVE:
except ValueError as exVE:
warningMessage = '%s' % exVE
except ZeroDivisionError, exZDE:
except ZeroDivisionError as exZDE:
warningMessage = '%s' % exZDE
except RuntimeWarning, exRW:
except RuntimeWarning as exRW:
warningMessage = '%s' % exRW
......
This diff is collapsed.
......@@ -43,6 +43,8 @@ class Simulator(Simcore):
# Declare signals that will be sended to other classes
simulatorUpdatedSignal = pyqtSignal()
simulatorBeginSignal = pyqtSignal()
simulatorEndSignal = pyqtSignal()
......@@ -73,7 +75,7 @@ class Simulator(Simcore):
elif selectedPlot == 'Power Spectrum':
scopePower(self.figSimulator, simulatorWaves, grid)
else:
scopeDual(self.figSimulator, simulatorWaves, grid)
scopeTime(self.figSimulator, simulatorWaves, grid)
# Change pushbutton state
self.pbUpdateFilter.setDisabled(True)
......@@ -84,6 +86,7 @@ class Simulator(Simcore):
def execute_simulation(self, b, a, x,
name, language,
engine, structure,
busX, busY, busC,
scalingX, scalingC):
""" Redraws the figure
......@@ -94,16 +97,19 @@ class Simulator(Simcore):
warningMessage = ''
warnings.simplefilter('error')
try:
self.simulatorBeginSignal.emit()
self.yfloat = signal.lfilter(b, a, x)
self.yhdl = self.simfilter(b, a, x,
'testfilt', 'vhdl',
structure, language,
engine, name,
busX, busY, busC,
scalingX, scalingC)
except ValueError, exVE:
self.simulatorEndSignal.emit()
except ValueError as exVE:
warningMessage = '%s' % exVE
except ZeroDivisionError, exZDE:
except ZeroDivisionError as exZDE:
warningMessage = '%s' % exZDE
except RuntimeWarning, exRW:
except RuntimeWarning as exRW:
warningMessage = '%s' % exRW
if warningMessage != '':
......@@ -156,14 +162,14 @@ class Simulator(Simcore):
labelSimulatorLanguage = QLabel('HDL Language:')
self.comboSimulatorLanguage = QComboBox()
self.comboSimulatorLanguage.addItem("Verilog")
self.comboSimulatorLanguage.addItem("VHDL")
self.comboSimulatorLanguage.addItem("Verilog")
self.comboSimulatorLanguage.setEditable(True)
self.comboSimulatorLanguage.lineEdit().setReadOnly(True)
self.comboSimulatorLanguage.lineEdit().setAlignment(Qt.AlignRight)
for ii in range(self.comboSimulatorLanguage.count()):
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:')
self.comboSimulatorScope = QComboBox()
......@@ -240,7 +246,7 @@ class Simulator(Simcore):
hboxWorkFolder.addWidget(labelWorkFolder)
hboxWorkFolder.addWidget(self.textWorkFolder)
hboxWorkFolder.addWidget(self.pbWorkFolder)
hboxWorkFolder.setStretch(0,4)
hboxWorkFolder.setStretch(0,5)
hboxWorkFolder.setStretch(1,4)
hboxWorkFolder.setStretch(2,1)
......@@ -280,4 +286,15 @@ class Simulator(Simcore):
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