Upgrade to Pro — share decks privately, control downloads, hide ads and more …

История автоматических вычислителей: современна...

История автоматических вычислителей: современная индустрия производства вычислителей

Лекция курса "Языки и методы программирования"
История автоматических вычислителей: современная индустрия производства вычислителей
- Фотолитография
- Старые игроки: Bell Labs, IBM, General Electric, Texas Instruments
- Новые игроки: Intel, AMD, ASML, Applied Materials, TSMC, ...
- Цепочка технологий: проектирование, производство
- Проектирование логики
- Языки описания аппаратного обеспечения (Hardware definition language — HDL)
- Комбинационная логика
- Синтез: Yosys
- Симуляция и верификация: Icarus Verilog
- Значения сигналов по времени: GTKWave, ISim
- Последовательностная логика (sequential logic — секвенциальная логика)
- Генератор тактовых колебаний высокой частоты
- Микроархитектура
- Простые однотактовые процессоры, процессоры с внеочередным выполнением команд
- «Цифровая схемотехника и архитектура компьютера», Сара Харрис, Дэвид Харрис
- Отладка: ПЛИС
- EDA: Electronic design automation: программные пакеты — инструменты проектирования электроники
- Цепочка технологий: проектирование, подготовка к производству, производство
- Проектирование
- Подготовка к производству
- Пакеты EDA
- Icarus Verilog
- Yosys
- nextpnr
- OSS CAD Suite
- Tabby CAD Datasheet
- ПЛИС
- Коммерческие монстры: Cadence Design Systems, Mentor Graphics, Synopsys
- Разделение труда
- Игроки — интеллектуальная собственность
- Бесфабричные полупроводниковые компании
- Игроки ИС — ядра общего назначения
- Производство
- ASML, Applied Materials
- Фабрики, контрактные фабрики: в мире, в России
- DIY
- Заключение

25 мая 2023

Anton

May 25, 2023
Tweet

More Decks by Anton

Other Decks in Education

