< Спец курс (Избранные главы VHDL)
				Это снимок страницы. Он включает старые, но не удалённые версии шаблонов и изображений.
 
				
																
				
Лекции
Практические
Лабораторные
Табель 
Доп. материалы
 
- Заголовок
 -  Критерий качества схемы
 - Автор
 -  Зайцев В.С.
 - Нижний колонтитул
 -  Спец курс (Избранные главы VHDL)/Критерий качества схемы
 - Дополнительный нижний колонтитул
 -  Зайцев В.С., 13:13, 2 декабря 2013
 
 Слайд:Снижение энерго-потребления схем
|  Способы сокращения потребления
 | 
 Определение
 | 
 Оптимизация дерева синхронизации  Clock tree optimization and clock gating
 | 
  Отключаются ветви дерева синхронизации, которые не используются в данный момент времени. 
 | 
|   Операция изоляции   Operand isolation
 | 
  Уменьшается рассеиваемая мощность, путем использования разрешающего сигнала, если разрешающий сигнал не активен, то переключение блока не произойдет. 
 | 
|   Логическое деление блоков  Logic restructuring 
 | 
  Разделение логики на блоки, работающие на высокой частоте и на низкой, на сколько это возможно. 
 | 
|    Изменение размеров транзисторов   Logic resizing (transistor resizing) 
 | 
  Уменьшается динамический ток потребления (входные и выходные паразитные емкости), а так же токи утечки при переключении (сквозные токи). 
 | 
|   Использование буферов Transition rate buffering
 | 
  Снижает мощность переключения путем уменьшения времени переключения. 
 | 
|   Замена точек подключения Pin swapping
 | 
  Выбираются точки подключения с минимальной емкостной нагрузкой. 
 | 
|    Использование разных порогов Multi-Vth
 | 
  Использование нескольких библиотек с разными характеристиками транзисторов (с низким порогом переключения – быстрее и выше утечки) или с более высокими – медленнее с более низкими утечками. 
 | 
|    Несколько напряжений питания в схеме  Multi-supply voltage (MSV or voltage islands)
 | 
  Функциональные блоки работают при различных напряжения питания. 
 | 
|    Динамическое изменение напряжения питания (DVS) Dynamic voltage scaling (DVS)
 | 
  Позволяет менять напряжение питания блока во время работы схемы на лету. 
 | 
|   Динамическое изменение напряжения и частоты (DVFS)   Dynamic voltage and frequency scaling (DVFS) 
 | 
  Позволяет менять напряжение питания и частоту блока во время работы схемы на лету. 
 | 
|   Адаптивное изменение напряжения и частоты Adaptive voltage and frequency scaling (AVFS)
 | 
 In this variation of DVFS, a wider variety of voltages are set dynamically, based on adaptive feedback from a control loop; involves analog circuitry.
 | 
|   Отключение питания  (PSO) Power shut-off (PSO) [or power gating] 
 | 
  Отключение питания блоков, если он не используется. 
 | 
|   Разделение памяти   Memory splitting 
 | 
  Если данные постоянные в одной области памяти и перезаписываются в другой, то целесообразно разделить области и отключать питание той области, где данные не изменяются. 
 | 
|   Смещение питания  Substrate biasing (bodybiasing or back-biasing) 
 | 
  Смещение напряжения на кармане p-транзисторов выше VDD и подложки n-транзисторов ниже VSS. 
 | 
 Слайд:Снижение энерго-потребления схем (2)
| 
 | 
 Dynamic Power Savings
 | 
 Leakage Power Savings
 | 
 Timing Penalty
 | 
 Area Penalty
 | 
 Complexity and Time-to-Market (TTM) Penalties
 | 
 Implementation Impact
 | 
 Design Impact
 | 
 Verification Impact
 | 
|  Dynamic power reduction techniques
 | 
|  Clock gating  | 
 20%  | 
 ~0X
 | 
 ~0%    Clock tree insertion delay
 | 
 <2%  | 
 None  | 
 Low  | 
 Low  | 
 None
 | 
|  Operand isolation  | 
 <5%  | 
 ~0X
 | 
 ~0% May add a few gates to pipeline
 | 
  | 
 None  | 
 None  | 
 None  | 
 None
 | 
|  Logic restructuring
 | 
 <5%  | 
 ~0X  | 
 ~0%  | 
 Little  | 
 None  | 
 None  | 
 None  | 
 None
 | 
