yeap's profileyeap's spaceBlogGuestbookNetwork Tools Help

Blog


    July 02

    wire and reg (verilog) from http://www.asic-world.com/tidbits/wire_reg.html

    Well I had this doubt when I was learning Verilog: What is the difference between reg and wire? Well I won't tell stories to explain this, rather I will give you some examples to show the difference.

    space.gif

    From the college days we know that wire is something which connects two points, and thus does not have any driving strength. In the figure below, in_wire is a wire which connects the AND gate input to the driving source, clk_wire connects the clock to the flip-flop input, d_wire connects the AND gate output to the flip-flop D input.

    space.gif

    ../images/tidbits/wire.h4.gif

    space.gif

    There is something else about wire which sometimes confuses. wire data types can be used for connecting the output port to the actual driver. Below is the code which when synthesized gives a AND gate as output, as we know a AND gate can drive a load.

    space.gif

    
     1 module wire_example( a, b, y);
     2   input a, b;
     3   output y;
     4 
     5   wire a, b, y;
     6 
     7   assign y = a & b;
     8 
     9 endmodule
    
    You could download file wire_example.v here

    space.gif

    SYNTHESIS OUTPUT

    space.gif

    ../images/tidbits/wire_and.gif

    space.gif

    What this implies is that wire is used for designing combinational logic, as we all know that this kind of logic can not store a value. As you can see from the example above, a wire can be assigned a value by an assign statement. Default data type is wire: this means that if you declare a variable without specifying reg or wire, it will be a 1-bit wide wire.

    space.gif

    Now, coming to reg data type, reg can store value and drive strength. Something that we need to know about reg is that it can be used for modeling both combinational and sequential logic. Reg data type can be driven from initial and always block.

    space.gif

    Reg data type as Combinational element

    space.gif

    
      1 module reg_combo_example( a, b, y);
      2 input a, b;
      3 output y;
      4 
      5 reg   y;
      6 wire a, b;
      7 
      8 always @ ( a or b)
      9 begin	
     10   y = a & b;
     11 end
     12 
     13 endmodule
    
    You could download file reg_combo_example.v here

    space.gif

    SYNTHESIS OUTPUT

    space.gif

    ../images/tidbits/wire_and.gif

    space.gif

    This gives the same output as that of the assign statement, with the only difference that y is declared as reg. There are distinct advantages to have reg modeled as combinational element; reg type is useful when a "case" statement is required (refer to the Verilog section for more on this).

    space.gif

    To model a sequential element using reg, we need to have edge sensitive variables in the sensitivity list of the always block.

    space.gif

    Reg data type as Sequential element

    space.gif

    
      1 module reg_seq_example( clk, reset, d, q);
      2 input clk, reset, d;
      3 output q;
      4   
      5 reg   q;
      6 wire clk, reset, d;
      7 
      8 always @ (posedge clk or posedge reset)
      9 if (reset) begin
     10   q <= 1'b0;
     11 end else begin
     12   q <= d;
     13 end
     14 
     15 endmodule
    
    You could download file reg_seq_example.v here

    space.gif

    SYNTHESIS OUTPUT

    space.gif

    ../images/tidbits/wire_syn.gif

    space.gif

    There is a difference in the way we assign to reg when modeling combinational logic: in this logic we use blocking assignments while modeling sequential logic we use nonblocking ones.

    Comments

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    Trackbacks

    The trackback URL for this entry is:
    http://cid-68aa22dffd188c8c.spaces.live.com/blog/cns!68AA22DFFD188C8C!178.trak
    Weblogs that reference this entry
    • None