Hi Dave !
thanks once again for your patience and help ! i'm really appreciated.
I have been trying to constrain those clocks - but with no positive result for setup time and slack. Tried to create clocks in my sdc file for clock_receive and synchro_delay, because they are getting this warnings:
--- Quote Start ---
Warning (332060): Node: NRZI_receiver:nrzi_receiver_module|synchro_delay was determined to be a clock but was found without an associated clock assignment.
Warning (332060): Node: NRZI_receiver:nrzi_receiver_module|clock_receive was determined to be a clock but was found without an associated clock assignment.
--- Quote End ---
But with no result. I was even trying to connect my nrzi stream input pin to the LCELL buffer (because i read somewhere here on this forum, that it makes the signal global ?)
1) Does the LCELL make the signal global ? or the GLOBAL primitive is for that ? I was trying to find how to make signals global in some other way, or to at least change input pins to global. I know that it's somewhere in the options - but wasn't able for now. As farest i know Quartus automatically assigns global signals.
2) I took a second approach and changed in "Physical Synthesis Optimiations" Effort Level to Extra and in "Fitter Settings" option Optimize multi-corner timing.
This haven't changed anything.
3) Here's my NRZI_Receiver module - perhaps with this you would be able to help me with constraining the design, or tell if there are some mistakes. This module is written in AHDL - the rest of my design is in VHDL:
SUBDESIGN NRZI_receiver
(
clock_in : INPUT; -- 375 MHz
nrzi_data_in : INPUT;
data_receive : OUTPUT;
clock_receive: OUTPUT;
)
VARIABLE
temp1 : DFF;
temp2 : DFF;
synchro : DFF;
-------------------
synchro_delay : DFF;
-------------------
temp3 : DFF;
clock_receive : DFF;
data_receive : DFF;
BEGIN
temp1.clk = clock_in;
temp1 = nrzi_data_in;
temp2 = temp1;
temp2.clk = clock_in;
synchro = (synchro + 1) & !(temp1 xor temp2) & (synchro!=2);
synchro.clk = !clock_in;
synchro_delay = !synchro0 & !synchro1;
synchro_delay.clk = clock_in;
temp3.clk = synchro_delay;
temp3 = nrzi_data_in;
clock_receive = !synchro0 & !synchro1;
clock_receive.clk = !clock_in;
data_receive = (temp3 xor nrzi_data_in);
data_receive.clk = clock_in;
END;
As farest i understand the design:
temp1.clk = clock_in;
temp1 = nrzi_data_in;
temp2 = temp1;
temp2.clk = clock_in;
and this condition : !(temp1 xor temp2)
Temp1 and Temp2 are used to detect the edges of the nrzi_data_in stream.
When temp1 and temp2 have different values (01 or 10) the xor condition itself gives a true statement, using negation ! on this - resets the 2 bit synchro counter (so edge detecton - when edge detected the counter starts to count again)
(synchro!=2)
This condition is used for counting from 0 to 2 ( 0,1,2,0,1,2,0,1,2,0,1,2....)
synchro_delay = !synchro0 & !synchro1;
synchro_delay.clk = clock_in;
clock_receive = !synchro0 & !synchro1;
clock_receive.clk = !clock_in;
These two are our clocks that timing analysis have problem with. I think that
!synchro0 & !synchro1; is used to detect the 0 value of counter (00 , gives 1 using this statement)
Clock receive generates the 125 MHz clock for the receving part of my design - metioned earlier shift_register, and wrreq for fifo en etc.
data_receive = (temp3 xor nrzi_data_in);
data_receive.clk = clock_in;
This part i suppose is smth with getting "real bits" from nrzi stream. But really don't know. The design of receiver is rather simple - i wrote what i think about it, but don't really understand for right now why use once a rising edge and falling edge. (need to think about it more :) )
Some reports:
https://sites.google.com/site/pauldab/home/controlsignals.jpg 4) As you can see my clock_receive and synchro_delay are clock signals accroding to quartus. I think that due to fan-out quartus gave the clock_receive global routing.
Would giving the same routing to synchro_delay help ? If yes how to do it ?
5) Isn't that strange that my main clock PIN_clock_in 125 Mhz from crystal is routed global and not global ? perhaps i have done smth bad in the other part of design or is this normal ?
And lastly
https://sites.google.com/site/pauldab/home/worstcase.jpg Thanks in advance for any help Dave :)
best regards
madness