컨텐츠 바로가기

[Verilog]wire & reg 비교

http://pinge.egloos.com/2259784

처음 Verilog HDL 언어를 접하면서 가장 힘들었던 부분은 역시 wire 와 reg의 구분을 하는것..

wire = "선"

reg = "레지스터" 라고 우선 생각을 한다.

wire 는 실제 wire처럼 단지 어떤 모듈과 모듈을 이어주는 선에 불과하고 reg은 실제 레지스터처럼 어떤 신호에 영향을 받아 바뀌는 값이라고 생각함. 따라서 always문 안에서만 reg 값의 변경이 가능하고 wire값은 그 자체로 변경이 불가능하다. 단지 선을 연결하거나 and나 or등의 모듈로 나온 선을 잇는것만 가능할뿐..

ex ) reg와 wire를 이용한 2x4 Decoder.

2x4 Decoder 의 진리표

Input

Output

00

0001

01

0010

10

0100

11

1000

1) Reg 를 이용한 2x4 Decoder

in 신호를 Register값 변경 신호로 잡아 Reg값에 Decode된 값 입력

module Decoder2x4_byReg(in , out);

   input[1:0] in;

   output[3:0] out;

 

   wire[1:0] in;

   reg[3:0] out;

 

   always @(in)

   begin

           if (in == 2'b00) out <= 4'b0001;

           else if (in == 2'b01) out <= 4'b0010;

           else if (in == 2'b10) out <= 4'b0100;

           else if (in == 2'b11) out <= 4'b1000;

   end

endmodule

 

2) wire를 이용한 2x4 Decoder

Not gate와 And gate를 이용한 단순 연결

module Decoder2x4_byWire(in, out);

   input[1:0] in;

   output[3:0] out;

 

   wire[1:0] in;

   wire[3:0] out;

 

   assign out[0] = ~in[0] & ~in[1];

   assign out[1] =   in[0] & ~in[1];

   assign out[2] = ~in[0] &   in[1];

   assign out[3] =   in[0] &   in[1];

endmodule

--------------------------------------------------

이렇게 구분하는 것이 정확하게 맞다고는 생각하지 않지만 처음 개념 잡을때는 필요한 부분이 있다.

wire 는 선이고, reg 는 값을 저장할 수 있다는 것 말이다.


덧글|신고