Spartan 3an DDR2 SDRAM memory interface generator

Başlatan mozbay, 12 Aralık 2012, 19:11:07

mozbay

Arkadaşlar elimde bir adet spartan 3an starter kit var ve bununla memory interface yapmak istiyorum fakat daha önceden hiç tecrübem olmadı bu konuda o yüzden bu konu hakkında fikri olanlardan yardım bekliyorum.
IP CORE kullanarak bir MIG dizayn ettim fakat example_design dosyasını simule ettiğimde hiç bir hareketlilik alamıyorum clock ta dahil. Sanırım clock devreye girmiyor. user guideyi okuduğumda top level module den bahsediyor. Bu modül handi dosya oluyor yada onu benim mi yapmam lazım ve oraya clock mu eklemem gerekiyor, ekleniyorsa nasıl ekleyeceğim. Fikri olan arkadaşlar yardımcı olurlarsa çok makbule geçer.
teşekkürler

volkii

benim bildiğim kadarıyla, modullerinizden biri top model olmalı ki, diğer modulleri bunda bağlabilesiniz. bence bağlanmıştır ve buna top model demiştir user guide. çok benzemesede C'de ki main function gibi düşünün bunu. similasyonda bunu çalıştırmanız lazım. clk girişine gelirsek, bu zaten fiziksel bir port. buna dışardan sizin puls uygulamanız lazım. similasyonda ise bunu nasıl yapacağım derseniz, bir döndü içerisininde bu pini sürekli high-low yaparak sonuçları görebilirsiniz.

mozbay

Hocam cevabınız için teşekkür ederim,
top level modülü buldum içine de söylediğiniz gibi döngü içinde clock verdim fakat derlemek istediğimde syntax hatası veriyor tam anlamadım. Bir de hala clock göremiyorum tabi :) sistemin 3 girişi var biri reset diğer ikisi differential clock üretimi için iki clock. sys_clk ve sys_clkb

initial begin
reset_in_n <= 1;
sys_clk <=1'b0;
sys_clkb <=1'b0;
#10
reset_in_n <= 1'b0;
end

always begin
#1 sys_clk <=! sys_clk;

#1 sys_clkb <=! sys_clkb;
end

bunlar eklediğim kodlar. forumafotoğraf nasıl yüklenir bilmiyorum o yüzden böyle oldu bu seferlik  :)
aldığım hata da şöyle:
Line 130: Procedural assignment to a non-register sys_clk is not permitted, left-hand side should be reg/integer/time/genvar

continuous assignmenti de denedim aynı hatayı verdi

pic365

Alıntı yapılan: mozbay - 12 Aralık 2012, 23:46:55
Hocam cevabınız için teşekkür ederim,
top level modülü buldum içine de söylediğiniz gibi döngü içinde clock verdim fakat derlemek istediğimde syntax hatası veriyor tam anlamadım. Bir de hala clock göremiyorum tabi :) sistemin 3 girişi var biri reset diğer ikisi differential clock üretimi için iki clock. sys_clk ve sys_clkb

initial begin
reset_in_n <= 1;
sys_clk <=1'b0;
sys_clkb <=1'b0;
#10
reset_in_n <= 1'b0;
end

always begin
#1 sys_clk <=! sys_clk;

#1 sys_clkb <=! sys_clkb;
end

bunlar eklediğim kodlar. forumafotoğraf nasıl yüklenir bilmiyorum o yüzden böyle oldu bu seferlik  :)
aldığım hata da şöyle:
Line 130: Procedural assignment to a non-register sys_clk is not permitted, left-hand side should be reg/integer/time/genvar

continuous assignmenti de denedim aynı hatayı verdi

Aşağıdaki şekilde çalışması lazım.

reg sys_clk;
initial sys_clk = 1;
always #1 sys_clk = ~sys_clk;

