FPGA-Timing-Beschränkungsproblem

Ich verwende die Cyclone V DE1-SoCbei der Datenübertragung zwischen HPSund FPGAmit 2 FIFO. Ich habe ein Problem mit einer sehr späten Ankunftszeit von Daten, was dazu führt, dass das slacksehr negativ ist.

...
if ((Processing_state == 4'd5) && (FPGA_to_HPS_state == 0))
    begin
        a <= a + memo[i] * memo[i];
        Processing_state <= 4'd4 ;
    end    
    
if (Processing_state == 4)
    begin
        
        if (|a == 0)
        begin
            k<=a;
            Processing_state <= 4'd0 ;
        end
        
        else if (|a != 0)
        begin
            
            if(j == 20479)
            begin
                b <= a >> 12 ;
                Processing_state <= 4'd4; //signal fpga the data is ready to be sent
            end
            
            else
            begin
                j <= j + 1;
                Processing_state <= 4'd0 ;
            end
        end
    end
    
    if (Processing_state == 4)
    begin
        Processing_state <= 3;    
        data_buffer_valid <= 1'b1 ;
        c <= b;
        
    end
    
    if (Processing_state == 3)
    begin
        Processing_state <= 2;    
        mean <= c / 5;
    end
    
    if (Processing_state == 2)
    begin
        Processing_state <= 1;
        meaninput <= mean;
    end
    
    if (Processing_state == 4'd1)
    begin
        Processing_state <= 4'd0 ; 
        data_buffer_valid <= 1'b1 ;
        a <= 0;
        j <= 0;
        
    end
...

if ((FPGA_to_HPS_state==0) && (!(fpga_to_hps_in_csr_readdata[0])) && data_buffer_valid)
    begin
        fpga_to_hps_in_writedata <= meaninput;
        fpga_to_hps_in_write <= 1'b1 ; //write flag
        FPGA_to_HPS_state <= 4'd1 ;
    end
...

Der Kompilierbericht sagt, dass es ein Problem auf der Leitung gibtmean <= c / 5;

Geben Sie hier die Bildbeschreibung ein

Aber das Seltsame ist, wenn ich die Zeile fpga_to_hps_in_writedata <= meaninput;zum fpga_to_hps_in_writedata <= c;Verschwinden des Problems ändere, zeigte der Kompilierbericht über das Timing das Problem nicht mehr.

fpga_to_hps_in_writedataschreibt die Daten von zum FIFOzu senden anHPS

Ist das ein Problem für FIFOdas, was ich ändern muss Qsys? Ich habe die Empfehlung gelesen, aber ich habe nur etwas über die Grundlagen gelernt, Verilogalso keine Ahnung von der Zeitbeschränkung.

Antworten (1)

Ganzzahlige Division in der kombinatorischen Logik ist sehr logisch und zeitintensiv. Vielleicht möchten Sie einen anderen Weg finden, um dieses Ergebnis zu erhalten – vielleicht gibt es eine Möglichkeit, es zu leiten oder die Multiplikation mit 1/5 zu verwenden.

Sie haben Recht, nach einiger Recherche fand ich heraus, dass die Teilung das Problem zu sein scheint. verlinken . Ich lerne jetzt, wie man ein Divisionsmodul schreibt, anstatt den Operator zu verwenden, /um zu sehen, ob das Problem gelöst werden kann oder nicht.
Hallo Dave, macht es Ihnen etwas aus, wenn ich noch einmal frage, ich habe ein Quadratwurzelmodul, ursprünglich verwendet es den *-Operator für mehrere, aber ich fand, dass es auch teuer ist, also habe ich es in << geändert, aber ich habe immer noch Zeitprobleme Wenn ich es in meinem FIFO instanziiere, liegt es daran, dass ich die for-Schleife verwende? Weil ich es brauche, um die 64-Bit-Eingabe zu rooten, die 32 Mal wiederholt werden muss. Ist das vielleicht das Problem?
Ja, die kombinatorische Quadratwurzel ist ähnlich komplex wie die Division.
Gut, danke! Das heißt, ich kann es nur lösen, indem ich einen getakteten Zähler anstelle einer For-Schleife verwende.