From 3d711a4db51f61a035d45e7772d40af70414f3c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Lanzend=C3=B6rfer?= <leviathan@libresilicon.com> Date: Tue, 28 May 2024 21:56:51 +0100 Subject: [PATCH] Updating formatting --- css/custom.css | 15 +++++++- markdowns/index/large_content.md | 35 ++++++++++--------- templates/index.tpl | 59 -------------------------------- translate.py | 38 ++++++++++++++++++-- 4 files changed, 68 insertions(+), 79 deletions(-) diff --git a/css/custom.css b/css/custom.css index d98379e..f0d641f 100644 --- a/css/custom.css +++ b/css/custom.css @@ -91,7 +91,20 @@ body { img[alt=pageimg] { - width: 50%; + width: 500px; + border: none; + background: none; +} +img[alt=pageimg2] { + width: 300px; + border: none; + background: none; +} + + +img[alt=pdfimg] { + width: 120px; + margin-top: 20px; border: none; background: none; } diff --git a/markdowns/index/large_content.md b/markdowns/index/large_content.md index 5f5f8b3..9d16550 100644 --- a/markdowns/index/large_content.md +++ b/markdowns/index/large_content.md @@ -34,14 +34,7 @@ In addition to these efforts, we also aim at providing valuable contribution in * **Support the development of EDA tools** by advising on, and contributing to, the development of FOSS IC design software * **Increase the scope and quality of available free silicon IP libraries** by developing our own libraries and contributing to the development of others -## Our roadmap - -The roadmap itself can be found here through the [Roadmap Wiki Link](https://wiki.libresilicon.com/index.php?title=Roadmap#Our_roadmap) - -Here's an overview of what we have done so far. - - -### Standard Cell Library Generator +## Standard Cell Library Generator Standard Cells are the basic building blocks of modern chip-design, they are used to automatically synthesize, place and route digital logic into chips. The synthesis step (e.g. done with yosys) chooses which standard cells should be used to implement the given logic, then the placement step places the cells on a grid, then the routing step connects the standard cells with metal connections for power and signals. At Libresilicon we believe that having many more standard cells will make the overall designs more efficient because the synthesis engine can choose from more cells, therefore we are automating the generation of whole standard cell libraries. @@ -58,14 +51,11 @@ The initial project was the manually designed Pearl River for 1um process: Pearl River was actually produced in the lab of HKUST in 2018 (Hong Kong University of Science and Technology) and transistors were tested successfully: - - - - - - - - +[DIVTable] + + + + In 2023 we developed the automated successor, called DanubeRiver and taped it out successfully in cooperation with Google on GobalFoundries GF180. @@ -86,3 +76,16 @@ This is a fully open source, fully documented (process specifications, DRC rules The tests had started at HKUST, but were interrupted and haven’t been completed yet. Several universities have adopted the process documentation in their lectures to teach CMOS manufacturing, e.g. JKU Linz (Austria). The long term goal is to find alternative chemical recipes, which allow for private hobbyists to make their own chips without having to use very dangerous gasses like Silane, here is a not yet reliably verified alternative recipe for depositing Polysilicon for example: [Eco friendly Polysilicon deposition_(CVD)](https://wiki.libresilicon.com/index.php?title=Eco_friendly_Polysilicon_deposition_(CVD)) + +[DIVTable] +[<br/>_Process steps (low tech)_](files/process/v1/process_lowtech_steps.pdf) +[<br/>_Process design_](files/process/v1/process_design.pdf) +[<br/>_Design rules_](files/process/v1/process_design_rules.pdf) +[<br/>_Process steps (high tech)_](files/process/v1/process_hightech_steps.pdf) +[<br/>_Process testing guide_](files/process/v1/process_testing.pdf) +[<br/>_HKUST implementation_](files/process/v1/HKUST_steps_dry.pdf) + +## Our roadmap + +The roadmap itself can be found here through the [Roadmap Wiki Link](https://wiki.libresilicon.com/index.php?title=Roadmap#Our_roadmap) + diff --git a/templates/index.tpl b/templates/index.tpl index bd34107..60a043e 100644 --- a/templates/index.tpl +++ b/templates/index.tpl @@ -325,65 +325,6 @@ </div> </section> - <section id="theprocess"> - <div class="container"> - <div class="row"> - <div class="col-xs-12 text-center"> - <h2 class="section-heading">The process</h2> - </div> - </div> - <div class="row text-center"> - <div class="col-xs-4 text-center"> - <a rel="noreferrer" href="files/process/v1/process_lowtech_steps.pdf" target="_blank"> - <img width="120px" style="margin-top: 20px;" src="img/LSA-pdf.svg"> - <p><u>Process steps (low tech)</u></p> - </a> - </div> - <div class="col-xs-4 text-center"> - <a rel="noreferrer" href="files/process/v1/process_design.pdf" target="_blank"> - <img width="120px" style="margin-top: 20px;" src="img/LSA-pdf.svg"> - <p><u>Process design</u></p> - </a> - </div> - <div class="col-xs-4 text-center"> - <a rel="noreferrer" href="files/process/v1/process_design_rules.pdf" target="_blank"> - <img width="120px" style="margin-top: 20px;" src="img/LSA-pdf.svg"> - <p><u>Design rules</u></p> - </a> - </div> - </div> - <div class="row text-center"> - <div class="col-xs-4 text-center"> - <a rel="noreferrer" href="files/process/v1/process_hightech_steps.pdf" target="_blank"> - <img width="120px" style="margin-top: 20px;" src="img/LSA-pdf.svg"> - <p><u>Process steps (high tech)</u></p> - </a> - </div> - <div class="col-xs-4 text-center"> - <a rel="noreferrer" href="files/process/v1/process_testing.pdf" target="_blank"> - <img width="120px" style="margin-top: 20px;" src="img/LSA-pdf.svg"> - <p><u>Process testing guide</u></p> - </a> - </div> - <div class="col-xs-4 text-center"> - <a rel="noreferrer" href="files/process/v1/HKUST_steps_dry.pdf" target="_blank"> - <img width="120px" style="margin-top: 20px;" src="img/LSA-pdf.svg"> - <p><u>HKUST implementation</u></p> - </a> - </div> - </div> - <!--<div class="row text-center"> - <div class="col-xs-4 text-center"> - <a href="" target="_blank"> - <img width="120px" style="margin-top: 20px;" src="img/LSA-pdf.svg"> - <p><u></u></p> - </a> - </div>--> - </div> - </section> - -<!--<img width="120px" style="margin-top: 20px;" src="img/LSA-whitepaper_{{lang}}.svg">--> - <section id="contact"> <div class="container"> <div class="row"> diff --git a/translate.py b/translate.py index 41258b7..81b50dc 100755 --- a/translate.py +++ b/translate.py @@ -7,9 +7,34 @@ from jinja2_markdown import MarkdownExtension import json import codecs import markdown +from xml.etree.ElementTree import Element PATH = os.path.dirname(os.path.abspath(__file__)) +class DIVTableProcessor(markdown.blockprocessors.BlockProcessor): + def __init__(self, parser): + self.border = False + def test(self, parent, block): + is_divtable = block.startswith('[DIVTable]') + return is_divtable + def run(self, parent, blocks): + block = blocks.pop(0) + container_div = Element("div") + container_div.attrib = {'class':'container'} + for sb in block.split('\n')[1:]: + el = Element("div") + el.attrib = {'class':'col-xs-4 text-center'} + el.text = markdown.markdown(sb) + container_div.append(el) + parent.append(container_div) + +class DIVTable(markdown.extensions.Extension): + def __init__(self, **kwargs): + super(DIVTable, self).__init__(**kwargs) + + def extendMarkdown(self, md): + md.parser.blockprocessors.register(DIVTableProcessor(md.parser), 'DIVTable', 75) + def get_json_content(name): filename="jsons/"+name+".json" try: @@ -21,9 +46,13 @@ def get_json_content(name): else: return json_content +def custom_function(a): + return a.replace('o', 'ay') + def render_template(jinja_env, name, content): template_filename=name+".tpl" - return jinja_env.get_template(template_filename).render(content) + template = jinja_env.get_template(template_filename) + return template.render(content) def get_md_content(pname, fname): mdroot = os.path.join(PATH, 'markdowns', pname) @@ -31,12 +60,15 @@ def get_md_content(pname, fname): mdfile = os.path.join(mdroot, fname) try: with open(mdfile, 'r') as f: - tempMd=f.read() + tempMd = f.read() f.close() except: return {} else: - return markdown.markdown(tempMd) + md = markdown.Markdown(extensions=[DIVTable()]) + ret = md.convert(tempMd) + md.reset() + return ret def get_news_content(): news_dict = get_json_content("news") -- GitLab