December 2nd, 2018

2017

Заметки во время ревью главы про мультиплексоры для российского лабника по Verilog+RTL+FPGA

Сегодня я делал ревью главы про мультиплексоры для российского лабника по Verilog+RTL+FPGA. Во время ревью я заметил, что в главе не хватает некоторых полезных идей, которые есть в других книгах. Поэтому я оставляю куски этих книг здесь, а потом буду на этот пост ссылаться.

1. В главе под ревью показно, как сделать мультиплексор из логических элементов. Но в ней не показано, как сделать любой логический элемент из мультиплексора. В частности любую функцию двух вводов, используя четырехвходной мультиплексор. Это важная идея, которая подводит читателя к устройству LUT в FPGA. Эта идея описана в книжке Harris & Harris (см. скриншоты ниже).

2. Помимо общего случая с lookup table (1) существует популярный элементарный вопрос для собеседований "сделайте такую-то gate из двухвходового мультиплексора и инвертора". Это стоит ввести в вопросы в конце главы (см. ответы в книжке Digital Logic Interview Questions ниже).

3. У читателя главы может сложится впечатление, что все мультиплексоры во всех микросхемах строятся из логических элементов. Это не так - разные виды MUX-ов как правило есть в ASIC libraries в standard cell design, не говоря уже о custom design. Это стоит упомянуть, со ссылкой на книжку CMOS VLSI design by Weste & Harris. На страницах ниже показано как сделать mux из transmission gates, транзисторов и tristate elements. Tristate наверное упоминать не надо, но про компактную реализацию mux для ASIC или custom пару предложений стоит сказать.

4. Важным моментом является использование mux-ов для resource allocation and sharing в арифметических операциях. В книжке Bhasker-а приводится пример экономии целого ALU с помощью перестановки mux-а для управления операндом. Его стоит привести с ссылкой на книжку Bhasker-а. Операции такого рода часто делаются например в схемах для DSP:

5. Пару кусков кода в главе можно улучшить с помощью feature которая называется variable vector part select. Есть куча людей, которые считают, что это черта SystemVerilog, а не Verilog, но на самом деле это черта Verilog-2001, и ее можно спокойно использовать, даже если требование блока использовать только Verilog, и не SystemVerilog. Сейчас поддержка тулами Verilog-2001 практически такая же, как и Verilog-95, поэтому большинство компаний стандартизуются минимум на Verilog-2001 даже для самого консервативного синтезируемого подмножества языка:

Страницы (с повторением текста):
Collapse )