У меня есть простая программа verilog, которая увеличивает 32-битный счетчик, преобразует число в строку ASCII, используя $ sformat, а затем передает строку на 1 байт хост-машины за раз, используя FTDI FT245RL.
К сожалению, 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
Загрузочное устройство для применения
Rf_Device из файла '3s100e.nph' в
среда /opt/Xilinx/10.1/ISE.
ВНИМАНИЕ: 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 будет
обрезается при оптимизации
процесс.