Хранение массива в FPGA

Я пытаюсь реализовать простой множитель. У меня есть текстовый файл, из которого есть два столбца. Я умножаю столбец 1 на столбец 2. Вот код в Verilog:

module File_read(
input clk
);

reg [21:0] captured_data[0:10];
reg [21:0] a[0:8];
reg [21:0] b[0:8];
reg [43:0] product[0:5];
`define NULL 0 
integer n=0;
integer i=0;
initial 
$readmemh("abc.txt",captured_data);
always @(posedge clk) begin
   product[i]<=captured_data[n]*captured_data[n+1];
   n<=n+2;
   i<=i+1;
end
endmodule

У меня есть плата Xilinx Spartan®-6 LX45 FPGA. И он предлагает 128-мегабайтную оперативную память ddr2 и 16-мегабайтную флэш-память x4 SPI для конфигурации и хранения данных.

Теперь я хочу сохранить свой файл на плате FPGA в памяти. Итак, как я могу это сделать? Должен ли я использовать IP-ядро для доступа к памяти или из любого другого источника?

P.S: Это мой первый раз, я храню что-либо на FPGA.

С Уважением!

Авайс


person Awais Hussain    schedule 30.11.2014    source источник


Ответы (1)


Прежде всего, не используйте DDR или флэш-память, если они вам действительно не нужны. В вашей FPGA достаточно блоков BlockRAM для хранения нескольких тысяч аргументов для вашего множителя.

Одним из простых способов является создание экземпляров двух блоков ОЗУ и их загрузка во время компиляции данными из файла. Для этого Xilinx предлагает такие инструменты, как data2mem.

В качестве альтернативы вы можете использовать соединение Ethernet или UART для отправки тестовых данных в ваш проект.

Редактировать 1 - Как создать экземпляр BlockRAM

Решение 1. Общее описание VHDL.

  type T_RAM is array(LINES - 1 downto 0) of std_logic_vector(BITS-1 downto 0);
  signal ram : T_RAM;
begin
  process (Clock)
  begin
    if rising_edge(Clock) then
      if (WriteEnable = '1') then
        ram(to_integer(WriteAddress)) <= d;
      end if;

      q <= ram(to_integer(ReadAddress));
    end if;
  end process;

Решение 2. В генераторе IPCore есть мастер для создания блоков BlockRAM и назначения внешних файлов.

Решение 3. Вручную создайте макрос BlockRAM. Каждое семейство FPGA поставляется с руководством по библиотеке HDL с поддерживаемыми макросами. Например, Virtex-5 содержит макрос RAMB36 на странице 311. .

Использование BlockRAM с файлами data2MEM и *.bmm (карта памяти BlockRAM) описано здесь.

person Paebbels    schedule 30.11.2014
comment
@user263210 user263210 хочет знать: как инициировать блочное ОЗУ FPGA? (у него/нее недостаточно репутации, чтобы добавлять комментарии) - person Stephan; 01.12.2014
comment
@ user263110 Спасибо за ваш вопрос. - person Paebbels; 01.12.2014