The best way to start learning Verilog

Поділитися
Вставка
  • Опубліковано 20 чер 2024
  • My new channel dedicated to FPGAs: www.youtube.com/@visualfpga-g...
    There aren't that many fundamental concepts in Verilog Hardware Description Language, but the few there are, we need to know WELL. This video explores some of these fundamental concepts. We look at Combinational Versus Sequential logic and explore the 3 modelling styles in Verilog; Gate Level, Dataflow and Behavioral.
  • Наука та технологія

КОМЕНТАРІ • 67

  • @audiodiwhy2195
    @audiodiwhy2195 Рік тому +35

    Outstanding! I am a Verilog newbie and was bewildered by the different Verilog programming paradigms until I watched this. Thank you.

  • @ctbram0627
    @ctbram0627 Рік тому +3

    Very goog. Short sweet and to the point! Your explanation of blocking and non-blocking was especially good. Coming from a programming background I get wrapped around that axel constantly.

  • @kandredfpv
    @kandredfpv 11 місяців тому +5

    Awesome tutorial! I was able to follow with ease as a complete Verilog newbie. Thanks! 👍

  • @julio4094
    @julio4094 11 місяців тому +2

    I took digital Circuits 1 and barely survives, this tutorial helped me understand what I didn't in my class. Thank you!

  • @andrewphillip8432
    @andrewphillip8432 3 роки тому +17

    Wow what a great video! Thanks for taking the time to put this together!

  • @233kosta
    @233kosta 8 місяців тому +2

    My first FPGA kit will be here in a few days... can't wait to get stuck in!

  • @huynhbaoduy6057
    @huynhbaoduy6057 7 місяців тому +1

    Prominent instruction. Thank you !

  • @Kaamanita
    @Kaamanita 3 дні тому

    Thank you so much and kudos to you for making this marvelous video!

  • @lujeanguieb7271
    @lujeanguieb7271 3 місяці тому +2

    Cried in class because I couldn't understand this topic. Thank you for the simple explanation

  • @ksbs2829
    @ksbs2829 Рік тому +52

    At 4:02 I don't understand why the data flow is out1 = ((~X&A)&A)|(B&X); isn't the second &A redundant? I would think assign out1 = (~X&A)|(X&B); ? I haven't tried it in a tool so don't know if there is another reason to construct the statement this way. Great Video. Thanks.

    • @nikoskandyliotis8854
      @nikoskandyliotis8854 Рік тому +10

      i would actually comment the same thing? are we thinking of sth wrong?

    • @riperboyxl3216
      @riperboyxl3216 Рік тому +11

      it's wrong, you're correct on your solution

    • @LorenMLang
      @LorenMLang Рік тому +13

      I had to come to the comments for the very same question.

    • @ichigonixsun
      @ichigonixsun 10 місяців тому +2

      I was going to ask the exact same question before I saw your comment.

    • @lukealadeen7836
      @lukealadeen7836 9 місяців тому +1

      Same here, had me sitting up thinking why on earth they would write it like that! Okay now back to the video 😂

  • @shantanufatale7968
    @shantanufatale7968 Рік тому +1

    Really good informational video

  • @ksbs2829
    @ksbs2829 Рік тому +1

    Very well done. Thanks

  • @arifnishan5646
    @arifnishan5646 Рік тому +1

    just outstanding

  • @neilclay5835
    @neilclay5835 7 місяців тому +1

    Excellent explanation

  • @e630fnr
    @e630fnr 4 місяці тому +1

    Blocking or non-blocking assignments can give you either combinational or sequential logic depending on the sensitivity list of the always block these assignments are included in.

  • @Vishalkumar-ez5xy
    @Vishalkumar-ez5xy Рік тому

    thank you for this video

  • @OmarWaelAhmed
    @OmarWaelAhmed 6 місяців тому +2

    00:01 Verilog coding involves three different layers of abstraction and understanding the difference between combinational and sequential logic is important.
    01:59 Modeling in Verilog at the gate level involves instantiating each logic gate independently and connecting them together using wires.
    03:46 Behavioral level Verilog code describes circuit behavior at a high abstraction level.
    05:40 Multiplexer can be implemented in different ways: gate level, data flow level, and behavioral level.
    07:31 Utilize D-type flip-flops for sequential logic
    09:14 Blocking and non-blocking assignments have different evaluation and assignment processes.
    11:03 Understanding the difference between blocking and non-blocking assignments in Verilog
    12:54 Use blocking assignments for combinational logic and non-blocking assignments for sequential logic.

  • @AkbarRajaei
    @AkbarRajaei 2 роки тому

    good job

  • @sulphuric99
    @sulphuric99 8 місяців тому

    Great video overall, other than the multiplexor code at 4:02 which could be simplified. Good explanation of non-blocking vs. blocking assignments.

  • @eggxecution
    @eggxecution Місяць тому

    great

  • @ayeflippum
    @ayeflippum 7 місяців тому +5

    *Visual Electric* 3:20 Why are there 2 ampersands: ((~X&A)&A)?

    • @cchsiang2002
      @cchsiang2002 4 місяці тому

      I have the same question. (~X & A) | (B & X) should serve the purpose well.

  • @Oppppppppppppppppp
    @Oppppppppppppppppp 5 місяців тому

    Thank u

  • @SamualN
    @SamualN 6 місяців тому +1

    the behavioural level is a bit like reactive programming which is something I'm familiar with as a web developer

  • @geevnahal7926
    @geevnahal7926 Рік тому +2

    Would you please make a series of videos teaching DSP using this setup?

  • @AK-vx4dy
    @AK-vx4dy 4 місяці тому +2

    @3:56 Why (~X&A)&A) instead of ~X&A ?

  • @Hexor1211
    @Hexor1211 8 місяців тому +1

    08:13 starting an important explanation of non-blocking vs blocking assignments.

  • @sajanjeka677
    @sajanjeka677 3 місяці тому +2

    @3:54 Why do you &A twice ? shouldn't it just be (~X&A)|(X&B) ?

  • @tombouie
    @tombouie 11 місяців тому +1

    Thks &;
    I'm new to FPGAs & will try to watch your whole playlist.
    Oh a question, I would like to program FPGAs via smartphone & I hope to use the smartphone as the human interface to the FPGA. ??Can you point me in the right direction to get started??

    • @VisualElectric_
      @VisualElectric_  10 місяців тому

      Hi, thanks! I'm not aware of any development tool or existing project which does this. Programming the FPGA is not a simple task so it will be a big challenge!

    • @tombouie
      @tombouie 9 місяців тому

      @@VisualElectric_ Thks, a few more newbie questions though;
      I been researching FPGAs (how they work in theory) & collecting the material to come up to speed. Now I need to choice my 1st FPGA to learn-on.
      1. Given the initial comment, ??Which FPGA would you recommend to try implementing all these crux FPGA theories (ex: LUTs, Boolean Algebra, SOP/POS tables, etc) I've learnt so I can minimize frustration, profanity, throwing-things, etc ;)??
      2. ??What are some good groups/resources/etc to learn FPGAs with others knowledgeable people?? (I've found slim-to-none except a few good but old books, UA-cam playlists, etc ;)
      3. ??Why pray-tell ain't FPGAs more popular?? (ex: programable FPGA hardware, parallel FPGA processing, etc runs circles around CPUs hands-down)
      Thks again

  • @asherpaul4450
    @asherpaul4450 3 роки тому +2

    Can you please help us to have the Verilog code for the ifft and fft to implement in FPGA

  • @nantes9807
    @nantes9807 7 місяців тому

    What FPGA kit do you use ?

  • @kashaarjun595
    @kashaarjun595 Рік тому +44

    Can anyone confirm to me that the statement assign out1 = ((~X & A)&A)|(B & X) should be assign out1 = (~X & A)| ( B&X)

    • @johnpatrickmoore5505
      @johnpatrickmoore5505 Рік тому +7

      They're equivalent but yeah it should

    • @Ma_X64
      @Ma_X64 Рік тому +4

      You can remove left internal parentheses without any effect. Then you can see that A & A is always equals A. So your two expressions are the same. There definitely is a rule of the formal logic that describes this kind of cases but I'm to lazy to take the book from the shelf.)

    • @MrMineHeads.
      @MrMineHeads. Рік тому +7

      A&A simplifies to A anyway so they are equivalent

    • @lukealadeen7836
      @lukealadeen7836 9 місяців тому +2

      ​@@MrMineHeads.yea but why would you write it like that. Why not just have the simplified expression

    • @Shagrat_52
      @Shagrat_52 7 місяців тому

      ​@@lukealadeen7836is this design always simplified? is it impossible to write so as to make a small delay?

  • @riperboyxl3216
    @riperboyxl3216 Рік тому +3

    3:30 ain't an error in that assign?

  • @lazynet1246
    @lazynet1246 Рік тому

    👍👍👍..,

  • @ladolahiral5007
    @ladolahiral5007 4 місяці тому

    Which tool you using ?

  • @rahi10
    @rahi10 9 місяців тому +1

    How do codes written at these different level of abstractions convert to synthesis in ASIC Design?
    Say I write, assign wire = (a&b) | (c&d) ;
    I can come up with 3 possible ways to synthesize this:
    1) 2 AND, 1 OR gate ( 18 Transistors )
    2) 3 NAND gates ( 12 Transistors )
    3) AND-OR22 module ( 10 Transistors )
    Which one does the code synthesize in this case and how does it make that decision?

    • @cryora
      @cryora 9 місяців тому

      I'd assume number 1, because that is the literal interpretation of the boolean expression. Unless the synthesizer has a way to automatically simplify boolean expressions into simpler circuits.

    • @akhilthomas2890
      @akhilthomas2890 6 місяців тому

      hi what is the third option? could you please explain it?

  • @marwanal-yoonus280
    @marwanal-yoonus280 Рік тому

    Dear Sir
    Thank you very much for this helpful video
    Please, I try to write the following Verilog code in Vivado, the synthesis process is OK but when I want to implement it an error signal appear !!
    module Tog_not (hsync, EOL, q);
    input hsync, EOL;
    output reg q;
    always @ (posedge hsync)
    begin
    q

    • @phengyang2639
      @phengyang2639 5 місяців тому +1

      Could be bc you’re driving the same output for two different processes. In VHDL I think this is equivalent to a “multiple drivers” error and I think that means the output can’t be determined correctly. If you think about it at the Logical Level, it may be clearer.

  • @ayanacharya9747
    @ayanacharya9747 Місяць тому

    What software are you using?

  • @zulyadein4837
    @zulyadein4837 9 місяців тому

    Is it term of bolean algebra...?...why the symbol different...

  • @alfandosavant4639
    @alfandosavant4639 3 місяці тому

    Is the example of dataflow level correct here? At around 3:40 , isn't it supposed to be: assign out1 = ( (~X&A) | (X&B) ); #newbie here, dont understand why the 1st AND gate is written as (~X&A)&A

  • @emanon2315
    @emanon2315 15 днів тому

    I don't have any background in this subject, but I want to know why, at the data flow level, he used `((~X & A) & A) | (X & B)` and not `(~X & A) | (X & B)`.

  • @alfcnz
    @alfcnz Рік тому

    Great video, awesome teaching style. Thanks a bunch! What resources are you recommending as follows-ups?

  • @Reanplayzz
    @Reanplayzz Рік тому +2

    I think you made a mistake here at 9:36.
    "Blocking" means, that the assignments are blocking, i.e. they run sequentially (one waits for the prior to finish). "Non-blocking" means, that the assignments do NOT block, i.e. they run in parallel and are evalutaed immediately.

  • @cchsiang2002
    @cchsiang2002 4 місяці тому +1

    Why the firs example is not (~X & A) | (B & X) instead of ((~X & A) & A) | (B & X)? Why do we need the extra "& A"?

  • @dustincdouglas2290
    @dustincdouglas2290 2 місяці тому

    You dropped the science down so smooth on this video man
    Much respect 🫡

  • @AkbarRajaei
    @AkbarRajaei 2 роки тому

    good job