2016-04-12 27 views
1

, ben o veri sıfırlandıktan sonra sıfır bir döngüdür kontrol etmek istiyorum. Sıfırlamadan sonra verileri nasıl bir döngüde kontrol edebileceğimi anlayamıyorum. Bu i ile geldi budur ama ben sıfırlama yüksektir aynı saat döngüsünde verileri için kontrol ediyorum gibi yanlış olduğunu biliyorum. Lütfen bana birisini verilog'da nasıl yapabilirim?? Ben sıfırlama alırsanız saatin posedge anda

always @(posedge clk) 
    if(reset) 
     if(data == 0) 
     $display("ok"); 
     else 
     $display("error"); 

cevap

0

Bunu yapmanın kolay bir yolu var:

always @(posedge clk) 
    reset_q <= reset; 

always @(posedge clk) 
    if(reset_q == 1) && (data == 0) 
     $display("reset ok"); 
    else 
     $display("reset error"); 

Sıfırlama signa üzerinde çalışan bir boru hattı olduğunu vurgulamak için bunları ayrı bloklara koydum. l ve diğeri kontrol mantığı, ama aynı her zaman blokta yaşayabilirler.

+1

aah .. mükemmel. Çok teşekkür ederim beyefendi. Neden karmaşık olacağını düşündüğümü bilmiyorum. Uzaktaydım, sayaçları ve hepsini düşünüyordum. bu çok zarif. teşekkür ederim. – user3551094

0

sizin Testbençin üzerinde always bloğunu kullanmayı deneyin istemiyorum gibi görünüyor. O senin testbençi kontrol bazı esnekliğe sahip gibi always bloğuna olarak Testbençin bir alternatif forever döngü kullanmak iyi bir fikirdir.

Biri bana bunu söyledi: always blok RTL doğrulama içindir RTL tasarım ve forever döngü içindir

Bunun yerine bu deneyebilirsiniz:

initial begin 
    forever begin  
     @(posedge reset); // wait for the rising edge of reset 

     // reset has occured at this time. 
     @(posedge clk); // delay for 1 clock cycle 

     // check your data here 
     if(data == 0) $display("ok"); 
     else $display("error"); 
    end 
end 
+0

burada sadece bir sorun var - Ben pozitif saat kenarında olumlu reset için kontrol etmek istiyorum. Kullandığım her şey kodumda engellenir. – user3551094

+0

Bu sıfırlama eşitleme olup olmadığını çalışacaktır. – e19293001