Jump to content

    

Sdram внутри qsys компонента, подскажите по констрейнам

Здравствуйте, пишу свой первый проект на ПЛИС (verilog, max10), проект создаю в учебных целях.
Создал систему в Qsys: nios, память(sdram), Jtag, и самописный компонент.
Внутри самописного компонента, с просторов интернета контроллер памяти sdram(отдельно от памяти nios), счетчик и DCFIFO для передачи из счетчика на sdram.
Nios запускает счетчик, тот в считает до оперделенного числа, и записывает в FIFO, оттуда контроллер sdram забирает данные и пишет в память. Nios и счетчик работают на 100Мгц, sdram и память на 125Мгц, FIFO двухклоковое на запись 100 Мгц на чтение 125 Мгц.
На симуляции все работает отлично но в железе появляются проблемы констрейнов.
В assigment поставил sdram выводам fast IO, клоки сделал Global Clock.
Sdram для Nios работет timequest не ругается, а в моем компоненте постоянно ошибки памяти
и я не могу понять почему такие большие слаки.
Память микрон MT48LC16M16A2. На nios память микрон MT48LC4M32B2.

Констрейны nios sdram

Спойлер

derive_pll_clocks -create_base_clocks

set_clock_groups -exclusive  -group [get_clocks {nios_sdram_oclk 

pll_system_|altpll_component|auto_generated|pll1|clk[0]}]

create_generated_clock -name nios_sdram_oclk -invert -source [get_pins 

{pll_system_|altpll_component|auto_generated|pll1|clk[0]}] [get_ports { sdram_nios_clk}] 

derive_clock_uncertainty
set_multicycle_path -from [get_clocks {nios_sdram_oclk}] -to [get_clocks 

pll_system_|altpll_component|auto_generated|pll1|clk[0]] -setup  2

set_multicycle_path  -from [get_clocks {nios_sdram_oclk}] -to [get_clocks 

pll_system_|altpll_component|auto_generated|pll1|clk[0]]   -hold  0

set_input_delay -clock [get_clocks nios_sdram_oclk] -max 5.4 [get_ports {sdram_nios_dq[*]}]
set_input_delay -clock [get_clocks nios_sdram_oclk] -min 3.1 [get_ports {sdram_nios_dq[*]}]

set_output_delay -clock [get_clocks nios_sdram_oclk] -max 1.2 [get_ports { sdram_nios_dqm[*] sdram_nios_ba[*] 

sdram_nios_a[*] sdram_nios_cs_n sdram_nios_cas_n sdram_nios_ras_n sdram_nios_cke sdram_nios_we_n  sdram_nios_dq[*] }]

set_output_delay -clock [get_clocks nios_sdram_oclk] -min 0.8 [get_ports {   sdram_nios_dqm[*] sdram_nios_ba[*] 

sdram_nios_a[*] sdram_nios_cs_n sdram_nios_cas_n sdram_nios_ras_n sdram_nios_cke sdram_nios_we_n  sdram_nios_dq[*] }]

 


Констрейны контроллера 

Спойлер

create_generated_clock -name sdram_oclk -invert -source [get_pins 

{pll_system_|altpll_component|auto_generated|pll1|clk[1]}] [get_ports {sdram0_clk sdram1_clk}] 

set_clock_groups -exclusive  -group [get_clocks {sdram_oclk pll_system_|altpll_component|auto_generated|pll1|clk[1]}]

set_multicycle_path -from [get_clocks {sdram_oclk}] -to [get_clocks 

pll_system_|altpll_component|auto_generated|pll1|clk[1]] -setup  2

set_multicycle_path  -from [get_clocks {sdram_oclk}] -to [get_clocks 

pll_system_|altpll_component|auto_generated|pll1|clk[1]]   -hold  0

set_input_delay -clock [get_clocks sdram_oclk] -add_delay -max  5.4 [get_ports {sdram0_dq[*]}]
set_input_delay -clock [get_clocks sdram_oclk] -add_delay -min  3.1 [get_ports {sdram0_dq[*]}]
set_input_delay -clock [get_clocks sdram_oclk] -add_delay -max  5.4 [get_ports { sdram1_dq[*]}]
set_input_delay -clock [get_clocks sdram_oclk] -add_delay -min  3.1 [get_ports { sdram1_dq[*]}]

set_output_delay -clock [get_clocks sdram_oclk] -add_delay -max   1.2 [get_ports { sdram0_ba[*] sdram0_a[*] sdram0_cs_n 

sdram0_cas_n sdram0_ras_n sdram0_cke sdram0_we_n sdram0_dq[*]}]
set_output_delay -clock [get_clocks sdram_oclk] -add_delay -max   1.2 [get_ports { sdram1_ba[*] sdram1_a[*] sdram1_cs_n 

sdram1_cas_n sdram1_ras_n sdram1_cke sdram1_we_n sdram1_dq[*] }]

set_output_delay -clock  [get_clocks sdram_oclk] -add_delay -min 0.8 [get_ports { sdram0_ba[*] sdram0_a[*] sdram0_cs_n 

sdram0_cas_n sdram0_ras_n sdram0_cke sdram0_we_n sdram0_dq[*]}]
set_output_delay -clock [get_clocks sdram_oclk] -add_delay -min 0.8 [get_ports { sdram1_ba[*] sdram1_a[*] sdram1_cs_n 

sdram1_cas_n sdram1_ras_n sdram1_cke sdram1_we_n sdram1_dq[*] }]

 

Общая картина:

sdc3.jpg.22dec24ebe32d0db56264c026b38b647.jpg

 

 

 

Клок Nios sdram

sdc.jpg.06b8cf30085041e62f92ea3d9fcce217.jpg

Sdram внутри компонента.

sdc1.jpg.d8f11bf36fb06f48c2cdc21350658978.jpg

 

Не могу понять причину почему sdram внутри моего компонента так отличается от sdram используемого nios. Уже 2 недели
бьюсь, может кто-то подскажет?

Исходник компонента прилагаю.

src.sv

Edited by Вася0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this