2017-01-19 3 views
-1

для следующего фрагмента кода в VerilogПочему это не означает, что true в Verilog?

//////////////////////////// 

reg[0:7] fat[0:511]= {'hF8, 'hFF, 'hFF , 'hFF , 'hFF , 'hFF , 'hFF , 'hFF , hFF , 'hFF , 'h06 , 'h00 , 'h07 , 'h00 , 'h08 ...); // resembles fat 1 region on a sd card, read using hex editor. 

reg[0:32] fat_counter2 ; 
reg[0:31] music_stop_add[0:1]; 
reg music_counter = 0; 

task stop_address; 
    begin 

    if((fat[fat_counter2] == 'hFF)&& (fat[fat_counter2+1] == 'hFF) && (b==0))begin 
     music_stop_add[music_counter] <= ((((fat_counter2/2)-2)*64)+509)*512; // 
     b <= 1; 
     end else begin 
     fat_counter2 <= fat_counter2 + 1; 
    end 

always @ (posedge clk_100mhz) begin 

    repeat(256)begin 

     stop_address; 

    end 
end 
//////////////////////////////// 

, когда я искать толстый элемент массива на величину, равную «HFF, используя приведенное выше выражение (жир [fat_counter2] ==» HFF) он никогда не вычисляет истину , однако, когда я меняю его (fat [fat_counter2]! = 'hFF), он становится истинным для каждого значения.

любые предложения о том, что здесь происходит?

music_stop_add [music_counter] < = ((((fat_counter2/2) -2) * 64) +509) * 512; // преобразует значение счетчика жира в начальный номер сектора в байтах, который я кормлю для чтения контроллера sd-карты.

Я прочитал об инициализации жира, используя выражение = '{}; но он показывает ошибку из-за "

работы с vivado 2016.3 программировать NEXYS 4

+0

Ваш фрагмент не компилируется. http://stackoverflow.com/help/mcve – toolic

ответ

0

reg инициализируются й по умолчанию. fat_counter2 - x, вызывая предложение if для вычисления false. Докажите это для себя, добавив эту $display к своей задаче:

task stop_address; 
    begin 
     $display("fat_counter2=%x fat[fat_counter2]=%x", fat_counter2, fat[fat_counter2]); 
     if((fat[fat_counter2] == 'hFF)&& (fat[fat_counter2+1] == 'hFF) && (b==0))begin 

Вы должны инициализировать fat_counter2 каким-то образом.