---
# System prepended metadata

title: 113-2 SoC Projects

---

## SoC Labs
### [Lab 3](https://hackmd.io/@muscat/rJTIlOaiyl)
* FIR 
### [Lab 4-0](https://hackmd.io/@muscat/HJD7ZHhexg)
* Caravel Simulation
### [Lab 4-1](https://hackmd.io/@muscat/rJZwGM1-el)
* Exeme-fir
### [Lab 4-2](https://hackmd.io/@muscat/rJQfO6TQgl)
* Caravel-fir


## SoC Final project
### [Final Project](https://hackmd.io/mF_6AqAPRBWr9qYD6lHXlw?both)
* Contributions
* Study notes
* NTT address generator

## SoC Questions
### [Week 1](https://hackmd.io/gK8Ai28mTLKT7vPaGTGzIQ) 
* Basic coding style
* Logic Design Basics
### [Week 2](https://hackmd.io/VzXh0GaoTo2uLuqAEl4y8Q)
* axi
* io cache
### [Week 3](https://hackmd.io/lTB7hhJ2QFGihB21g1_Gxg)
* Testbench
* Delay
* Blocking/ Nonblocking
### [Week 4](https://hackmd.io/Col7ov3DRfa5paPB9jKtIA?view) 
* RTL-synthesis consistency
* Construct design
* FSM
* SRAM
* Reset

### [Week 6](https://hackmd.io/37Be8h5gQw6n6qXwm8od0g?both)
* Caravel_hk_gpio_spi_mmio
* caravel_intr_sram_wb_usrprj_firmware
* caravel soc - lab4-0

### [Week 7](https://hackmd.io/NlAK5ROdS2i-ZlxgTwmPuw?both)
* Superscalar

### [Week 8](https://hackmd.io/DbbTEXuVS2CnCNRTJ7oJCQ?both)
* DMA
* Interrupt
* Timer


### [Week 9](https://hackmd.io/9N8llY-tTKGlezyOHlR_Jg?view#Fir-rule-check)
* lab verilog fir : rule check


### [Week 10](https://hackmd.io/UulXs49aRWy1hkuwK63xUQ?both)
* Cache
* Memory
### [Week 11](https://hackmd.io/nRDaElWERueoIBAn026ypQ?both)
* Lab 4-2 SW/HW Codesign – Judge SW or HW is faster 

<!-- ## Summary of this semester
自評分數:
| Lab 3 | Lab 4 | Final project | Weekly questions|Total
| -------- | -------- | -------- |-------- |-------- |
| 24.75/25     | 30/30     | 15/25     |20/20|89.75/100

* Lab 3: 
fir lab 中，我學到最多的是 **pipeline** 和 **buffer** 的概念--利用這兩個概念可讓硬體的使用率達到最大化，進而提升運算效率，不需要等所有步驟都算完才開始下一個，而是讓空閒的硬體接續著工作。在打這個lab的時候，同時也在學計結，更能理解硬體是如何透過這些概念加速。
我給自己這部分的成績是**24.75**，除了demo 分數扣1之外，報告、模擬與程式碼部分，我都有完整完成，並根據助教與教授提出的建議多次進行優化(雖然一開始因為不懂為甚麼要加i/o buffer而停滯了很久)，因此在其餘方面給自己滿分。
* Lab 4: 
由於組員有3位，就分成interface decode, firmware, fir rtl code。我自己是負責fir rtl code的優化，其實我在lab3的cycle 數只有 `tap_num + 6`(就是沒有pipeline+io buffer)，剛好可以藉由此次分工到要完成的部分把沒優化好的部分做好。
另外因為要軟硬體配合收/送資料，所以firmware 部分在改code時，我也在旁邊學到組員是怎麼改的(改-O3、觀察RAW去改hex code、依硬體的邏輯改變送資料的順序等)；而interface decode部分，雖然在4-2並不是我主要負責的部分，但也在4-0, 4-1了解其原理。
我給自己這部分的成績是**30**，因為最後有順利優化到12cyc，並且也在撰寫報告、實作過程中了解整體架構。
* Final project: 
此部分我認為自己在6/17的完成度還不太夠，但我認為在組別頻繁更動的情況下，我還是有做出東西，依據這些給自己的分數如下。
由於初期分工時，我還在處理lab4-2的優化，原本的組別(operator)有些人已經lab4-2 idle，他們能力太強就速速的完成大部分東西，當時詢問過也說目前他們應該不太需要人手了，所以就去了另外一組IOP。我認為在架構了解上，我同時有碰到乘法器、還有address generator，並且還需在短時間內快速補足新組別的進度，此部分給自己5分。
後來在IOP做出的東西是NTT 的address generator 架構(目前以FFT的架構為基底，方便之後合併)，但由於小組討論現階段可以完整呈現的是1 kernal 1 mode(FTT)，所以就還沒將打好的NTT併入github。對於現階段自己能完成的部分給自己10分。
因此此部分我給自己**15分**
* Weekly questions: 
這部分應該比較像課程基本的作業，有時簡答答案即可，而我在回答這些問題時，都有加入**為甚麼這樣作答的詳細過程**。雖然有些題目在老師講解之前有寫錯，但後來都有在講解後更正。因此這部分在所有題目都有完整回答之下，我給自己的成績是**20**
* 覺得自己需要加強的部分
我認為自己在處理很大架構，且需要小組分工的項目，會更容易停滯不前，其實設計應該是make it work -> make it correct -> make it fast，但每次都一直紙上談兵想要直接一步登天到make it fast，導致最後時間不夠連make it work 都很勉強的才做出來，但其實就是要做了才知道應該怎麼改才會更好。 -->
