Имею рабочий проект, который жрет 23% логических элементов.
Меняю в секции initial значение для регистра ([7:0]) c 8'd128 на 8'd129. И...проект начинает жрать весь ресурс логических элементов оО
(105%. отключая отладочную шнягу 95%).
Попытка отказаться от этой секции и инициализировать по negedge nreset приводит к таким же результатом.
При этом в процессе функционирования этот регистр таки достигает этого значения (129 - терминальное состояние).
Моя в шоку Ж)
На всякий случай привожу кусок кода:
Кому интересно - предположения в студию ))
wire ADC_PacketReady;
reg APR; initial APR=0;
//wire APR = ADC_PacketReady;
reg oAPR; initial oAPR=0;
reg [7:0] bodcnt;
reg [7:0] phase;
reg [7:0] bytephase;
reg [7:0] adr ;
initial adr=128;
reg [7:0] ByteToSend;
/*
reg [15:0] tmp_res_cnt; initial tmp_res_cnt = 1000;
reg tmp_res;
always @(posedge CLK_50MHZ ) begin
if (tmp_res_cnt!=0) tmp_res_cnt<=tmp_res_cnt-1;
tmp_res <= (tmp_res_cnt!=0);
end
*/
always @(posedge CLK_50MHZ or negedge nReset)
if (!nReset ) begin
//adr<=8'd129;
end else
begin
APR <= ADC_PacketReady;// START_ADC_SEQUENCE;
oAPR <= APR;
if (APR & (~oAPR)) begin
adr <= 0;
bodcnt <= 24;
phase <= 0;
bytephase <= 0;
end else
if (adr != 8'd129) begin
if (bodcnt!=0) bodcnt<=bodcnt-1;
else begin
bodcnt <= 24;
if (phase!=10) begin // 0 01 02 03 04 05 06 07 08 09 10
phase<=phase+1; // 0 d7 d6 d5 d4 d3 d2 d1 d0 1 1
if (phase==0) begin
if (adr==8'd128) ByteToSend <= 8'hFF; else
case (bytephase)
0: ByteToSend <= ACC_Data1[07:00];
1: ByteToSend <= ACC_Data1[15:08];
2: ByteToSend <= ACC_Data1[23:16];
3: ByteToSend <= ACC_Data2[07:00];
4: ByteToSend <= ACC_Data2[15:08];
5: ByteToSend <= ACC_Data2[23:16];
endcase
end
end
else begin
phase <= 0;
if (bytephase!=5) bytephase <= bytephase+1;
else begin
bytephase <= 0;
adr <= adr+1;
end
end
end
end
if (adr != 8'd129) begin
if (phase>8'd8) TX<=1'b1; //stop bits
else if (phase==8'd0) TX<=1'b0; //start bit
else begin
TX<=ByteToSend[phase-1]; //phase=1..8; 8-phase = 0..7 lsb first
end
end else TX<=1'b1;
end


