2016-04-01 33 views
0

Her zaman bir blok içinde bir döngü kullanmak için bir modül uygulamaya çalışıyorum Belirli bir zamanda alınan sinyal sayısını kaydetmek için 0 & 1 bir dizi kullanıyoruz.Verilog: Döngü içinde her zaman

ERROR:Xst:2636 - "Tourniquet.v" line 54: Loop has iterated 10000 times. Use "set -loop_iteration_limit XX" to iterate more. 

döngü (n sıfırlamak gibi görünüyor değil) bir zaman bloğunun içinde izin verilmediğini görünüyor:

Ne yazık ki biz hata bu tür aldı. Çeşitli web sitelerine ve foruma baktım ama hiçbir çözüm bulamadım.

module Tourniquet(
    input t0, 
    input mvt, 
    input clk, 
    output init 
    ); 

reg initialisation; 
reg [0:99] memoire; 
reg count = 0; 
reg compteur = 0; 
reg n; 

assign init = initialisation; 

always @(posedge clk) 
begin 
    if (count==99) 
    begin 
      if (mvt) 
      begin 
      memoire[count]=1; 
      count=0; 
      end 

      else 
      begin 
      memoire[count]=0; 
      count=0; 
      end 
    end 

    else 
    begin 
      if (mvt) 
      begin 
      memoire[count]=1; 
      count = count + 1; 
      end 

      else 
      begin 
      memoire[count]=0; 
      count = count + 1; 
      end 
    end 
end 

always @(posedge clk) 
begin 
initialisation = 0; 
for (n=0; n<99; n=n+1) compteur = compteur + memoire[n]; 
if (compteur>10) initialisation = 1; 
compteur = 0; 
end 

endmodule 

Ben çözüm bulmak ne de sorun, herhangi bir ipucu veya yardım karşılandı ne olduğu emin olamaz:

İşte benim kodudur. Çok teşekkür ederim!

cevap

5

Döngüyü yinelemek için 100 kez gerekir. Bunun için, atleast 8 bit sayaç değişkeni'a ihtiyacınız vardır. Tek bir bit sayıcı değişkeni olan reg n, burada n burada bildirilmiştir. Yani n+1, 1 verir ve n+1 yeniden 0 verir.

Yani, n<100'un olduğu döngü için koşul her zaman'u tatmin etti. Ve döngü hiçbir zaman'u sonlandırmaz.

Bu, for döngüsünüzün birçok defa yinelemesinin temel sebebidir. Bu tür sayıcılar için genellikle integer veri türü kullanılır.

integer, 32 bit reg'a benzer. Sayıcı sayımının uygun şekilde artması ve döngünün uygun şekilde sonlandırılması için n integer n veya reg [7:0] n olarak bildirin. @ Sharvil111 cevabı Dahası

+0

Teşekkürler, açıktı. Daha karmaşık bir şey düşünüyordum ... –

4

, ben bu tek parçalarıdır tüm bkz:

reg initialisation; 
reg count = 0; 
reg compteur = 0; 
reg n; 

Bir N, Verilog reg normalde bildirildi bit örn:

reg [N-1:0] n; 

N bazı olduğunu sayı (sabit). Ben tasarım amacınızı bilmiyorum Açıkçası

reg [0:99] memoire; 

, ama N-bitlik sayılar dizisi istedi şüpheli: Ve bu 100 bitlik bir sayıdır bkz

reg [N-1:0] memoire [0:99]; 

N yine bir sayıdır (sabit).