1 of 24

Gate-Level Simulation

Введение в проектирование на языке Verilog

Прутьянов В. В.

2 of 24

Симуляция

Симуляция RTL-описания – исполнение RTL-кода в соответствии с событийной моделью HDL

Gate-Level Simulation (GLS)

  • Zero-delay симуляция Netlist-а без учета задержек, сигнал проходит через ячейки мгновенно
    • Проверка соответствия Netlist-а функциональным требованиям (выполнение тех же тестов, что и RTL)
    • Верификация структур, автоматически добавленных САПРом вне RTL (Clock Gating, DFT, и т.д.)
  • SDF back-annotation – инструмент синтеза сопоставляет логические элементы и цепи со значениями задержек, полученными в ходе STA
    • Проверка соответствия требуемой частоте
    • Верификация синтеза тактового дерева
    • Выявление проблем за рамками STA (например, фактическое поведение исключенных путей)
    • Оценка энергопотребления с учетом динамики

3 of 24

Симуляция

Симуляция RTL-описания – исполнение RTL-кода в соответствии с событийной моделью HDL

Gate-Level Simulation (GLS)

  • Zero-delay – симуляция Netlist-а без учета задержек, сигнал проходит через ячейки мгновенно
    • Проверка соответствия Netlist-а функциональным требованиям (выполнение тех же тестов, что и RTL)
    • Верификация структур, автоматически добавленных САПРом вне RTL (Clock Gating, DFT, и т.д.)
  • SDF back-annotation – инструмент синтеза сопоставляет логические элементы и цепи со значениями задержек, полученными в ходе STA
    • Проверка соответствия требуемой частоте
    • Верификация синтеза тактового дерева
    • Выявление проблем за рамками STA (например, фактическое поведение исключенных путей)
    • Оценка энергопотребления с учетом динамики

4 of 24

Симуляция

Симуляция RTL-описания – исполнение RTL-кода в соответствии с событийной моделью HDL

Gate-Level Simulation (GLS)

  • Zero-delay – симуляция Netlist-а без учета задержек, сигнал проходит через ячейки мгновенно
    • Проверка соответствия Netlist-а функциональным требованиям (выполнение тех же тестов, что и RTL)
    • Верификация структур, автоматически добавленных САПРом вне RTL (Clock Gating, DFT, и т.д.)
  • SDF (Standard Delay Format) back-annotation – инструмент синтеза сопоставляет логические элементы и цепи со значениями задержек, полученными в ходе STA
    • Проверка соответствия требуемой частоте
    • Верификация синтеза тактового дерева
    • Выявление проблем за рамками STA (например, фактическое поведение исключенных путей)
    • Оценка энергопотребления с учетом динамики

5 of 24

Симуляция

Симуляция RTL-описания – исполнение RTL-кода в соответствии с событийной моделью HDL

Gate-Level Simulation (GLS)

  • Zero-delay – симуляция Netlist-а без учета задержек, сигнал проходит через ячейки мгновенно
    • Проверка соответствия Netlist-а функциональным требованиям (выполнение тех же тестов, что и RTL)
    • Верификация структур, автоматически добавленных САПРом вне RTL (Clock Gating, DFT, и т.д.)
  • SDF (Standard Delay Format) back-annotation – инструмент синтеза сопоставляет логические элементы и цепи со значениями задержек, полученными в ходе STA
    • Проверка соответствия требуемой частоте
    • Верификация синтеза тактового дерева
    • Выявление проблем за рамками STA (например, фактическое поведение исключенных путей)
    • Оценка энергопотребления с учетом динамики

6 of 24

ASIC frontend: Netlist

После синтеза из RTL получается Netlist

7 of 24

ASIC frontend: SDF back-annotation

Инструмент синтеза сохраняет задержки всех элементов и соединений в SDF-файл

8 of 24

Quartus: Compilation > EDA Netlist Writer > Edit Settings

simulation/

└── questa

├── fpga_8_1200mv_0c_slow.vo

├── fpga_8_1200mv_0c_v_slow.sdo

├── fpga_8_1200mv_85c_slow.vo

├── fpga_8_1200mv_85c_v_slow.sdo

├── fpga_min_1200mv_0c_fast.vo

├── fpga_min_1200mv_0c_v_fast.sdo

├── fpga_run_msim_gate_verilog.do

├── fpga_run_msim_rtl_verilog.do

├── fpga_dump_all_vcd_nodes.tcl

├── fpga.vo

└── fpga_v.sdo

  • Файлы .sdo – задержки для различных PVT-условий в формате SDF
  • Файлы .vo – Netlist-ы в формате Verilog-95 (отличаются только подключаемыми SDF)

