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

Спец курс (Избранные главы VHDL)/Реализация описания цифровых блоков RFID-меток

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

Лекции

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

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

Табель

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

Заголовок
Цифровые блоки RFID
Автор
Зайцев В.С.
Нижний колонтитул
Спец курс (Избранные главы VHDL)/Реализация описания цифровых блоков RFID-меток
Дополнительный нижний колонтитул
Зайцев В.С., 13:16, 2 декабря 2013


Содержание

Слайд: Блок декодирования

Декодирования команды на антенне.jpg

Слайд: Входные последовательности

Протокол записи и чтения данных ISO11784/785

Старт ридер трансп.jpg

Параметр Примечание Обозначение не менее не более Единица
Стартовый интервал Sgap 10 50 периодов частоты
Интервал между данными в режиме записи Wgap 8 30 периодов частоты
Запись данных в обычном режиме данные «0» d0 16 31 периодов частоты
данные «1» d1 48 63 периодов частоты'
architecture beh of decoder is
signal count : unsignaed (8 downto 0);
begin  -- beh
 
rst <= dm;                              
 
  aa: process (clk, rst)
  begin  -- process aa
    if rst = '0' then                   
      count <= (others => '0');
      get_data <= '0';
    elsif clk'event and clk = '1' then 
      count <= count + 1;
 
      if 8 < count and count < 16 then
        get_data <= '0';
      elsif 48 < count and count < 63 then
        get_data <= '1';
      else
        get_data <= '0';
      end if;
    end if;
  end process aa;
 
end beh;

Входная последовательнсоть 18.jpg

Исо 18000 входная последовательность one bit.png

architecture beh of decoder is
  signal count     : unsignaed (8 downto 0);
  signal dmi       : std_logic;
  signal dmij      : std_logic;
  signal delimiter : unsigned (8 downto 0);
  signal tari      : unsigned (8 downto 0);
  signal rtcal     : unsigned (8 downto 0);
begin  -- beh
  rst_c <= rst or rst_count_when_end_pause;
 
  aa : process (clk, rst_c)
  begin  -- process aa
    if rst_c = '1' then
      count        <= (others => '0');
      get_data     <= '0';
    elsif clk'event and clk = '1' then
      count        <= count + 1;
      if first_pause then
        delimiter  <= count;
      elsif second_pause then
        tari       <= count;
      elsif 3_pause then
        rtcal      <= count;
      elsif next_pause then
        if count > rtcal_div_2 then
          get_data <= '1';
        else
          get_data <= '0';
        end if;
      end if;
    end if;
  end process aa;
 
end beh;

Iso15693-3.jpg Iso15693-3 one bit.jpg

architecture beh of decoder is
signal count : unsignaed (7 downto 0);
signal count_bit : unsignaed (7 downto 0);
begin  -- beh
  aa: process (clk, rst)
  begin  -- process aa
    if rst = '0' then                  
      count <= (others => '0');
      get_data_byte <= '0';
    elsif clk'event and clk = '1' then 
      count <= count + 1;
      if count = div_freq then
        count <= x"00";
        count_bit <= count_bit + '1';
        if dm = '0' then
          get_data_byte <= count_bit;
        end if;
      end if;
    end if;
  end process aa;
end beh;

Слайд: Блок обработки данных по протоколу

Сигнал на катушке RFID считывателя

State mashime Image1.png

200px-Yes check.png

State mashime Image2.png

State mashime Image3.png

State mashime Image31.png

State mashime Image4.png

State mashime Image5.png

architecture beh of fms is
  type st_answ_type is (
       stanswer_pre,
       stanswer_start,
       stanswer_data,
       stanswer_stop,
       stanswer_end
       );
  signal sta           : st_answ_type;
 
begin  -- beh
--=====================================
-- автомат переключения во время ответа
--=====================================
 
answer_proc: process (clk_answer, rst)
begin  -- process answer_proc
  if rst = '1' then                    
    sta <= stanswer_pre;
    dischargei <= '0';
    sta_change <= '0';
  elsif clk_answer'event and clk_answer = '0' then  
    case sta is
      when stanswer_pre =>
        if st = stanswer then
          if count_bit_16 then
            sta_change <= not sta_change;
            if dischargei = '0'  then
              sta <= stanswer_start;
            else
              sta <= stanswer_pre;