|  Logic resizing
 | 
 <5%  | 
 ~0X  | 
 ~0%  | 
 ~0% to –10%  | 
 None  | 
 None  | 
 None  | 
 None
 | 
|  Transition rate buffering
 | 
 <5%  | 
 ~0X  | 
 ~0%  | 
 Little  | 
 None  | 
 None  | 
 None  | 
 None
 | 
|  Pin swapping
 | 
 <5%  | 
 ~0X  | 
 ~0%  | 
 Little  | 
 None  | 
 None  | 
 None  | 
 None
 | 
|  Leakage power reduction techniques
 | 
|  Multi-Vth
 | 
 0%  | 
 2–3X  | 
 ~0% Automated  | 
 2 to –2%  | 
 Low  | 
 Low  | 
 None  | 
 None
 | 
|  Multisupply voltage (MSV)
 | 
 40–50%  | 
 2X
 | 
 ~0% Adds level shifters; clock scheduling issues due to latency changes
 | 
 <10% Power routing and power interconnect; level shifters
 | 
 High Design time, turnaround time, TTM
 | 
 Medium  | 
 Medium  | 
 Low
 | 
|  DVFS  | 
 40–70%  | 
 2–3X
 | 
 ~0% Adds level shifters, power-up sequence; clock scheduling issues due to dynamic latency changes
 | 
 <10% Adds level shifters and a power management unit
 | 
 High Design time, turnaround time, TTM
 | 
 High  | 
 High  | 
 High
 | 
|  Power shut-off (PSO)
 | 
 ~0%  | 
 10–50X
 | 
 4–8% Adds isolation cells, complex timing, wakeup time, rush currents
 | 
 5–15% Adds isolation cells, state retention cells, alwayson cells; may have wider power grid due to rush currents; power management unit
 | 
 High System architecture, support for power control, verification, synthesis, implementation, DFT
 | 
 Mediumhigh  | 
 High  | 
 High
 | 
|  Memory splitting
 | 
 ~0%  | 
 Varies  | 
 Varies Adds isolation cells for power shut-off
 | 
 Varies  | 
 Varies  | 
 Mediumhigh  | 
 High  | 
 High
 | 
|  Substrate biasing
 | 
 ~0%  | 
 10X  | 
 10%  | 
 <10%  | 
 High  | 
 High  | 
 Mediumhigh  | 
 Medium
 | 
 Пример VHDL
 Слайд: Операция изоляции 
Сравнение происходит постоянно по  каждому такту
library ieee, std, djin18;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
architecture beh of xcontroller is
signal count : unsigned (7 downto 0);
signal do_i : std_logic;
begin  -- beh
process (clk, rst)
begin
  if rst = '1' then
    count <= x"00";
  elsif clk'event and clk = '1' then
    count <= count + 1;
  end if;
end process;  
DO_i <= '1' when count > x"0F" else
      '0';
 
do <= do_i when  en = '1'  else
      '0';
end beh; 
 Сравнение происходит только, когда требуется
architecture beh2 of xcontroller is
signal count : unsigned (7 downto 0);
signal count_i : unsigned (7 downto 0);
signal do_i : std_logic;
begin  -- beh
process (clk, rst)
begin
  if rst = '1' then
    count <= x"00";
  elsif clk'event and clk = '1' then
    count <= count + 1;
  end if;
end process;
count_i <= count when en = '1' else
           x"00";
DO_i <= '1' when count_i > x"0F" else
      '0';
do <= do_i when  en = '1' else
      '0';
end beh2; 
  
 Слайд: Логическое деление блоков
Обработка происходит каждый такт
library ieee, std, djin18;
architecture beh4 of xcontroller is
  signal count : unsigned (7 downto 0);
  signal count2 : unsigned (7 downto 0);
begin
  process (clk, rst)
    begin
      if rst = '0' then
        count <= x"00";
        count2 <= x"00";       
      elsif clk'event and clk = '1' then
        count <= count + 1;
        if count = 10 then
          count2 <= count2 + 1;
        end if;                
      end if;       
    end process;
    dbuso <= std_logic_vector(count2);
end beh4; 
 Формируется строб обработки
architecture beh of xcontroller is
  signal count : unsigned (7 downto 0);
  signal count2 : unsigned (7 downto 0);
  signal strob : std_logic;
