Jump to content

    

FLTI

Свой
  • Content Count

    399
  • Joined

  • Last visited

Posts posted by FLTI


  1. Да, всё получилось после того, как убрал выходной регистр ( это в режиме OldData ):

    post-5832-1412091819_thumb.png

    Ещё раз благодарю SM, des00 и всех кто помог советами! :beer:

     

    Upd: На Cyclonre IV GX Визард не предлагает Write Throught, но OldData меня устроит.

  2. Недоглядел, на входе и выходе есть регистры и оба заданы были. Причём входной отключить нельзя.

    А выходной сейчас отключил , сейчас перекомпиилирую и посмотрю результат.

  3. Это Вы видимо с конвейеризацией запутались, на каком такте происходит реальная запись, и на сколько задерживается чтение из-за входных и выходных регистров. Например, задав адрес, на выходе соответствующее ему данное может появиться на следующем такте, а может через такт, а может даже через два, в зависимости от кол-ва регистров на входе и на выходе.

    Я не запутался, я задаю минимальные требования из того, что требует от меня Визард при определении параметров RAM: 2-PORT ( меньше, чем Old Data не поставишь, а другую конвееризацию я не задаю ) и получаю такой вот эффект сдвига, который мне не нравится и которого не было в случае с памятью из шаблона ( True Dual Port RAM with dual clocks ), но которую нельзя применять , т.к возможен конфликт при записи и чтении по одному и тому же адресу из разных портов.

    А для RAM: 2-PORT такого конфликта не будет, но есть сдвиг.

    Можно ли от него избавиться?

     

     

    это значит что память это не фифо, она не может сдвигать ячейки сама по себе. вы видите обработанный результат, а надо исходный. Адреса, данные, стробы.

    Адреса, данные, стробы для обоих случаев ( память из шаблона True Dual Port RAM with dual clocks и RAM: 2-PORT ) одинаковые, но результат разный.

    Поэтому вейформы смотреть нет смысла.

  4. сдается мне что выводы у вас не верные. вейвформы выложите

    Не понял Вас, что значит выводы неверные?

    Вейформы не применяю.

    В случае с памятью из шаблона ( True Dual Port RAM with dual clocks ) такого эффекта ( необходимость сдвигаться на одну ячейку ) не было.

    Если для RAM: 2-PORT в Визарде задать, что при одновременном обращении по одинаковому адресу чтобы считывалось новое значение ( New Data ), то сдвигаться придётся уже на 2 ячейки.

  5. Хорошо, всё понятно, всех благодарю за разъяснения.

    Я ожидал, что Квартус в явном виде укажет на то, что такую память нельзя собрать на регистрах, а вместо этого он выдал странный набор ошибок из которого не было понятно - в чём же дело ...

     

    Тогда взял память из Мегавизарда ( RAM: 2-PORT ) , задал всё как мне надо, установил, что при одновременном обращении по одинаковому адресу чтобы считывалось старое значение ( Old Data ).

    post-5832-1412088173_thumb.png

    Сделал тест по записи и чтению пока с одного только порта.

    И вижу, что чтобы получить правильное значение надо читать не из той ячейки, куда я записал, а из следующей.

    post-5832-1412088167_thumb.png

    В случае с памятью из шаблона ( True Dual Port RAM with dual clocks ) такого эффекта не было.

    Но видимо это неизбежно, это как бы плата за возможность одновременного обращения по одинаковому адреса из разных портов на разных клоках.

     

    Вопрос.

    Если применять память RAM: 2-PORT , то есть ли какой-нибудь приём/ухищрение, чтобы правильное значение читать всё-таки из той же ячейки, куда была сделана запись, а не со сдвигом на единицу?

  6. Я действовал согласно вот этому хелпу от Альтеры :

    http://quartushelp.altera.com/13.1/master...._dual_clock.htm

    В нём в последнем абзаце сказано, что можно принудительно заставить Квартус сделать память в виде регистров:

    If you are concerned about a potential mismatch, you can prevent Analysis & Synthesis from converting the registers into an altsyncram megafunction by turning off the Auto RAM Replacement logic option for the entity or instance that contains the dual-clock RAM.

    Я так и сделал ( set_global_assignment -name AUTO_RAM_RECOGNITION OFF -entity true_dual_port_ram_dual_clock ), но это вызывает ошибки...

  7. Здравствуйте!

    Потребовалось сделать небольшую 32 х 8 бит ( 32 байта ) 2-х портовую память, причём возможна ситуация, когда запись и чтение по ячейкам по одному и тому же адресу будет происходить одновременно.

    По шаблону в Квартусе создал создал True Dual Port RAM with dual clocks, т.к запись и чтение будут из разных клоковых доменов.

     

    // Quartus II Verilog Template
         // True Dual Port RAM with dual clocks
         
         module true_dual_port_ram_dual_clock
         #(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=5)
         (
             input [(DATA_WIDTH-1):0] data_a, data_b,
             input [(ADDR_WIDTH-1):0] addr_a, addr_b,
             input we_a, we_b, clk_a, clk_b,
             output reg [(DATA_WIDTH-1):0] q_a, q_b
         );
         
             // Declare the RAM variable
             reg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];
         
             always @ (posedge clk_a)
             begin
                 // Port A 
                 if (we_a) 
                 begin
                     ram[addr_a] <= data_a;
                     q_a <= data_a;
                 end
                 else 
                 begin
                     q_a <= ram[addr_a];
                 end 
             end
         
             always @ (posedge clk_b)
             begin
                 // Port B 
                 if (we_b) 
                 begin
                     ram[addr_b] <= data_b;
                     q_b <= data_b;
                 end
                 else 
                 begin
                     q_b <= ram[addr_b];
                 end 
             end
         
         endmodule

     

    Правильно ли я понимаю, что чтобы такая память правильно работала ( когда запись и чтение по ячейкам по одному и тому же адресу будет происходить одновременно ) надо, чтобы она была организована не как память, а как набор регистров?

     

    Если верно, что чтобы задать в Квартусе надо в *.qsf файл добавить строчку

    set_global_assignment -name AUTO_RAM_RECOGNITION OFF -entity true_dual_port_ram_dual_clock ,

    где true_dual_port_ram_dual_cloc - это название entity этой самой памяти?

    Если это тоже верно, то данный порядок действий вызывает странные ошибки:

     

    Error (10028): Can't resolve multiple constant drivers for net "ram[31][7]" at TrueDualPortDualClockRAM.v(30)
    Error (10029): Constant driver at TrueDualPortDualClockRAM.v(16)
    Error (10028): Can't resolve multiple constant drivers for net "ram[31][6]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[31][5]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[31][4]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[31][3]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[31][2]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[31][1]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[31][0]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[30][7]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[30][6]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[30][5]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[30][4]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[30][3]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[30][2]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[30][1]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[30][0]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[29][7]" at TrueDualPortDualClockRAM.v(30)
    Error (10028): Can't resolve multiple constant drivers for net "ram[29][6]" at TrueDualPortDualClockRAM.v(30)
    Error (12152): Can't elaborate user hierarchy "true_dual_port_ram_dual_clock:inst"
    Error: Result: ERROR: Error(s) found while running an executable. See report file(s) for error message(s). Message log indicates which executable was run last.
    
    Error: Failed to discover source files from compiler. Check Analysis & Elaboration report.

     

    Или всё-таки нельзя такую память задать в виде регистров?

  8. Оказывается проблема была в некачественном напряжении питания 1,2V ядра ПЛИС Cyclone IV GX на плате, что вызывало такой странный эффект - на современных матерях плата опознавалась как PCIe x 1 вместо PCIe x 4.

  9. У нас на работе все ПЛИСоводы имеют по пятку поставленных К, в одном что-то одно лучше работает, в другом -- другое...

    Есть ли какие-нибудь нюансы при установке нескольких Квартусов разных версий на одном ПК?

    И можно ли ставить, например, Q13.1 Web и Q13.1 Subscription на одном ПК?

  10. В принципе, если он так упорно хочет видеть именно Subscription, то можно его поставить и проверить как там обстоят дела B)

    Кстати проверял инсталяху на виртуальной машине (где сборки обычно делаю, а первый раз была лабовая машина) - так в общем в виртуалке у меня System Console и Transceiver Toolkit есть, но ничего не происходит вообще при их нажатии.. такие дела..

    Оказывается в Q13.1 и Q14.0 Transceiver Toolkit работает только для Arria V GT, Arria V GZ, Cyclone V, Cyclone V SoC, Stratix IV GT, Stratix IV GX, Stratix V, а поскольку у меня в Q активировано только семейство Cyclone IV GX, то у меня Transceiver Toolkit вообще и не видим.

    Поскольку в АльтераВики сказано, что для построения Глаза нужен как минимум Transceiver Toolkit в Q13.1, то значит мне yf Cyclone IV GX так глаз посмотреть не удастся :crying:

  11. Проверил в моём Quartus II 64-Bit Version 13.1.0 Build 162 10/23/2013 SJ Web Edition

    У меня всё есть, НО кричит, что без валидной Subscription он работать не будет:

    Ставил вот это: Quartus-web-13.1.0.162.iso

    Странно, у меня тот же билд Quartus II 32-Bit Version 13.1.0 Build 162 10/23/2013 SJ Web Edition, но на 32-битной Вин7 и при выборе "Tools/System Console" открывается System Console, в которой в закладке Tools нет Transceiver Toolkit:

    post-5832-1410802537_thumb.png

    Тоже самое на Q14 Web Edition. :wacko:

  12. 2 FLTI

    Возможно это прольёт немного света

    В этой статье есть ценная фраза:

    There are usually three major link training failures.

    One is a complete failure to establish a link of any width; indicated by the core output trn_lnk_up_n not asserting.

    The second is when the link trains to a lower width than intended, such as an x8 link training as x4.

    Third, is a link that is constantly entering into the RECOVERY state.

    Link training problems are normally due to board signal integrity problems or improper GTP/GTX usage.

     

    На AlteraWiki есть похожий документ Use Transceiver Toolkit to Measure PCI-Express Link Signal Integrity ( http://www.alterawiki.com/wiki/Use_Transce...Link%20Training ).

    Там говорится, что с помощью Altera Transceiver Toolkit можно как раз посмотреть "глаз".

    Но ни в Q13.1, ни в Q14.0 Web Edition в "Tools/System Console/Transceiver Toolkit" нет закладки "Transceiver Toolkit", которую предлагается выбрать в этой статье.

    Или Transceiver Toolkit доступен только в полной ( Subscription ) версии?

  13. а "глаз" смотрели на всех материнках и на всех линиях? каково его качество ?

    Нет, глаз пока нечем посмотреть, могу судить об устойчивости работы платы пока только по внешним признакам.

    Как я уже ранее писал, на чипсете P55 плата опознаётся как PCIe x 4 и работает устойчиво с потоком 300 Мбайт/с ( больше пока не надо ) , а на чипсете B75 и Z97 плата опознаётся как PCIe x 1 и работает устойчиво с потоком только 150 Мбайт/с.

     

     

     

  14. "не все йогурты одинаково полезны"(с)

     

    попробуйте запретить ASPM и принудительно активировать GEN1 вместо "Auto" для PCIe x16

     

    если биос при автоопределении пытается в слоте х16 найти GEN3 потом GEN2 и только в последнюю очередь GEN1

    то возможно ваша карта(FW в ней) после попыток GEN3 / GEN2 не так свежа и сваливается в х1 :laughing:

     

    а на старых чипсетах GEN3 биос не искал

    То есть Вы считаете, что причину надо искать не в своей плате, а в материнской плате?

    ASPM был по умолчанию отключен в БИОСе, а установка GEN1 вместо "Auto" ничего не дала...

     

    Посмотрел внимательно через PCI Scope регистры PCI Express Capabilities.

    Заметил, что в матери на чипсете Z97 ( где плата ошибочно опознаётся как х1 ) в Device Status Register значение Corretable Error Detected = Yes, а в матери на чипсете P55 ( где плата правильно опознаётся как х4 ) в Device Status Register значение Corretable Error Detected = No, т.е ошибки не было.

    Значит всё-таки проблема со стороны своей платы?

     

    Это для меня сейчас самое важное понять - проблема со стороны своей платы или в конфликте разных GEN на своей плате и на материнской плате?

  15. бывает что на материнках для упрощения разводки делают Lane reversal + Lane polarity reversal.

    Не все PCIe-корки это правильно понимают.

     

    Самый мерзкий прикол - это с механическими x8 или x16 слотами с подключенными электрически только первыми х4, и если они ещё и lane raversed.

    По факту там будут работать только х1 и х4 карточки

    Если вставить туда x8, то шанс что она не заведется 95%.

    Состояние Lane Reversal где-то отображается в PCI Express Capabilities ( например по данным PCI Scope )?

     

  16. Проверил свою тестовую плату с ядром PCIe x 4 GEN1 в слоте PCIe x 16 ( в режиме PCIe x 4 ) на матери с чипсетом Z97 и проверил её состояние через PCI Scope.

    Оказывается на матери с чипсетом Z97 параметр Negotiated Link Width оказался только лишь х1 и скорость потока также низкой, как и на матери с чипсетом B75.

    А на матери с чипсетом P55 параметр Negotiated Link Width оказался правильным х4 и поток высокий.

     

    Почему же на на матерях с чипсетом Z97 и B75 ( обе матери от Gigabyte ) в слоте PCIe x 16 ( в режиме PCIe x 4 ) плата опознаётся как PCIe х 1, а на матери с чипсетом P55 опознаётся как PCIe х 4?

    И что нужно сделать, чтобы и на матерях с чипсетом Z97 и B75 в слоте PCIe x 16 ( в режиме PCIe x 4 ) плата опознавалась бы как PCIe х 4?

     

    P.S. У меня на плате применён Lane Reversal.

  17. бывает что на материнках для упрощения разводки делают Lane reversal + Lane polarity reversal.

    Не все PCIe-корки это правильно понимают.

     

    Самый мерзкий прикол - это с механическими x8 или x16 слотами с подключенными электрически только первыми х4, и если они ещё и lane raversed.

    По факту там будут работать только х1 и х4 карточки

    Если вставить туда x8, то шанс что она не заведется 95%.

    А какие, например, материнские платы ( какие производители и чипсеты? ) с механическими x16 слотами с подключенными электрически только первыми х4 бывают lane reversed, а какие без lane reversed?

     

  18. у B75 ещё и PCI-шина торчит. В неё случаем, ничего вставлено не было? там тоже длительная блокировка транзакций по доступу к памяти может быть.

    У B75 в PCI-слот было вставлена плата, но к ней не было обращений.

    Эта же плата была вставлена в PCI-слот и на P55, но к ней не было обращений.

    То есть условия тестирования были равные.

     

    Сейчас надо возобновить тестирование.

    krux, скажите пожалуйста, а с какой буквой предпочтительнее выбирать матери каждой серии ( 7-я , 8-я, 9-я ) - Q, B или Z и на какую цифру чтобы оканчивался номер чипсета - 5 или 7 ?

    Есть ли какое-то общее правило с точки зрения, чтобы по шине был наибольший поток?

    В таблице сравнения все модели с разными буквами ( Q, B или Z ) и цифрами ( 5 и 7 ) выглядят примерно одинаковыми ...

  19. Сейчас уточнил, падение скорости было на матери Gigabyte GA-P75_D3, т.е чипсет был не P75, а B75.

    krux, скажите пожалуйста, а с какой буквой предпочтительнее выбирать матери каждой серии ( 7-я , 8-я, 9-я ) - Q, B или Z и на какую цифру чтобы оканчивался номер чипсета - 5 или 7 ?

    Есть ли какое-то общее правило с точки зрения, чтобы по шине был наибольший поток?

    В таблице сравнения все модели с разными буквами ( Q, B или Z ) и цифрами ( 5 и 7 ) выглядят примерно одинаковыми ...

  20. ещё одно отличие для вас может быть в том, что в Z75 через DMI льётся ещё и видео-поток от встроенной графики.

    Даже если встроенная графика не используется, а используется графическая карта в PCIe x 16 слоте?

    Спасибо за ответ!

  21. подключение через разные шины / разные чипсеты дают сильно разный ready latency на первый DMA write из девайса в память.

    даже больше, подключение через PCIe, торчащие напрямую из процессора и через южный мост (который к процессору через DMI подключен) - тоже разное.

    сделать с этим ничего нельзя.

    На большинстве матерей только два слота PCIe x 16, один из которых для видеокарты, а другой в режиме PCIe x 4.

    Так вот этот слот, который в режиме PCIe x 4, разве он может быть организован по-разному - напрямую из процессора или через южный мост?

     

    Для Windows можно воспользоваться Pex Device Editor: http://plxtech.com/products/sdk/pde

    Разные чипсеты могут себя по разному вести. Интересно, а сколько запросов на чтение отправляет DMA канал ?

    Если он отправляет один запрос и затем ждёт ответа, то это скорость очень сильно ограничивает.

    И до 300 Мбайт/с можно не дотянуть.

    С этим всё нормально ( отправляются несколько запросов ), вопрос в том, почему на более старой матери P55 нет ограничений по скорости, а на более новой P75 - есть ...

     

  22. 300 МБ/с для PCIe x4 - это совсем небольшой поток.

     

    Потери данных - это сколько данных теряется?

    Посмотрите, как определяется плата в системе (LinkStatus) на 75-ом чипсете..

     

    sudo lspci -vvv -d ваш_manufacturer_id:

    У меня нет Linux, проверял на WIN7 т.к работать должно на WIN7.

    А в чём идея?

    Почему плата может по-разному определяться на P55 и P75?