Transcript

  1. Итак • На чем остановились • Коротко история середина 20-го

    века — настоящее время • Дискретные транзисторы • Интегральные схемы — фотолитография
  2. Фотолитография • Рисование по трафарету: транзисторы, дорожки, сопротивления • Специальные

    примеси распыляются на кремниевую пластину по заданной трафаретом (маской) геометрической схеме, образуя участки проводимости p-типа и n-типа. • Геометрия рисунка определена таким образом, что состыкованные участки разного типа проводимости составляют транзисторы
  3. Старые игроки • Bell Labs (до того, как сошла со

    сцены, успела создать Си и Unix) • IBM • General Electric • Texas Instruments
  4. Новые игроки • Intel («закон» Мура), AMD • ASML •

    Applied Materials • TSMC • ARM • Qualcomm • Samsung • и т. п.
  5. Цепочка технологий • Проектирование: логика, верификация, отладка (интеллектуальный труд инженера

    с применением специального ПО) • Производство: цифровой проект — цепочка программных инструментов — производство серии (кроме еще более специального ПО, вовлечение ресурсов фабрики)
  6. Языки описания аппаратного обеспечения • Verilog/SystemVerilog, VHDL • Текст описывает

    логическую структуру аппаратного вычислительного устройства (дизайн) • Внешне похоже на язык программирования • Но финальный результат — не исполняемый файл для запуска на процессоре общего назначения, а «чертежи» для изготовления нового аппаратного чипа на фабрике • Комбинационная логика, последовательностная логика, инструкции для симуляции и верификации дизайна
  7. module basic_boolean( input a, input b, output not_a, output not_b,

    output a_and_b, output a_or_b, output a_nand_b); assign not_a = ~a; // NOT assign not_b = ~b; // NOT assign a_and_b = a & b; // AND assign a_or_b = a | b; // OR assign a_nand_b = ~(a & b); // NAND endmodule
  8. Модули • Базовый архитектурный строительный блок • Внешне: нечто среднее

    между подпрограммой, классом в ООП и блоком div в HTML • По существу: обособленная группа логических элементов
  9. • Каждый модуль имеет входы и выходы (прямоугольник с ножками)

    • Внешняя связь между модулями: выходы модуля-1 отправляются на вход модуля-2 • Связь между вложенными модулями: входы внешнего модуля отправляются на вход внутреннего модуля, выходы внутреннего модуля отправляются на выход внешнего модуля • Финальная микросхема — модуль верхнего уровня, входы и выходы подключены к устройствам внешнего мира (ножки микросхемы)
  10. Комбинационная логика • (combinational logic) • Значения выходов определяются значениями

    входов • Значения всех входов вычисляются одновременно — порядок записи выражений не имеет значения • Схема: логические элементы AND, OR, NOT или более сложные комбинации XOR, NAND или еще более сложные комбинации • В основе: цепочки связанных транзисторов
  11. module basic_boolean( input a, input b, output not_a, output not_b,

    output a_and_b, output a_or_b, output a_nand_b); assign not_a = ~a; // NOT assign not_b = ~b; // NOT assign a_and_b = a & b; // AND assign a_or_b = a | b; // OR assign a_nand_b = ~(a & b); // NAND endmodule
  12. Синтез: Yosys github.com/YosysHQ/yosys yosyshq.net/yosys/about.html fr.wikipedia.org/wiki/Yosys • Сборки в Линуксе: есть

    в репозиториях дистрибутивов (в Ubuntu точно) • Документация yosyshq.readthedocs.io/projects/yosys/en/latest/ yosys.readthedocs.io/_/downloads/en/latest/pdf/
  13. basic-boolean.ys read_verilog basic-boolean.v hierarchy -check -top basic_boolean proc; opt; fsm;

    opt; memory; opt techmap; opt clean write_verilog basic-boolean-synth.v show -format pdf -prefix basic-boolean show -format png -prefix basic-boolean show -format svg -prefix basic-boolean
  14. • $ ls basic-boolean.v basic-boolean.ys • $ yosys basic-boolean.ys [...]

    • $ ls basic-boolean.dot basic-boolean.pdf basic-boolean.png basic-boolean.svg basic-boolean-synth.v basic-boolean.v basic-boolean.ys
  15. Icarus Verilog: симуляция и верификация en.wikipedia.org/wiki/Icarus_Verilog iverilog.icarus.com [оффсайт не открывается]

    github.com/steveicarus/iverilog • Сборки под Windows bleyer.org/icarus/ • В Линуксе: есть в репозиториях дистрибутивов (в Ubuntu точно) • Документация steveicarus.github.io/iverilog/
  16. Симуляция и верификация • Часть конструкций языка предназначены для описания

    логической схемы устройства — она в конечном итоге превращается в аппаратуру, • это синтезируемое подмножество языка • Другая часть конструкций предназначена для отладки, симуляции и верификации (тестирования) дизайна на этапе разработки на компьютере разработчика, • это несинтезируемое подмножество языка — оно игнорируются при создании аппаратуры (в рамках процедуры синтеза можно рассматривать их как комментарии)
  17. module basic_boolean_test1(); reg a, b; wire not_a, not_b, a_and_b, a_or_b,

    a_nand_b; basic_boolean bb_impl(a, b, not_a, not_b, a_and_b, a_or_b, a_nand_b); [...] endmodule
  18. a = 0; b = 0; #1; $display("a=%d, b=%d: not_a=%d,

    not_b=%d, a_and_b=%d, a_or_b=%d, a_nand_b=%d", a, b, not_a, not_b, a_and_b, a_or_b, a_nand_b);
  19. module basic_boolean_test1(); reg a, b; wire not_a, not_b, a_and_b, a_or_b,

    a_nand_b; basic_boolean bb_impl(a, b, not_a, not_b, a_and_b, a_or_b, a_nand_b); initial begin $display("*** basic_boolean_test1 ***"); a = 0; b = 0; #1; $display("a=%d, b=%d: not_a=%d, not_b=%d, a_and_b=%d, a_or_b=%d, a_nand_b=%d", a, b, not_a, not_b, a_and_b, a_or_b, a_nand_b); a = 1; b = 0; #1; $display("a=%d, b=%d: not_a=%d, not_b=%d, a_and_b=%d, a_or_b=%d, a_nand_b=%d", a, b, not_a, not_b, a_and_b, a_or_b, a_nand_b); a = 0; b = 1; #1; $display("a=%d, b=%d: not_a=%d, not_b=%d, a_and_b=%d, a_or_b=%d, a_nand_b=%d", a, b, not_a, not_b, a_and_b, a_or_b, a_nand_b); a = 1; b = 1; #1; $display("a=%d, b=%d: not_a=%d, not_b=%d, a_and_b=%d, a_or_b=%d, a_nand_b=%d", a, b, not_a, not_b, a_and_b, a_or_b, a_nand_b); end endmodule
  20. • $ iverilog basic-boolean.v -s basic_boolean_test1 • $ ./a.out ***

    basic_boolean_test1 *** a=0, b=0: not_a=1, not_b=1, a_and_b=0, a_or_b=0, a_nand_b=1 a=1, b=0: not_a=0, not_b=1, a_and_b=0, a_or_b=1, a_nand_b=1 a=0, b=1: not_a=1, not_b=0, a_and_b=0, a_or_b=1, a_nand_b=1 a=1, b=1: not_a=0, not_b=0, a_and_b=1, a_or_b=1, a_nand_b=0
  21. Значения сигналов по времени • По горизонтали — временная шкала

    • По вертикали — значение каждого из сигналов (0 или 1) в каждый момент времени • Можно посмотреть всю историю изменения значений выбранного сигнала в любой момент времени • Todo: вариант с графиком сигналов — построить в GTKWave • (на скрине - ISim)
  22. a = 0; b = 0; #1; if (not_a ===

    1); else $error("a=0, b=0: not_a fail");
  23. module basic_boolean_test2(); reg a, b; wire not_a, not_b, a_and_b, a_or_b,

    a_nand_b; basic_boolean bb_impl(a, b, not_a, not_b, a_and_b, a_or_b, a_nand_b); initial begin $display("*** basic_boolean_test2 ***"); a = 0; b = 0; #1; $display("a=%d, b=%d: not_a=%d, not_b=%d, a_and_b=%d, a_or_b=%d, a_nand_b=%d", a, b, not_a, not_b, a_and_b, a_or_b, a_nand_b); if (not_a === 1); else $error("a=0, b=0: not_a fail"); if (not_b === 1); else $error("a=0, b=0: not_a fail"); if (a_and_b === 0); else $error("a=0, b=0: a_and_b fail"); if (a_or_b === 0); else $error("a=0, b=0: a_or_b fail"); if (a_nand_b === 1); else $error("a=0, b=0: a_nand_b fail"); [...] end endmodule
  24. a = 0; b = 0; #1; $display("a=%d, b=%d: not_a=%d,

    not_b=%d, a_and_b=%d, a_or_b=%d, a_nand_b=%d", a, b, not_a, not_b, a_and_b, a_or_b, a_nand_b); if (not_a === 1); else $error("a=0, b=0: not_a fail"); if (not_b === 1); else $error("a=0, b=0: not_b fail"); if (a_and_b === 0); else $error("a=0, b=0: a_and_b fail"); if (a_or_b === 0); else $error("a=0, b=0: a_or_b fail"); if (a_nand_b === 1); else $error("a=0, b=0: a_nand_b fail"); a = 1; b = 0; #1; $display("a=%d, b=%d: not_a=%d, not_b=%d, a_and_b=%d, a_or_b=%d, a_nand_b=%d", a, b, not_a, not_b, a_and_b, a_or_b, a_nand_b); if (not_a === 0); else $error("a=1, b=0: not_a fail"); if (not_b === 1); else $error("a=1, b=0: not_b fail"); if (a_and_b === 0); else $error("a=1, b=0: a_and_b fail"); if (a_or_b === 1); else $error("a=1, b=0: a_or_b fail"); if (a_nand_b === 1); else $error("a=1, b=0: a_nand_b fail");
  25. a = 0; b = 1; #1 $display("a=%d, b=%d: not_a=%d,

    not_b=%d, a_and_b=%d, a_or_b=%d, a_nand_b=%d", a, b, not_a, not_b, a_and_b, a_or_b, a_nand_b); if (not_a === 1); else $error("a=0, b=1: not_a fail"); if (not_b === 0); else $error("a=0, b=1: not_b fail"); if (a_and_b === 0); else $error("a=0, b=1: a_and_b fail"); if (a_or_b === 1); else $error("a=0, b=1: a_or_b fail"); if (a_nand_b === 1); else $error("a=0, b=1: a_nand_b fail"); a = 1; b = 1; #1 $display("a=%d, b=%d: not_a=%d, not_b=%d, a_and_b=%d, a_or_b=%d, a_nand_b=%d", a, b, not_a, not_b, a_and_b, a_or_b, a_nand_b); if (not_a === 0); else $error("a=1, b=1: not_a fail"); if (not_b === 0); else $error("a=1, b=1: not_b fail"); if (a_and_b === 1); else $error("a=1, b=1: a_and_b fail"); if (a_or_b === 1); else $error("a=1, b=1: a_or_b fail"); if (a_nand_b === 0); else $error("a=1, b=1: a_nand_b fail");
  26. • $ iverilog basic-boolean.v -s basic_boolean_test2 • $ ./a.out ***

    basic_boolean_test2 *** a=0, b=0: not_a=1, not_b=1, a_and_b=0, a_or_b=0, a_nand_b=1 a=1, b=0: not_a=0, not_b=1, a_and_b=0, a_or_b=1, a_nand_b=1 a=0, b=1: not_a=1, not_b=0, a_and_b=0, a_or_b=1, a_nand_b=1 a=1, b=1: not_a=0, not_b=0, a_and_b=1, a_or_b=1, a_nand_b=0
  27. module basic_boolean( input a, input b, output not_a, output not_b,

    output a_and_b, output a_or_b, output a_nand_b); assign not_a = a; // NOT assign not_b = ~b; // NOT assign a_and_b = a | b; // AND assign a_or_b = a ^ b; // OR assign a_nand_b = (a & b); // NAND endmodule Поломаем реализацию
  28. • $ iverilog basic-boolean.v -s basic_boolean_test2 • $ ./a.out ***

    basic_boolean_test2 *** a=0, b=0: not_a=0, not_b=1, a_and_b=0, a_or_b=0, a_nand_b=0 a=0, b=0: not_a fail a=0, b=0: a_nand_b fail a=1, b=0: not_a=1, not_b=1, a_and_b=1, a_or_b=1, a_nand_b=0 a=1, b=0: not_a fail a=1, b=0: a_and_b fail a=1, b=0: a_nand_b fail a=0, b=1: not_a=0, not_b=0, a_and_b=1, a_or_b=1, a_nand_b=0 a=0, b=1: not_a fail a=0, b=1: a_and_b fail a=0, b=1: a_nand_b fail a=1, b=1: not_a=1, not_b=0, a_and_b=1, a_or_b=0, a_nand_b=1 a=1, b=1: not_a fail a=1, b=1: a_or_b fail a=1, b=1: a_nand_b fail
  29. • $ iverilog basic-add.v -s basic_add_test -o basic_add_test • $

    ./basic_add_test a=0, b=0: a+b=0 a=1, b=0: a+b=1 a=0, b=1: a+b=1 a=1, b=1: a+b=2
  30. basic-add-no-XOR.ys read_verilog basic-add.v read_verilog -lib basic-cells.v hierarchy -check -top basic_add

    proc; opt; fsm; opt; memory; opt techmap; opt dfflibmap -liberty basic-cells-no-XOR.lib abc -liberty basic-cells-no-XOR.lib clean write_verilog out-basic-add-no-XOR/basic-add-no-XOR-synth.v show -format pdf -prefix out-basic-add-no-XOR/basic-add-no-XOR show -format png -prefix out-basic-add-no-XOR/basic-add-no-XOR show -format svg -prefix out-basic-add-no-XOR/basic-add-no-XOR
  31. basic-cells-no-XOR.lib library(demo) { cell(NOT) { area: 3; pin(A) { direction:

    input; } pin(Y) { direction: output; function: "A'"; } } cell(AND) { area: 4; pin(A) { direction: input; } pin(B) { direction: input; } pin(Y) { direction: output; function: "(A*B)"; } } cell(OR) { area: 4; pin(A) { direction: input; } pin(B) { direction: input; } pin(Y) { direction: output; function: "(A+B)"; } } }
  32. basic-cells.v module NOT(A, Y); input A; output Y; assign Y

    = ~A; endmodule module AND(A, B, Y); input A, B; output Y; assign Y = (A & B); endmodule module OR(A, B, Y); input A, B; output Y; assign Y = (A | B); endmodule module XOR(A, B, Y); input A, B; output Y; assign Y = (A ^ B); endmodule
  33. module basic_add_4bit( input [0:3] a, input [0:3] b, output [0:4]

    a_plus_b); assign a_plus_b = a + b; endmodule
  34. • $ iverilog basic-add.v -s basic_add_4bit_test -o basic_add_4bit_test • $

    ./basic_add_4bit_test a= 0, b= 0: a+b= 0 a= 1, b= 3: a+b= 4 a=11, b= 5: a+b=16
  35. module basic_add_13bit( input [0:12] a, input [0:12] b, output [0:13]

    a_plus_b); assign a_plus_b = a + b; endmodule
  36. module basic_add_13bit_test(); reg [0:12] a, b; wire [0:13] sum; basic_add_13bit

    impl(a, b, sum); // макс вход: 2^13=8162 // макс выход: 2^14=16384 initial begin a = 0; b = 0; #1; $display("a=%d, b=%d: a+b=%d", a, b, sum); if (sum === 0); else $error("a=%d, b=%d: fail: expected:%d, got:%d", a, b, 0, sum); a = 11; b = 5; #1; $display("a=%d, b=%d: a+b=%d", a, b, sum); if (sum === 16); else $error("a=%d, b=%d: fail: expected:%d, got:%d", a, b, 16, sum); a = 42; b = 26; #1; $display("a=%d, b=%d: a+b=%d", a, b, sum); if (sum === 68); else $error("a=%d, b=%d: fail: expected:%d, got:%d", a, b, 68, sum); a = 7024; b = 5207; #1; $display("a=%d, b=%d: a+b=%d", a, b, sum); if (sum === 12231); else $error("a=%d, b=%d: fail: expected:%d, got:%d", a, b, 12231, sum); end endmodule
  37. • $ iverilog basic-add.v -s basic_add_13bit_test -o basic_add_13bit_test • $

    ./basic_add_13bit_test a= 0, b= 0: a+b= 0 a= 11, b= 5: a+b= 16 a= 42, b= 26: a+b= 68 a=7024, b=5207: a+b=12231
  38. module basic_add_128bit_test(); reg [0:127] a, b; wire [0:128] sum; basic_add_128bit

    impl(a, b, sum); // макс вход: 2^128=340282366920938463463374607431768211456 // макс выход: 2^129=680564733841876926926749214863536422912 initial begin a = 37000; b = 63001; #1; $display("a=%d, b=%d: a+b=%d", a, b, sum); if (sum === 100001); else $error("a=%d, b=%d: fail: expected:%d, got:%d", a, b, 100001, sum); a = 7050000300002222222200000000021; b = 4020000600007777777700000000093; #1; $display("a=%d, b=%d: a+b=%d", a, b, sum); if (sum === 11070000900009999999900000000114); else $error("a=%d, b=%d: fail: expected:%d, got:%d", a, b, 11070000900009999999900000000114, sum); a = 13569492000000023456; b = 46100000003438405322; #1; $display("a=%d, b=%d: a+b=%d", a, b, sum); if (sum === 59669492003438428778); else $error("a=%d, b=%d: fail: expected:%d, got:%d", a, b, 59669492003438428778, sum); end endmodule
  39. • $ iverilog basic-add.v -s basic_add_128bit_test -o basic_add_128bit_test • $

    ./basic_add_128bit_test a= 42, b= 26: a+b= 68 a= 7024, b= 5207: a+b= 12231 a= 37000, b= 63001: a+b= 100001 a= 7050000300002222222200000000021, b= 4020000600007777777700000000093: a+b= 11070000900009999999900000000114 a= 13569492000000023456, b= 46100000003438405322: a+b= 59669492003438428778
  40. Последовательностная логика • (sequential logic — секвенциальная логика) • Комбинационная

    логика + память + тактовый сигнал • Значения выходов модуля определяются значениями входов, а так же текущими значениями внутренних регистров памяти • Последовательное «выполнение» операций: блокирующее присвоение внутри блоков always внутри одного такта (vs неблокирующее присвоение комбинационной логики), переход между состояниями по тактовому сигналу
  41. • Память (регистры) — защелки и D-триггеры • Тактовый сигнал

    — clock (аппаратный генератор, подключается как внешнее устройство к модулю верхнего уровня) • Можно делать машины состояний (стейт- машины)
  42. Кстати • Генератор тактовых колебаний высокой частоты в современной электронике

    — кристалл кварца • Это механические колебания • История — начало 20-го века, тоже радио, модуляция несущего сигнала звуком • Использовали на передающих станциях для генерации периодического несущего сигнала (синусоиды) высокой частоты высокого качества • Oscillating crystals — осциллирующие кристаллы (не путать с осциллирующими кристаллами Лосева) • До этого генераторы несущей синусоиды работали на основе вращения моторов
  43. module traffic_light( input clk, output [1:0] out_state); // enumerate state

    constants parameter state_green = 2'b00; parameter state_yellow1 = 2'b01; parameter state_red = 2'b10; parameter state_yellow2 = 2'b11; reg [1:0] state = state_green, next_state; state <= next_state; assign out_state = state; [...] endmodule
  44. module traffic_light( [...] always @(*) begin // next state would

    not change by default next_state = state; case (state) state_green: begin // move to the next state next_state = state_yellow1; end state_yellow1: begin // move to the next state next_state = state_red; end [...] endcase end [...] endmodule
  45. module traffic_light( [...] always @(*) begin // next state would

    not change by default next_state = state; case (state) [...] state_red: begin // move to the next state next_state = state_yellow2; end state_yellow2: begin // move to the next state next_state = state_green; end endcase end [...] endmodule
  46. module traffic_light_test(); reg clk; wire [1:0] out_state; traffic_light impl(clk, out_state);

    // enumerate state constants parameter state_green = 2'b00; parameter state_yellow1 = 2'b01; parameter state_red = 2'b10; parameter state_yellow2 = 2'b11; [...] endmodule
  47. module traffic_light_test(); [...] initial begin $display("*** traffic_light_test ***"); // #1

    (#N) - задать паузу между "выполнением" двух инструкций (N - длительность паузы) // начальное значение clk должно быть 0, out_state - тоже 0 (state_green) $display("#1 current state=%d", out_state); if (out_state === state_green); else $error("initial state fail: expected:%d, got:%d", state_green, out_state); // смена состояния на фронте clk 0->1 #1; clk=1; #1; $display("#2 current state=%d", out_state); if (out_state === state_yellow1); else $error("next state fail: expected:%d, got:%d", state_yellow1, out_state); // на фронте 1->0 (negedge) состояние поменяться пока не должно clk=0; #1; $display("#3 current state=%d", out_state); if (out_state === state_yellow1); else $error("next state fail: expected:%d, got:%d", state_yellow1, out_state); [...] end endmodule
  48. module traffic_light_test(); [...] initial begin $display("*** traffic_light_test ***"); [...] clk=1;

    #1; $display("#4 current state=%d", out_state); if (out_state === state_red); else $error("next state fail: expected:%d, got:%d", state_red, out_state); clk=0; #1; clk=1; #1; $display("#5 current state=%d", out_state); if (out_state === state_yellow2); else $error("next state fail: expected:%d, got:%d", state_yellow2, out_state); clk=0; #1; clk=1; #1; $display("#6 current state=%d", out_state); if (out_state === state_green); else $error("next state fail: expected:%d, got:%d", state_green, out_state); end endmodule
  49. • $ iverilog traffic-light.v -s traffic_light_test -o traffic_light • $

    ./traffic_light *** traffic_light_test *** #1 current state=0 #2 current state=1 #3 current state=1 #4 current state=2 #5 current state=3 #6 current state=0
  50. Итого • Некоторые самые простые операции можно реализовать через комбинацию

    логических элементов (сложение, любая логическая функция) — в этом случае достаточно комбинационной логики • Если операция выполняется за несколько шагов, требуется последовательностная логика • Стейт-машины — последовательностная логика • Процессоры общего назначения и специализированные вычислительные блоки — машины состояний (стейт- машины)
  51. Микроархитектура • Простые однотактовые процессоры, процессоры с конвейером — рабочий

    вариант, но не хайтек • Хайтек в области логического дизайна вычислителей — процессоры с внеочередным выполнением команд (out of order execution)
  52. • «На границе между вводным и продвинутым курсом микроархитектуры CPU

    принято ставить внеочередное выполнение инструкций (out-of-order execution), именно оно отделяет мальчика от мужа. Эта фича впервые появилась еще в 1960-е годы в суперкомпьютерах CDC 6600 и IBM 360/91, но проникла в персоналки с PentiumPro только в 1996 году и в Apple iPhone в 2012 году.» Алгоритм Томасуло как фактор импортозамещения российских процессоров habr.com/ru/post/655911/ • «OoO has replaced RISC as the dominant architecture for CPUs, and it did so in 1995, and ever since then, the terminology "RISC" is obsolete. The only thing you care about when looking at chips is whether it's an in-order design or an out-of- order design.» The RISC Deprogrammer blog.erratasec.com/2022/10/the-risc-deprogrammer.html
  53. Отладка: ПЛИС • Программируемые логические интегральные схемы (FPGA — Field

    programmable gate array) • Специальные микросхемы с перенастраиваемой аппаратной логикой (т. н. вентили могут «превращаться» в аппаратные логические гейты И, ИЛИ, НЕ, D-триггер и т. п.) • Полноценная аппаратная реализация дизайнов на HDL — заливаются в виде прошивки, плата начинает вести себя, как аппаратный чип (не симуляция)
  54. • Для специализированной задачи может быть быстрее, чем программируемый процессор

    общего назначения • Но медленнее, чем специализированная схема, потребляют больше энергии, чип ПЛИС в общем случае может быть дороже чипа ASIC и т. п. • Для экспериментальных дизайнов малой серии и штучных экземпляров достаточно взять нужное количество готовых ПЛИС • А для выпуска специализированной микросхемы нужна достаточно большая серия • Не только отладка — можно использовать как компромиссный компонент для малых партий устройств
  55. Проектирование • Логика (HDL) • Симуляция и верификация логики (специальные

    конструкции HDL, внешние инструменты — Python и т. п.) • Отладка (ПЛИС)
  56. Подготовка к производству • Цепочка программных инструментов • Заточены под

    конкретного производителя и его техпроцесс • Цифровой проект — на входе • Синтез (в т.ч. выбор базовых логических блоков, из которых будет состоять дизайн — для разных технологий производства он будет отличаться) • Геометрия размещения графа элементов (place-and-route) • Всевозможные тесты и симуляции: попадание в ограничения, потребление энергии, трассировка элементов, прохождение сигнала на целевой тактовой частоте и т. п.
  57. Пакеты EDA • EDA — Electronic design automation • Специализированные

    программные инструменты, задействованные в процессе разработки электронных устройств • (САПР для разработки электроники) • Может быть небольшая программа или библиотека для решения частной задачи или интегрированный программный пакет, включающий инструменты разработки на всех стадиях • Представляет собой отдельный сегмент рынка ПО — вы можете не разрабатывать аппаратный чип, но можете разработать пакет ПО, который автоматизирует или улучшит автоматизацию того или иного процесса на одной из стадий разработки аппаратного чипа
  58. • На этапе проектирования логики есть как коммерческие дорогостоящие решения,

    так и инструменты с открытым исходным кодом — на этой стадии разработку можно вести, имея в распоряжении свободное время и одну «силу ума» • Чем ближе к стадии производства, тем меньше свободных инструментов, выход на этот этап может потребовать привлечения специальных ресурсов
  59. Icarus Verilog • Открытый код, свободная лицензия • Симуляция и

    верификация • Один из сценариев — в связке с GTKWave (графическое отображение прямоугольных сигналов)
  60. Yosys • Открытый код, свободная лицензия • Синтез — первая

    стадия подготовки к производству • Дизайн на языке HDL конвертируется в сеть связанных базовых логических блоков (Register transfer level — RTL) • Один и тот же дизайн HDL можно воспроизвести на базе разных наборов базовых блоков • Набор базовых блоков подбирается под конкретный техпроцесс, т. е. зависит от целевого производтсва • ABC — библиотека алгоритмов для синтеза, используется внутри
  61. nextpnr • Открытый код, свободная лицензия • Реализация алгоритмов «place

    and route» — геометрические размещение связанных логических блоков и связей между ними на площади чипа • Путь от логического представления уровня RTL к физическому воплощению в аппаратуре • Вместе с Yosys (и некоторым количеством других вспомогательных утилит) представляет полностью открытый тулчейн для создания прошивки для некоторых ПЛИС (но не ASIC)
  62. OSS CAD Suite github.com/YosysHQ/oss-cad-suite-build • Пакет инструментов с открытым исходным

    кодом в одном дистрибутиве • Разработчики Yosys (YosysHQ) • Симуляция, отладка и т. п. • Синтез и прошивка для ПЛИС • Yosys+nextpnr: an Open Source Framework from Verilog to Bitstream for Commercial FPGAs arxiv.org/pdf/1903.10407.pdf
  63. Tabby CAD Datasheet www.yosyshq.com/tabby-cad-datasheet • Коммерческая версия OSS CAD Suite

    с дополнительными проприетарными модулями от тех же разработчиков • На странице упоминается ASIC, но между делом осторожно
  64. ПЛИС • Altera (Intel) ISE Webpack • Xilinx Quartus •

    Todo: еще Китайцы недавно что-то выпустили, была пара проектов в России • Интегрированные среды • Есть бесплатные версии с ограничением по размеру (количеству вентилей) платы ПЛИС • Редактор кода Verilog, симулятор, синтез под платы производителя, прошивка плат из среды
  65. Коммерческие монстры • Cadence Design Systems en.wikipedia.org/wiki/Cadence_Design_Systems ru.wikipedia.org/wiki/Cadence_Design_Systems • Mentor

    Graphics en.wikipedia.org/wiki/Siemens_EDA ru.wikipedia.org/wiki/Mentor_Graphics • Synopsys en.wikipedia.org/wiki/Synopsys ru.wikipedia.org/wiki/Synopsys
  66. • Отдельные пакеты и интегрированные программные продукты для всех стадий

    разработки от проектирования до фабрики • При разработке ASIC, судя по всему, без вариантов (но это не точно) • (100500 денег на каждый чих)
  67. Разделение труда • Вариант-1: всё внутри одной компании (Intel, AMD,

    Samsung?) • Вариант-2: лицензировании архитектур и модулей у фаблесс-компании (покупают и разрабатывают не только вычислительные ядра), разработка собственных модулей, фабрика на контракте, собственный продукт • Вариант-3: смешанные сценарии (игроки с собственными заводами все равно могут принимать заказы на производство, а какие-то свои заказы размещать или лицензировать на стороне)
  68. Интеллектуальная собственность • Архитектура — набор команд • Вычислительные ядра

    • Дополнительные модули: шины данных, вспомогательные вычислительные блоки, сеть, графический процессор, нейронный процессор, прочие специализированные вычисления • Система на кристалле (комбинация модулей в рамках интегрированного устройства) — готовый продукт • Вычислитель общего назначения vs специализированные чипы
  69. Варианты модулей • Вычислительное ядро общего назначения • Графический процессор

    • Сеть • Шина данных • Нейронный процессор • Ускоритель графовых вычислений • Цифровой сигнальный процессор (DSP) • ПЛИС (как чип специального назначения) • Майнеры • Прочие специализированные схемы — ASIC
  70. Бесфабричные полупроводниковые компании • Fabless (фаблесс) • Компании, ведущие разработку

    электронных устройств, при этом не имеющие собственных фабрик для их производства • Разрабатывают и продают интеллектуальную собственность — логический дизайны электронных устройств • Покупают и разрабатывают собственные модули, заказывают серийные чипы на фабрике, продают готовые чипы под собственным брендом
  71. Вычислительное ядро • Микроконтроллеры (low-end): микроволновки, RTOS • Средняя производительность

    (mid-end): роутеры, Linux • Топовые чипы (high-end): смартфоны, Linux, iOs, внеочередное выполнение команд • Архитектура: x86, ARM, MIPS, RISC-V
  72. Игроки ИС — ядра общего назначения • Фаблесс или собственное

    производство • Архитектуры: Intel (x86/x86_64), AMD (x86/x86_64), ARM, MIPS, RISC-V, Эльбрус • Реализации: Intel, AMD, ARM, MIPS, Qualcomm, Apple, STM, Microchip, Байкал, Эльбрус, Yadro
  73. • Todo: Привести несколько игроков отдельно подробно — что делают

    сами, что покупают, что заказывают, что продают • Intel, AMD: свои разработки, свои заводы, но что-то заказывают на стороне • Samsung: свои разработки, свои заводы есть, но производят в основном память, другие модули — могут на контракте • ARM: продают архитектуру, реализации ядер, заводов нет • Qualcomm: разрабатывают SoC на базе ядер ARM, заказывают на фабрике, продают чипы (?) для топовых смартфонов • Apple (некоторое время назад): покупали реализацию (?) чипов у ARM/Qualcomm (?), графику — у Imagination Technologies, производство — TSMC (?) • Apple (сейчас): покупают архитектуру ARM, реализация своя, графика — своя, производство заказывают у TSMC (??) • Nvidia: графика, нейронные процессоры — разрабатывают, производство заказывают TSMC • Байкал: ядра MIPS, ARM, прочие модули и их связка — собственная разработка, производство — TSMC (?)
  74. Таким образом • Совсем не обязательно иметь цель и ресурсы

    на производство серии аппаратных чипов, чтобы войти участником на рынок разработки электроники • Инженеры из мира разработки ПО могут вполне разработать и отладить аппаратный модуль на уровне логического описания и представить его на рынок в виде интеллектуального продукта
  75. Таким образом • Конкуренция в области разработки чипов общего назначения

    — на текущий момент удел крупнейших монополистов • Но есть множество других частных вариантов • Главный критерий полезности — вычисления, производимые аппаратным модулем, должны быть востребованы на достаточно большом количестве устройств
  76. Производство • Вовлечение ресурсов фабрики • ??? • Фотолитографическая пластина

    ASML • Фотолитография на пластине • Нарезка пластины на отдельные микросхемы • Тестирование • Размещение микросхемы в корпусе • ???
  77. • Общее количество стадий производства — порядка тысячи • Фотолитография

    — примерно 30 стадий • Кроме фотолитографии и ASML множество других технологий со своими держателями патентов
  78. ASML en.wikipedia.org/wiki/ASML_Holding ru.wikipedia.org/wiki/ASML • Голландия (Нидерланды) • Литографическое оборудования для

    микроэлектронной промышленности (маски для фотолитографии) • 67% мирового рынка (2007-й год) • Капитализация $350 млрд (осень 2021)
  79. Applied Materials en.wikipedia.org/wiki/Applied_Materials ru.wikipedia.org/wiki/Applied_Materials • США • атомно-слоевое осаждение (ALD),

    • химическое осаждение из газовой фазы (CVD), • вакуумное напыление (PVD), • быструю термическую обработку (RTP), • химико-механическую планаризацию (CMP), • травление, • ионная имплантация и контроль пластин • и т. п.
  80. ASIC • ASIC — application-specific intergarated circuit • Интегральная схема

    специального назначения • Аппаратный чип, реализующий логику заказчика • Производитель — фабрика • Обычно — контрактное производство • Todo: Минимальная партия • Todo: Объем вложений
  81. Фабрики • Игроки с собственными продуктами и фабриками: Intel, AMD,

    Samsung, Texas Instruments, Huawei • Контрактные фабрики • Черту провести сложно, т. к. могут друг у друг лицензировать интеллектуальные модули, покупать готовые модули, размещать заказы на чужих фабриках, принимать сторонние заказы на собственных и т. п.
  82. TSMC • Todo: история Тайваня коротко, текущий статус, отношения с

    Китаем • Доля рынка • Техпроцесс — топовый • заводы заминированы давно • - в штате есть сотрудник, который за это отвечает • - зданий некоторое количество раскидано в разных местах • Клиенты — Apple, Nvidia, Xilinx и вообще все • собственники — разные страны
  83. Samsung • Корея • Свои продукты, свои заводы • -

    и на стороне заказывают • - у себя - по большей части память • todo
  84. Texas Instruments • Не топовые, но интересные чипы для своих

    сегментов • Контракты на производство • todo
  85. UMC • Тайвань и США • - военные, космос •

    - техпроцессы попроще, но специфические • - например, выставляют особую толщину некоторых слоев • todo
  86. В Китае • https://t.me/chinaposter/2229 (todo: фактчек) • > Похоже, что

    китайская компания Huawei оформила патент (https://twitter.com/leemakiyama/status/1605202457281589251) на технологию фотолитографии в сверхжестком ультрафиолете (EUV). • > 4. ASML продает эти системы производителям процессоров — тайваньской TSMC, корейской Samsung и американской Intel. По требованию США голландская ASML не продает (https://www.bloomberg.com/news) системы фотолитографии EUV Китаю. То есть ASML является инструментом геополитики и технологического доминирования Запада. • > 6. Если Huawei действительно запатентовала собственную технологию фотолитографии EUV, это: 1) подрывает монополию ASML и в целом Запада на производство таких систем, 2) разрушает технологический санкционный режим против Китая в сфере микропроцессорного производства и 3) позволяет Китаю совершить гигантский прорыв в сфере производства наиболее передовых микропроцессоров.
  87. В России • Зеленоград • Ангстрем • Микрон • Старая

    линия AMD • Лоу-энд, мид-энд (не факт, но можно посмотреть), • для многих задач (в т.ч. для военных) вполне ок
  88. DIY • todo • (Что можно сделать, не работая в

    корпорации, без миллионов бюджетов) • Экспериментаторы — что-то было по отдельным техникам (см. ютюб, хабр и т. п.) • Europractice (доступ к производству для студенческих проектов — Европа) • Чип-«франкенштейн» — множество дизайнов объединяют в одну микросхему так, чтобы общей суммы хватило оплатить весь заказ, потом пилят на куски. Раздел на форуме, где договариваются об очередном заказе.
  89. • Todo: полный цикл разработки электронного устройства — на примере

    Apple? • Производство, сборка, что делают сами, что на контракте?
  90. Заключение • Не ограничивайтесь софтом — смотрите смежные сегменты •

    Аппаратное обеспечение — можно делать проекты — логический дизайн • Инструменты есть, в т. ч. с открытым исходным кодом • Доступное железо для воплощений в аппаратуре — ПЛИС • (с некоторыми задачами можно обойтись без фабрик)
  91. Заключение • Есть спрос сейчас — аппаратные ускорители ИИ, роботы,

    все дела • Верификация, инструменты и алгоритмы верификации — отдельно • Плюс разработка софта EDA • Есть фундамент — математика, дискретная математика • Про софт не забывать — в связке с навыками разработки аппаратуры будет сила как специалистов • Без умений в области разработки софта разработку электроники вести может быть тоже сложно, все переплетено