Pull to refresh

Comments 8

Честно говоря, хотелось бы узнать

  1. Какие брали библиотеки, как подключали. Есть ведь, к примеру, в сети различные FreePDK с библиотеками селлов. Хочется видеть конкретные ссылки

  2. Как используется топологическая информация при синтезе - грузится LEF abstract, или используется допотопный wireload? А как быть с макро ячейками?

  3. Что получилось на выходе - просто structural verlog, или к примеру можно sdf выписать, а может быть даже timing_reports?

    Тема очень интересная, а бесплатных синтезаторов как бы и нет больше (поправьте, если не прав). К сожалению, у самого пока руки не дошли этот тул попробовать, отсюда и вопросы. Спасибо!

Оххх. К сожалению, на большинство вопросов я не могу дать ответ. Я работаю на уровне разработчика несложных вещей.

Yosys на выходе даёт JSON файл примерно такого вида:

    "DQSBUFM": {
      "attributes": {
        "blackbox": "00000000000000000000000000000001",
        "cells_not_processed": "00000000000000000000000000000001",
        "src": "/cygdrive/d/LATICE/yosys-master/share/ecp5/cells_bb.v:316.1-331.10"
      },
      "parameter_default_values": {
        "DQS_LI_DEL_ADJ": "FACTORYONLY",
        "DQS_LI_DEL_VAL": "00000000000000000000000000000000",
        "DQS_LO_DEL_ADJ": "FACTORYONLY",
        "DQS_LO_DEL_VAL": "00000000000000000000000000000000",
        "GSR": "ENABLED"
      },
      "ports": {
        "DQSI": {
          "direction": "input",
          "bits": [ 2 ]
        },
        "READ1": {
          "direction": "input",
          "bits": [ 3 ]
        },

Кажется, он умеет выдавать не только JSON, но я особо не разбирался. NextPNR берёт его и выдаёт на выход *.config примерно такого вида

.tile R11C19:PLC2
arc: E1_H02E0701 V02S0701
arc: H00R0100 E1_H02W0701
arc: S1_V02S0201 E1_H02W0201
arc: S1_V02S0301 S3_V06N0003
arc: S1_V02S0501 E1_H01W0100
arc: V00B0000 V02N0201
arc: V00T0100 W1_H02E0301
arc: W1_H02W0601 V02N0601
arc: C5 V00T0100
arc: CLK0 G_HPBX0200
arc: D4 V00B0000
arc: D5 H00R0100

И, наконец, утилита ecppack, в моём случае, формирует *.bit и *.svf. А svf я гружу через OpenOCD.

А так- глубоко не разбирался с файлами. Вот с timing reports - там забавно. Это я месяц сидел. Там в логе показывают всё о самой плохой цепи в каждом из тактовых доменов. Гипнотизируя сведения, можно догадаться, в каком файле и почему происходят задержки. Что приятно - все имена читаемые. Вот пример:

Info: Critical path report for clock '$glbnet$clk' (posedge -> posedge):
Info: curr total
Info:  0.5  0.5  Source ethCore0.eth_mac_inst.eth_mac_1g_rgmii_inst.eth_mac_1g_inst.axis_gmii_tx_inst.gmii_tx_er_reg_TRELLIS_FF_Q_DI_LUT4_Z_B_LUT4_B_Z_LUT4_D_Z_CCU2C_S0_S1_LUT4_D_8_SLICE.Q1
Info:  1.6  2.1    Net ethCore0.eth_mac_inst.eth_mac_1g_rgmii_inst.eth_mac_1g_inst.axis_gmii_tx_inst.frame_ptr_reg[7] budget 0.972000 ns (4,18) -> (4,19)
Info:                Sink ethCore0.eth_mac_inst.eth_mac_1g_rgmii_inst.eth_mac_1g_inst.axis_gmii_tx_inst.s_axis_tready_reg_TRELLIS_FF_Q_DI_LUT4_Z_D_LUT4_Z_D_LUT4_B_Z_LUT4_Z_D_LUT4_Z_SLICE.C0
Info:                Defined in:
Info:                  ../rtl/fpga.v:202.3-215.2
Info:                  ../lib/eth/rtl/eth_mac_1g_rgmii_fifo.v:218.1-246.2
Info:                  ../lib/eth/rtl/eth_mac_1g.v:145.1-165.2
Info:                  ../lib/eth/rtl/axis_gmii_tx.v:122.12-122.25
Info:                  ../lib/eth/rtl/eth_mac_1g_rgmii.v:218.1-246.2
Info:                  ../rtl/fpga_core.v:252.1-284.2
Info:  0.2  2.3  Source ethCore0.eth_mac_inst.eth_mac_1g_rgmii_inst.eth_mac_1g_inst.axis_gmii_tx_inst.s_axis_tready_reg_TRELLIS_FF_Q_DI_LUT4_Z_D_LUT4_Z_D_LUT4_B_Z_LUT4_Z_D_LUT4_Z_SLICE.F0
Info:  0.9  3.3    Net ethCore0.eth_mac_inst.eth_mac_1g_rgmii_inst.eth_mac_1g_inst.axis_gmii_tx_inst.s_axis_tready_reg_TRELLIS_FF_Q_DI_LUT4_Z_D_LUT4_Z_D_LUT4_B_Z_LUT4_Z_D[3] budget 0.972000 ns (4,19) -> (5,20)
Info:                Sink ethCore0.eth_mac_inst.eth_mac_1g_rgmii_inst.rgmii_phy_if_inst.rgmii_tx_clk_fall_LUT4_B_Z_PFUMX_Z_C0_LUT4_Z_1_SLICE.C1
Info:                Defined in:
Info:                  /cygdrive/d/LATICE/yosys-master/share/ecp5/cells_map.v:109.23-109.24
...
Info:  0.4  7.6  Setup ethCore0.eth_mac_inst.eth_mac_1g_rgmii_inst.eth_mac_1g_inst.axis_gmii_tx_inst.s_tdata_reg_TRELLIS_FF_Q_3_SLICE.LSR
Info: 2.3 ns logic, 5.3 ns routing

Как видим, есть полный путь в иерархии и точное имя цепи. На этом приятное заканчивается. Устранив проблему, получаем новую цепь. Список проблемных цепей, глубже, чем самая плохая, я получить не смог. И вот я месяц устранял проблему за проблемой, пока не довёл FMax с 64 до 125 МГц у Опенсорсного проекта.

Вот это я могу сказать. А остальное - прошу прощения, не совсем разбираюсь.

Спасибо! Timing reports - уже показатель, что тул не просто так оптимизирует булевы функции, но и немножко смотрит на тайминг. Т.е. к примеру известен чисто математический минимизатор булевых функций - Espresso, и его гипотетически можно припрячь делать синтез, просто результат будет .. математический, т.е. от наших задач далекий. А вот чтобы смотреть еще и на тайминг при синтезе - это уже нужен STA-engine, так что Yosys здорово вырос в моих глазах.


Так, а нетлист (я его выше structural verilog-ом обозвал) точно не выписывается? Это как-бы основной результат синтеза, он должен быть. Расширения могут быть любые, но внутри - верилог.

тул не просто так оптимизирует булевы функции

Там by default простая математика: используется чуть модифицированный abc (используется как AIG оптимизатор, по большей части, да регистры ещё умеет двигать).

чтобы смотреть еще и на тайминг при синтезе - это уже нужен STA-engine

Я немного отстал — не слежу в последнее время за проектом, но yosys на момент написания статьи не умел смотреть ни на задержки, ни на потребление.То, что выше процитировано — это результат PnR — эти умеют смотреть на тайминги, а вот yosys не умеет в techmap (technology mapping) смотреть на тайминги. А еще оно очень плохо умеет работать с cell с более, чем одним выходом (привет, HA и FA, например) — в первую очередь из-за того, что abc не умеет (но в самом проекте уже были альтернативы).

Так, а нетлист (я его выше structural verilog-ом обозвал) точно не выписывается? Это как-бы основной результат синтеза, он должен быть.

Выписывается. Внутри у него свой «язык», в который он умеет читать и VHDL, и Verilog, и SV, и BLIF, и много чего ещё. И писать он тоже умеет во много что. В данной конкретной связке он отдаёт netlist в JSON.

Расширения могут быть любые, но внутри - верилог.

См. выше.

P.S. Yosys умеет читать liberty и, теоретически, для ASIC он может и на тайминги, и на потребление смотреть. Но в статье Lattice FPGA и он такой информации ещё совсем недавно в yosys не умел давать.

Есть библиотека sky130 pdk для производства с открытыми тулами

https://github.com/google/skywater-pdk

Еще готовят 90 нм и 180нм .

Сами открытые тулы включая floorplan, static timing analasys, parasitic extraction , routing разрабатываютя здесь (но все еще в стадии тестирования хотя уже есть успехи в производстве на GLOBAL FOUNDRY 12 nm)

https://github.com/The-OpenROAD-Project

Посмотрел. Ничего особенно не понял. Но судя по имени"Гугль", есть шанс, что рано или поздно пойдёт в народ. Потом когда-нибудь кто-нибудь закажет разработку на этой штуке, тогда и разберёмся :-).

Помню, в комментариях к статье, написанной в начале 2018 года, мне пеняли, что я не принимаю во внимание ПЛИС LATTICE. Причём про них тогда уже многие знали. Должно было пройти три года, чтобы нам свалился реальный заказ на этих ПЛИС. Ещё полгода понадобилось мне, чтобы понять, что об этом вообще имеет смысл писать. Ну, и накопить базу знаний, которые будут интересны другим.

Так что ждём, когда эта штука выстрелит.

Ну это про проектирование микросхем т.е ASIC а не fpga. Грубо говоря вы пишете verilog код скармливаете тулу openroad(где в том числе yosys для синтеза) , он разводит транзисторы создает gds файл чипа и вы можете произвести его на кремневой фабрике. До этого подобные тулы от synosys cadence стоили миллионы долларов, а сейчас активно развивается open source EDA в том числе yosys. Google например активно работает над поддержкой system verilog для yosys и симулятора verilator

https://antmicro.com/blog/2021/07/open-source-systemverilog-tools-in-asic-design/

Sign up to leave a comment.

Articles