реклама на сайте
подробности

 
 
> Altera PCI-E - как получить Bus Device Function, Для генерации своих TLP на Cyclone IV GX
AVR
сообщение Feb 5 2017, 17:44
Сообщение #1


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Есть полностью рабочий обмен на Cyclone IV GTX на чтение и запись с достаточной скоростью порядка 100 Мбайт/с. Однако есть одна проблема - пришлось захардкодить номер bus-device-function (BDF) в виде константы 16'h0200. Соответственно, если вставить такую карточку в другой слот она очевидно работать не будет. Чтобы работало в любом разъеме любого компьютера - нужно получать свой BDF динамически.

Из документации я вижу Configuration Space Register Access Timing. Там говорят что по фронтам на pld_clk будет инкрементироваться адрес tl_cfg_add и выводиться данные по этому адресу на шину tl_cfg_ctl. На адресе F сидит то что мне нужно: cfg_busdev[12:0].

Код
reg [3:0] cfg_clock;
wire [3:0] cfg_addr;
wire [31:0] cfg_data;
initial cfg_clock = 0;

pcie_core pcie(
// ...
.pld_clk(cfg_clock[3]),
.tl_cfg_add(cfg_addr),
.tl_cfg_ctl(cfg_data),
// ...
);

reg [15:0] bdf;
initial bdf = 16'h0200;
always @(posedge core_clk_out) begin
cfg_clock <= cfg_clock + 1;
if(cfg_addr == 4'hF) bdf <= {cfg_data[12:0], 3'b0}
Вроде правильно, через делитель задается pld_clk(cfg_clock[3]) и соответственно должен инкрементиться cfg_addr. Когда он станет 4'hF я ловлю нужный bus-device, а device у меня ноль.

Однако через signal tap я вижу что пакеты у меня шастают с нулевым BDF и ничего не работает, кажется эта шина не работает вовсе.

Там ли я смотрю BDF? Есть ли способ проще, не лежит ли BDF где-то готовенький?
А может возможен обмен и вовсе с нулевым BDF?


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
novartis
сообщение Feb 7 2017, 04:55
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



А зачем надо было делить core_clk_out на 16?

Код
...
.pld_clk(cfg_clock[3]),
...
always @(posedge core_clk_out) begin
cfg_clock <= cfg_clock + 1;
...


Вы же в этой теме https://electronix.ru/forum/index.php?showtopic=138904
выложили свой вариант подключения pcie корки, и там .pld_clk(core_clk_out).

Как говорится: работает - не трогай.
Вот и я свой костыль пока трогать не буду biggrin.gif
Go to the top of the page
 
+Quote Post
AVR
сообщение Feb 7 2017, 09:46
Сообщение #3


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(novartis @ Feb 7 2017, 07:55) *
А зачем надо было делить core_clk_out на 16?
Чисто из привычки, не люблю когда всё на максимальной частоте напрягается. Оказалось на чуть меньшей оно не работает вовсе. А то, о чем я переживал, оно само внутри частота делится и значения эти конфигурационных регистров не на 125 МГц вылезает, а на во много раз меньшей.
Цитата
Вот и я свой костыль пока трогать не буду biggrin.gif
Да, наверное не стоит. Хотя по факту - 5 строчек кода.


--------------------
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 13:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016