begin
  process (clk, rst)
    begin
      if rst = '0' then
        count <= x"00";
        strob <= '0';
      elsif clk'event and clk = '1' then
        count <= count + 1;
        if count = 10 then
          strob <= '1';
        else
          strob <= '0';
        end if;                
      end if;       
    end process;
  process (strob, rst)
    begin
      if rst = '0' then
        count2 <= x"00";       
      elsif strob'event and strob = '1' then
          count2 <= count2 + 1;
      end if;       
    end process;
    dbuso <= std_logic_vector(count2);
end beh; 
  
  Слайд: Логическое деление блоков (рис) 
Тактовый сигнал VS все тригеры
Строб управления VS все тригеры
 
 Площадь схем кристалла
 Слайд: Алгоритм кодирования миллера
Граф переходов, описывающий алгоритм получения кода Миллера
Возможные наборы переключений кода Миллера
  
 Слайд: Различные описания блока кодирования RFID
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
 
ARCHITECTURE BEH1 OF MILLER IS
SIGNAL OUTPUT_DATAI  : STD_LOGIC;
SIGNAL OUTPUT_DATAII : STD_LOGIC;
TYPE ST IS (a1,a2,a3,a4);
SIGNAL STATE , STATEI : ST;
signal input_data_i : std_logic;
begin
 
input_data_i <= input_data;
 
coder_proc: process (clk_i_d, rst)
begin  -- process coder_proc
  if rst = '1' then                     
    state <= a1;
  elsif clk_i_d'event and clk_i_d = '0' then    
      state <= statei;          
  end if;
end process coder_proc; 
acincro: process (state,statei,input_data_i)
begin  -- process acincro
  case state is
    when a1  =>
      if input_data_i = '0'  then
        statei <= a2;
      else
        statei <= a4;
      end if;
    when a2  => 
      if input_data_i = '0'  then
        statei <= a3;
      else
        statei <= a4;
      end if;
    when a3  =>  
      if input_data_i = '0'  then
        statei <= a2;
      else
        statei <= a1;
      end if;             
    when others =>
      if input_data_i = '0'  then
        statei <= a3;
      else
        statei <= a1;
      end if;
  end case;
end process acincro; 
 | 
suncrodata: process (state,input_data_i,clk_i_d)
begin  -- process suncrodata
    case STATE is
    when a1  =>
      if input_data_i = '0'  then
        output_datai <= not clk_i_d;
      else
        output_datai <= '0';
      end if;
    when a2  => 
      if input_data_i = '0'  then
        output_datai <= clk_i_d;
      else
        output_datai <= '0';
      end if;
    when a3  =>  
      if input_data_i = '0'  then
        output_datai <= not clk_i_d;        
      else
        output_datai <= '1';        
      end if;             
    when others =>
      if input_data_i = '0'  then
        output_datai <= clk_i_d;        
      else
        output_datai <= '1';        
      end if;
  end case;
end process suncrodata;
 
syn_out: process (clk, rst)
begin  -- process syn_out
  if rst = '1' then                     
    output_data <= '1';
  elsif clk'event and clk = '1' then    
    output_data <= output_datai;
  end if;
end process syn_out;
end beh1; 
 | 
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
 
ARCHITECTURE BEH3 OF MILLER IS
 
TYPE ST IS (a1,a2,a3,a4);
SIGNAL STATE , STATEI : ST;
SIGNAL OUTPUT_DATAI  : STD_LOGIC;
SIGNAL OUTPUT_DATAIi : STD_LOGIC;
signal input_data_i  : std_logic;
begin
 
input_data_i <= input_data;
coder_proc: process (clk_i_d, rst)
begin  -- process coder_proc
  if rst = '1' then                     
    state <= a1;
  elsif clk_i_d'event and clk_i_d = '0' then   
      state <= statei;          
  end if;
end process coder_proc; 
statei <=
  a1 when input_data = '1' and (state = a4 or state = a3) else
  a2 when input_data = '0' and (state = a1 or state = a3) else
  a3 when input_data = '0' and (state = a2 or state = a4) else
  a4;
output_datai <= 
  '1'            when statei = a1 else
  not clk_i_d    when statei = a2 else
  clk_i_d        when statei = a3 else
  '0';
suncrodata: process (clk, rst)
begin  -- process suncrodata
  if rst = '1' then                     
    output_data <= '1';
  elsif clk'event and clk = '1' then    
    output_data <= output_datai;
  end if;
end process suncrodata;
end beh3; 
 | 
architecture beh4 of miller is
 
signal input_data_i      : std_logic;
signal syn_input_data_i  : std_logic;
signal output_data_i     : std_logic;
signal output_data_ii    : std_logic;
--signal output_data_iii   : std_logic;
signal syn_output_data_i : std_logic;
 
