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

 
 
> Передача данных из fpga в nios
_Anatoliy
сообщение Nov 28 2017, 10:26
Сообщение #1


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Коллеги, я сначала передавал данные(содержимое нескольких регистров 16 бит) через PIO и всё было нормально. Но у заказчика аппетит растёт, проект развивается и уже делать десятки PIO вроде как нехорошо. Для записи я использую параллельную шину данных + шина адреса , прекрасно работает, прописываю таким образом десятки регистров по всему проекту. Вот бы так и для чтения соорудить интерфейс. Единственное что смущает - Z-состояние на выходе невыбранных регистров. Как решаете подобную задачу? Наверняка есть отработанное решение...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Realking
сообщение Nov 28 2017, 11:07
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 498
Регистрация: 4-10-04
Из: Нижний Новгород
Пользователь №: 771



Цитата(_Anatoliy @ Nov 28 2017, 13:26) *
Коллеги, я сначала передавал данные(содержимое нескольких регистров 16 бит) через PIO и всё было нормально. Но у заказчика аппетит растёт, проект развивается и уже делать десятки PIO вроде как нехорошо. Для записи я использую параллельную шину данных + шина адреса , прекрасно работает, прописываю таким образом десятки регистров по всему проекту. Вот бы так и для чтения соорудить интерфейс. Единственное что смущает - Z-состояние на выходе невыбранных регистров. Как решаете подобную задачу? Наверняка есть отработанное решение...


Добавь в Qsys Avalon-MM Pipeline Bridge

через него и записать и прочитать можешь

в описании будет типа такого (System Verilog)

// FPGA IO Regs
.mm_ioreg_waitrequest(1'b0),
.mm_ioreg_byteenable(cpu_byteenable),
.mm_ioreg_address(cpu_address),
.mm_ioreg_read(cpu_read),
.mm_ioreg_readdata(cpu_readdata),
.mm_ioreg_readdatavalid(cpu_readdatavalid),
.mm_ioreg_write(cpu_write),
.mm_ioreg_writedata(cpu_writedata),
.mm_ioreg_burstcount(),
.mm_ioreg_debugaccess(),

для чтения (у меня 64 разрядная шина)

bit [2047:0] [7:0] ioreg_input;
assign ioreg_input = FPGA_Status_Registers;

always_ff @(posedge g_clk_100MHz, negedge g_reset_n) begin
if (!g_reset_n) begin
cpu_readdata <= '0;
cpu_readdatavalid <= 1'b0;
end
else begin
cpu_readdatavalid <= cpu_read;
cpu_readdata <= {
ioreg_input[{cpu_address, 3'b111}],
ioreg_input[{cpu_address, 3'b110}],
ioreg_input[{cpu_address, 3'b101}],
ioreg_input[{cpu_address, 3'b100}],
ioreg_input[{cpu_address, 3'b011}],
ioreg_input[{cpu_address, 3'b010}],
ioreg_input[{cpu_address, 3'b001}],
ioreg_input[{cpu_address, 3'b000}]
};
end
end

FPGA_Status_Registers - структура


--------------------
Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 07:49
Рейтинг@Mail.ru


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