--пока включен разряд не выходим из этого состояния
            end if;
          end if;
        end if;
      when stanswer_start =>
        if count_bit_8 then
          sta <= stanswer_data;
          sta_change <= not sta_change;
        end if;
      when stanswer_data =>
        if count_bit_80 then
          sta <= stanswer_stop;
          sta_change <= not sta_change;
        end if;
      when stanswer_stop =>
        if count_bit_8 then
          sta <= stanswer_end;
          sta_change <= not sta_change;
        end if;
      when stanswer_end =>
        if count_bit_16 then
          dischargei <= '1';
  -- если включается разряд то в начало и
          sta <= stanswer_pre;
          sta_change <= not sta_change;
        end if;
      when others => sta <= stanswer_pre;
    end case;
  end if;
end process answer_proc;
--===============================
-- контрольные значения счетчика
--===============================
count_bit_0  <= count_bit = 0;
count_bit_8  <= count_bit = 7;
count_bit_15 <= count_bit = 14;
count_bit_16 <= count_bit = 15;
count_bit_80 <= count_bit = 79;
 
cmd_BB <= cmd = x"BB";
pwd_EB <= pwd = x"EB";
 
cmd_cap_write   <= cmd(0) = '1';
cmd_cap_read    <= cmd(1) = '1';
cmd_write_bc    <= cmd(2) = '1';
cmd_readlock    <= cmd(3) = '1';
cmd_tst_write   <= cmd(4) = '1';
cmd_read_4_8    <= cmd(5) = '1';
cmd_read_0      <= cmd(6) = '1';
cmd_read_1      <= cmd(7) = '1';
end beh;

Слайд: Блок чтения из накопителя

Стандартная конструкция блока хранения информации для RFID

Блок диаграмма.png


  • Схематическое отображение блока накопителя
library ieee;
-- PACKAGE STATEMENT
use ieee.std_logic_1164.all;
entity xe80x1v2 is
  -- GENERIC LIST
  generic(
    g_mem_init : std_logic_vector(0 to 79) := X"FF962000077900B63467"
    );
  -- PORT LIST
  port(
    vpp   : inout std_logic;
    cp_on : out   std_logic;
    do    : out   std_logic;
    adr   : in    std_logic_vector(6 downto 0);
    clk   : in    std_logic;
    di    : in    std_logic;
    load  : in    std_logic;
    prog  : in    std_logic
    );
end xe80x1v2;

Временные диаграммы описывающие протокол записи в накопитель Времянка работы накопителя.png

Пример поведенческой модели накопителя (VHDL)
architecture beh of xe80x1v2 is
 
  signal mem      : std_logic_vector(0 to 79) := g_mem_init;
  signal invmem   : std_logic_vector(79 downto 0) := g_mem_init;
  signal addr : std_logic_vector(6 downto 0);
  signal write_buffer : std_logic_vector(0 to 79) := (others => '0');
  signal rd_nn, wr_n  : std_logic;
 
begin  -- beh
  vpp <= 'Z' ;
  wr_n <= clk and load;
  rd_nn <= not ((not prog) and clk and (not  load));
  cp_on <= not prog;
  p1 : process ( wr_n, prog, vpp)
  begin  -- process p1
    if wr_n = '1' then
        write_buffer(to_integer(unsigned(adr(6 downto 0)))) <= di;
    end if;
    if prog = '1' and vpp = 'H' then                
      mem <= write_buffer after 2 ms;
    end if;
  end process p1;
do <= mem(to_integer(unsigned(adr))) after 10 ns when (rd_nn = '0') else
        '1' after 2 ns ;
inv_gen: for i in 0 to 79 generate
  invmem(i) <= mem (i);
end generate inv_gen;
end beh;

Пример поведенческой модели накопителя (Verilog)

always @(row or col) begin
   k=0;
   si=0;
   sj=0;
   i=0;
   j=0;
 
   for (i=0;  i<14; i=i+1)
     for (j=0;  j<4; j=j+1)
       if (col[i] && row[j])
         begin
        $display("true decoder data");
            k=k+1;
            si=i;
            sj=j;
         end
   if      (k == 0) #(Tacc) do <= 1'b1;
   else if (k == 1) #(Tacc) do <= mem[si][sj];
   else do <= 1'bX;

Слайд: Блок кодирования