Проектирование памяти на FPGA

                 Проектирования систем на основе
                     программируемой логики


                    д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ
13.02.2011                  e-mail: hahanova@mail.ru,
Цель лекции и содержание

 Цель: Изучить предлагаемые в FPGA
  ресурсы для проектирования памяти,
  научиться из использованию.
 План




13.02.2011     д.т.н. Хаханова И.В, каф.АПВТ,
               ХНУРЭ e-mail: hahanova@mail.ru
Структурная схема FPGA

                                        I/O Block
             Configurable Logic Block




                                          Interconnect Aria




13.02.2011                   д.т.н. Хаханова И.В, каф.АПВТ,
                             ХНУРЭ e-mail: hahanova@mail.ru
Конфигурируемый логический блок (CLB)
        микросхемы серии Spartan 3E




13.02.2011       д.т.н. Хаханова И.В, каф.АПВТ,
                 ХНУРЭ e-mail: hahanova@mail.ru
Ресурсы памяти на FPGA
триггеры(регистровая память),
таблицы LUT из конфигурируемых блоков
 CLB,
выделенные блоки памяти.




13.02.2011      д.т.н. Хаханова И.В, каф.АПВТ,
                ХНУРЭ e-mail: hahanova@mail.ru
Конфигурация памяти SelectRAM
                   RAM               Число LUT
                  16 x 1S                1
                 16 x 1D                 2
                  32 x 1S                2
                 32 x 1D                 4
                  64 x 1S                4
                 64 x 1D                 8
                 128 x 1S                8
             S - однопортовая память
             D - двухпортовая память

13.02.2011            д.т.н. Хаханова И.В, каф.АПВТ,
                      ХНУРЭ e-mail: hahanova@mail.ru
Распределенная память SelectRAM (RAM16x1S)




13.02.2011      д.т.н. Хаханова И.В, каф.АПВТ,
                ХНУРЭ e-mail: hahanova@mail.ru
Однопортовая распределенная память
             SelectRAM(RAM32x1S)




13.02.2011       д.т.н. Хаханова И.В, каф.АПВТ,
                 ХНУРЭ e-mail: hahanova@mail.ru
Двухпортовая распределенная память SelectRAM
                                 (RAM16x1D)




13.02.2011    д.т.н. Хаханова И.В, каф.АПВТ,
              ХНУРЭ e-mail: hahanova@mail.ru
Схема сектора из левой колонки CLB




13.02.2011   д.т.н. Хаханова И.В, каф.АПВТ,
             ХНУРЭ e-mail: hahanova@mail.ru
Режим двухпортовой памяти




13.02.2011   д.т.н. Хаханова И.В, каф.АПВТ,
             ХНУРЭ e-mail: hahanova@mail.ru
Block RAM
             Пути данных                   1. Write to and read
                                            from Port A
                                           2. Write to and read
                                            from Port B
                                           3. Data transfer from
 Количество блоков в микросхемах            Port A to Port B
                                           4. Data transfer from
                                            Port B to Port A




13.02.2011                 д.т.н. Хаханова И.В, каф.АПВТ,
                           ХНУРЭ e-mail: hahanova@mail.ru
Режим сдвигового регистра




13.02.2011     д.т.н. Хаханова И.В, каф.АПВТ,
               ХНУРЭ e-mail: hahanova@mail.ru
