私は32ビットカウンタをインクリメントし、$ sformatを使ってASCII文字列に変換した後、FTDI FT245RLを使って文字列をホストマシンに1バイトずつプッシュします。XSTでレジスタを最適化するのはなぜですか?また、どうすれば停止できますか?
残念ながら、ザイリンクスXSTは文字列レジスタベクトルを最適化し続けます。私は、さまざまな初期化とアクセスルーチンでうまくいっていなかった。私は最適化をオフにすることはできません、私はオンラインで見つけるすべての例は、私の初期化ルーチンとほとんど異なります。私は間違って何をしていますか? 環境/opt/Xilinx/10.1/ISEでファイル '3s100e.nph' からアプリケーション Rf_Deviceため
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
装填装置。 警告:Xst:1293 - FF /ラッチstr_0 は、ブロック の定数値が0です。このFF /ラッチは、 の処理中に がトリムされます。
警告:XSTで:1896 - により他の にFF /ラッチトリミング、FF /ラッチstr_1が ブロック0の一定値を有します。このFF /ラッチは、 の処理中に がトリムされます。
警告:XSTで:1896 - により他の にFF /ラッチトリミング、FF /ラッチがstr_2 ブロック0の一定値を有します。このFF /ラッチは、 の処理中に がトリムされます。
大丈夫です!私は最初、あなたが言ったことの半分を理解していませんでしたが、BCDが何であるかを調べるのに最後の2〜3分を費やしました。私はちょうど今ルックアップテーブルを行う方法を把握する必要があります。私は$ sformatを疑っていましたが、コンパイラは不平を言っておらず、シミュレーションでは完全に機能しましたが、私は今知っていると思います。ありがとう! – MrEvil
ルックアップテーブルは簡単です。それらは 'case'ステートメントです! シミュレーションでは、何でもできます。コードをプログラムとして扱います。あなたが合成したいものについては、あなたはハードウェアを記述していることに留意しなければなりません。 – Marty