├── .gitignore ├── .markdownlint.json ├── 404.html ├── Gemfile ├── LICENSE ├── LICENSE.template ├── README.md ├── _config.yml ├── _data └── course.yml ├── _includes ├── footer.html ├── ga.html ├── navigation.html ├── next_in_module.html ├── next_module.html ├── page-toc.html ├── prompt.html ├── quiz.html ├── reading.html ├── side_toolbar.html ├── toc.html └── video.html ├── _layouts ├── base.html ├── course_page.html ├── index.html ├── page-toc.html └── page.html ├── _sass ├── _custom.scss ├── bootstrap │ └── scss │ │ ├── _alert.scss │ │ ├── _badge.scss │ │ ├── _breadcrumb.scss │ │ ├── _button-group.scss │ │ ├── _buttons.scss │ │ ├── _card.scss │ │ ├── _carousel.scss │ │ ├── _close.scss │ │ ├── _code.scss │ │ ├── _custom-forms.scss │ │ ├── _dropdown.scss │ │ ├── _forms.scss │ │ ├── _functions.scss │ │ ├── _grid.scss │ │ ├── _images.scss │ │ ├── _input-group.scss │ │ ├── _jumbotron.scss │ │ ├── _list-group.scss │ │ ├── _media.scss │ │ ├── _mixins.scss │ │ ├── _modal.scss │ │ ├── _nav.scss │ │ ├── _navbar.scss │ │ ├── _pagination.scss │ │ ├── _popover.scss │ │ ├── _print.scss │ │ ├── _progress.scss │ │ ├── _reboot.scss │ │ ├── _root.scss │ │ ├── _spinners.scss │ │ ├── _tables.scss │ │ ├── _toasts.scss │ │ ├── _tooltip.scss │ │ ├── _transitions.scss │ │ ├── _type.scss │ │ ├── _utilities.scss │ │ ├── _variables.scss │ │ ├── bootstrap-grid.scss │ │ ├── bootstrap-reboot.scss │ │ ├── bootstrap.scss │ │ ├── mixins │ │ ├── _alert.scss │ │ ├── _background-variant.scss │ │ ├── _badge.scss │ │ ├── _border-radius.scss │ │ ├── _box-shadow.scss │ │ ├── _breakpoints.scss │ │ ├── _buttons.scss │ │ ├── _caret.scss │ │ ├── _clearfix.scss │ │ ├── _deprecate.scss │ │ ├── _float.scss │ │ ├── _forms.scss │ │ ├── _gradients.scss │ │ ├── _grid-framework.scss │ │ ├── _grid.scss │ │ ├── _hover.scss │ │ ├── _image.scss │ │ ├── _list-group.scss │ │ ├── _lists.scss │ │ ├── _nav-divider.scss │ │ ├── _pagination.scss │ │ ├── _reset-text.scss │ │ ├── _resize.scss │ │ ├── _screen-reader.scss │ │ ├── _size.scss │ │ ├── _table-row.scss │ │ ├── _text-emphasis.scss │ │ ├── _text-hide.scss │ │ ├── _text-truncate.scss │ │ ├── _transition.scss │ │ └── _visibility.scss │ │ ├── utilities │ │ ├── _align.scss │ │ ├── _background.scss │ │ ├── _borders.scss │ │ ├── _clearfix.scss │ │ ├── _display.scss │ │ ├── _embed.scss │ │ ├── _flex.scss │ │ ├── _float.scss │ │ ├── _interactions.scss │ │ ├── _overflow.scss │ │ ├── _position.scss │ │ ├── _screenreaders.scss │ │ ├── _shadows.scss │ │ ├── _sizing.scss │ │ ├── _spacing.scss │ │ ├── _stretched-link.scss │ │ ├── _text.scss │ │ └── _visibility.scss │ │ └── vendor │ │ └── _rfs.scss └── p2pu-theme │ ├── _buttons.scss │ ├── _custom.scss │ ├── _fonts.scss │ ├── _footer.scss │ ├── _forum.scss │ ├── _layout.scss │ ├── _menu.scss │ ├── _mixins.scss │ ├── _typography.scss │ ├── _utilities.scss │ ├── _variables.scss │ ├── accordion.scss │ └── base.scss ├── css ├── p2pustrap-custom.scss └── site.css ├── dinocpu.md ├── extra-credit.md ├── fonts ├── Arvo-Bold.ttf ├── Arvo-Regular.ttf ├── Arvo.woff ├── FontAwesome.otf ├── OpenSans-Bold-webfont.eot ├── OpenSans-Bold-webfont.svg ├── OpenSans-Bold-webfont.ttf ├── OpenSans-Bold-webfont.woff ├── OpenSans-Regular-webfont.eot ├── OpenSans-Regular-webfont.svg ├── OpenSans-Regular-webfont.ttf ├── OpenSans-Regular-webfont.woff ├── fontawesome-webfont.eot ├── fontawesome-webfont.svg ├── fontawesome-webfont.ttf └── fontawesome-webfont.woff ├── img ├── 1280px-Haswell_Chip.jpg ├── 800px-coffee_lake_die_(hexa_core).png ├── ampere.png ├── favicon.png ├── favicon │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── mstile-150x150.png │ ├── safari-pinned-tab.svg │ └── site.webmanifest ├── hbm.jpg ├── late_policy.png ├── pcbtrace.png ├── riscv-instr.pdf ├── under-construction.png └── xzibit.jpg ├── improving_chisel.md ├── index.md ├── js ├── gh_link_helper.js ├── init.js ├── jquery.dropotron.min.js ├── jquery.min.js └── modernizr-2.6.2.min.js ├── late policy.ipynb ├── modules ├── Introduction │ └── _posts │ │ ├── 2000-01-01-index.md │ │ ├── 2000-02-01-intro.md │ │ ├── 2000-03-01-security.md │ │ ├── 2000-04-01-technology.md │ │ └── 2000-05-01-evaluation.md ├── Memory Architecture │ └── _posts │ │ ├── 2000-01-10-index.md │ │ ├── 2000-02-01-technology.md │ │ ├── 2000-03-01-caches.md │ │ ├── 2000-04-01-virtual.md │ │ └── 2000-05-01-summary.md ├── Parallel Architecture │ └── _posts │ │ ├── 2000-01-10-index.md │ │ ├── 2000-02-01-performance.md │ │ ├── 2000-03-01-architectures.md │ │ ├── 2000-04-01-memory.md │ │ └── 2000-05-01-accelerators.md ├── Processor Architecture │ └── _posts │ │ ├── 2000-01-10-index.md │ │ ├── 2000-02-01-isa.md │ │ ├── 2000-03-01-single-cycle.md │ │ ├── 2000-04-01-pipelined.md │ │ ├── 2000-05-01-ilp.md │ │ └── 2000-06-01-summary.md └── README.md └── syllabus.md /.gitignore: -------------------------------------------------------------------------------- 1 | _site/* 2 | .idea/ 3 | .sass-cache 4 | Gemfile.lock 5 | .jekyll-metadata 6 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "MD033": {"allowed_elements": ["iframe"]}, 3 | "MD013": false, 4 | "MD026": {"punctuation": ".,;:!"} 5 | } 6 | -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /404.html 3 | layout: base 4 | --- 5 |
6 |

Page not found

7 |

You can use the topnav to access the current content.

8 |
9 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'github-pages' 3 | -------------------------------------------------------------------------------- /LICENSE.template: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Peer 2 Peer University 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![License: CC BY 4.0](https://img.shields.io/badge/License-CC%20BY%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by/4.0/) 2 | 3 | # UC Davis Computer Science ECS 154B 4 | 5 | This repository contains the materials and website source for [Jason Lowe-Power](https://faculty.engineering.ucdavis.edu/lowepower/)'s ECS 154B offerings. 6 | 7 | See for the webpage. 8 | 9 | ## Building the web site for local development 10 | 11 | ```sh 12 | bundle exec jekyll serve 13 | ``` 14 | 15 | If you need to install jekyll, first run the following: 16 | 17 | ```sh 18 | gem install jekyll bundler 19 | ``` 20 | 21 | The website template comes from P2PU. 22 | 23 | ## An open-source project for creating online courses, built by P2PU 24 | 25 | Course-in-a-Box is a free tool for building and publishing online courses — no prior coding experience required. 26 | 27 | To create your own course, simply fork this repository and delete the CNAME file. Detailed documentation is available at [course-in-a-box.p2pu.org](https://course-in-a-box.p2pu.org). 28 | 29 | To make changes to the template itself, a good place to start is the [`_layouts`](/_layouts), [`_includes`](/_includes) and [`css`](/css) directories. These directories contain all the layout and style files used. 30 | 31 | Questions? Ask on P2PU's [Community Forum](https://community.p2pu.org/c/tech/course-in-a-box/78). 32 | 33 | --- 34 | Course-in-a-Box was built by [Peer 2 Peer University](https://www.p2pu.org) using the [P2PU Jekyll course template](https://github.com/p2pu/jekyll-course-template) and shared under an MIT License. 35 | 36 | Course content ("Modules") are shared under a [CC BY-SA 4.0 license](https://creativecommons.org/licenses/by-sa/4.0/). 37 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # basic configuration 2 | markdown: kramdown 3 | permalink: /:categories/:title/ 4 | 5 | # Please leave this code here for us to see how Course in a Box get used 6 | p2pu_ga_tracking_code: UA-55722824-1 7 | 8 | # Some files we need to exclude, so Github can build the site 9 | exclude: [Gemfile, Gemfile.lock, README.md] 10 | 11 | kramdown: 12 | parse_block_html: true 13 | math_engine: mathjax 14 | 15 | defaults: 16 | - 17 | scope: 18 | path: "modules" # an empty string here means all files in the project 19 | values: 20 | layout: "course_page" 21 | 22 | prose: 23 | media: img 24 | ignore: 25 | - /_includes 26 | - /_layouts 27 | - /_sass 28 | - /fonts 29 | - /js 30 | - /css 31 | 32 | # Set some personal styles and logo for your course 33 | # this is a hex value http://www.w3schools.com/tags/ref_colorpicker.asp 34 | jumbotron_color: "#b5b3aa" 35 | jumbotron_image: "img/1280px-Haswell_Chip.jpg" 36 | -------------------------------------------------------------------------------- /_data/course.yml: -------------------------------------------------------------------------------- 1 | title: "ECS 154B: Computer Architecture" 2 | description: "UC Davis Computer Architecture course offered by Jason Lowe-Power Winter Quarter 2021" 3 | modules: ["Introduction", "Processor Architecture", "Memory Architecture", "Parallel Architecture"] 4 | -------------------------------------------------------------------------------- /_includes/footer.html: -------------------------------------------------------------------------------- 1 | 20 | 21 | -------------------------------------------------------------------------------- /_includes/ga.html: -------------------------------------------------------------------------------- 1 | 20 | -------------------------------------------------------------------------------- /_includes/navigation.html: -------------------------------------------------------------------------------- 1 | 2 | 31 | -------------------------------------------------------------------------------- /_includes/next_in_module.html: -------------------------------------------------------------------------------- 1 | {% assign next=null %} 2 | {% assign prev=null %} 3 | {% assign temp=null %} 4 | 5 | {% for p in site.categories[module] reversed %} 6 | {% if p.url == page.url %} 7 | {% if temp %} 8 | {% assign prev=temp %} 9 | {% endif %} 10 | {% elsif temp.url == page.url %} 11 | {% assign next=p %} 12 | {% endif %} 13 | {% assign temp=p %} 14 | {% endfor %} 15 | -------------------------------------------------------------------------------- /_includes/next_module.html: -------------------------------------------------------------------------------- 1 | {% assign next=null %} 2 | {% assign prev=null %} 3 | {% assign temp=null %} 4 | 5 | {% for m in site.data.course.modules %} 6 | {% if m == module and forloop.first != true %} 7 | {% assign p = forloop.index0 | minus:1 %} 8 | {% assign prev = site.data.course.modules[p] %} 9 | {% assign prev_post = site.categories[prev]|reverse|first %} 10 | {% endif %} 11 | {% if m == module and forloop.last != true %} 12 | {% assign n = forloop.index0 | plus:1 %} 13 | {% assign next = site.data.course.modules[n] %} 14 | {% assign next_post = site.categories[next]|reverse|first %} 15 | {% endif %} 16 | {% endfor %} 17 | 18 | -------------------------------------------------------------------------------- /_includes/page-toc.html: -------------------------------------------------------------------------------- 1 | 2 | {% for post in site.posts %} 3 | {% assign name=post.id | split: '/' | last %} 4 | {% if name != include.name %} 5 | {% continue %} 6 | {% endif %} 7 | {% assign temp = post.content | markdownify %} 8 | {% assign purl = post.url | relative_url %} 9 | {% include toc.html html=temp base_url=purl h_max=3 %} 10 | {% endfor %} 11 | -------------------------------------------------------------------------------- /_includes/prompt.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |

Discussion

5 | 6 | {{ include.content }} 7 | 8 | {% if page.discussion %} 9 | 10 |

11 | Discuss in the Discord app! 12 |
13 | Or, on the web 14 |

15 | 16 | {% else %} 17 | 18 |

19 | Discuss in the Discord app! 20 |
21 | Or, on the web 22 |

23 | {% endif %} 24 | 25 |
26 | -------------------------------------------------------------------------------- /_includes/quiz.html: -------------------------------------------------------------------------------- 1 | {% if include.id %} 2 | Use Canvas to complete the quiz 3 | {% else %} 4 | Under construction 5 |

Quiz coming soon!

6 | {% endif %} 7 | -------------------------------------------------------------------------------- /_includes/reading.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | {% if include.optional %} 5 |

*Optional* Reading

6 | {% else %} 7 |

Reading

8 | {% endif %} 9 | 10 |

11 | {% if include.book %} 12 | {{include.book}} 13 | {% else %} 14 | Computer Organization and Design 15 | {% endif %} 16 |

17 |

{{ include.section }}

18 | 19 |
20 | -------------------------------------------------------------------------------- /_includes/side_toolbar.html: -------------------------------------------------------------------------------- 1 | 35 | -------------------------------------------------------------------------------- /_includes/video.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | {% if include.id %} 4 | 5 |

6 | Play on AggieVideo 7 |

8 | {% else %} 9 | Under construction 10 |

Video coming soon!

11 | {% endif %} 12 |
13 | -------------------------------------------------------------------------------- /_layouts/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | {{ site.data.course.title|strip_html }}{% if page.title %} | {{ page.title|strip_html }}{% endif %} 14 | {% if site.data.course.description %}{% endif %} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | {% if page.extra_css %} 38 | {% for css in page.extra_css %} 39 | 40 | {% endfor %} 41 | {% endif %} 42 | 43 | 44 | 45 | 46 | 48 | 49 | {% include navigation.html %} 50 | 51 | {{ content }} 52 | 53 | {% include footer.html %} 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 72 | 73 | 76 | 77 | {% if page.extra_js %} 78 | {% for js in page.extra_js %} 79 | 80 | {% endfor %} 81 | {% endif %} 82 | 83 | 86 | 87 | 88 | {% if site.ga_tracking_code or site.p2pu_ga_tracking_code %} 89 | {% include ga.html %} 90 | {% endif %} 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /_layouts/course_page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: base 3 | --- 4 | {% assign module=page.categories[1] %} 5 |
6 |
7 | {% include side_toolbar.html %} 8 |
9 |
10 |

{{ page.title }}

11 | {{ content }} 12 | {% if page.discussion %} {% include prompt.html content="

General discussion

" %} {% endif %} 13 | {% include next_in_module.html %} 14 | {% if prev or next %}
{% endif %} 15 |
16 |
17 | {% if prev %} 18 |
19 | Previous submodule: 20 |
21 | 23 | {% endif %} 24 |
25 | {% if next %} 26 |
27 |
28 | Next submodule: 29 |
30 | 32 |
33 | {% endif %} 34 |
35 |
36 |
37 |
38 |
39 | -------------------------------------------------------------------------------- /_layouts/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: base 3 | --- 4 | 5 | 6 |
7 |
8 | {% if site.jumbotron_icon %} 9 | {{ site.title }} Icon 10 | {% endif %} 11 |

{{ site.data.course.title }}

12 |

{{site.data.course.description}}

13 | 14 |
15 |
16 | 17 |
18 |
19 |
20 |
21 | {{ content }} 22 |
23 |
24 |
25 |
26 | -------------------------------------------------------------------------------- /_layouts/page-toc.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: base 3 | --- 4 |
5 |
6 | 9 |
10 |
11 |

{{ page.title }}

12 | {{ content }} 13 | {% include next_in_module.html %} 14 | {% if prev or next %}
{% endif %} 15 |
16 |
17 |
18 |
19 | -------------------------------------------------------------------------------- /_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: base 3 | --- 4 |
5 |
6 |
7 |
8 |

{{ page.title }}

9 | {{ content }} 10 |
11 |
12 |
13 |
14 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_alert.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .alert { 6 | position: relative; 7 | padding: $alert-padding-y $alert-padding-x; 8 | margin-bottom: $alert-margin-bottom; 9 | border: $alert-border-width solid transparent; 10 | @include border-radius($alert-border-radius); 11 | } 12 | 13 | // Headings for larger alerts 14 | .alert-heading { 15 | // Specified to prevent conflicts of changing $headings-color 16 | color: inherit; 17 | } 18 | 19 | // Provide class for links that match alerts 20 | .alert-link { 21 | font-weight: $alert-link-font-weight; 22 | } 23 | 24 | 25 | // Dismissible alerts 26 | // 27 | // Expand the right padding and account for the close button's positioning. 28 | 29 | .alert-dismissible { 30 | padding-right: $close-font-size + $alert-padding-x * 2; 31 | 32 | // Adjust close link position 33 | .close { 34 | position: absolute; 35 | top: 0; 36 | right: 0; 37 | padding: $alert-padding-y $alert-padding-x; 38 | color: inherit; 39 | } 40 | } 41 | 42 | 43 | // Alternate styles 44 | // 45 | // Generate contextual modifier classes for colorizing the alert. 46 | 47 | @each $color, $value in $theme-colors { 48 | .alert-#{$color} { 49 | @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level)); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_badge.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | // 3 | // Requires one of the contextual, color modifier classes for `color` and 4 | // `background-color`. 5 | 6 | .badge { 7 | display: inline-block; 8 | padding: $badge-padding-y $badge-padding-x; 9 | @include font-size($badge-font-size); 10 | font-weight: $badge-font-weight; 11 | line-height: 1; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: baseline; 15 | @include border-radius($badge-border-radius); 16 | @include transition($badge-transition); 17 | 18 | @at-root a#{&} { 19 | @include hover-focus() { 20 | text-decoration: none; 21 | } 22 | } 23 | 24 | // Empty badges collapse automatically 25 | &:empty { 26 | display: none; 27 | } 28 | } 29 | 30 | // Quick fix for badges in buttons 31 | .btn .badge { 32 | position: relative; 33 | top: -1px; 34 | } 35 | 36 | // Pill badges 37 | // 38 | // Make them extra rounded with a modifier to replace v3's badges. 39 | 40 | .badge-pill { 41 | padding-right: $badge-pill-padding-x; 42 | padding-left: $badge-pill-padding-x; 43 | @include border-radius($badge-pill-border-radius); 44 | } 45 | 46 | // Colors 47 | // 48 | // Contextual variations (linked badges get darker on :hover). 49 | 50 | @each $color, $value in $theme-colors { 51 | .badge-#{$color} { 52 | @include badge-variant($value); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | display: flex; 3 | flex-wrap: wrap; 4 | padding: $breadcrumb-padding-y $breadcrumb-padding-x; 5 | margin-bottom: $breadcrumb-margin-bottom; 6 | @include font-size($breadcrumb-font-size); 7 | list-style: none; 8 | background-color: $breadcrumb-bg; 9 | @include border-radius($breadcrumb-border-radius); 10 | } 11 | 12 | .breadcrumb-item { 13 | display: flex; 14 | 15 | // The separator between breadcrumbs (by default, a forward-slash: "/") 16 | + .breadcrumb-item { 17 | padding-left: $breadcrumb-item-padding; 18 | 19 | &::before { 20 | display: inline-block; // Suppress underlining of the separator in modern browsers 21 | padding-right: $breadcrumb-item-padding; 22 | color: $breadcrumb-divider-color; 23 | content: escape-svg($breadcrumb-divider); 24 | } 25 | } 26 | 27 | // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built 28 | // without `