9 of 24

SDF vs. Netlist

.............

(CELL (CELLTYPE "cycloneive_lcell_comb")

(INSTANCE blink\|cnt\[2\]\~27)

(DELAY (ABSOLUTE

(PORT dataa (335:335:335) (418:418:418))

(IOPATH dataa combout (461:461:461) (481:481:481))

(IOPATH dataa cout (552:552:552) (416:416:416))

(IOPATH datad combout (177:177:177) (155:155:155))

(IOPATH cin combout (607:607:607) (577:577:577))

(IOPATH cin cout (73:73:73) (73:73:73))

)

)

)

(CELL (CELLTYPE "dffeas")

(INSTANCE blink\|cnt\[2\])

(DELAY (ABSOLUTE

(PORT clk (1826:1826:1826) (1839:1839:1839))

(PORT d (99:99:99) (115:115:115))

(PORT clrn (1706:1706:1706) (1691:1691:1691))

(IOPATH (posedge clk) q (261:261:261) (261:261:261))

(IOPATH (negedge clrn) q (247:247:247) (247:247:247))

)

)

(TIMINGCHECK

(HOLD d (posedge clk) (212:212:212))

)

)

.............

initial $sdf_annotate("fpga_v.sdo");

.............

cycloneive_lcell_comb \blink|cnt[2]~27 (

.dataa(\blink|cnt [2]),

.datab(gnd),

.datac(gnd),

.datad(vcc),

.cin(\blink|cnt[1]~26 ),

.combout(\blink|cnt[2]~27_combout ),

.cout(\blink|cnt[2]~28 ));

defparam \blink|cnt[2]~27 .lut_mask = 16'h5A5F;

defparam \blink|cnt[2]~27 .sum_lutc_input = "cin";

dffeas \blink|cnt[2] (

.clk(\CLK~inputclkctrl_outclk ),

.d(\blink|cnt[2]~27_combout ),

.asdata(vcc),

.clrn(\rst_n~q ),

.aload(gnd),

.sclr(gnd),

.sload(gnd),

.ena(vcc),

.devclrn(devclrn),

.devpor(devpor),

.q(\blink|cnt [2]),

.prn(vcc));

defparam \blink|cnt[2] .is_wysiwyg = "true";

defparam \blink|cnt[2] .power_up = "low";

.............

10 of 24

SDF vs. Netlist

.............

(CELL (CELLTYPE "cycloneive_lcell_comb")

(INSTANCE blink\|cnt\[2\]\~27)

(DELAY (ABSOLUTE

(PORT dataa (335:335:335) (418:418:418))

(IOPATH dataa combout (461:461:461) (481:481:481))

(IOPATH dataa cout (552:552:552) (416:416:416))

(IOPATH datad combout (177:177:177) (155:155:155))

(IOPATH cin combout (607:607:607) (577:577:577))

(IOPATH cin cout (73:73:73) (73:73:73))

)

)

)

(CELL (CELLTYPE "dffeas")

(INSTANCE blink\|cnt\[2\])

(DELAY (ABSOLUTE

(PORT clk (1826:1826:1826) (1839:1839:1839))

(PORT d (99:99:99) (115:115:115))

(PORT clrn (1706:1706:1706) (1691:1691:1691))

(IOPATH (posedge clk) q (261:261:261) (261:261:261))

(IOPATH (negedge clrn) q (247:247:247) (247:247:247))

)

)

(TIMINGCHECK

(HOLD d (posedge clk) (212:212:212))

)

)

.............

initial $sdf_annotate("fpga_v.sdo");

.............

cycloneive_lcell_comb \blink|cnt[2]~27 (

.dataa(\blink|cnt [2]),

.datab(gnd),

.datac(gnd),

.datad(vcc),

.cin(\blink|cnt[1]~26 ),

.combout(\blink|cnt[2]~27_combout ),

.cout(\blink|cnt[2]~28 ));

defparam \blink|cnt[2]~27 .lut_mask = 16'h5A5F;

defparam \blink|cnt[2]~27 .sum_lutc_input = "cin";

dffeas \blink|cnt[2] (

.clk(\CLK~inputclkctrl_outclk ),

.d(\blink|cnt[2]~27_combout ),

.asdata(vcc),

.clrn(\rst_n~q ),

.aload(gnd),

.sclr(gnd),

.sload(gnd),

.ena(vcc),

.devclrn(devclrn),

.devpor(devpor),

.q(\blink|cnt [2]),

.prn(vcc));

defparam \blink|cnt[2] .is_wysiwyg = "true";

defparam \blink|cnt[2] .power_up = "low";

.............

(min:typ:max)

Rise

