작성
·
461
1
답변 3
1
책 완독하고 간단하게 정리해봤습니다.
질문 2 : wire clk_for_dut = clk && clk_enable 이식에서 clk와 clk_enable 모두 reg타입인데 결과값이 wire로 나올 수 있나요 ? (&&의 논리연산 때문인가요? 0or1)
>> 연속할당문 assign문의 왼쪽은 항상 wire(net)형이다. 우측은 operand와 operator로 구성되는데 operand에는 wire/reg형 모두 쓸 수 있다. 연속할당문은 항상 능동적이다. 할당문은 항상 오른쪽 피연산자들의 값이 바뀌자마자 왼쪽의 wire에 값을 할당한다.
wire clk_for_dut = clk && clk_enable은 함축된 표현이며, 풀어쓰면
wire clk_for_dut;
assign clk_for_dut = clk && clk_enable으로 표현된다.
우측의 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를 연결해준것 뿐이다.
참고로 DUT의 input은 항상 wire값으로 선언된다.
0
질문이 있습니다. d_ff실습에서 아래 코드와 같이 output값을 reg값으로 선언해 값을 저장하고 ,
testbench wire값들을 선언해 DUT를 인스턴시하는과정에서 reg output값과 연결해줘도 상관없지않나요?
저는 이렇게 생각하는것이 원칙적인? 방법인거 같은데...
밑과 같이 시도해보았는데 에러가떠서... 제생각이 잘못된건지 질문드립니다.
0
안녕하세요 :)
장문의 질문!!! 잘 읽었습니다 :)
우선 문법관련 질문은 책 한권을 읽으시면 말끔히 해소가 됨으로 책을 먼저 꼭 봐주시고, 영상을 봐주세요. 필독문서에도 적혀있지만, 수강자 분들의 수준을 문법은 알고계시다 가정하고 강의를 만들었습니다. :)
그러면 질문 1,2,3,4 중 1번 만 답변해드리면 될 것 같아요. (이거는 책에 없는 내용입니다)
오 감동입니다!! 흠잡을 것이 없는 정리입니다.
감사합니다 :)