我有一個簡單的verilog程序,增加一個32位計數器,使用$ sformat將數字轉換爲ASCII字符串,然後使用FTDI FT245RL一次將字符串推送到主機1字節。爲什麼XST優化我的寄存器,我該如何阻止它?
不幸的是,賽靈思XST不斷優化掉字符串寄存器向量。我嘗試了各種初始化和訪問例程,但沒有成功。我似乎無法關閉優化,並且我在網上找到的所有示例都與我的初始化例程相差甚微。我究竟做錯了什麼?對於應用 從文件 '3s100e.nph' 在 環境/opt/Xilinx/10.1/ISE 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/Latch str_0 具有恆定值0。在優化 的過程中,該FF/Latch將被修整爲 。
警告:XST:1896 - 由於其它 FF /鎖存修整,FF /鎖存str_1 具有0在塊 恆定值。在優化 的過程中,該FF/Latch將被修整爲 。
警告:XST:1896 - 由於其它 FF /鎖存修整,FF /鎖存str_2 具有0在塊 恆定值。在優化 的過程中,該FF/Latch將被修整爲 。
好吧!我最初並不瞭解你說的一半,但我花了最後幾分鐘查找BCD是什麼,它看起來完全像我想要的。我只需要弄清楚現在如何做查找表。我懷疑$ sformat,但編譯器沒有抱怨,它在模擬中完美運行,但我想現在我知道了。謝謝! – MrEvil 2009-04-18 18:15:21