Доступ к BAR0 qsys pci-e в ПЛИС Cyclone IV на плате DB4CGX15

Программируемая логика - это не так уж и сложно. Разберемся вместе.
Ответить
VSBochkov
Родился
Сообщения: 1
Зарегистрирован: Пт сен 19, 2014 09:13:18

Доступ к BAR0 qsys pci-e в ПЛИС Cyclone IV на плате DB4CGX15

Сообщение VSBochkov »

Здравствуйте, уважаемые форумчане!
Обращаюсь я со следующей просьбой.
Есть плата на которой располагаются 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 КБ) 769 скачиваний
qsys.png
(45.78 КБ) 750 скачиваний
Реклама
Ответить

Вернуться в «ПЛИС»