Simulation tools are now a set of classes inherited by simulation action

parent 092e2524
...@@ -31,8 +31,13 @@ from hdlmake.dep_file import DepFile ...@@ -31,8 +31,13 @@ from hdlmake.dep_file import DepFile
#import hdlmake.new_dep_solver as dep_solver #import hdlmake.new_dep_solver as dep_solver
from .action import Action from .action import Action
from hdlmake.tools import (
ToolIVerilog, ToolISim, ToolModelsim,
ToolActiveHDL, ToolRiviera, ToolGHDL)
class GenerateSimulationMakefile(Action): class GenerateSimulationMakefile(Action,
ToolIVerilog, ToolISim, ToolModelsim,
ToolActiveHDL, ToolRiviera, ToolGHDL):
"""This class contains the simulation specific methods""" """This class contains the simulation specific methods"""
def _check_simulation_makefile(self): def _check_simulation_makefile(self):
...@@ -50,8 +55,20 @@ class GenerateSimulationMakefile(Action): ...@@ -50,8 +55,20 @@ class GenerateSimulationMakefile(Action):
self._check_all_fetched_or_quit() self._check_all_fetched_or_quit()
self._check_simulation_makefile() self._check_simulation_makefile()
tool_name = self.get_top_module().manifest_dict["sim_tool"] tool_name = self.get_top_module().manifest_dict["sim_tool"]
tool_module = importlib.import_module("hdlmake.tools.%s.%s" % (tool_name, tool_name))
tool_object = tool_module.ToolControls() if tool_name is "iverilog":
tool_object = ToolIVerilog()
elif tool_name is "isim":
tool_object = ToolISim()
elif tool_name is "modelsim":
tool_object = ToolModelsim()
elif tool_name is "active-hdl":
tool_object = ToolActiveHDL()
elif tool_name is "riviera":
tool_object = ToolRiviera()
elif tool_name is "ghdl":
tool_object = ToolGHDL()
tool_info = tool_object.get_keys() tool_info = tool_object.get_keys()
if sys.platform == 'cygwin': if sys.platform == 'cygwin':
bin_name = tool_info['windows_bin'] bin_name = tool_info['windows_bin']
......
...@@ -41,6 +41,7 @@ class MakefileWriter(object): ...@@ -41,6 +41,7 @@ class MakefileWriter(object):
self._filename = filename self._filename = filename
else: else:
self._filename = "Makefile" self._filename = "Makefile"
super(MakefileWriter, self).__init__()
def __del__(self): def __del__(self):
if self._file: if self._file:
......
from .iverilog import ToolIVerilog
from .isim import ToolISim
from .modelsim import ToolModelsim
from .active_hdl import ToolActiveHDL
from .riviera import ToolRiviera
from .ghdl import ToolGHDL
from .sim_makefile_support import VsimMakefileWriter
...@@ -26,7 +26,10 @@ import string ...@@ -26,7 +26,10 @@ import string
from hdlmake.makefile_writer import MakefileWriter from hdlmake.makefile_writer import MakefileWriter
class ToolControls(MakefileWriter): class ToolActiveHDL(MakefileWriter):
def __init__(self):
super(ToolActiveHDL, self).__init__()
def detect_version(self, path): def detect_version(self, path):
pass pass
......
"""Common functionality shared by multiple tools."""
...@@ -25,7 +25,10 @@ import string ...@@ -25,7 +25,10 @@ import string
from hdlmake.makefile_writer import MakefileWriter from hdlmake.makefile_writer import MakefileWriter
class ToolControls(MakefileWriter): class ToolGHDL(MakefileWriter):
def __init__(self):
super(ToolGHDL, self).__init__()
def detect_version(self, path): def detect_version(self, path):
pass pass
......
...@@ -40,7 +40,10 @@ ISIM_STANDARD_LIBS = ['std', 'ieee', 'ieee_proposed', 'vl', 'synopsys', ...@@ -40,7 +40,10 @@ ISIM_STANDARD_LIBS = ['std', 'ieee', 'ieee_proposed', 'vl', 'synopsys',
'simprims_ver', 'unisims_ver', 'uni9000_ver', 'simprims_ver', 'unisims_ver', 'uni9000_ver',
'unimacro_ver', 'xilinxcorelib_ver', 'secureip'] 'unimacro_ver', 'xilinxcorelib_ver', 'secureip']
class ToolControls(MakefileWriter): class ToolISim(MakefileWriter):
def __init__(self):
super(ToolISim, self).__init__()
def get_keys(self): def get_keys(self):
tool_info = { tool_info = {
...@@ -196,8 +199,9 @@ isim.wdb isim_proj isim_proj.* ...@@ -196,8 +199,9 @@ isim.wdb isim_proj isim_proj.*
#incdir = "-i " #incdir = "-i "
#incdir += " -i ".join(vl.include_dirs) #incdir += " -i ".join(vl.include_dirs)
#incdir += " " #incdir += " "
self.write(' -i ') if vl.include_dirs:
self.write(' '.join(vl.include_dirs) + ' ') self.write(' -i ')
self.write(' '.join(vl.include_dirs) + ' ')
self.writeln(vl.vlog_opt+" $<") self.writeln(vl.vlog_opt+" $<")
self.write("\t\t@mkdir -p $(dir $@)") self.write("\t\t@mkdir -p $(dir $@)")
self.writeln(" && touch $@ \n\n") self.writeln(" && touch $@ \n\n")
......
...@@ -36,8 +36,10 @@ IVERILOG_STANDARD_LIBS = ['std', 'ieee', 'ieee_proposed', 'vl', 'synopsys', ...@@ -36,8 +36,10 @@ IVERILOG_STANDARD_LIBS = ['std', 'ieee', 'ieee_proposed', 'vl', 'synopsys',
'simprims_ver', 'unisims_ver', 'uni9000_ver', 'simprims_ver', 'unisims_ver', 'uni9000_ver',
'unimacro_ver', 'xilinxcorelib_ver', 'secureip'] 'unimacro_ver', 'xilinxcorelib_ver', 'secureip']
class ToolControls(MakefileWriter): class ToolIVerilog(MakefileWriter):
def __init__(self):
super(ToolIVerilog, self).__init__()
def get_keys(self): def get_keys(self):
tool_info = { tool_info = {
......
...@@ -25,16 +25,16 @@ from __future__ import print_function ...@@ -25,16 +25,16 @@ from __future__ import print_function
import xml.dom.minidom import xml.dom.minidom
import os import os
from ..common.sim_makefile_support import VsimMakefileWriter from .sim_makefile_support import VsimMakefileWriter
XmlImpl = xml.dom.minidom.getDOMImplementation() XmlImpl = xml.dom.minidom.getDOMImplementation()
MODELSIM_STANDARD_LIBS = ['ieee', 'std', 'altera_mf'] MODELSIM_STANDARD_LIBS = ['ieee', 'std', 'altera_mf']
class ToolControls(VsimMakefileWriter): class ToolModelsim(VsimMakefileWriter):
def __init__(self): def __init__(self):
super(ToolControls, self).__init__() super(ToolModelsim, self).__init__()
def detect_version(self, path): def detect_version(self, path):
pass pass
...@@ -69,5 +69,5 @@ class ToolControls(VsimMakefileWriter): ...@@ -69,5 +69,5 @@ class ToolControls(VsimMakefileWriter):
self.additional_clean.extend(["./modelsim.ini", "transcript", "*.vcd", "*.wlf"]) self.additional_clean.extend(["./modelsim.ini", "transcript", "*.vcd", "*.wlf"])
self.copy_rules["modelsim.ini"] = os.path.join("$(MODELSIM_INI_PATH)", "modelsim.ini") self.copy_rules["modelsim.ini"] = os.path.join("$(MODELSIM_INI_PATH)", "modelsim.ini")
super(ToolControls, self).generate_simulation_makefile(fileset, top_module) super(ToolModelsim, self).generate_simulation_makefile(fileset, top_module)
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
# #
from __future__ import print_function from __future__ import print_function
from ..common.sim_makefile_support import VsimMakefileWriter from .sim_makefile_support import VsimMakefileWriter
# as of 2014.06, these are the standard libraries # as of 2014.06, these are the standard libraries
# included in an installation # included in an installation
...@@ -60,9 +60,9 @@ RIVIERA_STANDARD_LIBS.extend(RIVIERA_XILINX_VHDL_LIBRARIES) ...@@ -60,9 +60,9 @@ RIVIERA_STANDARD_LIBS.extend(RIVIERA_XILINX_VHDL_LIBRARIES)
RIVIERA_STANDARD_LIBS.extend(RIVIERA_XILINX_VLOG_LIBRARIES) RIVIERA_STANDARD_LIBS.extend(RIVIERA_XILINX_VLOG_LIBRARIES)
class ToolControls(VsimMakefileWriter): class ToolRiviera(VsimMakefileWriter):
def __init__(self): def __init__(self):
super(ToolControls, self).__init__() super(ToolRiviera, self).__init__()
self.vcom_flags.append("-2008") self.vcom_flags.append("-2008")
self.additional_clean.extend(["*.asdb", "*.vcd", ]) self.additional_clean.extend(["*.asdb", "*.vcd", ])
......
...@@ -94,7 +94,7 @@ PWD := $(shell pwd) ...@@ -94,7 +94,7 @@ PWD := $(shell pwd)
self.writeln("VSIM_FLAGS := %s" % (' '.join(self.vsim_flags))) self.writeln("VSIM_FLAGS := %s" % (' '.join(self.vsim_flags)))
self.writeln("VLOG_FLAGS := %s" % (' '.join(self.vlog_flags))) self.writeln("VLOG_FLAGS := %s" % (' '.join(self.vlog_flags)))
self.writeln("VMAP_FLAGS := %s" % (' '.join(self.vmap_flags))) self.writeln("VMAP_FLAGS := %s" % (' '.join(self.vmap_flags)))
self.writeln("INCLUDE_DIRS := +incdir+%s" % ('+'.join(top_module.include_dirs))) #self.writeln("INCLUDE_DIRS := +incdir+%s" % ('+'.join(top_module.include_dirs)))
self.write("VERILOG_SRC := ") self.write("VERILOG_SRC := ")
for vl in fileset.filter(VerilogFile): for vl in fileset.filter(VerilogFile):
......
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