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

Subversion Repositories tcp_socket

[/] [tcp_socket/] [trunk/] [chips2/] [chips/] [compiler/] [compiler.py] - Rev 2

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

#!/usr/bin/env python
"""A C to Verilog compiler"""
 
__author__ = "Jon Dawson"
__copyright__ = "Copyright (C) 2013, Jonathan P Dawson"
__version__ = "0.1"
 
import sys
import os
 
from chips.compiler.parser import Parser
from chips.compiler.exceptions import C2CHIPError
from chips.compiler.optimizer import parallelise
from chips.compiler.optimizer import cleanup_functions
from chips.compiler.optimizer import cleanup_registers
from chips.compiler.tokens import Tokens
from chips.compiler.verilog_speed import generate_CHIP as generate_CHIP_speed
from chips.compiler.verilog_area import generate_CHIP as generate_CHIP_area
 
def comp(input_file, options=[]):
 
  reuse = "no_reuse" not in options
  initialize_memory = "no_initialize_memory" not in options
 
  try:
      if "speed" not in options:
 
          #Optimize for area
          parser = Parser(input_file, reuse, initialize_memory)
          process = parser.parse_process()
          name = process.main.name
          instructions = process.generate()
          instructions = cleanup_functions(instructions)
          instructions, registers = cleanup_registers(instructions, parser.allocator.all_registers)
          output_file = name + ".v"
          output_file = open(output_file, "w")
          inputs, outputs = generate_CHIP_area(
                  input_file, 
                  name, 
                  instructions, 
                  output_file, 
                  registers,
                  parser.allocator.memory_size_2, 
                  parser.allocator.memory_size_4, 
                  initialize_memory, 
                  parser.allocator.memory_content_2,
                  parser.allocator.memory_content_4)
          output_file.close()
 
      else:
 
          #Optimize for speed
          parser = Parser(input_file, reuse, initialize_memory)
          process = parser.parse_process()
          name = process.main.name
          instructions = process.generate()
          instructions = cleanup_functions(instructions)
          instructions, registers = cleanup_registers(instructions, parser.allocator.all_registers)
          if "no_concurrent" in sys.argv:
            frames = [[i] for i in instructions]
          else:
            frames = parallelise(instructions)
          output_file = name + ".v"
          output_file = open(output_file, "w")
          inputs, outputs = generate_CHIP_speed(
                  input_file, 
                  name, 
                  frames, 
                  output_file, 
                  registers,
                  parser.allocator.memory_size_2, 
                  parser.allocator.memory_size_4, 
                  initialize_memory, 
                  parser.allocator.memory_content_2,
                  parser.allocator.memory_content_4)
          output_file.close()
 
  except C2CHIPError as err:
      print "Error in file:", err.filename, "at line:", err.lineno
      print err.message
      sys.exit(-1)
 
 
  return name, inputs, outputs, ""
 

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

powered by: WebSVN 2.1.0

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