Jump to content

    

billidean

Свой
  • Content Count

    245
  • Joined

  • Last visited

Everything posted by billidean


  1. имеется выход приемника rxdata. на него должны выдаваться все данные, которые поступают на вход, после десериализатора само собой. я пишу все данные, идущие с этого выхода, в память, не обращая внимания на всякие флаги, начиная с момента начала выдачи от передатчика. И получаю всякую лажу, но только не то, что передавал. На счет чипов приемника/передатчика: SD и Enable - поданы, а вот на приемнике нет возможности проверить сигналы Mute и Bypass, т.к. плата лакированная, а покрытие портить не хотелось бы, а сами сигналы идут от MaxII, расположенного на этой же плате для загрузки в Stratix конфигурации, и им управлять я не могу никак. Есть большое подозрение, что приемник в режиме Mute висит все время. З.Ы. Я уже ЗАДОЛБАЛСЯ с этим SDI :cranky:
  2. Вообще, глядя на инфу по ядру, оно выставляет сигнал о наличии TRS(rx_trs) уже при появлении первого слова - 0x3FF. Сегодня нарыл, что для StratixIV GX при генерации ядра из MegaWizard необходимо выставить галочку "Use soft logic". почему-то только для Stratix GX, Stratix II GX or Stratix IV GX и только при режиме SD-SDI. Я пока это не применил, не успел, но попробую.
  3. to DmitryR: спасибо, буду завтра все пробовать. я впервые с этим интерфейсом знакомлюсь, поэтому, как говорится - ни в зуб ногой :rolleyes:
  4. плата - Stratix IV GX FPGA Development Board. выход передатчика ( нога стратикса, предназначенная для этого) подключен к LMH0302SQ cable driver, а вход приемника (нога стратикса) - к LMH0344 cable equalizer.
  5. ЧИП???? на отладочной плате, в стратиксе4 формирую через мегавизард приемник и передатчик. далее sdш_tx к ноге стратикса, подключенной в выводу из платы, sdi_rx к ноге стратикса, подключенной в выводу из платы, соединяю эти выводы между собой прилагаемым в комплекте кабелем. и все... не знаю про чип :blush:
  6. работаю с кристаллом StratixIV, приемник и передатчик делаю из MegaFunction, конфигурю обоих как SD-SDI, т.е. на малые скорости обмена. за идею смотреть весь принимаемый поток спасибо, попробую. вопрос: какие частоты загонять на входы реконфигурации передатчика и приемника?? (сейчас подаю на них теже тактовые, что и тактирование передачи/приема)
  7. Имею передатчик и приемник на одном кристалле, соединил выход передатчика со входом приемника, установил все сбросы в ноль, режимы SD-SDI. Передаю (txdata) все '1', на след. такте (tx_pclk) все '0', на след. такте опять все '0'. При этом все время отслеживаю появления сигнала rx_trs на приемнике - его нет. подскажите плзззз.
  8. не знаю насчет "6 нс на метр", но почему бы неразвести с одинаковой длинойдорожки?
  9. не помню, где точно, но такая проблема уже где-то рассматривалась, и там было решение - борьба с метастабильностью. регистрировать-регистрировать и еще раз регистрировать все сигналы в процессах.
  10. Спасибо за дельный совет. Перерыл имеющиеся errata на сайте альтеры и из полезного нарыл: 1. увеличить параметр tRP 2. Вместо настроек CHIP-ROW-BANK-COL использовать CHIP-BANK-ROW-COL (это у меня было с самого начала проекта) 3. Пересобрать проект в Q 10.0 из этого всего я сделал п.1, и это помогло - я отключил опции манипулирования вручную сигналами precharge и refresh, и данные перестали биться. но вот с п.3 проблема, моя контора итак потратилась на Q 9.1. А может можно только ядро контроллера заменить как-нить? :rolleyes:
  11. при local_size=4 и манипулированием сигналами precharge и refresh у меня вроде получилось сделать ОЗУ из DDR3. Но попытки сделать все то же самое с local_size=64 ничего не получается, данные портиться начинают. Вообще кто-нибудь использовал local_size=64? если да, то ПЛЗ подскажите что-нить
  12. А можете уточнить, какие именно глюки и кто именно устранял???
  13. Сегодня пробовал отключить эту галочку при насчтройке контроллера DDR3. В результате данные записываются битые на 50 процентов. Вернул обратно - все ок.
  14. может дело не при чтении вовсе, а, например, когда идет режим записи данных, они снаружи переключаются на следующие, а уже в железо не записываются, какие-нибудь коллизии или задержки или недоустановка адресов например
  15. В документации на HPCII говорится, что использовать сигнал precharge необходимо при переключении банков памяти, И я этому поверил Моя система работает с адресами в пределах одного банка. Запись данных производится пакетаами по 100 слов. Сейчас я использую local_size=4(выше в коде было 2). Я как честный человек провожу строб сигнала precharge каждый раз перед началом передачи пакета(100). Опытным путем я выяснил (может это только у меня ), что при таком раскладе в память пишутся какие-то битые данный процентов на 5. Я долго тыкал клаву на всякие кнопки и натыкал выход из моей ситуации. При каждой установке бурста(local_burstbegin) я загонял строб сигнала precharge, и о чудо :w00t: данные перестали биться. З.Ы.: вот такая моя история борьбы начинающего ПЛИС-схемотехника с HPCII
  16. Спасибо ОГРОМНОЕ замечательному форуму за такую плотную поддержку. Но я уже сам все сделал. З.Ы. А могли бы подсказать. З.З.Ы. Вот так все здесь и делают: "Я то знаю ответ :tongue: но говорить не буду. Пусть сами пытаются"
  17. Подскажите плз, правильно ли я представляю себе циклограмму при local_size=2: phy_clk : _I`I__I`I__I`I__I`I__I`I__I`I__I`I__I`I__I`I__I`I__I`I__I`I__ local_burstbegin : _I````I____I````I____I````I____I````I____I````I____I````I____ local_address : _<:::::::::><:::::::::><:::::::::><:::::::::><:::::::::>_____ local_write_data : _<:::::::::><:::::::::><:::::::::><:::::::::><:::::::::>_____ Извините за плохую читабельность, торопился :rolleyes:
  18. Всех с праздником, мужики. Уже неделю сижу с проблемой:: есть код (примерный): ... ... write_data_in : in std_logic_vector(63 downto 0); ... read_data_out : out std_logic_vector(63 downto 0); rdata_valid_out : out std_logic := '0'; ... ... local_size <= "010"; process( phy_clk ) variable var_local_address : std_logic_vector(23 downto 0) := ( others => '0' ); variable counter_write : integer := 0; variable counter_read_req : integer := 0; variable counter_read_data : integer := 0; begin case( step ) is --- when step_pre => if( start_write == '1' ) then counter_write := 100; step := step_write_first; end if; if( start_read == '1' ) then counter_read_req := 100; counter_read_data := 100; step := step_read; end if; local_burstbegin <= '0'; local_write_req <= '0'; local_read_req <= '0'; local_address <= ( others => '0' ); --начинаю с 0-го адреса var_local_address <= ( others => '0' ); --начинаю с 0-го адреса --- when step_write_first => if( counter_write = 0 ) then local_address <= ( others => '0' ); local_write_req <= '0'; local_burstbegin <= '0'; step := step_pre; else if( local_ready = '1' ) then local_address <= var_local_address; local_write_req <= '1'; local_burstbegin <= '1'; local_write_data(63 downto 0) <= write_data_in(63 downto 0); step := step_write_second; end if; end if; --- when step_write_second => local_burstbegin <= '0'; counter_write := counter_write - 1; var_local_address <= (инкремент var_local_address) step := step_write_first; --- when step_read => if( counter_read_req = 0 ) then local_address <= ( others => '0' ); local_read_req <= '0'; local_burstbegin <= '0'; step := step_pre; else if( local_ready = '1' ) then local_address <= var_local_address; local_read_req <= '1'; local_burstbegin <= '1'; var_local_address <= (инкремент var_local_address) counter_read_req := counter_read_req - 1; end if; end if; if( counter_read_data = 0 ) then rdata_valid_out <= '0'; step := step_pre; else if( local_rdata_valid = '1' ) then rdata_valid_out <= '1'; read_data_out(63 downto 0) <= local_rdata(63 downto 0); counter_read_data := counter_read_data - 1; else rdata_valid_out <= '0'; end if; end if; end case; end process; На железе (Stratix IV) получаю данные read_data_out правильные процентов на 99, а 1% битые. Почему так??? Не совсем вник в то, когда менять адрес относительно сигнала local_burstbegin, по фронту или по спаду бурста.