为什么XST优化掉我的寄存器以及如何阻止它?
题
我有一个简单的Verilog程序,递增一个32位的计数器,所述数字转换为使用$ sformat ASCII字符串并压入使用FTDI FT245RL在时间字符串到主机1个字节。
不幸的是Xilinx公司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 /锁存器将被 优化过程中修剪 过程
警告:XST:1896 - 由于其他 FF /锁存微调,FF /锁存str_1 具有0在块的恒定值 。这FF /锁存器将被 优化过程中修剪 处理。
警告:XST:1896 - 由于其他 FF /锁存微调,FF /锁存str_2 具有0在块的恒定值 。这FF /锁存器将被 优化过程中修剪 过程
解决方案
在$ sformat任务是不太可能综合的 - 考虑,编译器会需要产生到实现该功能的硬件!这意味着你的“海峡”寄存器永远不会被更新,所以编译器认为它可以优化它拿走。考虑一个BCD计数器,还可能有查找表的BCD码转换成ASCII码。
AFAIK“初始”块不是综合的。要初始化触发器,使用复位信号。回忆需要一个“为”像你有循环,但其中只有复位后触发。
不隶属于 StackOverflow