Jump to content

    

FLTI

Свой
  • Content Count

    399
  • Joined

  • Last visited

Everything posted by FLTI


  1. Цитата(oldparrot @ Oct 4 2014, 19:55) http://www.aliexpress.com/store/1100062 А что-нибудь по-серьёзнее на собственном опыте есть проверенное? У меня есть заказ на прототип - плата 4-х слойная, 0.13 / 0.13 мм, на FR-5, gold fingers, с контролем дифф. пар. Кого посоветуете через Aliexpress?
  2. Цитата(Elsystems @ Aug 8 2014, 20:27) Полно производителей работает через Aliexpress. Заказать там плату легко от 1 штуки. Часто китайцы делают минимум 5. Но все равн эти 5 стоят в несколько раз дешевле, чем 1 шт. в РФ. Кого-то из производителей через Aliexpress можете конкретно посоветовать?
  3. Да, всё получилось после того, как убрал выходной регистр ( это в режиме OldData ): [attachment=87290:qaz6.png] Ещё раз благодарю SM, des00 и всех кто помог советами! Upd: На Cyclonre IV GX Визард не предлагает Write Throught, но OldData меня устроит.
  4. Здравствуйте! Потребовалось сделать небольшую 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. Или всё-таки нельзя такую память задать в виде регистров?
  5. Недоглядел, на входе и выходе есть регистры и оба заданы были. Причём входной отключить нельзя. А выходной сейчас отключил , сейчас перекомпиилирую и посмотрю результат.
  6. Цитата(SM @ Sep 30 2014, 19:10) Это Вы видимо с конвейеризацией запутались, на каком такте происходит реальная запись, и на сколько задерживается чтение из-за входных и выходных регистров. Например, задав адрес, на выходе соответствующее ему данное может появиться на следующем такте, а может через такт, а может даже через два, в зависимости от кол-ва регистров на входе и на выходе. Я не запутался, я задаю минимальные требования из того, что требует от меня Визард при определении параметров RAM: 2-PORT ( меньше, чем Old Data не поставишь, а другую конвееризацию я не задаю ) и получаю такой вот эффект сдвига, который мне не нравится и которого не было в случае с памятью из шаблона ( True Dual Port RAM with dual clocks ), но которую нельзя применять , т.к возможен конфликт при записи и чтении по одному и тому же адресу из разных портов. А для RAM: 2-PORT такого конфликта не будет, но есть сдвиг. Можно ли от него избавиться? Цитата(des00 @ Sep 30 2014, 19:08) это значит что память это не фифо, она не может сдвигать ячейки сама по себе. вы видите обработанный результат, а надо исходный. Адреса, данные, стробы. Адреса, данные, стробы для обоих случаев ( память из шаблона True Dual Port RAM with dual clocks и RAM: 2-PORT ) одинаковые, но результат разный. Поэтому вейформы смотреть нет смысла.
  7. Цитата(des00 @ Sep 30 2014, 18:53) сдается мне что выводы у вас не верные. вейвформы выложите Не понял Вас, что значит выводы неверные? Вейформы не применяю. В случае с памятью из шаблона ( True Dual Port RAM with dual clocks ) такого эффекта ( необходимость сдвигаться на одну ячейку ) не было. Если для RAM: 2-PORT в Визарде задать, что при одновременном обращении по одинаковому адресу чтобы считывалось новое значение ( New Data ), то сдвигаться придётся уже на 2 ячейки.
  8. Хорошо, всё понятно, всех благодарю за разъяснения. Я ожидал, что Квартус в явном виде укажет на то, что такую память нельзя собрать на регистрах, а вместо этого он выдал странный набор ошибок из которого не было понятно - в чём же дело ... Тогда взял память из Мегавизарда ( RAM: 2-PORT ) , задал всё как мне надо, установил, что при одновременном обращении по одинаковому адресу чтобы считывалось старое значение ( Old Data ). [attachment=87289:qaz4.png] Сделал тест по записи и чтению пока с одного только порта. И вижу, что чтобы получить правильное значение надо читать не из той ячейки, куда я записал, а из следующей. [attachment=87288:qaz5.png] В случае с памятью из шаблона ( True Dual Port RAM with dual clocks ) такого эффекта не было. Но видимо это неизбежно, это как бы плата за возможность одновременного обращения по одинаковому адреса из разных портов на разных клоках. Вопрос. Если применять память RAM: 2-PORT , то есть ли какой-нибудь приём/ухищрение, чтобы правильное значение читать всё-таки из той же ячейки, куда была сделана запись, а не со сдвигом на единицу?
  9. Я действовал согласно вот этому хелпу от Альтеры : 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 ), но это вызывает ошибки...
  10. Здравствуйте! Есть ли какое-то отличие в работе слотов PCIe x 4 на разных материнских платах, например на 55-ом интеловском чипсете и на 75-ом интеловском чипсете? Судя по описанию на материнской плате на 55-ом интеловском чипсете PCIe x 4 соответствует GEN1, а на 75-ом - уже GEN2. На своей тестовой плате с ядром PCIe x 4 GEN1 заметил, что скорость передачи host->FPGA на 75-ом чипсете меньше, чем на 55-ом. Насколько точно меньше, пока померить не могу, но видно , что поток 300 МБайт/с через host->FPGA на 55-ом нормально проходит, а на 75-ом идут потери данных. Вот как устроено это ядро PCIe x 4 GEN1 на базе Altera HardIP : Writes "host->FPGA" are made by DMA reads by the FPGA in two steps: The FPGA sends a read request packet and the host sends the data in a completion packet. The FPGA can have several read requests pending for the same stream. Таким образом, пропускная способность зависит от того, насколько быстро откликается host, т.е материнская плата. Так вот получается, что материнская плата на 55-ом интеловском чипсете откликается быстрее, чем на 75-ом интеловском чипсете. Почему, в чём может быть причина и как это исправить?
  11. Оказывается проблема была в некачественном напряжении питания 1,2V ядра ПЛИС Cyclone IV GX на плате, что вызывало такой странный эффект - на современных матерях плата опознавалась как PCIe x 1 вместо PCIe x 4.
  12. Цитата(WitFed @ Jul 10 2014, 16:40) У нас на работе все ПЛИСоводы имеют по пятку поставленных К, в одном что-то одно лучше работает, в другом -- другое... Есть ли какие-нибудь нюансы при установке нескольких Квартусов разных версий на одном ПК? И можно ли ставить, например, Q13.1 Web и Q13.1 Subscription на одном ПК?
  13. Цитата(Kuzmi4 @ Sep 16 2014, 12:14) В принципе, если он так упорно хочет видеть именно Subscription, то можно его поставить и проверить как там обстоят дела Кстати проверял инсталяху на виртуальной машине (где сборки обычно делаю, а первый раз была лабовая машина) - так в общем в виртуалке у меня 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 так глаз посмотреть не удастся
  14. Цитата(Kuzmi4 @ Sep 15 2014, 20:25) Проверил в моём 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: [attachment=87025:111.png] Тоже самое на Q14 Web Edition.
  15. Цитата(Kuzmi4 @ Sep 15 2014, 18:54) 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 ) версии?
  16. Цитата(Kuzmi4 @ Sep 15 2014, 18:54) 2 FLTI Возможно это прольёт немного света Если Вы не возражаете, то продолжим в тематическом разделе по PCIe. http://electronix.ru/forum/index.php?showt...p;#entry1279436
  17. А куда там MegaWizard пропал или прячется где?
  18. Цитата(Bios71 @ Sep 15 2014, 13:40) а "глаз" смотрели на всех материнках и на всех линиях? каково его качество ? Нет, глаз пока нечем посмотреть, могу судить об устойчивости работы платы пока только по внешним признакам. Как я уже ранее писал, на чипсете P55 плата опознаётся как PCIe x 4 и работает устойчиво с потоком 300 Мбайт/с ( больше пока не надо ) , а на чипсете B75 и Z97 плата опознаётся как PCIe x 1 и работает устойчиво с потоком только 150 Мбайт/с.
  19. Цитата(Bios71 @ Sep 15 2014, 11:42) "не все йогурты одинаково полезны"(с) попробуйте запретить ASPM и принудительно активировать GEN1 вместо "Auto" для PCIe x16 если биос при автоопределении пытается в слоте х16 найти GEN3 потом GEN2 и только в последнюю очередь GEN1 то возможно ваша карта(FW в ней) после попыток GEN3 / GEN2 не так свежа и сваливается в х1 а на старых чипсетах 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 на своей плате и на материнской плате?
  20. Цитата(krux @ Jun 9 2014, 11:41) бывает что на материнках для упрощения разводки делают Lane reversal + Lane polarity reversal. Не все PCIe-корки это правильно понимают. Самый мерзкий прикол - это с механическими x8 или x16 слотами с подключенными электрически только первыми х4, и если они ещё и lane raversed. По факту там будут работать только х1 и х4 карточки Если вставить туда x8, то шанс что она не заведется 95%. Состояние Lane Reversal где-то отображается в PCI Express Capabilities ( например по данным PCI Scope )?
  21. Проверил свою тестовую плату с ядром 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.
  22. Цитата(krux @ Jun 9 2014, 11:41) бывает что на материнках для упрощения разводки делают Lane reversal + Lane polarity reversal. Не все PCIe-корки это правильно понимают. Самый мерзкий прикол - это с механическими x8 или x16 слотами с подключенными электрически только первыми х4, и если они ещё и lane raversed. По факту там будут работать только х1 и х4 карточки Если вставить туда x8, то шанс что она не заведется 95%. А какие, например, материнские платы ( какие производители и чипсеты? ) с механическими x16 слотами с подключенными электрически только первыми х4 бывают lane reversed, а какие без lane reversed?
  23. Цитата(krux @ Aug 23 2014, 18:19) у B75 ещё и PCI-шина торчит. В неё случаем, ничего вставлено не было? там тоже длительная блокировка транзакций по доступу к памяти может быть. У B75 в PCI-слот было вставлена плата, но к ней не было обращений. Эта же плата была вставлена в PCI-слот и на P55, но к ней не было обращений. То есть условия тестирования были равные. Сейчас надо возобновить тестирование. krux, скажите пожалуйста, а с какой буквой предпочтительнее выбирать матери каждой серии ( 7-я , 8-я, 9-я ) - Q, B или Z и на какую цифру чтобы оканчивался номер чипсета - 5 или 7 ? Есть ли какое-то общее правило с точки зрения, чтобы по шине был наибольший поток? В таблице сравнения все модели с разными буквами ( Q, B или Z ) и цифрами ( 5 и 7 ) выглядят примерно одинаковыми ...
  24. Сейчас уточнил, падение скорости было на матери Gigabyte GA-P75_D3, т.е чипсет был не P75, а B75. krux, скажите пожалуйста, а с какой буквой предпочтительнее выбирать матери каждой серии ( 7-я , 8-я, 9-я ) - Q, B или Z и на какую цифру чтобы оканчивался номер чипсета - 5 или 7 ? Есть ли какое-то общее правило с точки зрения, чтобы по шине был наибольший поток? В таблице сравнения все модели с разными буквами ( Q, B или Z ) и цифрами ( 5 и 7 ) выглядят примерно одинаковыми ...