لماذا XST تحسين سجلاتي وكيف أوقفها؟
سؤال
لدي برنامج Verilog بسيط يزيد من عداد 32 بت، وتحويل الرقم إلى سلسلة ASCII باستخدام SFormat $ ثم يدفع السلسلة إلى الجهاز المضيف 1 بايت في وقت واحد باستخدام FTDI FT245RL.
لسوء الحظ، يحتفظ Xilinx XST بتحسين متجه سجل السلسلة. لقد حاولت mucking حول التهيئة المختلفة وإجراءات الوصول دون نجاح. لا يبدو لي أن أطفئ الأمانة، وجميع الأمثلة التي أجدها عبر الإنترنت تختلف قليلا عن إجراءات التهيئة الخاصة بي. ما الخطأ الذي افعله؟
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
تحميل جهاز لتحميل التطبيق RF_DEVICE من ملف '3s100e.nph' في البيئة / pt/xilinx/10.1/ise. تحذير: XST: 1293 - FF / LATCH STR_0 لديه قيمة ثابتة من 0 في كتلة. سيتم تقلص هذا FF / LATCH خلال عملية التحسين.
تحذير: XST: 1896 - نظرا لتشذيب FF / Latch، FF / LATCH STR_1 له قيمة ثابتة من 0 في كتلة. سيتم تقلص هذا FF / LATCH خلال عملية التحسين.
تحذير: XST: 1896 - نظرا لتشذيب FF / Latch، FF / LATCH STR_2 لديه قيمة ثابتة من 0 في كتلة. سيتم تقلص هذا FF / LATCH خلال عملية التحسين.
المحلول
من غير المرجح أن تكون مهمة SFORTION $ COMPORMAT يمكن توليفها - فكر في الأجهزة التي يحتاجها المحول البرمجي لإنتاجها لتنفيذ هذه الوظيفة! هذا يعني أن سجل "Str" الخاص بك لا يتم تحديثه، لذلك يعتقد المترجم أنه يمكنه تحسينه بعيدا. النظر في عداد BCD، وربما جدول البحث لتحويل رموز BCD إلى رموز ASCII.
كتل AFAIK "الأولي" ليست توليف. لتهيئة يتخبط، استخدم إشارة إعادة التعيين. الذكريات تحتاج إلى "حلقة" مثلك، ولكنها تزيد فقط بعد إعادة تعيين.