Vra

Ek het 'n eenvoudige verilog-program wat 'n 32-bis-teller verhoog, die nommer na 'n ASCII-string omskakel met $sformat en dan die string na die gasheermasjien 1 byte op 'n slag met 'n FTDI FT245RL stoot.

Ongelukkig hou Xilinx XST aan om die stringregistervektor weg te optimaliseer.Ek het probeer om met verskeie inisialiserings- en toegangsroetines rond te spoel sonder sukses.Ek kan blykbaar nie optimalisering afskakel nie, en al die voorbeelde wat ek aanlyn vind verskil baie min van my inisialiseringsroetines.Wat doen ek verkeerd?

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 

Laai toestel vir toepassing Rf_Device uit lêer '3s100e.nph' in omgewing /opt/Xilinx/10.1/ISE.WAARSKUWING:Xst:1293 - VF/Grendel str_0 het 'n konstante waarde van 0 in blok .Hierdie VF/Grendel sal wees afgewerk tydens die optimalisering Proses.

WAARSKUWING:Xst:1896 - As gevolg van ander VF/Grendel snoei, VF/Grendel str_1 het 'n konstante waarde van 0 in blok .Hierdie VF/Grendel sal wees afgewerk tydens die optimalisering Proses.

WAARSKUWING:Xst:1896 - As gevolg van ander VF/Grendel snoei, VF/Grendel str_2 het 'n konstante waarde van 0 in blok .Hierdie VF/Grendel sal wees afgewerk tydens die optimalisering Proses.

Was dit nuttig?

Oplossing

Die $sformat-taak sal waarskynlik nie sintetiseerbaar wees nie - oorweeg watter hardeware die samesteller sal moet produseer om hierdie funksie te implementeer!Dit beteken jou 'str'-register word nooit opgedateer nie, so die samesteller dink dit kan dit weg optimaliseer.Oorweeg 'n BCD-teller, en miskien 'n opsoektabel om die BCD-kodes na ASCII-kodes om te skakel.

AFAIK 'aanvanklike' blokke is nie sintetiseerbaar nie.Gebruik 'n terugstelsein om flops te inisialiseer.Herinneringe het 'n 'vir'-lus nodig soos jy het, maar wat eers na terugstelling aktiveer.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top