OpenCores
URL https://opencores.org/ocsvn/ssbcc/ssbcc/trunk

Subversion Repositories ssbcc

[/] [ssbcc/] [trunk/] [ssbccGenVhdlPkg.py] - Blame information for rev 9

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 sinclairrf
################################################################################
2
#
3
# Copyright 2013, Sinclair R.F., Inc.
4
#
5
################################################################################
6
 
7
import ssbccUtil
8
 
9
def genVhdlPkg(config):
10
  """
11
  Method to generate a VHDL Package file corresponding to the instantiated micro
12
  controller.
13
  """
14
  coreName = config.Get('outCoreName');
15
  packageName = '%s_pkg' % coreName;
16
  packageFileName = '%s.vhd' % packageName;
17
  try:
18
    fp = open(packageFileName,'wt');
19
  except:
20
    raise SSBCCException('Could not open %s' % packageFileName);
21
  fp.write('library ieee;\n');
22
  fp.write('use ieee.std_logic_1164.all;\n');
23
  fp.write('package %s is\n' % packageName);
24
  fp.write('component %s is\n' % coreName);
25
  # If any, write the generics.
26
  if config.parameters:
27
    fp.write('generic (\n');
28
    lines = ['  %s : std_logic_vector(31 downto 0) := x"%08X"' % (p[0],ssbccUtil.IntValue(p[1]),) for p in config.parameters];
29
    for ix in range(len(lines)-1):
30
      lines[ix] += ';'
31
    for l in lines:
32
      fp.write('%s\n' % l);
33
    fp.write(');\n');
34
  # Start the port list, initialize each line with two spaces, and make a list of the lines that are signal declarations.
35
  fp.write('port (\n');
36
  nIOs = len(config.ios);
37
  lines = ['  ' for ix in range(nIOs)];
38
  signals = [i for i in range(nIOs) if config.ios[i][2] != 'comment'];
39
  # Generate the comment lines.
40
  for ix in [i for i in range(nIOs) if i not in signals]:
41
    lines[ix] += '-- %s' % config.ios[ix][0];
42
  # Add the signal name to each signal declaration and the trailing spaces and ':'.
43
  for ix in signals:
44
    lines[ix] += config.ios[ix][0];
45
  maxLen = max([len(lines[ix]) for ix in signals]);
46
  # Add the signal direction to each signal declararation.
47
  for ix in signals:
48
    lines[ix] += ' '*(maxLen-len(lines[ix])) + ' : ';
49
  for ix in [i for i in signals if config.ios[i][2] == 'input']:
50
    lines[ix] += 'in';
51
  for ix in [i for i in signals if config.ios[i][2] == 'output']:
52
    lines[ix] += 'out';
53
  for ix in [i for i in signals if config.ios[i][2] == 'inout']:
54
    lines[ix] += 'inout';
55
  maxLen = max([len(lines[ix]) for ix in signals]);
56
  for ix in signals:
57
    lines[ix] += ' '*(maxLen-len(lines[ix])+1);
58
  # Add the signal type to the signal declarations.
59
  for ix in [i for i in signals if config.ios[i][1] == 1]:
60
    lines[ix] += 'std_logic';
61
  for ix in [i for i in signals if config.ios[i][1] != 1]:
62
    lines[ix] += 'std_logic_vector(%d downto 0)' % (config.ios[ix][1]-1);
63
  # Add the trailing ';' to all but the last signal declaration.
64
  for ix in signals[:-1]:
65
    lines[ix] += ';';
66
  # Write the signal declarations and the associated comments.
67
  for l in lines:
68
    fp.write(l+'\n');
69
  fp.write(');\n');
70
  fp.write('end component %s;\n' % coreName);
71
  fp.write('end package;\n');
72
  fp.close();

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.