begin  -- beh4
 
input_data_i <= input_data;
 
coder_proc: process (clk_i_d, rst)      
begin  -- process coder_proc          
  if rst = '1' then                     
    syn_input_data_i <= '0';
  elsif clk_i_d'event and clk_i_d = '1' then   
    syn_input_data_i <= input_data_i;          
  end if;
end process coder_proc;
 
pre_code_data: process (clk_i_d, rst)
begin  -- process pre_code_data
  if rst = '1' then                     
    syn_output_data_i <= '1';
  elsif clk_i_d'event and clk_i_d = '1' then  
    syn_output_data_i <= output_data_i;
  end if;
end process pre_code_data; 
 | 
output_data_ii <=
  (not clk_i_d) xor syn_output_data_i when input_data_i = '1' else
  (not syn_output_data_i) xor syn_input_data_i;
 
 
output_signal_code_proc: process (clk, rst)
begin  -- process output_signal_code_proc
  if rst = '1' then                     
    output_data_i <= '1';
  elsif clk'event and clk = '1' then    
    output_data_i <= output_data_ii;  
  end if;
end process output_signal_code_proc;
 
output_data <= output_data_i;
 
end beh4; 
 | 
architecture beh5 of miller is
 
signal input_data_i      : std_logic;
signal syn_input_data_i  : std_logic;
signal output_data_i     : std_logic;
signal output_data_ii    : std_logic;
signal output_data_iii   : std_logic;
signal syn_output_data_i : std_logic;
 
begin  -- beh4
 
input_data_i <= input_data;
 
coder_proc: process (clk_i_d, rst)     
begin  -- process coder_proc            
  if rst = '1' then                    
    syn_input_data_i <= '0';
  elsif clk_i_d'event and clk_i_d = '1' then    
    syn_input_data_i <= input_data_i;          
  end if;
end process coder_proc;
 
pre_code_data: process (clk_i_d, rst)
begin  -- process pre_code_data
  if rst = '1' then                    
    syn_output_data_i <= '1';
  elsif clk_i_d'event and clk_i_d = '1' then  
    syn_output_data_i <= output_data_i;
  end if;
end process pre_code_data; 
 | 
output_signal_code_proc: process (clk, rst)
begin  -- process output_signal_code_proc
  if rst = '1' then                     
    output_data_i <= '1';
  elsif clk'event and clk = '1' then    
    if input_data_i = '1' then
      if syn_input_data_i = '1' then
        if syn_output_data_i = '1' then
          output_data_i <= clk_i_d;
        else
          output_data_i <= not clk_i_d;
        end if;
      else
        if syn_output_data_i = '1'  then
          output_data_i <= clk_i_d;
        else
          output_data_i <= not clk_i_d;
        end if;
      end if;
    else
      if syn_input_data_i = '1'  then
        if syn_output_data_i = '1'  then
          output_data_i <= '1';
        else
          output_data_i <= '0';
        end if;
      else
        if syn_output_data_i = '1' then
          output_data_i <= '0';
        else
          output_data_i <= '1';
        end if;
      end if;
    end if;
  end if;
end process output_signal_code_proc;
output_data <= output_data_i;
 
end beh5; 
 | 
 
 Слайд: Результаты синтеза конечного автомата 
set encoding binary;
Encodings for ST values
        value    ST[1-0]
========================
             a1  00
             a2  01
             a3  10
             a4  11
...................
*******************************************************
Cell: fm0_miller    View: beh2    Library: digital
*******************************************************
 Cell    Library  References     Total Area
 
fdr      alib5     2 x    322    645 um_2
fds      alib5     1 x    342    342 um_2
n        alib5     3 x     31     94 um_2
na       alib5     2 x     51    101 um_2
nao      alib5     5 x     73    364 um_2
xnor2    alib5     1 x    100    100 um_2
 
 Number of ports :                       6
 Number of nets :                       19
 Number of instances :                  14
 Number of references to this view :     0
 
Total accumulated area : 
 Number of um_2 :                     1647
 Number of accumulated instances :      14 
set encoding auto;
Encodings for ST values
        value    ST[1-0]
========================
             a1  00
             a2  01
             a3  10
             a4  11
 
*******************************************************
Cell: fm0_miller    View: beh2    Library: digital
*******************************************************
 Cell    Library  References     Total Area
 
