2017-01-19 137 views
-1

在Verilog的下面的代碼段爲什麼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的hESC,使用上述表達式(脂肪[fat_counter2] ==」 hFF的hESC)它從來沒有計算到真。然而,當我改變它(胖[fat_counter2]!='hFF),它對每個值都成立。

對此處發生了什麼有什麼建議嗎?

music_stop_add [music_counter] < =((((fat_counter2/2)-2)* 64)+509)* 512; //將扇區起始數字中的脂肪計數器值以字節爲單位轉換爲讀取SD卡控制器。

我讀了關於使用表達式初始化fat ='{};但它表明,由於'

誤差vivado 2016.3合作方案nexys 4

+0

你的代碼片段不能編譯。 http://stackoverflow.com/help/mcve – toolic

回答

0

一個reg被默認初始化爲x。 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。