-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- Loading branch information
1 parent
ffb3cee
commit 5cb2c12
Showing
45 changed files
with
12,405 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
*.vcd | ||
*.vvp | ||
*.csv |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
RC18855_SRC_DIR = ./src/rc18855 | ||
RC23408_SRC_DIR = ./src/rc23408 | ||
QA_DIR = ./qa | ||
IVERILOG_FLAGS = -g2012 -W all | ||
|
||
rc18855_enc_files := $(RC18855_SRC_DIR)/*.sv | ||
rc23408_enc_files := $(RC23408_SRC_DIR)/*.sv | ||
|
||
rc18855_dec_files := ./src/rc18855/decoder_8b10b.sv | ||
rc23408_dec_files := ./src/rc23408/decoder_8b10b.sv | ||
|
||
enc_tb_files = $(QA_DIR)/enc_8b10b_tb/*.svh $(QA_DIR)/enc_8b10b_tb/*.sv | ||
dec_tb_files = $(QA_DIR)/dec_8b10b_tb/*.svh $(QA_DIR)/dec_8b10b_tb/*.sv | ||
|
||
clean: | ||
rm -rf *.vvp *.vcd ./sim ./synth | ||
|
||
enc_rc18855: | ||
iverilog $(IVERILOG_FLAGS) ./qa/dec_8b10b_tb/pkg_8b10b.svh $(enc_tb_files) $(rc18855_enc_files) -o enc.vvp | ||
|
||
dec_rc18855: | ||
iverilog $(IVERILOG_FLAGS) ./qa/enc_8b10b_tb/*.svh $(dec_tb_files) $(rc18855_dec_files) -o dec.vvp | ||
|
||
enc_rc23408: | ||
iverilog $(IVERILOG_FLAGS) ./qa/dec_8b10b_tb/pkg_8b10b.svh $(enc_tb_files) $(rc23408_enc_files) -o enc.vvp | ||
|
||
dec_rc23408: | ||
iverilog $(IVERILOG_FLAGS) ./qa/enc_8b10b_tb/*.svh $(dec_tb_files) $(rc23408_dec_files) -o dec.vvp | ||
|
||
multilib: clean | ||
mkdir ./synth; cd ./synth; genus -f ../scripts/multilib/synth.tcl; cd ../ | ||
|
||
lp: clean | ||
mkdir ./synth; cd ./synth; genus -f ../scripts/lp/synth.tcl; cd ../ | ||
|
||
sim: clean | ||
mkdir ./sim; cd ./sim; xrun -f ../scripts/multilib/xrun_launch_args.txt -f ../scripts/multilib/xrun_lp_args.txt -f ../scripts/multilib/xrun_files.txt; cd ../ | ||
|
||
.DEFAULT_GOAL := multilib |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,190 @@ | ||
# 8b10b | ||
# 8b10b | ||
## Что внутри | ||
1. Две реализации кодера и декодера 8b/10b по схемам из отчетов IBM RC 18855 и RC 23408; | ||
2. Тестовое окружение для проверки кодеров/декодеров 8b/10b в папке qa с таблицами всех возможных комбинаций; | ||
3. Скрипты для моделирования и синтеза в стеке от cadence'а окружения с кодером и декодером. Что используется: | ||
- Библиотеки от SkyWater 130nm; | ||
- UPF; | ||
- Lowpower flow; | ||
- MMMC flow; | ||
- multidomain/multilib; | ||
- Simple PLE flow. | ||
|
||
### Пояснения | ||
1. Скрипты для двух различных окружений: | ||
1. Несколько бибилотек ячеек различной высоты (multilib); | ||
2. Одна библиотека ячеек (lp). | ||
2. В окружении используются кодер и декодер из RC 23408; | ||
3. В рамках синтеза используются некоторые ячейки промаркированные в бибилиотеках как `dont_use`. | ||
|
||
## Схема для синтеза | ||
 | ||
|
||
Кодер, декодер и регистры из окружения принадлежат разным доменам питания. Цель синтеза - вставка ячеек для изоляции, преобразования уровня напряжения и сохранения состояния. | ||
|
||
### Кодер | ||
<p align="center"> | ||
<img src="pic/enc.svg" width="300"/> | ||
</p> | ||
|
||
Кодер реализован по схеме из RC 23408. Состоит из двух частей: | ||
1. Ядро (комбинационная схема с триггером для хранения текущего running disparity); | ||
3. Обвязка из триггеров. | ||
Подразумевается что вычислительное ядро должно отключаться в целях энергосбережения. | ||
|
||
### Декодер | ||
<p align="center"> | ||
<img src="pic/dec.svg" width="300"/> | ||
</p> | ||
|
||
Декодер реализован по схеме из RC 23408. Состоит из двух частей: | ||
1. Ядро (комбинационная схема и триггер для хранения running disparity); | ||
2. Обвязка из триггеров. | ||
Аналогичено кодеру, ядро декодера должно отключаться в целях энергосбережения. | ||
|
||
## Варианты синтеза | ||
### Общие положения | ||
- В кодере и декодере описаны абстрактные переключатели питания работающие по портам `ENC_PS_CTRL` и `DEC_PS_CTRL` (потому что в библиотеках `sky130_fd_*` нет ячеек реализующих функционал переключателей питания); | ||
- И кодер и декодер разбиты на два домена питания: | ||
- `aon`: входит переключатель питания и обвязка из триггеров; | ||
- `ps`: входит комбинационная логика и триггер хранения running disparity. | ||
- И в кодере и в декодере на границе между `ps` и `aon` доменами описаны рпавила вставки ячеек изоляции на случай отключения питания ядра. Включение ячеек изоляции осуществляется через порты `ENC_ISO` и `DEC_ISO`; | ||
- Для триггеров внутри ядер кодера и декодера описано правило вставки ячейки с сохранением состояния на случай отключения питания ядра. Переход в режим хранения осуществляется по фронтам управляющих сигналов `ENC_RET` и `DEC_RET`; | ||
- Для всех сигналов переходящих из домена в домен описаны правила вставки ячеек преобразования уровня напряжения, т.к. подразумевается что уровни в каждом домене будут отличаться. | ||
|
||
### Синтез в варианте multilib | ||
```bash | ||
cd <папка_с_репозиторием> | ||
make | ||
``` | ||
Иллюстрация сборки проекта с использованием lowpower + UPF + multidomain/multilib. | ||
|
||
Для каждого домена питания используется отдельная бибилотека, т.е. каждый домен питания еще и библтотечный домен: | ||
- окружение: `sky130_fd_sc_hvl` | ||
- подразумевается что это always on домен питания; | ||
- состояния домена питания: | ||
|
||
| Название | Уровень напряжения питания (В) | | ||
|---|---| | ||
| ON_5v0 | 5.0 | | ||
| ON_3v3 | 3.3 | | ||
|
||
- из hvl библиотеки, помимо триггеров, берутся ячейки преобразования уровня напряжения. | ||
|
||
- декодер: `sky130_fd_sc_lp` | ||
- состояния `aon` домена питания: | ||
|
||
| Название | Уровень напряжения питания (В) | | ||
|---|---| | ||
| ON_1v6 | 1.6 | | ||
| ON_1v95 | 1.95 | | ||
|
||
- состояния `ps` домена питания: | ||
|
||
| Название | Уровень напряжения питания (В) | | ||
|---|---| | ||
| ON_1v6 | 1.6 | | ||
| ON_1v95 | 1.95 | | ||
| OFF | OFF | | ||
|
||
- таблица переходов для `ps` домена: | ||
|
||
||ON_1v6|ON_1v95|OFF| | ||
|:---:|:---:|:---:|:---:| | ||
|ON_1v6||☒|☑| | ||
|ON_1v95|☒||☑| | ||
|OFF|☑|☑|| | ||
|
||
- таблица состояний внутри декодера: | ||
| Название | Состояние `aon` | Состояние `ps` | | ||
|-|-|-| | ||
| ON_1v6 | ON_1v6 | ON_1v6 | | ||
| ON_1v95 | ON_1v95 | ON_1v95 | | ||
| ON_1v6_OFF | ON_1v6 | OFF | | ||
| ON_1v95_OFF | ON_1v95 | ON_1vOFF | | ||
|
||
- кодер: `sky130_fd_sc_ls` + `sky130_fd_sc_lp`. | ||
- две библиотеки потому что в ls нет триггеров с сохранением состояния; | ||
- состояния `aon` домена питания: | ||
|
||
| Название | Уровень напряжения питания (В) | | ||
|---|---| | ||
| ON_1v4 | 1.4 | | ||
| ON_1v8 | 1.8 | | ||
|
||
- состояния `ps` домена питания: | ||
|
||
| Название | Уровень напряжения питания (В) | | ||
|---|---| | ||
| ON_1v4 | 1.4 | | ||
| ON_1v8 | 1.8 | | ||
| OFF | OFF | | ||
|
||
- таблица переходов для `ps` домена: | ||
|
||
||ON_1v4|ON_1v8|OFF| | ||
|:---:|:---:|:---:|:---:| | ||
|ON_1v4||☒|☑| | ||
|ON_1v8|☒||☑| | ||
|OFF|☑|☑|| | ||
|
||
- таблица состояний внутри декодера: | ||
| Название | Состояние `aon` | Состояние `ps` | | ||
|-|-|-| | ||
| ON_1v4 | ON_1v4 | ON_1v4 | | ||
| ON_1v8 | ON_1v8 | ON_1v8 | | ||
| ON_1v4_OFF | ON_1v4 | OFF | | ||
| ON_1v8_OFF | ON_1v8 | ON_1vOFF | | ||
|
||
### Синтез в варианте lp | ||
```bash | ||
cd <папка_с_репозиторием> | ||
make lp | ||
``` | ||
Синтез схемы с использованием lowpower + UPF + MMMC + simple PLE. <br> | ||
Основная цель - иллюстрация voltage & ferquency scaling. <br> | ||
У всего окружения два режима работы: | ||
|
||
| Название | Уровень напряжения питания (В) | Частота тактового сигнала (МГц) | Скорость данных (Мбит) | | ||
|---|:---:|:---:|:---:| | ||
| VNOM | 1.6 | 1.25 | 10 | | ||
|VBOOST| 1.95 | 12.5 | 100 | | ||
|
||
В `scripts/lp/mmmc.tcl` описаны все режимы и условия работы.<br> | ||
Состояния доменов питания: | ||
- `aon`: | ||
| Название | Уровень напряжения питания (В) | | ||
|---|:---:| | ||
| VNOM | 1.6 | | ||
| VBOOST | 1.95 | | ||
- `ps`: | ||
| Название | Уровень напряжения питания (В) | | ||
|---|:---:| | ||
| VNOM | 1.6 | | ||
| VBOOST | 1.95 | | ||
| OFF | OFF | | ||
|
||
Таблица состояний внутри кодера и декодера: | ||
|
||
| Название | Состояние `aon` | Состояние `ps` | | ||
|---|:---:|:---:| | ||
| VNOM | VNOM | VNOM | | ||
| VBOOST | VBOOST | VBOOST | | ||
| VNOM_OFF | VNOM | OFF | | ||
| VBOOST_OFF | VBOOST | OFF | | ||
|
||
Таблица состояний всего окружения: | ||
| Название | Состояние домена кодера | Состояние домена окружения | Состояние домена декодера | | ||
|--- |:---: |:---: |:---: | | ||
| OFF_VNOM_OFF | VNOM_OFF | VNOM | VNOM_OFF | | ||
| VNOM_VNOM_OFF | VNOM | VNOM | VNOM_OFF | | ||
| OFF_VNOM_VNOM | VNOM_OFF | VNOM | VNOM | | ||
| VNOM_VNOM_VNOM | VNOM | VNOM | VNOM | | ||
| OFF_VBOOST_OFF | VBOOST_OFF | VBOOST | VBOOST_OFF | | ||
| VBOOST_VBOOST_OFF | VBOOST | VBOOST | VBOOST_OFF | | ||
| OFF_VBOOST_VBOOST | VBOOST_OFF | VBOOST | VBOOST | | ||
| VBOOST_VBOOST_VBOOST | VBOOST | VBOOST | VBOOST | | ||
|
||
## Ссылки | ||
1. [8B/10B Encoding and Decoding for High Speed Applications (RC23408)](https://dominoweb.draco.res.ibm.com/f2df32762a248ae685256f48006b24e6.html) | ||
2. [The ANSI Fibre Channel Transmission Code (RC 18855)](https://www.jedec.org/sites/default/files/docs/JESD204B.pdf]) |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.