본문 바로가기
Language/Verilog & SV

[Verilog] Reg와 Wire

by VIR&US 2023. 7. 1.
반응형

Verilog에는 Wire와 Reg라는 두 개의 변수타입이 존재합니다.

두 변수의 가장 큰 차이는 값을 저장할 수 있는지 없는지 입니다.

Wire는 값을 저장 할 수 없고 Reg는 값을 저장할 수 있습니다.


Reg

Reg는 data를 저장하기 위한 변수로 다음 값이 할당되기 전까지 현재 값을 유지하므로 절차형 할당문(procedural assignment)를 구현할 때 주로 사용됩니다. Initial/always block 구문 내에서 출력으로는 반드시 reg를 사용해야 합니다. 조합논리(Combinational logic)과 순차논리(sequential logic)을 구현할 때 모두 사용 가능합니다.

 reg [1:0] counter;
 
 always @(posedge CLK, negedge RESETn)begin
 if(!HRESETn) begin
 counter <= 1'b0;
 end
 else begin
 counter <= counter + 1'b1;
 end
 end

counter는 RESETn의 신호가 0이면 0으로 초기화 되고 CLK의 posedge 마다 +1 된다.  모든 과정에서 다음값이 할당되기 전까지는 이전 값을 유지합니다.


Wire

Wire는 그 단어 그대로 물리적인 연결선입니다. 연속 할당문(Continuous assignment)의 출력을 연결하기 위해 사용됩니다. 즉, 연속 할당문(Continuous assignment)의 대표적인 구문인 assign문에서 사용되며 조합논리(Combinational logic)을 설계할 때 사용됩니다. Wire를 통해 gate와 module을 서로 연결하며 신호가 저장되지 않습니다.

 

 wire [1:0] sum;
 assign sum = a + b;

sum 은 a와 b를 더해 바로 출력해줍니다. (Adder)


reg와 register의 개념이 동일한 것은 아닙니다.

reg 타입의 변수가 무조건 플립플롭(또는 레지스터)로 생성된다고 이해하는 경우가 있습니다.

아닙니다.

만약 reg를 사용하여 combinational logic을 구현하면 현재 값을 유지할 필요가 없기 때문에 wire처럼 합성됩니다.

 

728x90
반응형

'Language > Verilog & SV' 카테고리의 다른 글

[Verilog] D F/F  (0) 2023.07.19
[Verilog] Ram Model example Code  (0) 2023.07.06
[Verilog] LHS, RHS  (0) 2023.07.02
[Verilog] array  (0) 2023.07.01
[Verilog] 삼항연산자(Ternary operator)  (0) 2023.07.01