module dflipflop (data  ,clk  , reset ,q);// Code for Asynchronous Positive Edge triggered D flip flop
input data, clk, reset ; 
output q;
reg q;
 always @ ( posedge clk or negedge reset)
  if (~reset) begin //what does this block of code mean?
    q <= 1'b0 // particularly this line
  end  else begin
    q <= data; // and this one

I am new to learning Verilog, and I have to learn the codes for the various types of flip-flops. However, I haven't been able to understand this one entirely and what it means.

For instance, as the D flip-flop is positive edge triggered, hence we write posedge clock and it has an asynchronous reset input apart from the normal D input.

But, what I do not understand is the use of the <= operator in the highlighted lines and what is being done there. Does it mean q is being assigned a value less than zero? What does data variable refer to in the other line, and what exactly does the line mean as well?

  • 1
    \$\begingroup\$ The <= means it is synchronous to the clock. \$\endgroup\$ Commented Nov 6, 2017 at 8:02
  • \$\begingroup\$ Okay. So it means the output 'q' of the flip-flop is formed synchronously and that if reset is zero, then output 'q' becomes zero. \$\endgroup\$ Commented Nov 6, 2017 at 8:05
  • \$\begingroup\$ No, it doesn't mean that it's "synchronous to the clock". Look up "non blocking assignment". NBAs handle potential race conditions in your code. \$\endgroup\$
    – EML
    Commented Nov 6, 2017 at 8:40

2 Answers 2


First of all, the <= is a type of assigning value to the variable. It doesn't mean less than; instead, the value zero is assigned to variable q when the condition is met.

Summary of Verilog syntax:


if(~reset) - this means the condition is fulfilled when reset = 0 (~ is a bitwise negation operator, check the above link in the operator section), meaning when reset is zero, the statement q<=1'b0 is executed; otherwise, the input is passed to output which is given by q<=data. This is the functionality of a D flip-flop.


is a non-blocking assignment operator used to execute the code or pass the values in concurrently (in parallel). This means that all the values are passed simultaneously, no matter the order in which the values are passed into the signal.

This is in contrast to


operator in which the values are passed sequentially.

Consider this code

module test;

int a=4 , b=0 , c=0;

initial begin

$display("a=%0d  b=%0d  c=%0d \n",a,b,c) ; //Here a=4  b=0  c=0 
                                           // and the values are assigned 
                                           // to the variables in the next cycle. You can 
                                           //check this out by using the always statement 


initial begin

  $display("a=%0d  b=%0d  c=%0d \n",a,b,c) ; //Here a=10  b=10  c=10 

  • \$\begingroup\$ Are you sure you mean "sequentially" and not "serially"? If it isn't parallel then it's serial. \$\endgroup\$ Commented Nov 6, 2017 at 14:47
  • \$\begingroup\$ Well, Sequential execution refers to a statement being executed only after its preceding (or one or more key fields) has done so and serial execution strictly refers to execution after its perceding statement. So, if I'd have to be precise, I'd refer to it as time-sequential or or order-of-occurence sequential. \$\endgroup\$
    – Your IDE
    Commented Nov 7, 2017 at 4:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.