fdr      alib5     2 x    322    645 um_2
fds      alib5     1 x    342    342 um_2
n        alib5     3 x     31     94 um_2
na       alib5     2 x     51    101 um_2
nao      alib5     5 x     73    364 um_2
xnor2    alib5     1 x    100    100 um_2
 
 Number of ports :                       6
 Number of nets :                       19
 Number of instances :                  14
 Number of references to this view :     0
 
Total accumulated area : 
 Number of um_2 :                     1647
 Number of accumulated instances :      14 
set encoding grey;
Encodings for ST values
        value    ST[1-0]
========================
             a1  00
             a2  01
             a3  11
             a4  10
*******************************************************
Cell: fm0_miller    View: beh2    Library: digital
*******************************************************
 Cell    Library  References     Total Area
 
fdr      alib5     2 x    322    645 um_2
fds      alib5     1 x    342    342 um_2
n        alib5     2 x     31     63 um_2
na       alib5     3 x     51    152 um_2
nao      alib5     2 x     73    146 um_2
no       alib5     1 x     52     52 um_2
no3a     alib5     1 x     93     93 um_2
xnor2    alib5     1 x    100    100 um_2
xor2     alib5     1 x    108    108 um_2
 
 Number of ports :                       6
 Number of nets :                       19
 Number of instances :                  14
 Number of references to this view :     0
 
Total accumulated area : 
 Number of um_2 :                     1702
 Number of accumulated instances :      14 
 
 Слайд: Быстродействие
set encoding binary;
                        Clock Frequency Report
 
        Clock                : Frequency
===============================================================================
        clk_i_d              : 287.4 MHz
        clk                  : 310.3 MHz
 
 
                        Critical Path Report
 
 
Critical path #1, (path slack = 66.7):
 
NAME                                  GATE              ARRIVAL              LOAD
================================================================================
rst/                                              0.00  0.00 up             0.11
reg_STATE(0)_ix1_ix1_ix1/q            fdr         1.28  1.28 up             0.07
ix442/y                               n           0.22  1.50 dn             0.04
ix444/y                               na          0.25  1.76 up             0.02
ix23/y                                na3o        0.59  2.35 dn             0.04
ix11/y                                nao         0.26  2.61 up             0.02
reg_STATE(0)_ix1_ix1_ix1/d            fdr         0.00  2.61 up             0.00
data arrival time                                       2.61
 
data required time                                      69.30
================================================================================
data required time                                      69.30
data arrival time                                       2.61
                                                     ==========
slack                                                  66.69
================================================================================ 
set encoding auto;
                       Clock Frequency Report
 
        Clock                : Frequency
      =====================================
 
        clk_i_d              : 287.4 MHz
        clk                  : 310.3 MHz
 
 
                        Critical Path Report
 
 
Critical path #1, (path slack = 66.7):
 
NAME                                  GATE              ARRIVAL              LOAD
================================================================================
rst/                                              0.00  0.00 up             0.11
reg_STATE(0)_ix1_ix1_ix1/q            fdr         1.28  1.28 up             0.07
ix442/y                               n           0.22  1.50 dn             0.04
ix444/y                               na          0.25  1.76 up             0.02
ix23/y                                na3o        0.59  2.35 dn             0.04
ix11/y                                nao         0.26  2.61 up             0.02
reg_STATE(0)_ix1_ix1_ix1/d            fdr         0.00  2.61 up             0.00
data arrival time                                       2.61
 
data required time                                      69.30
================================================================================
data required time                                      69.30
data arrival time                                       2.61
                                                     ==========
slack                                                  66.69
================================================================================ 
 set encoding grey;
                         Clock Frequency Report
 
        Clock                : Frequency
      ====================================
 
        clk_i_d              : 238.9 MHz
        clk                  : 277.7 MHz
 
 
                        Critical Path Report
 
 
Critical path #1, (path slack = 66.0):
 
NAME                                  GATE              ARRIVAL              LOAD
=================================================================================
rst/                                              0.00  0.00 up             0.11
ix455/q                               fdr         1.33  1.33 up             0.09
ix23/y                                xnor2       0.77  2.10 up             0.07
ix477/y                               na          0.34  2.44 dn             0.02
ix17/y                                nao         0.26  2.70 up             0.02
ix474/y                               na          0.35  3.05 dn             0.02
ix453/y                               nao         0.26  3.31 up             0.02
ix455/d                               fdr         0.00  3.31 up             0.00
data arrival time                                       3.31
 
 
data required time                                      69.30
================================================================================
data required time                                      69.30
data arrival time                                       3.31
                                                     ===========
slack                                                  65.99
=================================================================================