Pull to refresh

Comments 12

Почти неактуально. Современные средства синтеза цепей для FPGA и ASIC сами выполняют необходимые оптимизации. В подавляющем большинстве случаев до уровня примитивов опускаться не нужно, достаточно на высокоуровневом языке (Verilog, VHDL) описать логику — оно само синтезирует и положит на кристалл. =)

Но понимать, как оно синтезирует и почему, категорически рекомендуется.
Да, чтобы не быть голословным, вот пример на Verilog (если я правильно понимаю, то преобразование — инверсия бит и плюс 1).

module bin2tcv
#(
  parameter WIDTH = 3
)
(
  input  wire [WIDTH-1:0] x,
  output wire [WIDTH-1:0] y
);

  assign y = (~x) + 1;

endmodule


Вот такую фигню насинтезировал Quartus II для ПЛИС Cyclone IV (поскольку макроячейки ПЛИС содержат достаточно сложные примитивы, оно сразу использует двухвходовые XOR и OR).
ох, как же это до боли знакомо — это ж из курса электроники и схемотехники! :)
А мы это на цифровой электронике и микропроцессорной технике (ЦМПТ) год назад учили. Да, ностальгия. Логический уровень представления схемы.
Где-то в далеком 1993 году мы это не просто учили, а еще и собирали на таких жутких учебных стендах с рисуночками элементов, гнездами и кучей проводов. А сдвинув 3 таких стола и нарастив провода, даже удалось собрать 4-битный сумматор.
когда столкнулся в первый раз — было непонятно значем?,

но потом, в голове разложилось по полкам и в срезе:
>Но что же все-таки лежит в основе самой микросхемы? Как создать простейшее цифровое устройство с требуемой выходной функцией?

даже если не будет много «быстрых» комментариев — рекомендую расширить тему с помощью еще хотя бы еще пары статей в этом направлении…

планирую написать еще статью о синтезе последовательностных устройств
UFO just landed and posted this here
Меня пол года в институте мучили, заставляя вот так, на бумажке синтезировать комбинационные и последовательные схемы (хотя мы их назвали конечные автоматы). А самая жесть, это были задачи разработать схему на бумажке без компьютера, что нибудь вроде цифрового делителя с плавающей запятой.
Так же были жуткие лабораторные, в которых надо было в железе, из простейших логических схем и триггеров, соединяя их проводами, сделать синтезированный тобой умножитель (к счастью без плавающей запятой). Кстати, микросхемы часто попадались полугорелые, а провода постоянно отваливались. И чтобы получить зачет, надо было продемонстрировать преподавателю, что собранный тобой клок проводов и микросхем, действительно без ошибок выполняет заданные математические операции.

Зато, когда мы прошли все эти ужасы, нас допустили к работе с современными САПР-ами, Verilog, VHDL, дали работать железом Altera FPGA. Вот тут стало действительно интересно. А зачем нас мучали бумажным синтезом, я не понимаю. Достаточно было рассказать краткую теорию чтобы мы поняли основы, и сразу перейти к современным методам.
Помню, я в рамках дипломной работы делал генератор кода Хэмминга на FPGA. Он представляет из себя нетривиальную комбинационную схему. В качестве САПР использовал Altera MAX+PLUS 2. Так вот, попытки переложить задачи синтеза логики на САПР привели к медленным реализациям, которые не укладывались в тайминги и жрали много скудных ресурсов тогдашних FPGA. Пришлось оптимизировать логику вручную. В результате удалось уменьшить число уровней логики, т.е. повысить быстродействие, а также уменьшить количество задействованных LUT.

Современные САПР, по моим впечатлениям, синтезируют логику лучше. Несмотря на это, всегда полезно задумываться над тем, как заданная логическая схема будет реализовываться на применяемой логической базе. В случае FPGA это LUT с определенным числом входов. Зачастую можно добиться существенной экономии ресурсов и повышения быстродействия путем не логической оптимизации, а путем реорганизации схемы, изменения ее архитектуры, так что логический оптимизатор САПР в итоге придет к более эффективному решению.
UFO just landed and posted this here
Sign up to leave a comment.

Articles