Например TDA7294

Форум РадиоКот • Просмотр темы - Доступ к BAR0 qsys pci-e в ПЛИС Cyclone IV на плате DB4CGX15
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс сен 21, 2025 13:58:43

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Доступ к BAR0 qsys pci-e в ПЛИС Cyclone IV на плате DB4CGX15
СообщениеДобавлено: Пт сен 19, 2014 09:34:42 
Родился

Зарегистрирован: Пт сен 19, 2014 09:13:18
Сообщений: 1
Рейтинг сообщения: 0
Здравствуйте, уважаемые форумчане!
Обращаюсь я со следующей просьбой.
Есть плата на которой располагаются Cyclone IV и PCI-E-endpoint интерфейс. Необходимо организовать передачу данных с ПК для последующей обработки на ПЛИС и затем отправки их обратно на ПК. Написан модуль ядра linux, который записывает в BAR0 регистр значение. На ПЛИС необходимо взять это значение, прибавить к нему двойку и вернуть обратно. Проблема заключается в том что я не могу дотянуться до BAR0 регистра из ПЛИСины, для того чтобы его модернизировать. Предпринимались попытки создания собственного модуля в QSYS (Quartus II web ed.) с коннектом по интерфейсу Avalon MM slave к выводу BAR 0 Avalon MM Master, и Avalon MM Master к выводу txs в pci-e. Все тщетно. Предпринималась попытка поиска регистра в сгенерированных файлах Qsys чтобы внутри модуля управляющей шины Avalon MM записать значение прибавленное к исходному в шину на выход Bar0.
Тоже без результатно. Как PCI-устройство плата воспринимается в ОС корректно.
Код модуля Qsys и изображение схемы приведены ниже:

Код:
`timescale 1 ps / 1 ps
module bvs_pci_server1bar #(
      parameter AUTO_CLOCK_SINK_CLOCK_RATE = "-1"
   ) (
      input  wire [31:0] serv_bar1_0_addr,          //     avalon_slave.address
      input  wire        serv_bar1_0_read,          //                 .read
      output wire        serv_bar1_0_waitreq,       //                 .waitrequest
      input  wire        serv_bar1_0_write,         //                 .write
      output wire [63:0] serv_bar1_0_readd,         //                 .readdata
      input  wire [63:0] serv_bar1_0_writed,        //                 .writedata
      input  wire [6:0]  serv_bar1_0_burstcnt,      //                 .burstcount
      input  wire [8:0]  serv_bar1_0_byteen,        //                 .byteenable
      output wire        serv_bar1_0_readdatavalid, //                 .readdatavalid
      output wire [19:0] serv_txs_addr,             //    avalon_master.address
      output wire [7:0]  serv_txs_byteen,           //                 .byteenable
      input  wire [63:0] serv_txs_readd,            //                 .readdata
      output wire        serv_txs_read,             //                 .read
      output wire        serv_txs_write,            //                 .write
      input  wire        serv_txs_readdatavalid,    //                 .readdatavalid
      input  wire        serv_txs_waitreq,          //                 .waitrequest
      output wire        serv_txs_chipsel,          //                 .chipselect
      output wire [6:0]  serv_txs_burstcnt,         //                 .burstcount
      output wire [63:0] serv_txs_writed,           //                 .writedata
      input  wire        serv_rst,                  //       reset_sink.reset
      input  wire        serv_clk,                  //       clock_sink.clk
      output wire        serv_irq                   // interrupt_sender.irq
   );

   // TODO: Auto-generated HDL template

   assign serv_bar1_0_waitreq = 1'b0;

   assign serv_bar1_0_readd = 64'b0000000000000000000000000000000000000000000000000000000000000000;

   assign serv_bar1_0_readdatavalid = 1'b0;

   assign serv_txs_burstcnt = 7'b0000000;

   assign serv_txs_addr = 20'b00000000000000000000;

   assign serv_txs_chipsel = 1'b0;

   assign serv_txs_write = 1'b0;

   assign serv_txs_read = 1'b0;

   assign serv_txs_byteen = 8'b00000000;
   
   reg[63:0] _value = 64'b0000000000000000000000000000000000000000000000000000000000000000;
   reg _irq = 1'b0;
   reg _txs_writed = 64'b0000000000000000000000000000000000000000000000000000000000000000;

   always @(posedge serv_clk)
   begin
      if(serv_bar1_0_readd != _value)
         begin
            _value <= serv_bar1_0_readd;
            _txs_writed <= serv_bar1_0_readd | 64'h00000002;
            _irq <= 1'b1;
         end
      else
         _irq <= 1'b0;
   end
   
   assign serv_value = _value;
   assign serv_irq = _irq;
   assign serv_txs_writed = _txs_writed;
   
endmodule


Большое спасибо!!!


Вложения:
qsys_interconnect.png [128.55 KiB]
Скачиваний: 752
qsys.png [45.78 KiB]
Скачиваний: 733
Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y