Модель сдвигового регистра
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_unsigned.all;
   entity SRL16_mine is
          port (Q : out STD_LOGIC;
          A0 : in STD_LOGIC;
          A1 : in STD_LOGIC;
          A2 : in STD_LOGIC;
          A3 : in STD_LOGIC;
          CLK : in STD_LOGIC;
          D : in STD_LOGIC);
   end entity;
   architecture Behavioral of SRL16_mine is
    signal Q_INT: std_logic_vector(15 downto 0);
   begin
        process(Clk)
          begin
           if (Clk'event and Clk='1') then
               Q_INT <= Q_INT(14 downto 0) & D;
           end if;
          end process;
      Q <= Q_INT(conv_integer(A3&A2&A1&A0));
   end Behavioral;

13.02.2011                 д.т.н. Хаханова И.В, каф.АПВТ,
                           ХНУРЭ e-mail: hahanova@mail.ru
Выделенные блоки памяти
                                                   RAMB4_S#_S#
                                              WEA
                                              ENA
                                              RSTA           DOA[#:0]
                                              CLKA
                                              ADD[#:0]
                                              DIA[#:0]

                                              WEB
                                              ENB
                                              RSTB           DOB[#:0]
                                              CLKB
                                              ADD[#:0]
                                              DIB[#:0]

             Width   Depth       ADDR Bus               Data Bus
               1     4096       A DDR<11:0>             DATA<0>
              2      2048       ADDR<10:0>             DATA<1:0>
              4      1024       A DDR<9:0>             DATA<3:0>
              8       512       A DDR<8:0>             DATA<7:0>
              16      256       A DDR<7:0>             DATA<15:0>
13.02.2011            д.т.н. Хаханова И.В, каф.АПВТ,
                      ХНУРЭ e-mail: hahanova@mail.ru
Карта памяти RAMB




13.02.2011       д.т.н. Хаханова И.В, каф.АПВТ,
                 ХНУРЭ e-mail: hahanova@mail.ru
Временные диаграммы для однопортового
  режима выделенных блоков памяти Block RAM




13.02.2011      д.т.н. Хаханова И.В, каф.АПВТ,
                ХНУРЭ e-mail: hahanova@mail.ru
Временные диаграммы для двухпортового
  режима выделенных блоков памяти Block RAM




13.02.2011      д.т.н. Хаханова И.В, каф.АПВТ,
                ХНУРЭ e-mail: hahanova@mail.ru
BRAM16
             Двухпортовая                                    Однопортовая




                                           Описание конфигураций портов




13.02.2011                  д.т.н. Хаханова И.В, каф.АПВТ,
                            ХНУРЭ e-mail: hahanova@mail.ru
Организация данных при различных
         конфигурациях размеров портов А и В.




13.02.2011          д.т.н. Хаханова И.В, каф.АПВТ,
                    ХНУРЭ e-mail: hahanova@mail.ru
Модель памяти с асинхронным чтением
   library ieee;
   use ieee.std_logic_1164.all;
   use ieee.std_logic_unsigned.all;

   entity ram_test is
   port (d: in std_logic_vector(7 downto 0);
        a: in std_logic_vector(6 downto 0);
        we: in std_logic; — вход разрешения записи
        clk: in std_logic;
         q: out std_logic_vector(7 downto 0));
   end ram_test;

   architecture rtl of ram_test is
   type mem_type is array (127 downto 0) of
                       std_logic_vector (7 downto 0);
   signal mem: mem_type;
   begin
          process (clk)
          begin
            if rising_edge(clk) then
                       if (we = ‘1’) then
                            mem(conv_integer(a))<= d;
                       end if;
             end if;
          end process;
          q <= mem(conv_integer (a));
   end rtl;
13.02.2011                        д.т.н. Хаханова И.В, каф.АПВТ,
                                  ХНУРЭ e-mail: hahanova@mail.ru
Модель памяти с синхронным чтением

library ieee;
       use ieee.std_logic_1164.all;
       use ieee.std_logic_unsigned.all;
     entity raminfr is
     port (clk , we : in std_logic;
            a, di : in std_logic_vector(3 downto 0);
            do : out std_logic_vector(3 downto 0));
     end raminfr;
     architecture syn of raminfr is
            type ram_type is array (31 downto 0) of
                        std_logic_vector (3 downto 0);
            signal RAM : ram_type;
            signal read_a : std_logic_vector(4 downto
     0);
     begin
            process (clk)
              begin
                  if (clk’event and clk = ‘1’) then
                          if (we = ‘1’) then
                               RAM(conv_integer(a)) <=
     di;
                          end if;
                           read_a <= a;
                  end if;
            end process;
         do <= RAM(conv_integer(read_a));
     end syn;
13.02.2011                              д.т.н. Хаханова И.В, каф.АПВТ,
                                      ХНУРЭ e-mail: hahanova@mail.ru
Реализация памяти с синхр. чтением




13.02.2011   д.т.н. Хаханова И.В, каф.АПВТ,
             ХНУРЭ e-mail: hahanova@mail.ru
Модель памяти с псевдо-синхронным чтением
    library ieee;
   use ieee.std_logic_1164.all;
   use ieee.std_logic_unsigned.all;
   entity raminfr is
   port (clk : in std_logic;
           we : in std_logic;
            a : in std_logic_vector(4 downto 0);
           di : in std_logic_vector(3 downto 0);
           do : out std_logic_vector(3 downto 0));
   end raminfr;
   architecture syn of raminfr is
          type ram_type is array (31 downto 0) of std_logic_vector (3 downto 0);
          signal RAM : ram_type;
   begin
          process (clk)
          begin
                if (clk’event and clk = ‘1’) then
                        if (we = ‘1’) then
                                 RAM(conv_integer(a)) <= di;
                        end if;

                     do <= RAM(conv_integer(a));
         end process;
   end syn;




13.02.2011                       д.т.н. Хаханова И.В, каф.АПВТ,
                                 ХНУРЭ e-mail: hahanova@mail.ru
Двухпортовая память с асинхр. чтением
    library ieee;
           use ieee.std_logic_1164.all;
           use ieee.std_logic_unsigned.all;
             entity raminfr is
                    port (clk : in std_logic;
                          we : in std_logic;
                          a : in std_logic_vector(4 downto 0);
                          dpra : in std_logic_vector(4 downto 0);
                          di : in std_logic_vector(3 downto 0);
                          spo : out std_logic_vector(3 downto 0);
                          dpo : out std_logic_vector(3 downto 0));
             end raminfr;
             architecture syn of raminfr is
                   type ram_type is array (31 downto 0) of std_logic_vector (3 downto 0);
                   signal RAM : ram_type;
             begin
                   process (clk)
                   begin
                           if (clk’event and clk = ‘1’) then
                                if (we = ‘1’) then
                                       RAM(conv_integer(a)) <= di;
                                 end if;
                            end if;
                   end process;
             spo <= RAM(conv_integer(a));
             dpo <= RAM(conv_integer(dpra));
             end syn;


13.02.2011                          д.т.н. Хаханова И.В, каф.АПВТ,
                                    ХНУРЭ e-mail: hahanova@mail.ru
Двухпортовая память с синхронным чтением.1
-- dual - port RAM with synchronous read        Примечание.
library ieee;                                   Результат синтеза зависит от
                                                размера памяти. Память
use ieee.std_logic_1164.all;
                                                небольшого размера
use ieee.std_logic_unsigned.all;                реализуется как
entity xilinx_dual_port_ram_sync is             распределенная
generic ( ADDR_WIDTH : integer:=6;
           DATA_WIDTH : integer:=8);
port ( clk, we: in std_logic;
    addr_a: in std_logic_vector(ADDR_WIDTH -1 downto 0);
    addr_b: in std_logic_vector(ADDR_WIDTH-1 downto 0);
    din_a: in std_logic_vector(DATA_WIDTH-1 downto 0);
    dout_a: out std_logic_vector(DATA_WIDTH-1 downto 0);
    dout_b : out std_logic_vector(DATA_WIDTH-1 downto 0));
end xilinx_dual_port_ram_sync;



13.02.2011              д.т.н. Хаханова И.В, каф.АПВТ,
                        ХНУРЭ e-mail: hahanova@mail.ru
Двухпортовая память с синхронным чтением.2
architecture beh_arch of xilinx_dual_port_ram_sync is
    type ram_type is array (0 to 2**ADDR_WIDTH-1) of std_logic_vector(DATA_WIDTH-
    1 downto 0);
    signal ram: ram_type;
    signal addr_a_reg, addr_b_reg : std_logic_vector(ADDR_WIDTH-1 downto 0);
begin
    process (clk)
    begin
           if (clk'event and clk = '1') then
                       if (we = '1') then
                                   ram(conv_integer(addr_a)) <= din_a;
                       end if;
                       addr_a_reg <= addr_a;
                       addr_b_reg <= addr_b;
           end if;
    end process;
    dout_a <= ram(conv_integer(addr_a_reg));
    dout_b <= ram(conv_integer(addr_b_reg));
end beh_arch;



13.02.2011                 д.т.н. Хаханова И.В, каф.АПВТ,
                           ХНУРЭ e-mail: hahanova@mail.ru
Атрибуты программы XST для работы синтеза памяти
             RAM_EXTRACT и RAM_STYLE

RAM_EXTRACT – константа для синтеза, разрешает или запрещает
    извлечение памяти, может принимать значение YES и NO, по
    умолчанию имеет значение YES.
--Декларация атрибута
         attribute ram_extract: string;
    --Описание атрибута
         attribute ram_extract of
    {signal_name|entity_name}:{signal|entity} is "yes";


RAM_STYLE – константы синтеза, управляющая выбором ресурсов
    для генерации памяти. Допустиные значения: AUTO, BLOCK и
    DISTRIBUTED; по умолчанию AUTO.
--Декларация атрибута
         attribute ram_style: string;
    --Описание атрибута
         attribute ram_style of {signal_name|entity_name}:{signal|entity}
    is {auto|block|distributed}";

13.02.2011              д.т.н. Хаханова И.В, каф.АПВТ,
                        ХНУРЭ e-mail: hahanova@mail.ru
Создание ПЗУ
library IEEE; use IEEE.std_logic_1164.all;
entity rom_rtl is
     port ( ADDR : in INTEGER range 0 to 15; DATA : out STD_LOGIC_VECTOR (3 downto 0)
     );
end rom_rtl;

architecture XILINX of rom_rtl is
    subtype ROM_WORD is STD_LOGIC_VECTOR (3 downto 0);
    type ROM_TABLE is array (0 to 15) of ROM_WORD;
    constant ROM : ROM_TABLE := ROM_TABLE'(
           ROM_WORD'("0000"),                   ROM_WORD'("0001"),
           ROM_WORD'("0010"),                   ROM_WORD'("0100"),
           ROM_WORD'("1000"),                   ROM_WORD'("1100"),
           ROM_WORD'("1010"),                   ROM_WORD'("1001"),
           ROM_WORD'("1001"),                   ROM_WORD'("1010"),
           ROM_WORD'("1100"),                   ROM_WORD'("1001"),
           ROM_WORD'("1001"),                   ROM_WORD'("1101"),
           ROM_WORD'("1011"),                   ROM_WORD'("1111"));
begin
    DATA <= ROM(ADDR); -- Read from the ROM
end XILINX;


13.02.2011                  д.т.н. Хаханова И.В, каф.АПВТ,
                            ХНУРЭ e-mail: hahanova@mail.ru

цсноп 2 11_3_проект памяти

  • 1.
    Проектирование памяти наFPGA Проектирования систем на основе программируемой логики д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ 13.02.2011 e-mail: hahanova@mail.ru,
  • 2.
    Цель лекции исодержание  Цель: Изучить предлагаемые в FPGA ресурсы для проектирования памяти, научиться из использованию.  План 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 3.
    Структурная схема FPGA I/O Block Configurable Logic Block Interconnect Aria 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 4.
    Конфигурируемый логический блок(CLB) микросхемы серии Spartan 3E 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 5.
    Ресурсы памяти наFPGA триггеры(регистровая память), таблицы LUT из конфигурируемых блоков CLB, выделенные блоки памяти. 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 6.
    Конфигурация памяти SelectRAM RAM Число LUT 16 x 1S 1 16 x 1D 2 32 x 1S 2 32 x 1D 4 64 x 1S 4 64 x 1D 8 128 x 1S 8 S - однопортовая память D - двухпортовая память 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 7.
    Распределенная память SelectRAM(RAM16x1S) 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 8.
    Однопортовая распределенная память SelectRAM(RAM32x1S) 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 9.
    Двухпортовая распределенная памятьSelectRAM (RAM16x1D) 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 10.
    Схема сектора излевой колонки CLB 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 11.
    Режим двухпортовой памяти 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 12.
    Block RAM Пути данных 1. Write to and read from Port A 2. Write to and read from Port B 3. Data transfer from Количество блоков в микросхемах Port A to Port B 4. Data transfer from Port B to Port A 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 13.
    Режим сдвигового регистра 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 14.
    Модель сдвигового регистра libraryIEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_unsigned.all; entity SRL16_mine is port (Q : out STD_LOGIC; A0 : in STD_LOGIC; A1 : in STD_LOGIC; A2 : in STD_LOGIC; A3 : in STD_LOGIC; CLK : in STD_LOGIC; D : in STD_LOGIC); end entity; architecture Behavioral of SRL16_mine is signal Q_INT: std_logic_vector(15 downto 0); begin process(Clk) begin if (Clk'event and Clk='1') then Q_INT <= Q_INT(14 downto 0) & D; end if; end process; Q <= Q_INT(conv_integer(A3&A2&A1&A0)); end Behavioral; 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 15.
    Выделенные блоки памяти RAMB4_S#_S# WEA ENA RSTA DOA[#:0] CLKA ADD[#:0] DIA[#:0] WEB ENB RSTB DOB[#:0] CLKB ADD[#:0] DIB[#:0] Width Depth ADDR Bus Data Bus 1 4096 A DDR<11:0> DATA<0> 2 2048 ADDR<10:0> DATA<1:0> 4 1024 A DDR<9:0> DATA<3:0> 8 512 A DDR<8:0> DATA<7:0> 16 256 A DDR<7:0> DATA<15:0> 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 16.
    Карта памяти RAMB 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 17.
    Временные диаграммы дляоднопортового режима выделенных блоков памяти Block RAM 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 18.
    Временные диаграммы длядвухпортового режима выделенных блоков памяти Block RAM 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 19.
    BRAM16 Двухпортовая Однопортовая Описание конфигураций портов 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 20.
    Организация данных приразличных конфигурациях размеров портов А и В. 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 21.
    Модель памяти сасинхронным чтением library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ram_test is port (d: in std_logic_vector(7 downto 0); a: in std_logic_vector(6 downto 0); we: in std_logic; — вход разрешения записи clk: in std_logic; q: out std_logic_vector(7 downto 0)); end ram_test; architecture rtl of ram_test is type mem_type is array (127 downto 0) of std_logic_vector (7 downto 0); signal mem: mem_type; begin process (clk) begin if rising_edge(clk) then if (we = ‘1’) then mem(conv_integer(a))<= d; end if; end if; end process; q <= mem(conv_integer (a)); end rtl; 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 22.
    Модель памяти ссинхронным чтением library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity raminfr is port (clk , we : in std_logic; a, di : in std_logic_vector(3 downto 0); do : out std_logic_vector(3 downto 0)); end raminfr; architecture syn of raminfr is type ram_type is array (31 downto 0) of std_logic_vector (3 downto 0); signal RAM : ram_type; signal read_a : std_logic_vector(4 downto 0); begin process (clk) begin if (clk’event and clk = ‘1’) then if (we = ‘1’) then RAM(conv_integer(a)) <= di; end if; read_a <= a; end if; end process; do <= RAM(conv_integer(read_a)); end syn; 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 23.
    Реализация памяти ссинхр. чтением 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 24.
    Модель памяти спсевдо-синхронным чтением library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity raminfr is port (clk : in std_logic; we : in std_logic; a : in std_logic_vector(4 downto 0); di : in std_logic_vector(3 downto 0); do : out std_logic_vector(3 downto 0)); end raminfr; architecture syn of raminfr is type ram_type is array (31 downto 0) of std_logic_vector (3 downto 0); signal RAM : ram_type; begin process (clk) begin if (clk’event and clk = ‘1’) then if (we = ‘1’) then RAM(conv_integer(a)) <= di; end if; do <= RAM(conv_integer(a)); end process; end syn; 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 25.
    Двухпортовая память сасинхр. чтением library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity raminfr is port (clk : in std_logic; we : in std_logic; a : in std_logic_vector(4 downto 0); dpra : in std_logic_vector(4 downto 0); di : in std_logic_vector(3 downto 0); spo : out std_logic_vector(3 downto 0); dpo : out std_logic_vector(3 downto 0)); end raminfr; architecture syn of raminfr is type ram_type is array (31 downto 0) of std_logic_vector (3 downto 0); signal RAM : ram_type; begin process (clk) begin if (clk’event and clk = ‘1’) then if (we = ‘1’) then RAM(conv_integer(a)) <= di; end if; end if; end process; spo <= RAM(conv_integer(a)); dpo <= RAM(conv_integer(dpra)); end syn; 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 26.
    Двухпортовая память ссинхронным чтением.1 -- dual - port RAM with synchronous read Примечание. library ieee; Результат синтеза зависит от размера памяти. Память use ieee.std_logic_1164.all; небольшого размера use ieee.std_logic_unsigned.all; реализуется как entity xilinx_dual_port_ram_sync is распределенная generic ( ADDR_WIDTH : integer:=6; DATA_WIDTH : integer:=8); port ( clk, we: in std_logic; addr_a: in std_logic_vector(ADDR_WIDTH -1 downto 0); addr_b: in std_logic_vector(ADDR_WIDTH-1 downto 0); din_a: in std_logic_vector(DATA_WIDTH-1 downto 0); dout_a: out std_logic_vector(DATA_WIDTH-1 downto 0); dout_b : out std_logic_vector(DATA_WIDTH-1 downto 0)); end xilinx_dual_port_ram_sync; 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 27.
    Двухпортовая память ссинхронным чтением.2 architecture beh_arch of xilinx_dual_port_ram_sync is type ram_type is array (0 to 2**ADDR_WIDTH-1) of std_logic_vector(DATA_WIDTH- 1 downto 0); signal ram: ram_type; signal addr_a_reg, addr_b_reg : std_logic_vector(ADDR_WIDTH-1 downto 0); begin process (clk) begin if (clk'event and clk = '1') then if (we = '1') then ram(conv_integer(addr_a)) <= din_a; end if; addr_a_reg <= addr_a; addr_b_reg <= addr_b; end if; end process; dout_a <= ram(conv_integer(addr_a_reg)); dout_b <= ram(conv_integer(addr_b_reg)); end beh_arch; 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 28.
    Атрибуты программы XSTдля работы синтеза памяти RAM_EXTRACT и RAM_STYLE RAM_EXTRACT – константа для синтеза, разрешает или запрещает извлечение памяти, может принимать значение YES и NO, по умолчанию имеет значение YES. --Декларация атрибута attribute ram_extract: string; --Описание атрибута attribute ram_extract of {signal_name|entity_name}:{signal|entity} is "yes"; RAM_STYLE – константы синтеза, управляющая выбором ресурсов для генерации памяти. Допустиные значения: AUTO, BLOCK и DISTRIBUTED; по умолчанию AUTO. --Декларация атрибута attribute ram_style: string; --Описание атрибута attribute ram_style of {signal_name|entity_name}:{signal|entity} is {auto|block|distributed}"; 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru
  • 29.
    Создание ПЗУ library IEEE;use IEEE.std_logic_1164.all; entity rom_rtl is port ( ADDR : in INTEGER range 0 to 15; DATA : out STD_LOGIC_VECTOR (3 downto 0) ); end rom_rtl; architecture XILINX of rom_rtl is subtype ROM_WORD is STD_LOGIC_VECTOR (3 downto 0); type ROM_TABLE is array (0 to 15) of ROM_WORD; constant ROM : ROM_TABLE := ROM_TABLE'( ROM_WORD'("0000"), ROM_WORD'("0001"), ROM_WORD'("0010"), ROM_WORD'("0100"), ROM_WORD'("1000"), ROM_WORD'("1100"), ROM_WORD'("1010"), ROM_WORD'("1001"), ROM_WORD'("1001"), ROM_WORD'("1010"), ROM_WORD'("1100"), ROM_WORD'("1001"), ROM_WORD'("1001"), ROM_WORD'("1101"), ROM_WORD'("1011"), ROM_WORD'("1111")); begin DATA <= ROM(ADDR); -- Read from the ROM end XILINX; 13.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: hahanova@mail.ru