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

Поделиться
HTML-код
  • Опубликовано: 26 дек 2024

Комментарии • 53

  • @bvdlio
    @bvdlio Месяц назад

    This was such a demystifier for how pipelining is actually implemented. Thank you!

  • @jaspritamsingh9178
    @jaspritamsingh9178 3 года назад +6

    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.

  • @adamtheld
    @adamtheld 3 года назад +13

    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!

  • @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!

  • @TheAnilmaddala
    @TheAnilmaddala 3 года назад +1

    Was worried because it's been 6 months since your last video. Good to see new video!

  • @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.

  • @HalfLife2Beta
    @HalfLife2Beta 2 года назад +1

    Thanks for your video it really made me understand quickly the concept, much clearer than my course I followed during my studies!

  • @WisseSpring
    @WisseSpring 3 года назад +1

    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.

  • @wunan9879
    @wunan9879 Год назад

    This problem really confused me for a long time! Very helpful video, thank you a lot !

  • @ewanwordsworth1592
    @ewanwordsworth1592 3 года назад +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.

  • @messiweltmeista
    @messiweltmeista 3 года назад +1

    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

    • @TheLastWizardOfTheCentury-u7o
      @TheLastWizardOfTheCentury-u7o 3 года назад +1

      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 года назад +1

      @@TheLastWizardOfTheCentury-u7o are you having issues already with 50Mhz?

    • @TheLastWizardOfTheCentury-u7o
      @TheLastWizardOfTheCentury-u7o 3 года назад +1

      @@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 года назад +1

      @@TheLastWizardOfTheCentury-u7o that's really interesting, yes parallelism always helps. I'm from Germany, currently studying electrical engineering

    • @TheLastWizardOfTheCentury-u7o
      @TheLastWizardOfTheCentury-u7o 3 года назад +1

      @@messiweltmeista Also Electrical Engineering here, in TU Delft, the Netherlands

  • @muniswamy100
    @muniswamy100 2 года назад

    Bang on target. Great effort, practical demonstration. Truly appretiate it.

  • @sumukhabharadwajmohanrao853
    @sumukhabharadwajmohanrao853 3 года назад +1

    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. :-)

  • @_pilly
    @_pilly 3 года назад +2

    Thank you so much!!! Been looking for a video just like this one!

  • @shreshthadeshpande7043
    @shreshthadeshpande7043 2 года назад

    A good insight of Timing Analysis. Helpful!

  • @pavanhegde1933
    @pavanhegde1933 3 года назад +3

    First comment.
    Your explanations are easy to follow 👍👍

  • @rishabhsinha8140
    @rishabhsinha8140 3 года назад

    Brilliantly explained !! I regularly learning from your videos.. Thanks.

  • @ufester27
    @ufester27 6 месяцев назад

    Thanks for the video. It is always helpful to be able to glean insight from experience.

  • @quackquackwalabattak4689
    @quackquackwalabattak4689 3 года назад +1

    Welcome back to RUclips !

  • @bilalhabib2001
    @bilalhabib2001 Год назад

    Excellent demo, love it.

  • @ahmedamraniakdi2143
    @ahmedamraniakdi2143 3 года назад

    this is the type of content i like, thanks

  • @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.

  • @efeberkayyitim2435
    @efeberkayyitim2435 3 года назад

    Good to see you Russell

  • @Calphool222
    @Calphool222 3 года назад +2

    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.

  • @brad8122
    @brad8122 2 года назад

    6:31 before it was using 34 FFlip flops now it is 39. So it did simplify the design?

  • @AbdAlhaleemBakkor
    @AbdAlhaleemBakkor 3 года назад

    Thanks a lot man , I learned a lot from you 🖤🖤

  • @Alex-ri1zn
    @Alex-ri1zn 3 года назад +1

    Great video, thank you very much.
    By the way, do you usually use the "`default_nettype =none" directive in your verilog/systemverilog designs?

  • @abhijeetchauhan4111
    @abhijeetchauhan4111 2 года назад

    Do we always need to register the inputs ?

  • @zigajavornik1026
    @zigajavornik1026 2 года назад

    Kind of sad that you stopped making videos. Hope you are doing well!

  • @shahrzadfeghhi4239
    @shahrzadfeghhi4239 3 года назад

    What tool are you using to do the timing analysis?

  • @jl3586
    @jl3586 3 года назад

    Thank you for another great video

  • @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 года назад

      ruclips.net/video/eyNU6mn_-7g/видео.html

    • @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?

  • @mahmoudtantawi93
    @mahmoudtantawi93 3 года назад

    Great video! Thanks very much

  • @wi_zeus6798
    @wi_zeus6798 3 года назад

    Thanks a lot for the videos!

  • @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?

  • @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.

  • @mikaelsworld6006
    @mikaelsworld6006 3 года назад

    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 3 года назад

      Why are you doing a 7000+ bit XOR? That's... large.

    • @mikaelsworld6006
      @mikaelsworld6006 3 года назад

      @@russellmerrick9761 it's a requirement of the algorithm.

  • @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 года назад +1

      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.

  • @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.