OpenRAM/compiler/datasheet/datasheet.py

94 lines
4.5 KiB
Python
Raw Normal View History

# See LICENSE for licensing information.
#
2024-01-03 23:32:44 +01:00
# Copyright (c) 2016-2024 Regents of the University of California and The Board
2019-06-14 17:43:41 +02:00
# of Regents for the Oklahoma Agricultural and Mechanical College
# (acting for and on behalf of Oklahoma State University)
# All rights reserved.
#
import os
2018-12-06 19:13:28 +01:00
import base64
2022-11-27 22:01:20 +01:00
from openram import OPTS
from .table_gen import *
2018-10-12 01:03:05 +02:00
2019-01-16 04:47:48 +01:00
2018-10-12 01:03:05 +02:00
class datasheet():
"""
Defines the layout,but not the data, of the html datasheet
"""
2019-01-16 04:47:48 +01:00
def __init__(self, identifier):
2018-10-12 01:03:05 +02:00
self.name = identifier
self.html = ""
def generate_html(self):
"""
Generates html tables using flask-table
"""
with open(os.path.abspath(os.environ.get("OPENRAM_HOME")) + '/datasheet/assets/datasheet.css', 'r') as datasheet_css:
2019-01-16 04:47:48 +01:00
# css styling is kept in a seperate file
self.html += datasheet_css.read()
if OPTS.output_datasheet_info:
datasheet_path = OPTS.output_path
else:
2022-07-22 18:52:38 +02:00
datasheet_path = OPTS.openram_temp
with open(datasheet_path + "/datasheet.info") as info:
self.html += '<!--'
for row in info:
self.html += row
# for item in self.description:
# self.html += item + ','
2019-01-16 04:47:48 +01:00
self.html += '-->'
2019-02-07 15:33:39 +01:00
# Add vlsida logo
2018-12-06 19:13:28 +01:00
vlsi_logo = 0
2019-01-16 04:47:48 +01:00
with open(os.path.abspath(os.environ.get("OPENRAM_HOME")) + '/datasheet/assets/vlsi_logo.png', "rb") as image_file:
2018-12-06 19:13:28 +01:00
vlsi_logo = base64.b64encode(image_file.read())
2019-02-07 15:33:39 +01:00
# Add openram logo
2018-12-06 19:13:28 +01:00
openram_logo = 0
with open(os.path.abspath(os.environ.get("OPENRAM_HOME")) + '/datasheet/assets/OpenRAM_logo.png', "rb") as image_file:
2018-12-06 19:13:28 +01:00
openram_logo = base64.b64encode(image_file.read())
#comment table rows which we may want to enable after compile time
comments = ['.db']
self.html += '<a href="https://vlsida.soe.ucsc.edu/"><img src="data:image/png;base64,{0}" alt="VLSIDA"></a><a href ="https://github.com/VLSIDA/OpenRAM"><img src ="data:image/png;base64,{1}" alt = "OpenRAM"></a>'.format(str(vlsi_logo)[2:-1], str(openram_logo)[2:-1])
2018-12-06 19:13:28 +01:00
2019-01-16 04:47:48 +01:00
self.html += '<p style="font-size: 18px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">' + \
self.name + '.html' + '</p>'
self.html += '<p style="font-size: 18px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">Compiled at: ' + self.time + '</p>'
self.html += '<p style="font-size: 18px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">' + \
'DRC errors: ' + str(self.DRC) + '</p>'
self.html += '<p style="font-size: 18px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">' + \
'LVS errors: ' + str(self.LVS) + '</p>'
self.html += '<p style="font-size: 18px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">' + \
'Git commit id: ' + str(self.git_id) + '</p>'
2019-02-07 15:33:39 +01:00
# print port table
2019-01-16 04:47:48 +01:00
self.html += '<p style="font-size: 26px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">Ports and Configuration</p>'
self.html += self.io_table.to_html(comments)
2019-02-07 15:33:39 +01:00
# print operating condidition information
2019-01-16 04:47:48 +01:00
self.html += '<p style="font-size: 26px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">Operating Conditions</p>'
self.html += self.operating_table.to_html(comments)
2019-02-07 15:33:39 +01:00
# check if analytical model is being used
2019-02-07 05:31:22 +01:00
self.html += '<p style="font-size: 26px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">Timing Data</p>'
model = ''
2019-02-22 17:19:54 +01:00
if self.ANALYTICAL_MODEL == 'True':
2019-02-22 15:46:28 +01:00
model = "analytical model: results may not be precise"
else:
model = "spice characterizer"
2019-02-07 15:33:39 +01:00
# display timing data
self.html += '<p style="font-size: 26px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">Using '+model+'</p>'
self.html += self.timing_table.to_html(comments)
2019-02-07 15:33:39 +01:00
# display power data
2019-02-07 05:31:22 +01:00
self.html += '<p style="font-size: 26px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">Power Data</p>'
self.html += self.power_table.to_html(comments)
2019-02-07 15:33:39 +01:00
# display corner information
self.html += '<p style="font-size: 26px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">Characterization Corners</p>'
self.html += self.corners_table.to_html(comments)
2019-02-07 15:33:39 +01:00
# display deliverables table
2019-01-16 04:47:48 +01:00
self.html += '<p style="font-size: 26px;font-family: Trebuchet MS, Arial, Helvetica, sans-serif;">Deliverables</p>'
2019-03-07 06:12:21 +01:00
self.dlv_table.sort()
self.html += self.dlv_table.to_html(comments)