Fall

11 of 24

ASIC frontend: GLS

Симулятор моделирует Netlist с учетом задержек из SDF-файла

12 of 24

ASIC frontend: GLS

Результаты функциональных тестов на RTL-симуляции и GLS должны совпадать

13 of 24

Пример: GLS для 03_blink

GLS

RTL

Quartus: Tools > Run Simulation Tool > Gate Level Simulation�либо

$ vlog fpga_top_tb.v fpga.vo

$ vsim work.tb -c +transport_int_delays +transport_path_delays -do 'run -all' -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L cycloneive_ver

14 of 24

Пример: GLS для 03_blink

???

GLS

RTL

Quartus: Tools > Run Simulation Tool > Gate Level Simulation�либо

$ vlog fpga_top_tb.v fpga.vo

$ vsim work.tb -c +transport_int_delays +transport_path_delays -do 'run -all' -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L cycloneive_ver

15 of 24

Глитч

  • Входные значения элементов устанавливаются не одновременно, т. к. переходные процессы в шинах и элементах вносят задержку в распространение сигналов
  • В переходном процессе установления выходного сигнала возникает glitch
  • В синхронной логике STA и инструменты синтеза предотвращают глитчи на входах данных FF в момент записи, поэтому их действие не заметно

16 of 24

Глитч

  • Входные значения элементов устанавливаются не одновременно, т. к. переходные процессы в шинах и элементах вносят задержку в распространение сигналов
  • В переходном процессе установления выходного сигнала возникает glitch
  • В синхронной логике STA и инструменты синтеза предотвращают глитчи на входах данных FF в момент записи, поэтому их действие не заметно

17 of 24

Пример: глитчи

Glitches

GLS

RTL

18 of 24

Энергопотребление

  • Dynamic Power
    • Switching энергия, потребляемая при зарядке/разрядке выходной нагрузки ячейки
    • Internal – энергия, потребляемая ячейкой из-за переключения внутренних узлов или внутреннего короткого замыкания, независимо от выходной нагрузки
  • Static Power
    • Leakage – мощность, потребляемая полупроводниковыми устройствами в состоянии покоя, зависящая от уровня напряжения и не зависящая от частоты переключения

Итоговое энергопотребление конкретной схемы зависит от множества факторов:

  • PVT:
    • Вариации техпроцесса
    • Напряжение питания
    • Температура (сама зависит от мощности тепловыделения схемы)
  • Тактовая частота
  • Фактическая динамика переключений

19 of 24

Энергопотребление: КМОП

Значительная часть энергопотребления КМОП-схем приходится на момент переключения (dynamic power):

20 of 24

Энергопотребление: оценка

  • Vector-less – расчет энергопотребления в предположении фиксированной вероятности переключений всех сигналов (обычно по умолчанию полагается α=25%)
  • Vector-basedрасчет энергопотребления на основе динамики переключений каждого элемента по результатам GLS (например, по VCD или TCF файлу)
  • В Quartus оценка энергопотребления выполняется в Processing > Power Analyzer Tool
  • Отчеты можно посмотреть в разделе Compilation Report > Power Analyzer

21 of 24

Анализ энергопотребления: 26-битный счетчик, 50 МГц

Top-level Entity Name : fpga_top

Device : EP4CE15F23C8

Total Thermal Power Dissipation : 79.03 mW

Core Dynamic Thermal Power Dissipation : 0.80 mW

Core Static Thermal Power Dissipation : 49.27 mW

I/O Thermal Power Dissipation : 28.96 mW

Power Estimation Confidence : Medium: user provided moderately complete toggle rate data

+-------------------------+---------------+---------------------------------------------+

; Signal ; Type ; Toggle Rate (millions of transitions / sec) ;

+-------------------------+---------------+---------------------------------------------+

; CLK ; Input Pin ; 100.000 ;

; blink:blink|cnt[0] ; Registered ; 49.997 ;

; blink:blink|cnt[0]~75 ; Combinational ; 49.997 ;

; blink:blink|cnt[1] ; Registered ; 24.998 ;

; blink:blink|cnt[1]~25 ; Combinational ; 24.999 ;

; blink:blink|cnt[1]~26 ; Combinational ; 24.998 ;

; blink:blink|cnt[2] ; Registered ; 12.499 ;

; blink:blink|cnt[2]~27 ; Combinational ; 37.497 ;

; blink:blink|cnt[2]~28 ; Combinational ; 12.499 ;

; blink:blink|cnt[3] ; Registered ; 6.250 ;

; blink:blink|cnt[3]~29 ; Combinational ; 18.749 ;

; blink:blink|cnt[3]~30 ; Combinational ; 6.249 ;

