-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcourses.py
executable file
·68 lines (61 loc) · 3.07 KB
/
courses.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/python3
from pyhtml.html import *
from common import Navigate, Post
from http.cookies import SimpleCookie
import os
if __name__ == "__main__":
cookies = SimpleCookie(os.environ.get('HTTP_COOKIE', ''))
print(Document() << [
Doctype(Html=True),
Html() << [
Head() << [
# Google Analytics
Script(Src="https://www.googletagmanager.com/gtag/js?id=G-FT6E284Y58", Async=True),
Script() << [
"""window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-FT6E284Y58');""",
],
Title("Broccoli"),
Link(Rel="stylesheet", Type="text/css", Href="index.css"),
Script(Src="index.js"),
],
Body() << [
Navigate("whitepaper" in cookies),
Div(Id="main") << [
A(Id="learn"),
Div(Id="learn-box", Class="box") << [
Div(Class="banner") << [
Div(Class="banner-ri") << [
Iframe(Style="width: 100%; aspect-ratio: 16 / 9;", Src="https://www.youtube-nocookie.com/embed/videoseries?si=ZFy0bMNimvsltEu2&list=PLUCgknFT8LMilpLkfwXddes_TS0W9XvO-", Title="YouTube video player", Frameborder="0", Allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share", Referrerpolicy="strict-origin-when-cross-origin", Allowfullscreen=True),
], Div(Class="banner-lt") << [
H2() << ["Introduction to Self Timed Circuits"],
P(Style="margin: 0 0 0 0;") << [
"This course covers the fundamentals of self-timed circuits including timing assumptions and guarantees, failure modes, pipeline structures, data encodings, conditional logic, internal memory, and non-deterministic behavior, hardware description languages for different layers of abstraction, and two design methodologies. It is designed with a bottom up approach, starting with circuitry and working its way up through more abstract representations. Background experience with programming is required, and circuit design is helpful but optional. The course is offered for free with the goal of building local expertise and community in VLSI, Computer Architecture, and Self-Timed Circuits.",
Div(Id="course-links") << [
(A(Class="course-link", Href="https://github.com/broccolimicro/course-self-timed-circuits/tree/summer-2023") << "Summer 2023"),
],
],
],
],
Div(Class="banner") << [
Div(Class="banner-li") << [
Img(Class="feature-img", Src="photo/bcli.png"),
], Div(Class="banner-rt") << [
H2() << [
"Broccoli-CLI ",
],
P(Style="margin: 0 0 1rem 0;") << "bcli is a docker container with a full development environment for self-timed circuits. It includes ACT, OpenROAD, Magic, KLayout, Floret, Loom, Xyce, Gaw, and more.",
H1(Style="margin: 0 0 7rem 0;") << [
A(Href="https://github.com/broccolimicro/bcli") << Img(Class="img-link", Src="logos/github.png"), " ",
A(Href="https://hub.docker.com/r/broccolimicro/broccoli-cli") << Img(Class="img-link", Src="logos/docker.svg"),
],
],
],
],
],
Script() << "startWindow();"
]
]
])