What is Asynchronous FIFO? || Asynchronous FIFO DESIGN (Clock Domain crossing) Explained in detail.

  Рет қаралды 94,170

Karthik Vippala

Karthik Vippala

Күн бұрын

Пікірлер: 416
@vinad5919
@vinad5919 3 жыл бұрын
correct fifo code module afifo(wclk, wrstn, wren, wdata, wfull,rclk, rrstn, rden, rdata, rempty); parameter dsize = 8, asize = 4; localparam dw = dsize, aw = asize; input wire wclk, wrstn, wren; input wire [dw-1:0] wdata; output reg wfull; input wire rclk, rrstn, rden; output wire [dw-1:0] rdata; output reg rempty; wire [aw-1:0] waddrmem, raddrmem; wire wfull_next, rempty_next; reg [aw:0] wgray, wbin, wq2_rgray, wq1_rgray,rgray, rbin, rq2_wgray, rq1_wgray; wire [aw:0] wgraynext, wbinnext; wire [aw:0] rgraynext, rbinnext; reg [dw-1:0] mem [0:((1
@КириллДенисов-л4т
@КириллДенисов-л4т 3 жыл бұрын
What is wq2_rgray, wq1_rgray,rq2_wgray, rq1_wgray?
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Binary to gray conversion signals
@КириллДенисов-л4т
@КириллДенисов-л4т 3 жыл бұрын
@@KarthikVippala Thank you, I understand that. But what do these prefixes wq1, rq1 and wq2,rq2 mean? Why are there two of them?
@CallistoPili
@CallistoPili 2 жыл бұрын
@@КириллДенисов-л4т read and write req for each clock domain
@faisalsaeedawan5362
@faisalsaeedawan5362 Жыл бұрын
I tested this code but some some data is corrupting
@palmenros
@palmenros 3 жыл бұрын
Best video and best explanation on asynchronous FIFOs, keep up the good work man!
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaste 🙏 Pedro palacios , thanks for your support and help inspiring words , good luck & great health 👍😊
@shilpasawant634
@shilpasawant634 4 жыл бұрын
Very nicely explained. One comment about the FIFO depth issue. In addition to using the formula you showed, there is another way to use pointer for any non power of 2 depth FIFOs as long as they are EVEN numbers. We need to modify our pointer generation logic to pick correct rd & wr pointers. So, say we want to design a 6 deep FIFO. List all the pointer values that you would need for next power of 2 depth FIFO which is FIFO depth 8 in this case. So, for FIFO depth 8, we need pointers as 000, 001, 011, 010, 110, 111, 101, 100. We need only 6 of these values for 6 deep FIFO. So remove middle 2 values, 010 110. So now we have 000, 001, 011, 111, 101, 100 . This is still gray coded. If rd and wr ptr generation logic can be designed to generate this sequence, the circuit will work correctly. This approach will work for any even numbered depth.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey Shilpa you are correct , I have seen this patent . Thanks for explaining it in detail, appreciate your efforts , good luck 👍
@luzengyuan5326
@luzengyuan5326 3 жыл бұрын
very detailed information about async fifo, good job
@kkxkazuhiddles2481
@kkxkazuhiddles2481 3 жыл бұрын
Thank you man:) That explains way more clearly than what my teacher said in class omg
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Your welcome 🙏
@abhinavsonkar2936
@abhinavsonkar2936 5 жыл бұрын
The way of explanation is very good. It helped me a lot. Thank you so much for this video.
@KarthikVippala
@KarthikVippala 5 жыл бұрын
Thanks for feedback 👍
@hankhsu1996
@hankhsu1996 4 жыл бұрын
Thank you so much! I've tried to find a tutorial for async FIFO for such a time, but no one can explain it so clearly like you. Hope you can make a video about how to implement this using HDL.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Your welcome 👍
@arjunnatukula7128
@arjunnatukula7128 4 жыл бұрын
good explaination can u explain how to implement in hdl
@kunliu5004
@kunliu5004 4 жыл бұрын
Your explanation is very clear and easy to understand. Thank you so much!
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Thank you so much Kun liu ,Good luck , Good Health :)
@sowmyahiremath8969
@sowmyahiremath8969 3 жыл бұрын
Great explanation, easy to understand.. Thank you Karthik..
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaste 🙏 Sowmya , thank for the support, good luck and great health 👍😊
@yashvirchauhan385
@yashvirchauhan385 5 жыл бұрын
Hi Karthik, I work in VLSI company and needed to develop FIFO IP Core. ur lecture had a great explanation and covered all basics ,keep up this good work .Also, Plz could u provide material of this lecture somehow. Thanks
@KarthikVippala
@KarthikVippala 5 жыл бұрын
Hey yashvir, for the reference you can check asynchronous FIFO papers in Google scholar. Be patient while reading the papers , if you have any doubts , please feel free to comment 👍
@yashvirchauhan385
@yashvirchauhan385 4 жыл бұрын
@@KarthikVippala Can u make videos on AMBA protocols..that will be very useful.Thanks
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey yashvir , thanks for asking , I will try to make , but Amba is huge ,it will be better if you read the specification and ask the specific topic . I will help you with doubts 👍
@kavyatamatam6245
@kavyatamatam6245 3 жыл бұрын
@@KarthikVippala can u please make video on writing functionsl coverage for a moduke
@amruthats8648
@amruthats8648 4 жыл бұрын
Thankyou so much!! you are a very good teacher. all the best yaar...
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Your welcome, good luck, good health 👍😊
@shreyajoshi2453
@shreyajoshi2453 4 жыл бұрын
Nicely explained @Karthik. Kudos!
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Thank you, good luck, good health 👍😊
@bigdawg1986
@bigdawg1986 3 жыл бұрын
Thank you for your hard work ! Liked and subscribed!
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaste 🙏 Big Dawg , thanks for the support, good luck & great health 👍😊
@amirraeisi1366
@amirraeisi1366 2 жыл бұрын
Excellent and thank you. If you can control the excitement in your voice it will be much better. Thank you for the explanation.
@KarthikVippala
@KarthikVippala 2 жыл бұрын
Improving on it 🙏
@anubisbis1846
@anubisbis1846 5 жыл бұрын
You are outstanding teacher. Thanks keep up the good work.
@KarthikVippala
@KarthikVippala 5 жыл бұрын
Thank you so much 🙏
@namtian7
@namtian7 4 жыл бұрын
Thank you so much. Your explanation was fantastic. Thanks again.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Your welcome 🙏
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey need video on any other topic , if I know that topic , I can do a video . Recommend some topics for video please 👍
@vinitmahajan8893
@vinitmahajan8893 3 жыл бұрын
very nice information at a depth of topic
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaste 🙏 vinit Thanks for the support,good luck & great health 👍😊
@beautifulcrafts8548
@beautifulcrafts8548 3 жыл бұрын
Superb awesome explanation....
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaste 🙏 beautiful crafts , thanks for the support, good luck & great health 👍😊
@beautifulcrafts8548
@beautifulcrafts8548 3 жыл бұрын
Please do the videos on RTL integration
@yutinggan1679
@yutinggan1679 4 жыл бұрын
Great video! You remind me of my favorite teacher in the college.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Thank you so much Yuting Gan 👍😁. Good luck and good health brother 👊
@mohanarajendran4332
@mohanarajendran4332 3 жыл бұрын
U r good soul 🎉🎉 excellent teaching
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaskaram Mohana Rajendran , Thanks for the support , good luck & great health :)
@arijitbomber
@arijitbomber 2 жыл бұрын
Thanks for the wonderful explanation.
@KarthikVippala
@KarthikVippala 2 жыл бұрын
Namaskaram Arijit🙏, thanks for the support, good luck & great health 👍😊, do you have any topics suggestions
@sudeepbanerjee6934
@sudeepbanerjee6934 4 жыл бұрын
you did excellent job bro, and really appreciate your work...
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Thank you so much Sudeep , for such kind words, good luck, good health 👍
@annankldun4040
@annankldun4040 2 жыл бұрын
Great video but the explanation to when we know the difference of full and empty (16:00) is confusing. If we flip the MSB of waddr and then the values of waddr[3:0] are the same as raddr then its full but that can also hold for the case when wadder is empty i.e.: wadder with 5 bits is 00000. Negate MSB: 10000 == raddr at empty. I'd appreciate a clarification here.
@zvikacohen
@zvikacohen 2 жыл бұрын
Thanks for the video! Why not sync rd_en and wr_en to generate empty and full condition? (no need for gray convertion)
@anandkumar-bd2ru
@anandkumar-bd2ru 2 жыл бұрын
To get syn rd_en , we need to do gray convertiona and pass through 2 flop synchronizer and back to binary syn rd_en. I guess.
@yeobig
@yeobig 3 жыл бұрын
Super ! Thanks for explaining
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaste yeobi , thanks for the support, good luck and great health 👍😊
@AmitKumar-wf1qq
@AmitKumar-wf1qq 3 жыл бұрын
thanks for video, sir i have one doubt that if we use 2 flip-flop synchronizer then it will delay one read_clk for generating empty condition check and similarly one write_clk for for generating full condition. so due to this delay we may read from empty fifo or write to full fifo. therefore what should i do to avoid this delay and generate full and empty condition in real time without any delay?.
@ChrisSmith-tc4df
@ChrisSmith-tc4df 2 жыл бұрын
The 2 clock delay makes the full and empty conditions pessimistic as the two points approach each other. Ingress will read full a bit earlier as information about a very recent withdrawal is delayed. Egress will read empty a bit earlier as information about a very recent deposit is delayed. If the two sides have similar throughout, a performance issue can arise as it buffets around both empty or full. This approach works best when the ingress and egress rates are sufficiently different to accommodate the delay in information between the two sides.
@zenithchokshi9365
@zenithchokshi9365 3 жыл бұрын
Hello Karthik, Thank you for the amazing explanation. I got all the points but I have one confusion in metastability, I mean you are supposing a "1" for FF 1 op that works as an input for 2nd FF. What if you take the FF1 output as 0? Can you please explain this condition? Thank you!
@manlupiano1431
@manlupiano1431 3 жыл бұрын
Excellent explanation. Thanks
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaste Manlu Piano 🙏 , thanks for the support, good luck & great health 👍😊
@ishansharma5289
@ishansharma5289 Жыл бұрын
I have a question regarding grey code, imagine we are going from 4 (110) to 5 (111). Now what if 110 (4) changes to 100 (7) due to metastability, wouldn't it also generate a false full condition?
@KarthikVippala
@KarthikVippala Жыл бұрын
Yes it's a false full
@ishansharma5289
@ishansharma5289 Жыл бұрын
@@KarthikVippala but if grey code also can generate false full, how is it any better than binary code?
@krishnamanohar2219
@krishnamanohar2219 5 жыл бұрын
Thank so much for clear explanation
@nimniorel
@nimniorel 4 жыл бұрын
Great video! you explained everything clearly!
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Thank you 🙏
@raviteja1367
@raviteja1367 4 жыл бұрын
Can you please explain Amba-apb and Amba-ahb protocols in detail?
@jagannathans2292
@jagannathans2292 4 жыл бұрын
Nice video👌...kindly add the links in description for other videos like binary to grey code conversion, mentioned in this tutorial
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Namaskaram 🙏 Jagannathan , please check out my channel playlists 👍😊
@raghaver5964
@raghaver5964 Жыл бұрын
Very effective teaching
@shilpa4600
@shilpa4600 4 жыл бұрын
Greatly explained Karthik. Got a chance to come across ur videos, and it is helping me a lot in understanding the concepts at base level. Cleared many doubts and very neat explanation. Learnt many things from the doubts raised by commenters also and your explanation of those... Could you please share VHDL code for FIFO design which you explained above. Would be more helpful in understanding it in implementation level. Please let me know the media for sharing RTL for this, would like to connect for further doubts. Thanks A lot. Keep rocking.. Be healthy.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
shilpa , that's longer than my video 😊 , thanks for the supportive words , you can ask any doubts here even regarding code . Good luck, good health 👍
@talupurineelima6755
@talupurineelima6755 3 жыл бұрын
Great explanation 👏
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaskaram neelima 🙏 , thanks for the support, good luck & great health 👍😊
@massine92
@massine92 3 жыл бұрын
Thank You very much for such great explanation :)
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaskaram _/|\_ Massine , Thanks for the support , good luck & great health,Take care :)
@wndell3722
@wndell3722 4 жыл бұрын
So Clear !!!!!!!! omg!! Thank you, sir!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Thank you so much 👍
@kankanasarkar7439
@kankanasarkar7439 3 жыл бұрын
Thanks for the video. I have question regarding the depth of asynchronous FIFO formula that you mentioned at last. This formula is taking FIFO Depth . So this range is specifying what exactly?
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaskaram 🙏 kankana , formula is for calculating range in case of non power of 2 depth , you can check fifo depth video on my channel for better understanding, Thanks for asking 😊, good luck & great health 👍.
@swarnikashruti5308
@swarnikashruti5308 4 жыл бұрын
Thanks for this wonderful lecture😃
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Your welcome, good luck, good health 👍😊
@pratikkaul77
@pratikkaul77 4 жыл бұрын
How are you not famous damnnnn
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Thanks 😂, good luck & great health 👍😊
@aishwaryanair7047
@aishwaryanair7047 4 жыл бұрын
Thanks. That was a very clear explanataion.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Your welcome 👍
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Do you have any suggestions of topics for the channel 👍
@aishwaryanair7047
@aishwaryanair7047 4 жыл бұрын
You can add videos on Low power design techniques.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
@@aishwaryanair7047 thanks for your suggestion , I will try to do videos on them.
@Nitishkumar1516713
@Nitishkumar1516713 3 жыл бұрын
Excellent video
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaskaram Nitish Kumar 🙏 , thanks for support, good luck & great health 👍😊
@shyamabz4414
@shyamabz4414 4 жыл бұрын
Hey Karthik, Thank you so much for you video. Can you please upload an video on following design questions:- 1. Design of Synchronous Circuit to detect the toggling of flip flop. 2. Edge detector Circuit i.e to detect whether the Flip flop is +ve edge triggered or -ve. Thanks in Advance for your response
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey abarajithan, I Will make it but need some time . Thanks for asking 👍
@shyamabz4414
@shyamabz4414 4 жыл бұрын
@@KarthikVippala Thanks you so much your, the best ! if you could explain about round robin arbiter design that would be of great help! Appreciate your efforts and your time !! thanks a lot
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey abarajithan , I will do them, but I will ask some questions while making the video. To know what exactly you need 👍.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey abarajithan , edge detection means edge detection of input or not. Can you please elaborate about toggling of flop
@vikineo
@vikineo 2 жыл бұрын
In that formula, how do you come up with the value for "n"? is it "the first power of 2 number" after the given fifo depth?
@KarthikVippala
@KarthikVippala 2 жыл бұрын
n should be such that it is greater than depth, let say depth is 520 , n will 10 as 2^10 is 1024, If depth is 9,n will 4 , 2^4 is 16. Thanks for asking, good luck.
@saicharan3367
@saicharan3367 8 ай бұрын
At 6:45, what is the guarantee that the signal is going to be to be sampled to 1 ? after meta stable state, the signal may even sample to a 0 value right? how can we know the correct value from 2 flop synchronizer?
@preetamdewangansirclasses2502
@preetamdewangansirclasses2502 2 жыл бұрын
great one
@KarthikVippala
@KarthikVippala 2 жыл бұрын
Thanks🙏
@inamulla8156
@inamulla8156 Жыл бұрын
Hi Karthik , Greatly Appreciate your work and efforts for this wonderful explanation, I have a dbout in Depth calculation part. How did you consider as (2^10)/2 for that 520 depth FIFO calculation, Is it a approximation OR How?. please do the needful Thankyou.😊
@RahulKumar-oz2mc
@RahulKumar-oz2mc Жыл бұрын
@karthik, same doubt. What is 'n' here?
@annankldun4040
@annankldun4040 2 жыл бұрын
Whats the point of the flops block at 16:22? That was not explained in the video.
@1amswill
@1amswill 4 жыл бұрын
Great explanation man! Is your in-depth understanding due to reading and research or work experience?
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Thanks 😊. Good luck 👍
@satheesh3210
@satheesh3210 2 жыл бұрын
Please can you explain in detail about flop synchronizers in detail
@KarthikVippala
@KarthikVippala 2 жыл бұрын
Namaste 🙏 Sathish , pls check my channel playlist :synchronizers where I explained about it in detail, good luck & great health 👍😊
@ExploreElectronics
@ExploreElectronics 2 жыл бұрын
Thanks for the video. I have a doubt here. please clarify. if we consider extra bit for address/pointers, full and empty can be set correctly. what happen to the next address of FIFO, i.e, 1000? how to roll off? if rd pointer is not 0, will it not try to write on 1001 location and so on? PLEASE ANSWER
@ChrisSmith-tc4df
@ChrisSmith-tc4df 2 жыл бұрын
The extra bit is only used for comparison, but masked off, so that only the lower bits are used as the memory address.
@KarthikVippala
@KarthikVippala 2 жыл бұрын
Thanks Chris 🤝
@ExploreElectronics
@ExploreElectronics 2 жыл бұрын
@@ChrisSmith-tc4df thankyou
@CallistoPili
@CallistoPili 2 жыл бұрын
very good video, there is still one missing point there, the timing contraints for a async FIFO. :)
@cheesepie4ever
@cheesepie4ever Жыл бұрын
Great video thanks! Subbed
@KarthikVippala
@KarthikVippala Жыл бұрын
Your welcome
@sainandini2154
@sainandini2154 4 жыл бұрын
Well explained...
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Thank you🙏
@vagallamallikarjunareddy6177
@vagallamallikarjunareddy6177 2 жыл бұрын
hi Karthik please provide information on CDC, LINT and SYNTHESIS
@KarthikVippala
@KarthikVippala 2 жыл бұрын
Namaskaram 🙏 mallikarjun, please watch cdc playlist on my channel, lint synth will update but it will take time
@vagallamallikarjunareddy6177
@vagallamallikarjunareddy6177 2 жыл бұрын
Thank you karthik
@bhavyachowdary3526
@bhavyachowdary3526 3 жыл бұрын
Hi Karthik It's an amazing explanation. Could you please let us know what are the changes need to be made to the design code pinned when Dual port asynchronous fifo has 2 write ports and 1 read port. All the three ports are working on different frequencies. The inputs ports have the capability to write simultaneously based on Write enable signal. If both ports try to write then port1 will be given the priority. Thank you.
@jnaneswar1
@jnaneswar1 4 жыл бұрын
sir, you are saying that if we use binary for pointers, they may enter into metastable state, but we were using synchronizers to avoid metastable states then why to worry? first the pointers get incremented and then they will be passed through synchronizers right? then to worry about intermediate staes? please clarify, I guess I didnt get the whoe purpose of using gray code. Somewhere I read that for binary to increment it will go through some intermediate states and there is a chance that one of the intermediate state will pass through synchronizers and gray code will be varied with single bit takes single cock... please tell the events flow.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey jnaneswar thanks for asking the question , Binary pointer creates problem even if we synchronizers , I have already discussed in the video (same below) Let say we are passed 5(101) using binary counter , next value will be 6 (110) for each bit we require one flop so 3 flops and for each we have two flop synchronizers, if there is a metastability the 101 can goto 111 which is 7 and say our depth is 7 then it's a false full condition Now if we use gray pointer then here we will not get false full , metastability will change only bit or nothing . Hope this clears your doubt , you have any doubts please feel free to comment.
@jnaneswar1
@jnaneswar1 4 жыл бұрын
@@KarthikVippala got it sir, thnq very much
@vamsiparsa1547
@vamsiparsa1547 6 ай бұрын
Do we use gray code encoding in synchronous FIFO? or only in Async FIFO? if possible please make a video on Sync FIFO Design.
@sp28769
@sp28769 4 жыл бұрын
Sir what is the use of pointers ? Can't we design without pointers ? please give some relation between pointers and address ? -> i know that pointers contain the address of a particular memory location sir... beyond this could you please give some more information regarding my question. just subscribed sir thank you for this content and one more thanks in advance for addressing my question.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey pavan thanks for asking the question, Pointer shows the position (address) where data is read or written, Address is constant , data transfer might happen into memory to correctly track the data we use pointers . Pointers a must for the design .
@sp28769
@sp28769 4 жыл бұрын
@@KarthikVippala got it sir 😊
@balajiadithyavenkataramana806
@balajiadithyavenkataramana806 4 жыл бұрын
Hi great video! Can you tell how to check the write full and read full condition in case of FIFO depth 6? Coz I guess adding an extra bit would't help in this case?
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey Balaji Adithya thanks for your support and appreciate you effort to asking the questions. Full condition is {~wraddr[4],wraddr[3:0]} == rdaddr So when wr is at 10000 and rd is at 00000 it will be a full condition . May be you have not see clearly inverter "~" due to my shabby handwriting 😁. Adding extra bit will be helpful for finding out full condition. Thank you for asking the questions , if you have more doubts , I am happy to help you.
@balajiadithyavenkataramana806
@balajiadithyavenkataramana806 4 жыл бұрын
Ok understood now! Thanks for the quick response!
@balajiadithyavenkataramana806
@balajiadithyavenkataramana806 4 жыл бұрын
So for addressing & empty/full conditions you use the binary values itself but only for sending over the data of pointer to other clock domain you use the gray code r8?
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Yup u r correct 👍
@vedesh1997
@vedesh1997 4 жыл бұрын
@@KarthikVippala Hi Karthik, According to your formula the range of a fifo with depth 6 is from 001 to 110 ( binary ). now for checking the full condition adding extra bit may not work because if i increment the counter after the 0110 it goes to 0111 so my wraddr is 0111 and rdaddr is 0001 ( as it is the starting address ). This is my understanding please correct me if I am wrong.
@shivu4377
@shivu4377 3 жыл бұрын
Very nice video.. Can you please explain us how a metastable signal recovers during synchronization.
@placementdas3997
@placementdas3997 2 жыл бұрын
Even after grey code conversion we are not getting our desired result. As you said for grey 111 -> 101 we will be getiing 111 or 101. But they are two different counts , one indicated the number of data in the fifo as 5d other as 6d. Wont we have an error in the result ?
@hgl9590
@hgl9590 Жыл бұрын
I have the same question!
@sonnguyen3874
@sonnguyen3874 4 жыл бұрын
valuable video. Just subscribed to your channel. No offense, could you tune your voice that will help people feel more comfortable.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Thank you son nguyen , I will improve on my voice , good luck, good health 👍
@sonnguyen3874
@sonnguyen3874 4 жыл бұрын
@@KarthikVippala hi Karthik, I have 1 concern: Will 2-FF syncer work correctly if write_clk is much faster than read_clk or vice versa? Any data lost?
@KarthikVippala
@KarthikVippala 4 жыл бұрын
@@sonnguyen3874 no data won't be lost , we need to take care of overflow and under read .we might get some clock cycles delay but that's fine
@minqingliang
@minqingliang 2 жыл бұрын
Thank you so much for making such great videos!!! Could you make some videos about JTAG, APB and iJTAG for DFT?
@KarthikVippala
@KarthikVippala 2 жыл бұрын
Sure🙏
@minqingliang
@minqingliang 2 жыл бұрын
@@KarthikVippala thank you, can’t wait for it!
@ADITYA95KUMAR
@ADITYA95KUMAR 4 жыл бұрын
Hey Karthik, Great Explanation!! I have a question regarding the synchonization of Gray Counter. Suppose there was metastability during the CDC of gray counter, beacuse of this the value sampled in receiving domain is same as the previous value(intended value was incremented value). How do we take care of this situation as the pointer was supposed to increase but it didn't? Wouldn't it cause the false empty/full condition? Does the pessimism introduced in the design take care of the above condition as well?
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey Aditya , thanks for asking ,if it some how system enters metastability , pointers will not be changed, even if pointers are increased we will send the same values again so pointer will not be effected . Good luck, good health 👍😊
@ADITYA95KUMAR
@ADITYA95KUMAR 4 жыл бұрын
@@KarthikVippala One follow-up question, let's consider the corner case..if the pointer would have incremented it would have caused empty/full condition but, due to metastability as you pointed out the pointer will not increase and the same value will be sent. Now the comparison module will compare the read and write pointer value and since the value doesn't satisfy the empty/full criteria (although it should but it didn't due to metastability) so, the enable single will remain asserted and read/write will happen. Since we are taking about the corner case, this would mean that we are trying to write to a full FIFO or read from an empty FIFO, thus violating the criteria of FIFO design. Am I missing something here? Thanks again for your time.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Why will enable signal will be high ?
@ADITYA95KUMAR
@ADITYA95KUMAR 4 жыл бұрын
@@KarthikVippala Because one of the inputs to the and gate of enable logic is driven by empty/full condition. Since we didn't see the full/empty condition, the enable remained asserted.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
@@ADITYA95KUMAR full and empty condition are dependent on wraddr and rdaddr , so I guess it won't be a problem . Can you please make question short , I am unable to concentrate for whole time😋.
@saitejareddyg3034
@saitejareddyg3034 3 жыл бұрын
very nice explaination
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaste Sai teja reddy, Thank you so much , Good luck & Great Health :)
@umeshnagar4092
@umeshnagar4092 3 жыл бұрын
Very Well explained !!!
@ashishdudeja9466
@ashishdudeja9466 3 жыл бұрын
Great explanation , though I miss to understand one thing. When using async FIFO we need to use one extra bit to determine full flag. This extra bit also goes through binary to grey encoding ? For example , if the FIFO depth is 8 then I have to use a 04 bit or 03 bit binary to grey encoder ? Thanks for answering.
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaskaram Ashish _/\_ , Thanks for asking , Yes extra bit also go through encoding, for depth 8 we need to use 4bit. Good Luck and Great Health , take care :)
@ashishdudeja9466
@ashishdudeja9466 3 жыл бұрын
@@KarthikVippala Thank you .
@alekhyadevi8169
@alekhyadevi8169 4 жыл бұрын
Very nice sir...but a small doubt what happens if msb of read pointer greater than msb of write pointer is it a full condition
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Do you mean value or just msb ?
@alekhyadevi8169
@alekhyadevi8169 4 жыл бұрын
@@KarthikVippala when write pointer is at 00000 and read pointer at 10000 what happens what I mean is msb bit of write pointer is less will the fifo consider it as full condition
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey alekhya thanks asking Full condition is {~wraddr[4],wraddr[3:0]} == rdaddr So when wr is at 10000 and rd is at 00000 it will be a full condition . May be you have not see clearly inverter "~" due to my shabby handwriting 😁. Adding extra bit will be helpful for finding out full condition. For your case also it is a full condition. Good luck, good health 👍
@alekhyadevi8169
@alekhyadevi8169 4 жыл бұрын
@@KarthikVippala sir tanq very much...really soo much
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Your welcome 👍😊
@tinhlac1405
@tinhlac1405 4 жыл бұрын
Ihave little confusion on the empty and full condition. Because the synchronizer, the wrptr and rdptrt will be value of previous 2 clock cycles. When you use that to compare how does it work. Ie let say you want to compare empty condition. You would compare it in rd_clk domain. However, the rdptr value of rdptr is the current address of this clk cycle, but the wrptr is the old value of wrptr of previous 2clk cycle. Because of that, it does not compare to the current value, the empty condition is not a really empty.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey Tinh Lac, I understand your confusion , yes when the rdptr is passed to the wr_clk, there could be 3 to 4 clock cycles delay , with respect to rdptr in rd_clk domain and rptr value in wr_clk domain may reflect older value. This means more space is available in FIFO to write than what it is showing . When reading is stopped rdptr will catch up to the value of real rdptr. This will not effect the performance . Similarly when wrptr is passed to rd_clk domain , wrptr is 3 to 4 cycles delay compared to real time wrptr. If empty flag is generated , since we are writing there could be few data in FIFO ,when writing is completed this wrptr will catch up to the real time wrptr. There is a temporary lag in pointer value , which gets updated to correct value in several cycles. Hope this clears your confusion , if you any more doubts feel free to comment. Please do subscribe it will help me a lot 🙏
@tinhlac1405
@tinhlac1405 4 жыл бұрын
Karthik Vippala just sub
@KarthikVippala
@KarthikVippala 4 жыл бұрын
@@tinhlac1405Thank you 🙏 so much
@roni5884
@roni5884 2 жыл бұрын
Nice video
@KarthikVippala
@KarthikVippala 2 жыл бұрын
Thank you 🙏
@prashanthra6031
@prashanthra6031 3 жыл бұрын
Very good explanation
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Thanks and welcome
@avinashsaini6798
@avinashsaini6798 9 ай бұрын
Best ❤
@SaiAnirudh_warmacheene
@SaiAnirudh_warmacheene 4 жыл бұрын
at 5:54 you said Flob B is in a Metastable state due to setup time violation. But then the output could settle to either 0 or 1 right? what if the output settles to 0 when input is 1? Isn't this causing a bit of error? How do we solve the bit error and ensure correct data transmission without any errors in bits? because 2FF synchronizer doesn't guarantee correct data transmission it only guarantees clean data transmission right?
@ChrisSmith-tc4df
@ChrisSmith-tc4df 2 жыл бұрын
This metastable bit confusion is exactly why Gray Code must be used between the clock domains, so that only one bit changes at a time as the pointers increment. The worst case is that the transmission of the pointer remains at the old value a clock longer before advancing to the next possible count.
@sushmakakarla7657
@sushmakakarla7657 3 жыл бұрын
Can a fifo take packets of data from one port and deliver it to 3 different destination based on destination id at same time. To bd simple can a asynchronous fifo have 3 output data ports
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Namaskaram Sushma Kakarla , Yes you can connect output to multiple ports , Thanks for asking, Good luck & Great Health _/\_ , Take care:)
@Anil-yo3tx
@Anil-yo3tx 4 жыл бұрын
Thanks for the video! Question: For 520 depth you got 252 and 771 as addresses. But once FIFO is full we cannot roll over to 252 since we cannot decipher between empty and full. Instead do you think equation should be 2n-depth to 2n+depth-1 to cover for empty/full case and also Gray code rollover?
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Namaskaram 🙏 anil , thanks for asking, when we use 252 and 771 address , when fifo is full we rollover to 252 not zero.
@Anil-yo3tx
@Anil-yo3tx 4 жыл бұрын
@@KarthikVippala Yes I understand it doesn’t go to zero. If FIFO is full it goes to 252. If FIFO is empty it also is at 252. Then how do you decipher between full and empty?
@JaganJohn
@JaganJohn 3 жыл бұрын
@@Anil-yo3tx You need an extra bit in address for detecting rollover
@unnatishah5457
@unnatishah5457 2 жыл бұрын
@@JaganJohn In that case , while rolling over that extra bit will change from '0' to '1' and also MSB will change from '0' to '1' since we are rolling over from address 771 to 252. So now we have two bits change in gray code while we roll over. Can you explain that?
@unnatishah5457
@unnatishah5457 2 жыл бұрын
@@KarthikVippala Aren't we considering extra bit for roll over to decide FIFO Full and Empty condition? If yes, then there are change in two bits while rolling over. 1. MSB changing from '0' to '1'. 2. One bit change while switching from 771 to 252. Can you please explain how this would work?
@harshgola4423
@harshgola4423 3 жыл бұрын
can i design a fifo which writes the data in fifo with 200mhz clock and read the data out of fifo at 3.3hz, what would be its depth, how many synchronizers would be needed , is it feasible?
@harshgola4423
@harshgola4423 3 жыл бұрын
please guide
@harshgola4423
@harshgola4423 3 жыл бұрын
72 bit of data
@JaganJohn
@JaganJohn 3 жыл бұрын
rd_clk is 3.3Hz or MHz? If it is Hz and wr_clk is 200MHz, the minimum FIFO Depth will be the Burst size. i.e In your case 72 3.3Hz clock is a very slow clock therefore I doubt if this is a real design.
@harshgola4423
@harshgola4423 3 жыл бұрын
@@JaganJohn thanks for your answer , actually it was ques i was given to solve.
@garimagoyal6604
@garimagoyal6604 Жыл бұрын
What if output of QB1 settles to zero after metastability state? Then we are getting the complement of QA as the final output and eventually the use of synchroniser complemented the output
@garimagoyal6604
@garimagoyal6604 Жыл бұрын
I am asking from where you told about the two flop synchronisers
@akshay5041
@akshay5041 4 жыл бұрын
Great Video . Could you explain a bit more on why gray code is needed .
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Namaskaram Akshay🙏, gray code is used to perform proper synchronisation , in normal binary we will get false full and metastability. Good luck, great health 👍😊
@omersarcam3070
@omersarcam3070 11 ай бұрын
When we apply this, due to 2 synchronisers, when the fifo memory is full, the full signal becomes 1 after a few cycles. Won't this cause a problem? Because the full signal occurs much later. Since the full signal is given late, data continues to be put into the fifo memory even if the fifo memory is full.
@sivasai5066
@sivasai5066 4 жыл бұрын
Hi Karthik, weather write address and write pointer are same ..
@KarthikVippala
@KarthikVippala 4 жыл бұрын
No siva , they are different
@sivasai5066
@sivasai5066 4 жыл бұрын
@@KarthikVippala then how write pointer will be generated.
@puli87
@puli87 4 жыл бұрын
Great buddy.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Namaskaram 🙏 Bharathwaj , thank you , good luck, great health 👍😊
@mayurpatel9349
@mayurpatel9349 5 жыл бұрын
This is very helpful
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Thank you!
@crazychild7013
@crazychild7013 23 күн бұрын
Hello sir, pls make videos on writing constraints in fpga design
@KarthikVippala
@KarthikVippala 23 күн бұрын
Sure
@nabeelahmad4583
@nabeelahmad4583 4 жыл бұрын
great work bro..
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Thank you brother, good luck, good health 👍
@nabeelahmad4583
@nabeelahmad4583 4 жыл бұрын
@@KarthikVippala hello bro can you tell Circuit for 1st one finder for a series input
@KarthikVippala
@KarthikVippala 4 жыл бұрын
@@nabeelahmad4583 hi , I did not get you ,can you please elaborate 👍
@nabeelahmad4583
@nabeelahmad4583 4 жыл бұрын
@@KarthikVippala there is series of number entering in logic circuit,when 1st 1 enter output should be high
@KarthikVippala
@KarthikVippala 4 жыл бұрын
@@nabeelahmad4583 are numbers binary
@JasonPien917
@JasonPien917 5 ай бұрын
Thank you!
@KarthikVippala
@KarthikVippala 4 ай бұрын
Your welcome
@digambarbhole9467
@digambarbhole9467 Жыл бұрын
sir , where to use synchronous FIFO and Asynchronous FIFO ? plz clarify?
@KarthikVippala
@KarthikVippala Жыл бұрын
Async fifo is used in multi clock domain, where data moves from one domain to other. Sync Fifo is used when we have a same clock for write & read
@digambarbhole9467
@digambarbhole9467 Жыл бұрын
But if we have same clock for read and write then what is the need to use FIFO? Plz clr
@KarthikVippala
@KarthikVippala Жыл бұрын
To store the data
@nagakeerthanakanagaraj2195
@nagakeerthanakanagaraj2195 5 жыл бұрын
great explanation! Can we get same kinda explanation for FIFO depth calculation
@KarthikVippala
@KarthikVippala 5 жыл бұрын
Thank you for asking, please check video of Fifo depth consideration , link below kzbin.info/www/bejne/eoLYn3eqeZuMmNU
@KarthikVippala
@KarthikVippala 5 жыл бұрын
Do you need any video on any other topic , if I know that topic I can make a video on it.
@nagakeerthanakanagaraj2195
@nagakeerthanakanagaraj2195 5 жыл бұрын
@@KarthikVippala sure Karthik I ll let you know about it and thanks for spreading knowledge
@kanthimathis6556
@kanthimathis6556 Жыл бұрын
Hi Karthik, thank you for making very informative videos. Please, clarify this doubt of mine: positiveskew helps meet setup time. But, slow corner ( min voltage, Max temperature_more delay) is the worst for setup. Can you tell me why slow corner is bad for setup, please?
@anil4128
@anil4128 3 жыл бұрын
Good job brother, can you suggest any good book for these topics , which has some numerical problems..?
@KarthikVippala
@KarthikVippala 3 жыл бұрын
Please find them forums , in particular there is no specific book i know which have numericals, thanks for asking, good luck and great health 👍😊
@aishwarytiwari7221
@aishwarytiwari7221 3 жыл бұрын
Not able to understand About the empty condition I mean If both wr_ptr == rd_ptr Then, if say it has value 0001 == 0001 the. How is it in empty condition. Since both pointers are at location 1d and not at 0d Sir, please explain. Thanks
@JaganJohn
@JaganJohn 3 жыл бұрын
When you think about it, that makes sense. Supposedly you make 2 data into the FIFO. wr_ptr will be 'b0010. Now you start reading. rd_ptr goes from 'b0001 and then to 'b0010. This means we have read both the entries from the FIFO. So FIFO is technically empty. It doesn't mean we have to reset the pointers to 0. At this condition wr_ptr===rd_ptr will trigger empty condition
@prasannan2084
@prasannan2084 2 жыл бұрын
i can't understand what the final depth formula? what you gonna say with it?
@KarthikVippala
@KarthikVippala 2 жыл бұрын
Namaste 🙏 Prasanna it's for non power of 2 depth
@prasannan2084
@prasannan2084 2 жыл бұрын
@@KarthikVippala yes its understood..but what is the use of formula?
@KarthikVippala
@KarthikVippala 2 жыл бұрын
@@prasannan2084 acessing fifo it will be difficult without using proper method
@sandhyaramasubramanian2375
@sandhyaramasubramanian2375 4 жыл бұрын
The wptr and waddr are the same, just that wptr is the Gray code format and waddr is in binary. But they point to the same location. Is that correct?
@KarthikVippala
@KarthikVippala 4 жыл бұрын
You can say that , but they are different .
@sandhyaramasubramanian2375
@sandhyaramasubramanian2375 4 жыл бұрын
@@KarthikVippala thanks for the resourceful video and quick comment.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Your welcome, good health 👍😊
@kalyanipolipalli
@kalyanipolipalli 2 жыл бұрын
Hi Karthik, Nice explanation. This formula applicable for FIFO depth is Even. What will be the procedure for ODD FIFO depth?
@prasanth669
@prasanth669 Жыл бұрын
just round up to next even number, thats the simplest way
@shridharasmaryapura1504
@shridharasmaryapura1504 4 жыл бұрын
can you explain the internal architecture of the all the 3 major blocks such as fifi mem, fifo wr_ptr, fifo rd_ptr, synchroizers
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey shridhara , thanks for asking the question, FIFO men contain memory element ie flip-flop , registers Wr_ptr and rd_ptr contains storage elements to store the value of pointers and comparators for comparing the values and some extra logic gates. Hope this clears your doubt , if you any more I am happy to help you 👍 Please do subscribe it will help a lot . Thanks for asking
@fifi64242
@fifi64242 6 ай бұрын
How can we say that 2 stage synchronization is enough for avoid metastability,is their any relationship between number of stages and mtbf
@sonnguyen3874
@sonnguyen3874 4 жыл бұрын
Hi Karthik, does your professional regard to Verification also? If yes, I'd love to see some verification techniques from you.
@KarthikVippala
@KarthikVippala 4 жыл бұрын
I will do videos on it in future 👍
@vedantshukla2766
@vedantshukla2766 4 жыл бұрын
I am not able to understand rempty logic can you help me!!!and also How would I generate self checking test bench!!! Thanks
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey vedant , thanks for asking the question, FIFO will be empty when we have not given any write that is initial case . If write let say 3 times then we read 3 times then FIFO will be empty In both cases FIFO is empty when rdptr and wrptr at same position . If we keep on writing without read then we will get a full condition when we meet FIFO depth .After full depth if we write then we go back to zero at that time we get position of rdptr and wrptr same as result we took extra bit to clear this confusion. Please rewatch the video for extra clarification 👍 And coming to self check what ever data you are writing into FIfo , store it in bench and compare from beginning the output of FIFO read and the values stored in bench. I hope this helps you , again thanks for asking , good luck and good health 👍🙂
@vedantshukla2766
@vedantshukla2766 4 жыл бұрын
@@KarthikVippala thanks man!!!helps a lot
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Your welcome 👍
@Migellitos
@Migellitos 4 жыл бұрын
Dear Karthik. Could you explain does it matter for synchronization whether Fifo_mem is pure registers reg mem[DEPTH-1][WIDTH-1] or true dual port RAM? In other words if I use just simple registers as a fifo memory does synchronization still works?
@KarthikVippala
@KarthikVippala 4 жыл бұрын
Hey Migellitos , thanks for asking the question , Synchronization will work in either case. Reg mem will work fine , for Synthesis it's better to use memory model. Good luck, good health 👍
Electronics Interview Questions: FIFO Buffer Depth Calculation
5:21
Designing a First In First Out (FIFO) in Verilog
24:41
Shepherd Tutorials
Рет қаралды 30 М.
What is a FIFO in an FPGA
17:47
nandland
Рет қаралды 76 М.
Handshake based pulse synchronizer Explained!!
8:40
Karthik Vippala
Рет қаралды 16 М.
Handshake synchronizer (clock domain crossing)
5:17
Karthik Vippala
Рет қаралды 21 М.
Crossing Clock Domains in an FPGA
16:38
nandland
Рет қаралды 71 М.