Skip to content

Commit

Permalink
synth
Browse files Browse the repository at this point in the history
-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-
  • Loading branch information
insularity1337 committed Aug 12, 2024
1 parent ffb3cee commit 5cb2c12
Show file tree
Hide file tree
Showing 45 changed files with 12,405 additions and 1 deletion.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
*.vcd
*.vvp
*.csv
39 changes: 39 additions & 0 deletions Makefile
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
191 changes: 190 additions & 1 deletion README.md
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`.

## Схема для синтеза
![](pic/env.svg)

Кодер, декодер и регистры из окружения принадлежат разным доменам питания. Цель синтеза - вставка ячеек для изоляции, преобразования уровня напряжения и сохранения состояния.

### Кодер
<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||&#9746;|&#9745;|
|ON_1v95|&#9746;||&#9745;|
|OFF|&#9745;|&#9745;||

- таблица состояний внутри декодера:
| Название | Состояние `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||&#9746;|&#9745;|
|ON_1v8|&#9746;||&#9745;|
|OFF|&#9745;|&#9745;||

- таблица состояний внутри декодера:
| Название | Состояние `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])
4 changes: 4 additions & 0 deletions pic/dec.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions pic/enc.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions pic/env.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 5cb2c12

Please sign in to comment.