Добрый день.
Помогите, пожалуйста, разобраться с первым проектом для NIOS.
Связываю логику на плис (Cyclone III) и nios. Если конкретнее - в проекте имеется : PLL(мегафункция) , различная логика(24МГц с PLL) и nios(120 МГц c PLL). Логика собирает и обрабатывает данные, далее данные передаются на nios для дальнейшей передачи по usb. Так же часть логики управляется по линии PC-USB-NIOS-логика.
Для приёма данных от логики из плис используется 32-х битная шина , и три управляющих сигнала: read - запрос данных, write - передача данных(пока линия активна - ожидаем приём данных), и latch - готовность данных на линии, по фронту этого сигнала срабатывает прерывание и nios заглатывает данные с 32-х битной шины. Т.е. по запросу READ от nios - логика начинает процесс передачи данных на шину, происходит это за несколько транзакций, сигнал WRITE устанавливается логикой пока данные не будут полностью переданы.
Собственно проблема - "данный интерфейс". Данные теряются или вообще с линии читаются нули. К замечанию по поводу что не успеваю отрабатывать захват данных ниосом и тем самым теряю их, то скажу что имеется запас по частоте(120/24), и данные валидны на линии не менее 150 клоков логики (24 МГц). Плюс к этому замечено, что если на вход 32 битного порта nios повесить константной значение - всё работает на ура (в коде - //.testdata_export ({32{1'b1}})). Копаю в сторону SDC с TimeQuest и возможного использования FIFO вместо этой бороды. Заранее спасибо всем откликнувшимся!
Код
//transmit module template
TransmitModule #(.outputDataWidth(outputDataWidth),
.inputDataWidth(inputDataWidth)) transData (
.clk(clk),
.read(read),
.wInputData(wInputData),
.wOutputData(wOutputData),
.latchSignal(latchSignal),
.write(write)
);
QSysNios u0 (
.clk_clk (clk120), // clk.clk
.pioled_export (port), // pioled.export
.parallelport_export (parallPort), // parallelport.export
.controlusb_export (USBctrl), // controlusb.export
.usbinterrupt_export (USBirq), // usbinterrupt.export
.usbadr_export (USBadr), // usbadr.export
.epcsflashprogrammer_dclk (DCLKw), // epcsflashprogrammer.dclk
.epcsflashprogrammer_sce (SCEw), // .sce
.epcsflashprogrammer_sdo (SDOw), // .sdo
.epcsflashprogrammer_data0 (DATA0w), // .data0
.testdatacontrolinput_export ({1'b0,latchSignal,write}), // testdatacontrol.in_port
.testdatacontroloutput_export (read), // .out_port
.testdata_export (wOutputData), // testdata.export
//.testdata_export ({32{1'b1}}),
.testcontrol_export (wCommandTestReg) // testcontrol.export
Вот что в SDC на данный момент :
create_clock -name "clkRef" -period 41.666ns [get_ports {clkRef}]
derive_pll_clocks -create_base_clocks
set_clock_groups -exclusive -group {clkRef} -group {pll_inst|altpll_component|auto_generated|pll1|clk[0]}
set_clock_groups -exclusive -group {clkRef} -group {pll_inst|altpll_component|auto_generated|pll1|clk[1]}
set_clock_groups -exclusive -group {pll_inst|altpll_component|auto_generated|pll1|clk[0]} -group {pll_inst|altpll_component|auto_generated|pll1|clk[1]}