Hatanın sebebi bu muydu bilmiyorum ama Verilog'da register'lara (reg'i kastetmiyorum) atama yaparken "<=", diğer sinyallere atama yaparken "=" operatörü kullanılır.

volkii

şöyle izzah etmeye çalışıyım, tabi benimde bildiğim kadarıyla. bende uzman sayılmam bu konuda.
verilog kodunuzda muhakkak bir top module vardır. test bench'i buna bağlı açmalısınız. belkide zaten böyle bir dosya var, onu çift tıklayıp açın.

burda bir initial bloğu vardır. similasyon burda koşacaktır. şimdi önceki yazdıklarınızı silin ve bu initial bloğunun altına yeni bir initial bloğu daha açın. ve içine şunu yazın:

initial
begin
  while(true)
  1# clk = ~clk;
end;

bu initial blouğu asıl devreyle paralel çalışacaktır. similasyonu çalıştırın ve başlangıç olarak clk girişinin değişimini görebilin ve bunun üzerinden ilerleyin. kolay gelsin

mozbay

    Merhaba,
    Yeni bir başlık açmak yerine buradan devam etmek istedim inşallah birileri görür  :)

    FPGA da görüntü işleme projesi yapıyorum(kullandığım FPGA Xilinx Spartan DSP 3400A) fakat bir sorunla karşılaştım. Input olarak aldığım fotoğrafı dijital 3x3 gauss filtreden geçirmek zorundayım. Filtre iki boyutta olduğu için tek boyuta indirdim hızlı olsun diye. yani elimde  1x3 matris var. Fakat katsayılarım virgüllü(fpu). o yüzden kendim bir fpu modulu yazdım 16-bitlik. çarpa toplama yapıyor. Fakat top modülle arasındaki haberleşmeden midir yoksa işlemem gereken 160000 tane pixelin yoğunluğundan mıdır sentez yapamıyor. Çok yüksek(16GB civarında) hafıza gerekiyor diye hata veriyor. Birinci sorum; Bu iş yükünü azaltacak daha hızlı işlem yapmamı sağlayacak bir fikir var mıdır acaba ? İkincisi ise, FIR filtre kullanmayı tam beceremedim :( kullanan varsa yardımcı olabilirler mi ?
Teşekkürler.

speak48

xilinxin design programları çok kastırıcıdır.
synplify veya precision ile dene onlarda beceremezse tasarımında hata vardır.

mozbay

Arkadaşlar,

memory interface ile kafayı baya bozdum sanırım :) yeni başlayanlar için kullanması ve anlaması baya zor. Benim yapmaya çalıştığım şey dışarıdan alınan bilgiyi ddr2 sdram e kaydetmek ve oradan alıp fpga nın içinde işleyip tekrar sdramdeki eski yerine kaydetmek. ama simülasyonla alakalı çok temel basit sorularım var bilenler için.

birincisi, chipscope kullanan var mı varsa basitçe kullanmayı bana anlatabilir mi ?  Açarken filan hata alıyorum.
ikincisi, simülasyon illa co-simulasyon ile mi yapılıyor yani pc ye fpga bağlamadan sdram simülasyonu yapamam mı ?
üçüncüsü, simülasyon yaparken sdram'a yazılacak data hangi klasörün içinde ?

Yardım edebilecek anlayan birisi lütfen yardım edebilir mi az zamanda basit bir şekilde bu işi halletmem lazım.

Teşekkürler,
kolay gelsin.

mozbay

Bu arada filtre yapma işini hallettim ama default filtre yerine kendi filtremi kulanıcam. Daha efektif geldi bana. Xilinxin fır filtre katsayıları float point olursa çıkışı da 2'complement fixed point data şeklinde veriyor.

ddr2 Sram simülasyonundan vazgeçtim direkt sdram arayüzünü gömmeyi planlıyorum fakat arayüzü kontrol için yazdığım kodda sıkıntı çıktı. Bazı anlamadığım hatalar alıyorum. Sdram kullanan arkadaşlar yok mu hiç ?

pic365

Kullandığınız SDRAM'in simülasyon modelini bulursanız Chipscope'a gerek kalmadan simülasyon yapabilirsiniz. Fakat Chipscope kullanmak isterseniz aşağıdaki bağlantıda bir tutorial var.

http://www.fpganedir.com/ornek/chipscope/index.php

mozbay

cevap verdiğin için teşekkür ederim hocam, ben chipscope modeli hazırlanmış bir tasarım buldum fpga'da denedim çalıştı. Kodun sentezini yaptım ve bir çok uyarı aldım. Uyarıları atladım ve implementation bölümüne geçtim orda translate yaparken hata verdi ve hatalarda şöyle.

INST "infrastructure_top0/cal_top0/cal_ctl0" AREA_GROUP = cal_ctl;>
[par/vlog_bl8.ucf(276)]: INST "infrastructure_top0/cal_top0/cal_ctl0" not
found. Please verify that:

INST "infrastructure_top0/cal_top0/tap_dly0" AREA_GROUP = cal_ctl;>
[par/vlog_bl8.ucf(277)]: INST "infrastructure_top0/cal_top0/tap_dly0" not
found. Please verify that:

NET "main_00/top0/data_path0/data_read0/fifo*_wr_en*" MAXDELAY = 3007
ps;> [par/vlog_bl8.ucf(383)]: NET "main_00/top0/data_path0/data_read0/fifo*_wr_en*" does not match any design
objects.

bunlar hatalardan bir kaçı.

Yardımcı olabilen varsa çok sevinirim,

pic365

Modül hiyerarşisinde yanlışlık var muhtemelen. Çünkü ikisi "infrastructure_top0" ile, biri "main_00" ile başlıyor. Projenin en üst seviyedeki modülünden başlayarak UCF dosyasının (vlog_bl8.ucf) ilgili bölümleri güncellenirse sorun çözülecektir.