Цитата(_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 - структура