; blink:blink|cnt[4] ; Registered ; 3.125 ;

22 of 24

Анализ энергопотребления: ядро RV32I

Top-level Entity Name : fpga_top

Device : EP4CE15F23C8

Total Thermal Power Dissipation : 114.56 mW

Core Dynamic Thermal Power Dissipation : 41.92 mW

Core Static Thermal Power Dissipation : 50.28 mW

I/O Thermal Power Dissipation : 22.36 mW

Power Estimation Confidence : High: user provided sufficient toggle rate data

Top-level Entity Name : fpga_top

Device : EP4CE15F23C8

Total Thermal Power Dissipation : 126.61 mW

Core Dynamic Thermal Power Dissipation : 53.80 mW

Core Static Thermal Power Dissipation : 50.30 mW

I/O Thermal Power Dissipation : 22.51 mW

Power Estimation Confidence : High: user provided sufficient toggle rate data

  • 2-стадийный RV32I, 60 МГц
  • 3-стадийный RV32I, 70 МГц

23 of 24

Анализ энергопотребления: ядро RV32I

+--------------------------------------------+-------------------------------------------+

; Compilation Hierarchy Node ; Total Thermal Power by Hierarchy (1) ;

+--------------------------------------------+-------------------------------------------+

; |fpga_top ; 43.68 mW (6.76 mW) ; 55.71 mW (8.63 mW) ;

; |hard_block:auto_generated_inst ; 0.00 mW (0.00 mW) ; 0.00 mW (0.00 mW) ;

; |system_top:system_top ; 36.93 mW (0.00 mW) ; 47.08 mW (0.00 mW) ;

; |cpu_top:cpu_top ; 36.50 mW (0.00 mW) ; 46.26 mW (0.00 mW) ;

; |core:core ; 31.79 mW (10.39 mW) ; 40.68 mW (18.39 mW) ;

; |alu:alu ; 6.08 mW (6.08 mW) ; 7.96 mW (7.96 mW) ;

; |mux4:alu_b_mux4 ; 1.77 mW (1.77 mW) ; 2.48 mW (2.48 mW) ;

; |cmp:cmp ; 0.42 mW (0.42 mW) ; 0.26 mW (0.26 mW) ;

; |control:control ; 0.49 mW (0.49 mW) ; 0.72 mW (0.72 mW) ;

; |lsu:lsu ; 0.40 mW (0.40 mW) ; 0.42 mW (0.42 mW) ;

; |reg_file:reg_file ; 11.03 mW (11.03 mW) ; 10.25 mW (10.25 mW) ;

; |signext:signext ; 1.22 mW (1.22 mW) ; 0.20 mW (0.20 mW) ;

; |dmem:dmem ; 0.99 mW (0.00 mW) ; 1.35 mW (0.00 mW) ;

; |ram1rw32x256:ram1rw32x256 ; 0.99 mW (0.99 mW) ; 1.35 mW (0.00 mW) ;

; |imem:imem ; 3.53 mW (0.00 mW) ; 3.83 mW (0.00 mW) ;

; |imem1r32x256:imem1r32x256 ; 3.53 mW (3.53 mW) ; 3.83 mW (0.00 mW) ;

; |mem_xbar:mem_xbar ; 0.19 mW (0.19 mW) ; 0.41 mW (0.41 mW) ;

; |ctrl_74hc595:ctrl_74hc595 ; 0.15 mW (0.15 mW) ; 0.14 mW (0.14 mW) ;

; |hex_display:hex_display ; 0.18 mW (0.18 mW) ; 0.49 mW (0.49 mW) ;

; |hexdec:hexdec ; 0.00 mW (0.00 mW) ; 0.00 mW (0.00 mW) ;

; |mmio_xbar:mmio_xbar ; 0.11 mW (0.11 mW) ; 0.18 mW (0.18 mW) ;

+--------------------------------------------+---------------------+---------------------+

2-stage, 60MHz 3-stage, 70 MHz

24 of 24

Энергопотребление: оптимизация

  • Низкочастотные/низковольтные домены – нетребовательная к скорости работы логика может быть размещена в отдельных малопотребляющих доменах
  • Clock/Power Gating – неиспользуемую логику можно отключить от питания и/или тактового сигнала
    • Архитектурный CG/PG – решение о включении/отключении домена принимает ПО
    • Вставка CG при синтезе – САПР автоматически заменяет в регистре сигнал разрешения данных (Enable) на сигнал разрешения тактового сигнала (Clock Enable)
  • Динамическое управление частотой и напряжением (DVFS) – уровень напряжения и тактовая частота домена определяется ПО на основе данных от температурных датчиков