DSIoffe 0 Posted July 10, 2020 · Report post Здравствуйте все! Есть FIFO с разными тактами на входе и на выходе, сделано в Quartus из мегафункции dcfifo. Скажите, пожалуйста, как правильно описать для него ограничения в файле sdc? Я почитал FIFO Intel® FPGA IP User Guide, раздел DCFIFO Timing Constraint Setting, но не понял, к сожалению. Или подскажите, пожалуйста, что почитать. Заранее признателен. Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted July 10, 2020 · Report post Приветствую! Для своего, потом писанного кросс-клок FIFO вам обычно нужно описывать времянки для кросс-клок синхронизаторов (чаще всего gray-code). Основные требования - max delay и max skew путей между регистрами wr->rd и rd->wr должны быть не более минимального такта из w_clk|rd_clk. Так как вы используете готовое IP FIFO то эти констрейны уже заданны в корке (то есть и делать вам ничего не надо) и самое простое что можно сделать чтобы удовлетворить любопытство - посмотреть как они задаются в оригинале DC FIFO. Поскольку при генерации IP мегафункции создается фактически обертка над встроенным модулем dcfifo то ищите файл - Quartus_install_dir/ip/altera/megafunctions/fifo/dcfifo.sdc и смотрите что там и как. Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites
DSIoffe 0 Posted July 10, 2020 · Report post 4 минуты назад, RobFPGA сказал: делать вам ничего не надо Большое спасибо. Несколько слов, и всё понятно. Я в своём файле sdc запретил анализировать все пути между тактовыми доменами тактов FIFO. Если этого не сделать, временнОй анализатор выдаёт довольно много ошибок. Раз так, то на них можно не обращать внимание? Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted July 10, 2020 · Report post Приветствую! 1 minute ago, DSIoffe said: Я в своём файле sdc запретил анализировать все пути между тактовыми доменами тактов FIFO. Если этого не сделать, временнОй анализатор выдаёт довольно много ошибок. Раз так, то на них можно не обращать внимание? "Нет человека - нет проблем " Увы эта формула тут не работает. Для того чтобы спать спокойно нужно быть уверенным что человека проблем действительно нет. А для этого надо именно контролировать параметры max_delay и max_skew Например имеем переходы logic [PTR_WH-1:0] wr_bin, wr_gray, rd2wr_gray; logic [PTR_WH-1:0] rd_bin, rd_gray, wr2rd_gray; always @(posedge wr_clk) begin wr_gray <= gray(wr_bin); rd2wr_gray <= rd_gray; end always @(posedge rd_clk) begin rd_gray <= gray(rd_bin); wr2rd_gray <= wr_gray; end То для каждой шины (wr_gray -> wr2rd_gray и rd_gray -> rd2wr_gray) вы должны задать приблизительно такие ограничения: (формат команд для timequest2) set src_reg [get_registers {*|hierarhy_path|wr_gray[*]} ] set dst_reg [get_registers {*|hierarhy_path|wr2rd_gray[*]}] set_net_delay -from $src_reg -to $dst_reg -min 0 set_net_delay -from $src_reg -to $dst_reg -max -get_value_from_clock_period min_clock_period -value_multiplier 0.9 set_max_skew -from $src_reg -to $dst_reg -get_skew_value_from_clock_period min_clock_period -skew_value_multiplier 0.8 Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites
new123 0 Posted July 10, 2020 · Report post 1 hour ago, DSIoffe said: жду тактовыми доменами тактов FIFO. это вы под запрет поставили вообще анализ всей логики, лучше так не делать. 1 hour ago, DSIoffe said: Раз так, то на них можно не обращать внимание? надо более детально пути смотреть, чтобы ответить. Не помню, чтобы фифошка альтеровская выдавала хоть какие нибудь слаки. Может у вас проблема, где замешана фифошка. На выходе из нее и далее или перед входом. Quote Ответить с цитированием Share this post Link to post Share on other sites