- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
1. clock gating 생성에 관한 질문 clock gating 생성 예제에서는 DUT에서 input i_clk input i_clock_en의 wire 타입의 입력과 output o_clk을 이용해 assign o_clk = i_clk & i_clock_en 을 만들어 testbench에서 o_clk과 연결해줬는데,
D F/F 실습 예제에서는 바로 testbench에서 reg타입의 clk, clk_enable을 이용해 wire clk_for_dut = clk && clk_enable로 만들어 DUT를 인스턴스 하는 과정에서 clk와 clk_for_dut를 연결해준걸로 이해했습니다.
질문 1 : clock gating 생성을 DUT와 testbecnh에서 모두 위의 다른 방식으로 생성하는것인가요 ? (예를들어 testbench에서만 해야된다? DUT에서만 해야된다?)
질문 2 : wire clk_for_dut = clk && clk_enable 이식에서 clk와 clk_enable 모두 reg타입인데 결과값이 wire로 나올 수 있나요 ? (&&의 논리연산 때문인가요? 0or1)
질문 3 : DUT를 인스턴스하는 과정에서 clk를 제외한 다른 값 (sync_reset, async_reset등)은 뒤의 괄호안에 reg 타입의 값이 들어가는데 .clk(clk_for_dut)에서는 clk_for_dut가 wire값인데 들어가도 되는지 질문드립니다. clk와 clk_enable이 이미 reg타입으로 값을 저장하고 있는 상태이고, 이 저장되는 값들의 관계에 의해서 clk_for_dut가 나오므로 단지 결과값을 연결하는 선(wire)으로 썻다. 이정도로 이해하면 될까요 ?
질문 2 : wire clk_for_dut = clk && clk_enable 이식에서 clk와 clk_enable 모두 reg타입인데 결과값이 wire로 나올 수 있나요 ? (&&의 논리연산 때문인가요? 0or1)
>> 연속할당문 assign문의 왼쪽은 항상 wire(net)형이다. 우측은 operand와 operator로 구성되는데 operand에는 wire/reg형 모두 쓸 수 있다. 연속할당문은 항상 능동적이다. 할당문은 항상 오른쪽 피연산자들의 값이 바뀌자마자 왼쪽의 wire에 값을 할당한다.
우측의 clk와 clk_enable이 reg형인 이유는 testbench에서 clk와 clk_enable 을 initial을 통하여 초기값을 할당하여 그 값을 유지해야 되기 때문이다. 참고로 initial구문과 always구문에서 한 문장의 좌측은 무조건 reg형이어야 한다.
Verilog에서 reg형(레지스터)는 단지 값을 저장할 수 있는 변수를 의미한다. wire과 달리 레지스터는 신호의 유도를 필요로 하지 않는다. Verilog 레지스터는 하드웨어 레지스터처럼 클럭을 필요로 하지도 않는다. Verilog의 레지스트 reg형과 하드웨어의 레지스터는 다른 의미를 가지고 있으니 혼동하지 말자.
만약 assign문의 clk과 clk_enable문이 reg형이 아니라 wire문이라고 가정하면 다음과 같은 의미를 가질 것이다.
질문 3
>> 위의 그림과 같이 testbench에서 clk과 clk_for_dut를 연결해준것 뿐이다.