Zversky 9 May 24 Posted May 24 · Report post Всем добра. В разрабатываемом проекте имеем редкие сбои в работе DPRAM, сконфигурированной следующим образом: Спойлер ----------- Gowin_DPB_64kX8.ipc ----------- [General] ipc_version=4 file=Gowin_DPB_64kX8 module=Gowin_DPB_64kX8 target_device=gw2a55c-001 type=ram_dpb version=1.0 [Config] Area=true BYTE_SIZE=0 DEPTH_A=65536 DEPTH_B=65536 LANG=0 READ_A=0 READ_B=0 RESET_MODE=true Speed=false WIDTH_A=8 WIDTH_B=8 WRITE_A=0 WRITE_B=0 ----------- Gowin_DPB_64kX8.mod ----------- -series GW2A -device GW2A-55 -device_version C -package UBGA324 -part_number GW2A-LV55UG324C8/I7 -mod_name Gowin_DPB_64kX8 -file_name Gowin_DPB_64kX8 -path -type RAM_DP -file_type vlg -bram_b true -dev_type GW2A-55C -depth_0 65536 -depth_1 65536 -width_0 8 -width_1 8 -read_mode_0 bypass -read_mode_1 bypass -write_mode_0 normal -write_mode_1 normal -speed false -reset_mode sync Блок инстанциирован следующим образом: Спойлер Gowin_DPB_64kX8 DPRAM0_UB ( // DPB - Double Port BRAM - RAM0 Upper Byte // Read Bypass , Write Normal .douta ( RAM0_MEM_UB_DO_LS ) , // Data LS output [ 7 : 0 ] .doutb ( RAM0_MEM_UB_DO_RS ) , // Data RS output [ 7 : 0 ] .clka ( RamClk ) , // Clock LS input .ocea ( 1'b1 ) , // Clock enable LS input // Signal used for Pipeline, // invalid in Bypass. .cea ( 1'b1 ) , // Clock enable LS input, active-high .reseta ( 1'b0 ) , // Reset LS input, supporting synchronous // and asynchronous reset, active-high. // It is the RESET reset register, // rather than the value of reset register. .wrea ( RAM0_MEM_UB_WR_LS ) , // Write enable LS input .clkb ( RamClk ) , // Clock RS input .oceb ( 1'b1 ) , // Clock enable RS input // Signal used for Pipeline, // invalid in Bypass. .ceb ( 1'b1 ) , // Clock enable RS input, active-high .resetb ( 1'b0 ) , // Reset RS input, supporting synchronous // and asynchronous reset, active-high. // It is the RESET reset register, // rather than the value of reset register. .wreb ( RAM0_MEM_UB_WR_RS ) , // Write enable RS input .ada ( CPU_A `DPRAM_ADDR_RNG ) , // Address input LS [ 15 : 0 ] .dina ( CPU_D `DATA_UB_RNG_LS ) , // Data input LS [ 7 : 0 ] .adb ( A `DPRAM_ADDR_RNG ) , // Address input RS [ 15 : 0 ] .dinb ( Din_DPRAM `DATA_UB_RNG_RS ) // Data input RS [ 15 : 8 ] ); Один из сбоев показан на следующей временной диаграмме GAO: Где по сигналу разрешения записи 3 данные 1 заносятся по адресу 2 и появляются на выходе блока при данной конфигурации оного в 4. Однако при выставлении того же адреса 6 на выходе блоки читаются уже другие данные 6. Вопрос - почему? Тактирование блока выполнено так Спойлер Gowin_rPLL_25MHzTo200MHz Gowin_rPLL_25MHzTo200MHz_inst ( .clkin ( Clk25MHz ) , // Input 25 MHz .clkout ( Clk200MHz ) , // Output 200 MHz .clkoutd ( Clk100MHz ) , // Output 100 MHz .lock ( PLL_locked ) // output lock ) ; assign RamClk = Clk100MHz ; Quote Share this post Link to post Share on other sites More sharing options...
StewartLittle 13 May 24 Posted May 24 · Report post Ревизии чипа в проекте и в железе соответствуют друг другу? Quote Share this post Link to post Share on other sites More sharing options...
makc 85 May 24 Posted May 24 · Report post 1 час назад, Zversky сказал: Вопрос - почему? Консирейнты для выходных тактовых сигналов PLL прописаны? Покрывают блок памяти и связанную с ним логику? Сходятся? Quote Share this post Link to post Share on other sites More sharing options...
fingertouch 1 Thursday at 07:16 AM Posted Thursday at 07:16 AM · Report post Редкие сбои - это от запуска к запуску или от разводки к разводке? Или в пределах одного запуска каждый раз есть редкие сбои? Констрейны сходятся? Просто переразвести пробовали? На 4 может быть значение через fall-throu механизм, а реально в память 6 пишется со сбоем. Насколько я понимаю, память делали коре генератором? Сбои всегда в одном и том же диапазоне адресов? Там муторный механизм соединения блокрамов для наращивания ёмкости, который лично мне даже по виду в корегеновском варианте сразу не понравился. Неаккуратно как-то. Quote Share this post Link to post Share on other sites More sharing options...
Zversky 9 Thursday at 07:28 AM Posted Thursday at 07:28 AM · Report post 10 часов назад, StewartLittle сказал: Ревизии чипа в проекте 10 часов назад, StewartLittle сказал: и в железе 10 часов назад, makc сказал: Консирейнты для выходных тактовых сигналов PLL прописаны? Для 200 только: Спойлер create_clock -name Clk25MHz -period 40 -waveform {0 20} [get_ports {Clk25MHz}] create_generated_clock -name Clk200MHz -source [get_ports {Clk25MHz}] -master_clock Clk25MHz -divide_by 1 -multiply_by 8 -duty_cycle 50 [get_nets {Clk200MHz}] // UG286-1.9.6E - Gowin Clock User Guide 11/01/2022 // 5 System Clock 5.1 rPLL @ UG286-1.9.6E 30(103) // Gowin_rPLL_25MHzTo200MHz // FCLKIN = "25" ; // IDIV_SEL = 0 ; -> IDIV Static Parameter Value = 0 // FBDIV_SEL = 7 ; -> FBDIV Static Parameter Value = 7 // Table 5-4 IDSEL Port Parameter Comparison Table @ UG286-1.9.6E 34(103) // IDIV Static Parameter Value ---------- IDIV Actual Value // 0 1 // Table 5-5 FBDSEL Port Parameter Comp @ UG286-1.9.6E 34(103) // FBDIV Static Parameter Value ------- FBDIV Actual Value // 7 8 // 𝑓CLKOUT = ( 𝑓𝐶𝐿𝐾𝐼𝑁 ∗ FBDIV ) / IDIV = ( 25MHz * 8 ) / 1 = 200MHz По этому вашему вопросу понял направление дальнейшего развития относительно PLL 10 часов назад, makc сказал: Покрывают блок памяти и связанную с ним логику? Нет. Просьба указать, при наличии, на пример обконстрейнивания такой конструкции. 10 часов назад, makc сказал: Сходятся? Нет 11 минут назад, fingertouch сказал: от запуска к запуску или от разводки к разводке? Первое 11 минут назад, fingertouch сказал: лично мне даже по виду в корегеновском варианте сразу не понравился. Неаккуратно как-то. Вы сделали что-то своё? Quote Share this post Link to post Share on other sites More sharing options...
fingertouch 1 Thursday at 07:42 AM Posted Thursday at 07:42 AM · Report post 5 минут назад, Zversky сказал: 17 минут назад, fingertouch сказал: от запуска к запуску или от разводки к разводке? Первое Если констрейны не сошлись, то дальше и искать нечего )) 6 минут назад, Zversky сказал: Вы сделали что-то своё? Пока только на бумаге. До железа дело не дошло. Quote Share this post Link to post Share on other sites More sharing options...
Zversky 9 Thursday at 07:50 AM Posted Thursday at 07:50 AM · Report post 5 минут назад, fingertouch сказал: Если констрейны не сошлись, то дальше и искать нечего )) Почему же нечего: 1 надо искать почему не сошлись 1.1. не всё обконстрейнено - именно мои вариант, как думаю 1.2. (вытекающий из 1.1) - надо думать, как обконстрейнить (ложные пути применить или ... где этот TFM, который надо у Gowin-a (или Gowin тут не сильно при чём?) Read? ))) 7 минут назад, fingertouch сказал: Пока только на бумаге. До железа дело не дошло. Сколько будет стоить ваша бумага, дабы не оборзеть всю картину мироздания, но тупо глянуть, что к чему (по Стругацким)? )) Quote Share this post Link to post Share on other sites More sharing options...
makc 85 Thursday at 08:04 AM Posted Thursday at 08:04 AM · Report post 37 минут назад, Zversky сказал: Нет. Просьба указать, при наличии, на пример обконстрейнивания такой конструкции Читайте про Create Generated Clock в разделе Timing Constraints документа SUG101 Gowin Design Constraints User Guide. Это уже обсуждалось на форуме, поищите: Quote Share this post Link to post Share on other sites More sharing options...
_4afc_ 8 Thursday at 08:25 AM Posted Thursday at 08:25 AM · Report post 55 minutes ago, Zversky said: Нет На картинке GAO разваливает проект. Надо его как-то отделить буферами от обмена по шине. 12 hours ago, Zversky said: Однако при выставлении того же адреса 6 на выходе блоки читаются уже другие данные 6. Вопрос - почему? А без GAO этот эффект косвенно можно проверить? Quote Share this post Link to post Share on other sites More sharing options...
fingertouch 1 Thursday at 10:57 AM Posted Thursday at 10:57 AM · Report post 2 часа назад, Zversky сказал: Сколько будет стоить ваша бумага, дабы не оборзеть всю картину мироздания, но тупо глянуть, что к чему (по Стругацким)? )) Моя бумага вам вряд ли сгодится, т. к. у меня 14 бит адреса, а у вас 16. Опишу общий принцип. А там уж сами заглянете в то, что вам сделал кореген и решите, стоит ли использовать мой подход в Вашем случае. У блокрамы есть 3-битный вход BLKSELA/B и соответствующий параметр BLK_SEL_0/1, генерирующий, как нетрудно догадаться, внутренний CE при совпадении одного и другого. Это позволяет при использовании мультиплексора на выходной шине добавить ещё 3 бита к 11-разрядному адресу (при ширине данных 8 бит). Отсюда моё замечание про 14 бит, которое хорошо ложится в эту структуру, а для 16 нужно ещё дополнительно усложняться. Так вот, когда я смотрел в то, что сделал мне кореген, я видел там все BLKSEL равными 3'b001, а формирует эту младшую единичку для каждой блокрамы внешний компаратор старших разрядов адреса. Бессмысленно и беспощадно. Может, разработчики знают что-то про внутренний компаратор, чего не знаю я, но в модели всё работает нормально и так и так, а до железа, как уже говорил, я пока не дошёл. И мультиплексор выходных данных с 8 блокрамов в одну шину я увидел в кореген-варианте в один такт. Что на архитектуре LUT4 не есть хорошо. А в Вашем случае всё может быть ещё печальней. 2 часа назад, _4afc_ сказал: На картинке GAO разваливает проект. Надо его как-то отделить буферами от обмена по шине. Думаю, буферы тут мало помогут. После перехода с Xilinx на Gowin тоже заметил, что вещи, которые очень легко было наблюдать в чипскопе, ставят раком GAO. Пришлось привыкать делать сильно урезанные наборы сигналов с небольшой глубиной записи, чтобы разводилось. Вплоть до того, что вытаскивать не все разряды шины. Quote Share this post Link to post Share on other sites More sharing options...
_4afc_ 8 Thursday at 11:42 AM Posted Thursday at 11:42 AM · Report post 40 minutes ago, fingertouch said: После перехода с Xilinx на Gowin тоже заметил, что вещи, которые очень легко было наблюдать в чипскопе, ставят раком GAO. Пришлось привыкать делать сильно урезанные наборы сигналов с небольшой глубиной записи, чтобы разводилось. Вплоть до того, что вытаскивать не все разряды шины. На Xilinx у меня создалось впечатление, что его имплементатор если времянка не проходит даже у одного заштатного триггера в блоке зажигания светодиодов - развалится весь проект. На Gowin кажется сделано лучше - развалится блок светодиодов. Поэтому добавление чипскопа могло при плотной занятости - убить случайную часть проекта, даже ту к которой он не подключен. До GAO руки пока так и не дошли. Quote Share this post Link to post Share on other sites More sharing options...
Zversky 9 Thursday at 03:33 PM Posted Thursday at 03:33 PM · Report post 7 часов назад, _4afc_ сказал: А без GAO этот эффект косвенно можно проверить? Выкинул GAO. Красное в таймингах исчезло, т.е. всё стало дефолтное чёрное. Но это не спасло отца русской демократии: ошибка осталась. Читаю про констрейны, как сказал уважаемый товарищ модератор. Quote Share this post Link to post Share on other sites More sharing options...
Zversky 9 Thursday at 03:56 PM Posted Thursday at 03:56 PM · Report post Есть вопрос: это времянку из GAO можно экспортировать в виде нескольких форматов, но, вот, затащить, например, VCD обратно в, например, ModelSim (Questa) мне без потери данных не удалось. Кому-то ещё удалось куда-то затащить, например, CSV, чтобы показать коллегам? Или, что, как думается, проще, нельзя ли нативную времянку передать на другое рабочее место? Quote Share this post Link to post Share on other sites More sharing options...
makc 85 Thursday at 04:10 PM Posted Thursday at 04:10 PM · Report post Не пробовал, но могу предложить конвертировать CSV из GAO в VCD с помощью https://github.com/carlos-jenkins/csv2vcd или Sigrok (https://sigrok.org/wiki/Input_output_formats). Последним пользовался и весьма успешно, правда к нему нужно приноровиться, поэтому и предлагаю в первую очередь обратить внимание на csv2vcd. Quote Share this post Link to post Share on other sites More sharing options...
Zversky 9 Yesterday at 11:51 AM Posted yesterday at 11:51 AM · Report post В 25.05.2023 в 19:10, makc сказал: CSV из GAO в VCD с помощью https://github.com/carlos-jenkins/csv2vcd Спасибо. Пока имею с первого вот что Проект прилагаю: вдруг кто что по нему подскажет, ЧЯДНТ? Править f:\csv2vcd.zip\csv2vcd\csv2vcd-master\bat\CSV2VCDPyBinPath.bat и править же и запускать на исполнение f:\csv2vcd.zip\csv2vcd\csv2vcd-master\bat\CSV2VCD_integer.bat csv2vcd.zip Quote Share this post Link to post Share on other sites More sharing options...