h0t 0 19 февраля, 2012 Опубликовано 19 февраля, 2012 · Жалоба ВСЕМ ОГРОМНОЕ СПАСИБО ЗА НАСТАВЛЕНИЯ. Проблема оказалась в строчке: if ( conv_integer(to_stdLogicVector(ChannelOn(31 downto 0))) = 0 and conv_integer(to_stdLogicVector(ChannelOn(63 downto 32))) = 0 ) then она не отрабатывала как надо, после переписывания этого куска все заработало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 19 февраля, 2012 Опубликовано 19 февраля, 2012 · Жалоба все заработало. Сомнения гложат. Эта Ваша экономия ресурсов CPLD (без клоков и слоев регистров) до добра не доведет. Прогоните для приличия Ваш проект на FPGA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
h0t 0 19 февраля, 2012 Опубликовано 19 февраля, 2012 · Жалоба Сомнения гложат. Эта Ваша экономия ресурсов CPLD (без клоков и слоев регистров) до добра не доведет. Прогоните для приличия Ваш проект на FPGA. Про клоки понятно, а вот на счет слоев регистров не совсем понял. Спасибо соберу проверю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
h0t 0 19 февраля, 2012 Опубликовано 19 февраля, 2012 · Жалоба Радовался рано, чуть поменял тест и перестало работать. (между посылками сделал паузу не кратную клокам). Проект прилагаю. Почему-то вылазит опять Х в post-fit'e... UART_cpld_prel.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 19 февраля, 2012 Опубликовано 19 февраля, 2012 · Жалоба 2 h0t Собственно проблема даже не в том как написано (хотя и в этом тоже), там главный трабл заключается в этом: entity RS422_receiver is Port ( SCK : in STD_LOGIC; RXD : in STD_LOGIC; ... if (RXD='0' and prevRXD='1') then -- Start bit, ... Собственно вас должно было на это натолкнуть вот это в модельсиме: # Time: 2118500 ps Iteration: 18 Instance: /main_schematic_main_schematic_sch_tb/UUT/XLXI_35_RxReady_REG # ** Warning: /X_FF HOLD High VIOLATION ON I WITH RESPECT TO CLK; # Expected := 4.5 ns; Observed := 1.5 ns; At : 2118.5 ns И если глянуть на это самый тригер то можно увидеть что реально по холду не выдерживается времянка потому что так устанавливаются данные на самом DATA-входе дизайна. Асинхронные сигналы обычно нужно нарезать регистрами, чтобы не иметь потом в синхронных дизайнах проблем с неопреденными состояниями тригеров. Об этом, я так понял, вам намекал sazh, когда говорил про слой регистров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
h0t 0 19 февраля, 2012 Опубликовано 19 февраля, 2012 (изменено) · Жалоба 2 h0t Собственно проблема даже не в том как написано (хотя и в этом тоже), там главный трабл заключается в этом: entity RS422_receiver is Port ( SCK : in STD_LOGIC; RXD : in STD_LOGIC; ... if (RXD='0' and prevRXD='1') then -- Start bit, ... Собственно вас должно было на это натолкнуть вот это в модельсиме: И если глянуть на это самый тригер то можно увидеть что реально по холду не выдерживается времянка потому что так устанавливаются данные на самом DATA-входе дизайна. Асинхронные сигналы обычно нужно нарезать регистрами, чтобы не иметь потом в синхронных дизайнах проблем с неопреденными состояниями тригеров. Об этом, я так понял, вам намекал sazh, когда говорил про слой регистров. Я правильно понимаю, что после приемника нужно поставить защелку для данных и сигнала готовности данных по CLK? После долгих чтений статией понял что проблема с метастабильностью системы. Теперь нужно думать как с этим жить.... Не совсем сейчас понимаю как это побороть. Засунул D-триггеры на D по CLK, перед приемником не помогло. Да и теперь понятно почему. Помогут ли асинхронные регистры? Изменено 20 февраля, 2012 пользователем h0t Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 20 февраля, 2012 Опубликовано 20 февраля, 2012 · Жалоба ... Засунул D-триггеры на D по CLK, перед приемником не помогло. В каком смысле - не помогло ? ... Помогут ли асинхронные регистры? Это какие собсно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
h0t 0 29 февраля, 2012 Опубликовано 29 февраля, 2012 (изменено) · Жалоба В каком смысле - не помогло ? Это какие собсно? Это некие ASYNC_REG, правда я сильно не разбирался что это пока http://www.xilinx.com/itp/xilinx10/isehelp...c_registers.htm. Вот решил проект новый попробовать сделать (содрал идею с коры) и защелки поставил но iSim все равно ведет себя неадекватно... P.S. В прошивке не реализован поиск стопового бита 1го последнего. обвал происходит на первой посылке... UART_Receiver.rar Изменено 29 февраля, 2012 пользователем h0t Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 4 1 марта, 2012 Опубликовано 1 марта, 2012 · Жалоба Это некие ASYNC_REG, правда я сильно не разбирался что это пока http://www.xilinx.com/itp/xilinx10/isehelp...c_registers.htm. Constraint ASYNC_REG - указывает симуляторам, что мы (Разработчик) знаем, что на выходе этого триггера будет метастабильное состояние сваливающееся в устойчивое состояние за 1 период тактовой частоты. Поэтому, при симуляции не надо отображать на выходе триггера с этим constraint'ом неопределённое значение (так называемый X). На работу самой ПЛИС этот constraint никак не влияет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
h0t 0 3 марта, 2012 Опубликовано 3 марта, 2012 · Жалоба Огромное всем спасибо, проблема исчерпана. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться