diff --git a/css/custom.css b/css/custom.css index d98379e5023989e707770672ae309addd9b0e20c..f0d641fa6c7e8c39870f6e0cd8d0810b33138424 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 5f5f8b33ea1256c053f7c4a703627e7f84afad6e..9d16550f9f69834d3ae04caff98f79a2d03cbf89 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 bd34107797ea2580ee2512a6f203c353644801c8..60a043e462f2bb2760329ae10cf2b1b79ac17d77 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 41258b7ce7d65d7106355206e2b7ef4c7047c13f..81b50dc1ab9187b98de6361a446e846ab47d7514 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")