«Работать добросовестно — значит: работать, повышая свою квалификацию, проявляя инициативу в совершенствовании продукции, технологий, организации работ, оказывая не предусмотренную должностными инструкциями помощь другим сотрудникам (включая и руководителей) в общей им всем работе.

Спец курс (Избранные главы VHDL)/Критерий качества схемы

Материал из Wiki
Перейти к: навигация, поиск
Лекции ИГСАПР

Лекции

Практические
Тесты

Лабораторные

Табель

Доп. материалы

Заголовок
Критерий качества схемы
Автор
Зайцев В.С.
Нижний колонтитул
Спец курс (Избранные главы 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 все тригеры

Allsignal to trigger.jpg

Строб управления VS все тригеры

Onesignal to trigger.jpg

Площадь схем кристалла

Слайд: Алгоритм кодирования миллера

Граф переходов, описывающий алгоритм получения кода Миллера

Грф переход миллера.jpg

Возможные наборы переключений кода Миллера

Возможные последовательности в коде миллера.jpg

Слайд: Различные описания блока кодирования 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
=================================================================================