How to fix Timing Errors in your FPGA design during Place and Route, meeting clock constraints

  Рет қаралды 27,641

nandland

nandland

Күн бұрын

Learn how to fix timing errors in your FPGA design. I show a Verilog example that fails to meet timing, then show how to pipeline the code to make it meet timing once again. Breaking up your logic into smaller operations will help lower propagation delay and get your design to run through the Place and Route part of the Synthesis tools correctly.
If you like this video and want me to make more, please support me on Patreon:
/ nandland
The Go Board is the best FPGA development board for beginners. Get one for yourself today:
nandland.com/goboard/introduc...

Пікірлер: 52
@ufester27
@ufester27 2 ай бұрын
Thanks for the video. It is always helpful to be able to glean insight from experience.
@jaspritamsingh9178
@jaspritamsingh9178 3 жыл бұрын
That is absolutely spot on. Perfect, short, crisp just like all your content. Thank you so much for all this content and keep this up, always looking forward to your content. All the best and thanks.
@TheAnilmaddala
@TheAnilmaddala 3 жыл бұрын
Was worried because it's been 6 months since your last video. Good to see new video!
@_pilly
@_pilly 3 жыл бұрын
Thank you so much!!! Been looking for a video just like this one!
@ewanwordsworth1592
@ewanwordsworth1592 2 жыл бұрын
This is a fantastic video. Thanks so much for putting this up. Simple concept, but immediately helped me work on timing closure of my complex design, which I was struggling with.
@rishabhsinha8140
@rishabhsinha8140 3 жыл бұрын
Brilliantly explained !! I regularly learning from your videos.. Thanks.
@sumukhabharadwajmohanrao853
@sumukhabharadwajmohanrao853 3 жыл бұрын
Just brilliant! You explained it in a very simplistic manner and that's what really needed. Thank you so much. Hope you also explain adding different timing constraints to the SDC file. :-)
@adamtheld
@adamtheld 3 жыл бұрын
Glad to see a new video! I’ve been playing around the go board, and it’s a great dev board for a hobbyist like me!
@muniswamy100
@muniswamy100 2 жыл бұрын
Bang on target. Great effort, practical demonstration. Truly appretiate it.
@HalfLife2Beta
@HalfLife2Beta 2 жыл бұрын
Thanks for your video it really made me understand quickly the concept, much clearer than my course I followed during my studies!
@shreshthadeshpande7043
@shreshthadeshpande7043 2 жыл бұрын
A good insight of Timing Analysis. Helpful!
@wunan9879
@wunan9879 Жыл бұрын
This problem really confused me for a long time! Very helpful video, thank you a lot !
@briancooper2737
@briancooper2737 3 жыл бұрын
I would have never thought that such a simple math problem would have caused that kind of trouble. The fix was easy and intuitive, when you think about it. I guess that is the thing though, you have to figure that out first. Thanks for the help. Nice to see some new content.
@quackquackwalabattak4689
@quackquackwalabattak4689 3 жыл бұрын
Welcome back to KZbin !
@efeberkayyitim2435
@efeberkayyitim2435 3 жыл бұрын
Good to see you Russell
@prolixescalation1932
@prolixescalation1932 2 жыл бұрын
Just leaving a comment for extra oganic traffic under the video and to express gratitude. Thank you for this video, addressing the issue straightforward in beginner-friendly manner. Quality content!
@ahmedamraniakdi2143
@ahmedamraniakdi2143 2 жыл бұрын
this is the type of content i like, thanks
@bilalhabib2001
@bilalhabib2001 Жыл бұрын
Excellent demo, love it.
@WisseSpring
@WisseSpring 3 жыл бұрын
I recently did my first ever FPGA project targeting Kintex 7 where I of course encountered timing errors. In my case it started failing when trying to do 34-bit division @ 100 MHz. After seeing this wonderful video, I'm very surprised that I almost got away with comparatively much more complex operation. Was not aware that there's such difference between FPGA hardware! Maybe it came down to something else? Just for reference: I later learned about how expensive division is and reworked my code using different approach in combination with fixed point math where you multiply with "fractions" to divide.
@AbdAlhaleemBakkor
@AbdAlhaleemBakkor 3 жыл бұрын
Thanks a lot man , I learned a lot from you 🖤🖤
@jl3586
@jl3586 3 жыл бұрын
Thank you for another great video
@mahmoudtantawi93
@mahmoudtantawi93 3 жыл бұрын
Great video! Thanks very much
@wi_zeus6798
@wi_zeus6798 2 жыл бұрын
Thanks a lot for the videos!
@pavanhegde1933
@pavanhegde1933 3 жыл бұрын
First comment. Your explanations are easy to follow 👍👍
@Alex-ri1zn
@Alex-ri1zn 3 жыл бұрын
Great video, thank you very much. By the way, do you usually use the "`default_nettype =none" directive in your verilog/systemverilog designs?
@timonix2
@timonix2 2 жыл бұрын
Very often you can do a much cruder version of pipelining. Just add a pipeline stage which does not do anything at all. The synthesis tool can see that the in-between data is not used and will move around the logic to get faster timing. No thinking required.
@Calphool222
@Calphool222 3 жыл бұрын
Thanks so much for this video. I've got an FPGA design I've built and have been selling to friends (basically for cost), and I've struggled with timing stuff because I didn't really understand how to set up the constraints file, or how to fix timing errors. My design has 3 clock domains and video lines for input. I could get it working on the bench, but then when it was in the field I'd get weird reports of the video flaking out. Eventually through trial and error I basically *accidentally* fixed most of it with pipelining (though I didn't understand why that fixed it). Now I have a better theoretical understanding. Is the syntax for the constraints file the same for all synthesis/dev tools? I use Quartus on my Cyclone IV board (when I'm not working on the Go board of course), and I've gotten really confused on the syntax for the SDA file. I did discover that there were some "derive" commands that I didn't really understand, but they cleared up a number of timing errors. Anyway, thanks for your videos. They are much appreciated. For whatever reason this kind of training (basic context setting stuff) is very difficult to find elsewhere. Everything wants to throw you into the deep end of the pool before you even understand what swimming is.
@messiweltmeista
@messiweltmeista 3 жыл бұрын
thank you very much, I'm in the middle of my bachelor tesis programming an FPGA. I haven't met the timing contraints too serious yet, but I'm sure the time for it will come soon
@ismailb4334
@ismailb4334 3 жыл бұрын
I am in the exact same situation. Working on my bachelor thesis, and trying to pipeline my design to reach 50 MHz.
@messiweltmeista
@messiweltmeista 3 жыл бұрын
@@ismailb4334 are you having issues already with 50Mhz?
@ismailb4334
@ismailb4334 3 жыл бұрын
@@messiweltmeista Yes lol, I have a big combinatorial circuit that perform encryption. But I think I will parallelize it now to make the critical path shorter. Where are you from and what do you study?
@messiweltmeista
@messiweltmeista 3 жыл бұрын
@@ismailb4334 that's really interesting, yes parallelism always helps. I'm from Germany, currently studying electrical engineering
@ismailb4334
@ismailb4334 3 жыл бұрын
@@messiweltmeista Also Electrical Engineering here, in TU Delft, the Netherlands
@zigajavornik1026
@zigajavornik1026 Жыл бұрын
Kind of sad that you stopped making videos. Hope you are doing well!
@andyhaas5366
@andyhaas5366 3 жыл бұрын
Thanks for the video, but I really hope you follow up with an example of the crossing clock domain timing errors you teased at the beginning. I have that problem, with a 60 and 50 MHz clock trying to pull from the same dp ram.
@Nandland
@Nandland 3 жыл бұрын
kzbin.info/www/bejne/m6qxhmmjo8Rgbck
@andyhaas5366
@andyhaas5366 3 жыл бұрын
@@Nandland Thanks. I saw that video, and it's great. But there's a problem specific to timing analysis and clock domains I think, especially if the two frequencies are similar. Would the timing tools not give timing errors if you use stretching and the other techniques you use in that video?
@shahrzadfeghhi4239
@shahrzadfeghhi4239 2 жыл бұрын
What tool are you using to do the timing analysis?
@brad8122
@brad8122 Жыл бұрын
6:31 before it was using 34 FFlip flops now it is 39. So it did simplify the design?
@abhijeetchauhan4111
@abhijeetchauhan4111 2 жыл бұрын
Do we always need to register the inputs ?
@fernandoi8958
@fernandoi8958 3 жыл бұрын
Is there a way to place more pipeline stages between the LUT we get after synthesis?
@Nandland
@Nandland 3 жыл бұрын
You would have to break up the stages further. Here's one idea: shift left is the same as multiply by 2. Shift right one is the same as divide by 2.
@shawnmirza325
@shawnmirza325 3 жыл бұрын
I did and FPGA design on a xc7a100tcsg324-1 and got it to successfully pass timing in Vivado, then I took this same Vivado project and reassigned the chip to a xc7a100tftg256-1 and my design does not pass timing...... Why would cause this?
@QuantumDoja
@QuantumDoja 3 жыл бұрын
Hi Russell, My Go Board timing analysis has a "Target Frequency(MHZ)" of 111.36 - but the board should be 25MHZ. Do you know where I can change this in IceCube2? Thanks
@Nandland
@Nandland 3 жыл бұрын
Sounds like you need to add a .SDC file. Synthesis design constraint. ICEcube is a bit different, the clock gets set in the synthesis constraint file. Most other tools suggest doing it in the P&R constraint file.
@mikaelsworld6006
@mikaelsworld6006 2 жыл бұрын
How do you remove timing violation from a large register which is bitwise xored? Example: reg [7196:0] data; Always @(posedge clk) Data_out
@russellmerrick9761
@russellmerrick9761 2 жыл бұрын
Why are you doing a 7000+ bit XOR? That's... large.
@mikaelsworld6006
@mikaelsworld6006 2 жыл бұрын
@@russellmerrick9761 it's a requirement of the algorithm.
@allhero4128
@allhero4128 Жыл бұрын
That the only way to slove this problem ?
@perakojot6524
@perakojot6524 Жыл бұрын
This example is pretty bad because dividing by 3 takes 10x more LUTs than addition and multiplication by 5 (two additions only). So you don't gain anything particularly by splitting addition and multiplication by 5, you only waste FFs.
Crossing Clock Domains in an FPGA
16:38
nandland
Рет қаралды 67 М.
A teacher captured the cutest moment at the nursery #shorts
00:33
Fabiosa Stories
Рет қаралды 52 МЛН
Fast and Furious: New Zealand 🚗
00:29
How Ridiculous
Рет қаралды 43 МЛН
Example Interview Questions for a job in FPGA, VHDL, Verilog
20:34
Timing analysis with Vivado tools (Part 1)
11:08
eigenpi
Рет қаралды 11 М.
LDC23 - FPGA Timing Constraints Deep Dive
1:04:19
Lattice Semiconductor
Рет қаралды 799
Understanding Timing Analysis in FPGAs
29:41
Altera
Рет қаралды 28 М.
How to Learn to Code FAST (Do This or Keep Struggling)
11:00
Andy Sterkowitz
Рет қаралды 698 М.
Clock Gating | Integrated Clock Gating cell
12:20
Jairam Gouda
Рет қаралды 30 М.
FPGA Timing Optimization: Optimization Strategies
42:39
Greg Stitt
Рет қаралды 8 М.
What is a Clock in an FPGA?
18:58
nandland
Рет қаралды 53 М.
Creating input and output delay constraints
6:17
FPGAs for Beginners
Рет қаралды 9 М.
Что делать если в телефон попала вода?
0:17
Лена Тропоцел
Рет қаралды 3,2 МЛН
КРУТОЙ ТЕЛЕФОН
0:16
KINO KAIF
Рет қаралды 6 МЛН
$1 vs $100,000 Slow Motion Camera!
0:44
Hafu Go
Рет қаралды 28 МЛН
Как бесплатно замутить iphone 15 pro max
0:59
ЖЕЛЕЗНЫЙ КОРОЛЬ
Рет қаралды 8 МЛН