Warning: mkdir(): No space left on device in /var/www/tgoop/post.php on line 37

Warning: file_put_contents(aCache/aDaily/post/cpu_design/--): Failed to open stream: No such file or directory in /var/www/tgoop/post.php on line 50
Записки CPU designer'a@cpu_design P.99
CPU_DESIGN Telegram 99
Продолжаем новую рубрику - best practice, по мнению автора канала👍

Сегодня поговорим о способах описания процедурных блоков always_ff. Конструкция проста и понятна: фронт, список чувствительности, опиши сигналы, с которыми хочешь работать.
В always_ff, мы можем указать свойство для сигналов сброса и разрешения - синхронный/асинхронный сигнал, фронт срабатывания.
Как правило, при разработке на языках Verilog/SystemVerilog, хорошим тоном считается под каждый триггер описывать отдельный блок always, за исключением сигналов со схожим назначением, например op_a, op_b можно описать в одном always блоке.

По итогу описание блока always, в среднем, занимает 3-7 строчек. А может как-то можно сократить бездумное написание одних и тех же ключевых слов, описания одних и тех же условий?🛑
Так же подумали сотрудники ETH Zurich и Болонского университета.
У pulpino есть прекрасный Common Cells Repository, где собраны различные типовые блоки. Делители clock'a, clock domain crossing, FIFO, и много другое.
Интересует нас Common register defines for RTL designs aka как описать always_ff с синхронным сбросом и асинхронным сигналом загрузки в одну строку.
Список всех дефайнов смотри в комментариях на git'e.
Почему мне нравится такой подход описания процедурных блоков:
1) единое оформление для описания триггеров — повышение читабельности кода и упрощение рефакторинга
2) соблюдение правила: 1 сигнал, 1 процедурный блок always_ff
3) пример, как можно элегантно описывать многостадийные конвейеры через genvar
4) неявно, но соблюдаешь следующее правило — внутри тела дефайна описываешь вход в FF, выход и не запихиваешь в процедурный блок сложные комбинационные выражение, а описываешь их в других местах, например через assign или always_comb. Такой подход к описанию мне кажется максимально верным. Все как в учебниках, "облачко" комбинационной логики, триггер.
Не уверен, что такой подход нужно использовать всегда и везде, но при построении сложных вычислителей, показалось удобным и наглядным.

Что думаете о таком подходе?🧐
#bestpractice
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🤯4🐳2🌚1🍌1



tgoop.com/cpu_design/99
Create:
Last Update:

Продолжаем новую рубрику - best practice, по мнению автора канала👍

Сегодня поговорим о способах описания процедурных блоков always_ff. Конструкция проста и понятна: фронт, список чувствительности, опиши сигналы, с которыми хочешь работать.
В always_ff, мы можем указать свойство для сигналов сброса и разрешения - синхронный/асинхронный сигнал, фронт срабатывания.
Как правило, при разработке на языках Verilog/SystemVerilog, хорошим тоном считается под каждый триггер описывать отдельный блок always, за исключением сигналов со схожим назначением, например op_a, op_b можно описать в одном always блоке.

По итогу описание блока always, в среднем, занимает 3-7 строчек. А может как-то можно сократить бездумное написание одних и тех же ключевых слов, описания одних и тех же условий?🛑
Так же подумали сотрудники ETH Zurich и Болонского университета.
У pulpino есть прекрасный Common Cells Repository, где собраны различные типовые блоки. Делители clock'a, clock domain crossing, FIFO, и много другое.
Интересует нас Common register defines for RTL designs aka как описать always_ff с синхронным сбросом и асинхронным сигналом загрузки в одну строку.
Список всех дефайнов смотри в комментариях на git'e.
Почему мне нравится такой подход описания процедурных блоков:
1) единое оформление для описания триггеров — повышение читабельности кода и упрощение рефакторинга
2) соблюдение правила: 1 сигнал, 1 процедурный блок always_ff
3) пример, как можно элегантно описывать многостадийные конвейеры через genvar
4) неявно, но соблюдаешь следующее правило — внутри тела дефайна описываешь вход в FF, выход и не запихиваешь в процедурный блок сложные комбинационные выражение, а описываешь их в других местах, например через assign или always_comb. Такой подход к описанию мне кажется максимально верным. Все как в учебниках, "облачко" комбинационной логики, триггер.
Не уверен, что такой подход нужно использовать всегда и везде, но при построении сложных вычислителей, показалось удобным и наглядным.

Что думаете о таком подходе?🧐
#bestpractice

BY Записки CPU designer'a




Share with your friend now:
tgoop.com/cpu_design/99

View MORE
Open in Telegram


Telegram News

Date: |

Telegram users themselves will be able to flag and report potentially false content. It’s easy to create a Telegram channel via desktop app or mobile app (for Android and iOS): Step-by-step tutorial on desktop: Concise Select: Settings – Manage Channel – Administrators – Add administrator. From your list of subscribers, select the correct user. A new window will appear on the screen. Check the rights you’re willing to give to your administrator.
from us


Telegram Записки CPU designer'a
FROM American