The best way to start learning Verilog

Поділитися
Вставка
  • Опубліковано 27 лис 2024

КОМЕНТАРІ • 85

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

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

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

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

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

    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.

  • @OmarWaelAhmed
    @OmarWaelAhmed 11 місяців тому +4

    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.

  • @233kosta
    @233kosta Рік тому +3

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

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

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

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

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

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

    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.

  • @GayathriG-j7h
    @GayathriG-j7h 5 місяців тому

    Wow wow wow! , I am a total beginner to verilog and this video helped so much for my lab exam due in a few days. Thank you!

  • @sam-kx3ty
    @sam-kx3ty Місяць тому

    You explain everything so well! Even the most complex things.

  • @kandredfpv
    @kandredfpv Рік тому +5

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

  • @ksbs2829
    @ksbs2829 2 роки тому +74

    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 2 роки тому +11

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

    • @riperboyxl3216
      @riperboyxl3216 2 роки тому +15

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

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

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

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

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

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

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

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

    Prominent instruction. Thank you !

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

    Excellent video. Is there by chance a continuation from this video to teach more about Verilog? That would be much appreciated!

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

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

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

    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 Рік тому +8

      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. Рік тому +8

      A&A simplifies to A anyway so they are equivalent

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

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

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

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

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

    Really good informational video

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

    Excellent explanation

  • @sajanjeka677
    @sajanjeka677 9 місяців тому +5

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

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

      a typo probably: i think he wanted to underline the not operation separately from the and to not confuse viewers, like this: ((~X)&A)|(X&B) but yeah, as shown in the videos is wrong, it should be like you wrote in the comment or as i wrote before: (~X&A)|(X&B)

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

    superb vedio

  • @ayeflippum
    @ayeflippum Рік тому +6

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

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

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

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

      It's a trick! Were you paying attention? Is your compiler a piece of s...? (it emit a warning "statement has no effect". at best it'll optimize it out.)

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

    just outstanding

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

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

  • @emanon2315
    @emanon2315 5 місяців тому +2

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

  • @zeep-yt
    @zeep-yt 2 місяці тому +1

    3:17
    nice, but this is simpler and does the same thing
    ```verilog
    module mux(a,b,x,out);
    input a, b, x;
    output out
    assign out = x ? b : a;
    endmodule
    ```

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

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

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

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

  • @ksbs2829
    @ksbs2829 2 роки тому +1

    Very well done. Thanks

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

    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

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

      Yes, it's wrong in the sense that it doesn't match the logic gate schematics, but it is harmless (A&A = A), and still works the same. The compiler will optimize that out regardless.

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

    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 Рік тому

      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 11 місяців тому

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

  • @geevnahal7926
    @geevnahal7926 2 роки тому +2

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

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

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

  • @tombouie
    @tombouie Рік тому +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_  Рік тому

      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 Рік тому

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

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

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

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

    Excellent 🫡

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

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

    Is Gate level design same a Structural design in Verilog ?

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

    thank you for this video

  • @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 Рік тому

    What FPGA kit do you use ?

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

    What software are you using?

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

    good job

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

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

  • @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 10 місяців тому +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.

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

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

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

    Thank u

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

    Which tool you using ?

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

    great

  • @JohnGarcia-j5r
    @JohnGarcia-j5r 2 місяці тому

    Maximilian Locks

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

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

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

    👍👍👍..,

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

    Who else is trying make their own dma firmware 😂🙋‍♂

  • @JerryKirk-y9k
    @JerryKirk-y9k 2 місяці тому

    Schumm Neck

  • @VincentAnnabelle-l4l
    @VincentAnnabelle-l4l 2 місяці тому

    Miller Helen Clark Carol Lewis Scott

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

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

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

    good job