なぜXSTは私のレジスタを離れて最適化され、どのように私はそれを止めるのですか?

StackOverflow https://stackoverflow.com/questions/763224

  •  11-09-2019
  •  | 
  •  

質問

私は、32ビットカウンタをインクリメント$のsformatを使用してASCII文字列に数値を変換し、FTDI FT245RLを使用して、一度にホストマシン1バイトに文字列をプッシュする簡単なのverilogプログラムを持っています。

残念ながら、ザイリンクスXSTは列レジスタベクトルを離れて最適化を保持します。ノー成功を収めて様々な初期化とアクセスルーチンと周りいじくる試みました。私は最適化をオフに見えることはできません、と私はオンラインで見つけるのすべての例は、私の初期化ルーチンから非常に若干異なります。私が間違って何をしているのですか?

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 
  アプリケーションの

ローディング装置   ファイル「3s100e.nph」からRf_Deviceで   環境/opt/Xilinx/10.1/ISE。   警告:XSTで:1293 - FF /ラッチstr_0   ブロック0の一定値を有します   。このFF /ラッチは次のようになります   最適化中にトリミング   プロセスます。

     

WARNING:XSTで:1896 - 原因他方へ   FF /ラッチ、トリミング、FF /ラッチstr_1が   ブロック0の一定値を有します   。このFF /ラッチは次のようになります   最適化中にトリミング   処理する。

     

WARNING:XSTで:1896 - 原因他方へ   FF /ラッチ、トリミング、FF /ラッチがstr_2   ブロック0の一定値を有します   。このFF /ラッチは次のようになります   最適化中にトリミング   プロセスます。

役に立ちましたか?

解決

$のsformatタスクが合成可能になることはほとんどありません - コンパイラは、この機能を実装するために生成する必要がありますどのようなハードウェアを検討!これは、コンパイラはそれを離れて最適化することができると考えて、あなたの「STR」は、更新されることは決してありませんレジスタを意味します。 ASCIIコードにBCDコードを変換するBCDカウンタ、そしておそらくルックアップテーブルを考えてみます。

私の知る限り「初期」のブロックが合成可能ではありません。プを初期化するには、リセット信号を使用します。思い出は、あなたが持っているような「for」ループ必要がありますが、これだけリセット後にトリガします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top