Jump to content
    

Gowin DPB что не так?

Всем добра.


В разрабатываемом проекте имеем редкие сбои в работе 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:

image.thumb.png.4046e7811b1ae36b2e7bdf2e359950f0.png

Где по сигналу разрешения записи 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 ;

 

 

Share this post


Link to post
Share on other sites

Ревизии чипа в проекте и в железе соответствуют друг другу?

Share this post


Link to post
Share on other sites

1 час назад, Zversky сказал:

Вопрос - почему?

Консирейнты для выходных тактовых сигналов PLL прописаны? Покрывают блок памяти и связанную с ним логику? Сходятся?

Share this post


Link to post
Share on other sites

Редкие сбои - это от запуска к запуску или от разводки к разводке? Или в пределах одного запуска каждый раз есть редкие сбои? Констрейны сходятся? Просто переразвести пробовали?

На 4 может быть значение через fall-throu механизм, а реально в память 6 пишется со сбоем.

Насколько я понимаю, память делали коре генератором?  Сбои всегда в одном и том же диапазоне адресов? Там муторный механизм соединения блокрамов для наращивания ёмкости, который лично мне даже по виду в корегеновском варианте сразу не понравился. Неаккуратно как-то.

Share this post


Link to post
Share on other sites

10 часов назад, StewartLittle сказал:

Ревизии чипа в проекте

image.png.89824c822df054730f50b663d68007fb.png

10 часов назад, StewartLittle сказал:

и в железе

image.thumb.png.750785bd11ae25172ced586c7307691a.png

 

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 сказал:

Сходятся?

Нет
image.thumb.png.c8ff2918f3cd37f8aa50e528df07e55d.png

 

11 минут назад, fingertouch сказал:

от запуска к запуску или от разводки к разводке?

Первое

11 минут назад, fingertouch сказал:

лично мне даже по виду в корегеновском варианте сразу не понравился. Неаккуратно как-то.

Вы сделали что-то своё?

Share this post


Link to post
Share on other sites

5 минут назад, Zversky сказал:
17 минут назад, fingertouch сказал:

от запуска к запуску или от разводки к разводке?

Первое

Если констрейны не сошлись, то дальше и искать нечего ))

6 минут назад, Zversky сказал:

Вы сделали что-то своё?

Пока только на бумаге. До железа дело не дошло.

Share this post


Link to post
Share on other sites

5 минут назад, fingertouch сказал:

Если констрейны не сошлись, то дальше и искать нечего ))

Почему же нечего:
1 надо искать почему не сошлись
1.1. не всё обконстрейнено - именно мои вариант, как думаю
1.2. (вытекающий из 1.1) - надо думать, как обконстрейнить (ложные пути применить или ... где этот TFM, который надо у Gowin-a (или Gowin тут не сильно при чём?) Read? )))

7 минут назад, fingertouch сказал:

Пока только на бумаге. До железа дело не дошло.

Сколько будет стоить ваша бумага, дабы не оборзеть всю картину мироздания, но тупо глянуть, что к чему (по Стругацким)? ))

Share this post


Link to post
Share on other sites

37 минут назад, Zversky сказал:

Нет. Просьба указать, при наличии, на пример обконстрейнивания такой конструкции

Читайте про Create Generated Clock в разделе Timing Constraints документа SUG101 Gowin Design Constraints User Guide.

Это уже обсуждалось на форуме, поищите:

 

 

Share this post


Link to post
Share on other sites

55 minutes ago, Zversky said:

Нет

image.thumb.png.c8ff2918f3cd37f8aa50e528df07e55d.png

 

На картинке GAO разваливает проект. Надо его как-то отделить буферами от обмена по шине.

12 hours ago, Zversky said:

Однако при выставлении того же адреса 6 на выходе блоки читаются уже другие данные 6.
Вопрос - почему?

А без GAO этот эффект косвенно можно проверить?

Share this post


Link to post
Share on other sites

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. Пришлось привыкать делать сильно урезанные наборы сигналов с небольшой глубиной записи, чтобы разводилось. Вплоть до того, что вытаскивать не все разряды шины.

Share this post


Link to post
Share on other sites

40 minutes ago, fingertouch said:

После перехода с Xilinx на Gowin тоже заметил, что вещи, которые очень легко было наблюдать в чипскопе, ставят раком GAO. Пришлось привыкать делать сильно урезанные наборы сигналов с небольшой глубиной записи, чтобы разводилось. Вплоть до того, что вытаскивать не все разряды шины.

На Xilinx у меня создалось впечатление, что его имплементатор если времянка не проходит даже у одного заштатного триггера  в блоке зажигания светодиодов - развалится весь проект.

На Gowin кажется сделано лучше - развалится блок светодиодов.

 

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

До GAO руки пока так и не дошли.

Share this post


Link to post
Share on other sites

7 часов назад, _4afc_ сказал:

А без GAO этот эффект косвенно можно проверить?

Выкинул GAO. Красное в таймингах исчезло, т.е. всё стало дефолтное чёрное. 
Но это не спасло отца русской демократии: ошибка осталась.
Читаю про констрейны, как сказал уважаемый товарищ модератор.

Share this post


Link to post
Share on other sites

Есть вопрос: это времянку из GAO можно экспортировать в виде нескольких форматов, но, вот, затащить, например, VCD обратно в, например, ModelSim (Questa) мне без потери данных не удалось. Кому-то ещё удалось куда-то затащить, например, CSV, чтобы показать коллегам? Или, что, как думается, проще, нельзя ли нативную времянку передать на другое рабочее место?

Share this post


Link to post
Share on other sites

Не пробовал, но могу предложить конвертировать CSV из GAO в VCD с помощью https://github.com/carlos-jenkins/csv2vcd или Sigrok (https://sigrok.org/wiki/Input_output_formats). Последним пользовался и весьма успешно, правда к нему нужно приноровиться, поэтому и предлагаю в первую очередь обратить внимание на csv2vcd.

Share this post


Link to post
Share on other sites

В 25.05.2023 в 19:10, makc сказал:

CSV из GAO в VCD с помощью https://github.com/carlos-jenkins/csv2vcd

Спасибо. Пока имею с первого вот что
image.thumb.png.5dbab68c94b8d0e1c851c9321b6df4a9.png

Проект прилагаю: вдруг кто что по нему подскажет, ЧЯДНТ?
Править f:\csv2vcd.zip\csv2vcd\csv2vcd-master\bat\CSV2VCDPyBinPath.bat и править же и запускать на исполнение f:\csv2vcd.zip\csv2vcd\csv2vcd-master\bat\CSV2VCD_integer.bat

csv2vcd.zip

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...