Frage

Ich habe ein einfaches Verilog-Programm, das einen 32-Bit-Zähler erhöht, wandelt die Zahl in einem ASCII-Zeichenfolge $ sformat mit und drückt dann die Zeichenfolge an dem Host-Rechner 1 Byte zu einem Zeitpunkt eines FTDI FT245RL verwenden.

Leider hält Xilinx XST den String Registervektor Optimierung entfernt. Ich habe versucht, ohne Erfolg mit verschiedener Initialisierung und Zugriffsroutinen herumschlagen. Ich kann nicht abschalten Optimierung scheinen, und alle die Beispiele, die ich online zu finden unterscheiden sich nur wenig von meiner Initialisierungsroutinen. Was mache ich falsch?

module counter(CK12, TXE_, WR, RD_, LED, USBD);

   input CK12;
   input TXE_;
   output WR;
   output RD_;
   output [7:0] LED;
   inout [7:0] USBD;

   reg [31:0] count = 0;

   reg [7:0] k;
   reg wrf  = 0;
   reg rd   = 1;
   reg [7:0] lbyte = 8'b00000000;   

   reg td              = 1;
   parameter MEM_SIZE  = 88;
   parameter STR_SIZE  = 11;
   reg [MEM_SIZE - 1:0] str;
   reg [7:0] strpos = 8'b00000000;

   initial
     begin
        for (k = 0; k < MEM_SIZE; k = k + 1)
          begin
             str[k]    = 0;
          end
     end

   always @(posedge CK12)
     begin
        if (TXE_ == 0 && wrf == 1)
          begin
             count    = count + 1;
             wrf         = 0;
          end


        else if (wrf == 0)  // If we've already lowered the strobe, latch the data
          begin
             if(td)
               begin
                  $sformat(str, "%0000000000d\n", count);
                  strpos = 0;
                  td     = 0;
               end

             str      = str << 8;
             wrf         = 1;
             strpos      = strpos + 1;       

             if(strpos == STR_SIZE)
               td        = 1;

          end       
     end

   assign RD_             = rd;
   assign WR              = wrf;
   assign USBD            = str[87:80];
   assign LED             = count[31:24];

endmodule 
  

Ladevorrichtung für die Anwendung   Rf_Device aus der Datei '3s100e.nph' in   Umwelt /opt/Xilinx/10.1/ISE.   ACHTUNG: Xst: 1293 - FF / Latch str_0   einen konstanten Wert von 0 in Block   . Diese FF / Latch wird   bei der Optimierung getrimmt   Prozess.

     

ACHTUNG: Xst: 1896 - Aufgrund anderer   FF / Latch Trimmen, FF / Latch str_1   einen konstanten Wert von 0 in Block   . Diese FF / Latch wird   bei der Optimierung getrimmt   Prozess.

     

ACHTUNG: Xst: 1896 - Aufgrund anderer   FF / Latch Trimmen, FF / Latch str_2   einen konstanten Wert von 0 in Block   . Diese FF / Latch wird   bei der Optimierung getrimmt   Prozess.

War es hilfreich?

Lösung

Die $ sformat Aufgabe ist es unwahrscheinlich, synthetisierbaren zu sein - prüfen, welche Hardware der Compiler erzeugen müssen, wäre diese Funktion zu implementieren! Dies bedeutet, dass Ihre ‚str‘ Register nie aktualisiert wird, so dass der Compiler denkt, dass es es weg zu optimieren. Betrachten wir ein BCD-Zähler, und vielleicht eine Lookup-Tabelle die BCD-Codes in ASCII-Codes zu konvertieren.

AFAIK ‚Initiale‘ Blöcke sind nicht synthetisierbaren. So initialisieren Flops, verwenden Sie ein Reset-Signal. Erinnerungen brauchen ein ‚für‘ Schleife wie Sie haben, aber das löst nur nach Reset.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top