Blog | Tag | Local | Guest | Login | Write |  RSS
Verilog HDL 3. 데이터형(1)
 이번부터는 실제로 QUARTUS II를 이용해서 로직을 설계하고 시뮬레이션을 해보려고 도서관에서 책을 대여 하였습니다.
 "Verilog HDL의 기초와 디지털 논리회로설계"와 "디지털 논리회로와 집적회로설계" 같은 저자분께서 책을 쓰셨네요.
 살펴보니 두 책이 비슷한데 QUARTUS를 이용하는 방법과 로직설계의 방법의 설명이 잘 되어 있습니다.
 일단 Verilog HDL을 컴파일하고 시뮬레이션 하려면 QUARTUS 라는 프로그램이 필요한데 www.altera.com 에 가서 Quartus II Web Edition을 온라인으로 다운 받아서 사용하시면 됩니다.
다운로드 방법은 다음에 올리도록 하지요.( 얼마전까지 라이센스를 받아서 설치 한걸로 기억하는데 지금은 Quartus® II Web Edition Software v8.1를 다운 받을 수 있고 라이센스가 필요없다고 하네요ㅋ다운받고 있습니다. 받아서 설치해봐야 겠어요. )
 암튼 책을 보고 있는데 문법은 살펴 보았고 데이터형을 공부해 보면서 정리 할 필요가 있더군요.
 
Verilog HDL 데이터형
1) 논리값 집합
 Verilog HDL은 하드웨어 기능을 모델로 한 4개의 논리값과 8개의 신호 강도를 지원한다.

논리값 레벨

하드웨어 회로에서의 상태

0

논리적 0, 거짓 상태

1

논리적 1, 참 상태

x

알 수 없는 논리값

z

하이 임피던스, 플로팅 상태


 논리적인 값과 더불어 신호 강도를 갖는 신호들의 충돌을 해결하는데 종종 쓰인다.

신호 강도

정도

supply

흐름(driving)

가장 강도가 높음

strong

흐름(driving)

pull

흐름(driving)

large

저장(storage)

weak

흐름(driving)

medium

저장(storage)

small

저장(storage)

highz

하이임피던스

가장 강도가 낮음


 만약 다른 강도의 두 신호가 동일한 wire에 흐르면 더 강한 강도의 신호가 우세하다. 같은 강도가 만나면 어떠한 신호가 나올지 모른다.(x 이다.) trireg 넷만이 large,medium, small의 강도를 저장할 수 있다.

 2) 넷(Nets)
 넷은 하드웨어 요소 사이에 연결을 나타낸다. wire와 net은 종종 서로 같은 뜻으로 사용된다. net의 기본값은 z이다. (trireg net은 기본값이 x이다.)

사용자 삽입 이미지
net Y가 and GATE G1 출력으로 연결 되어 있다.
net은 키워드가 아니라 wire, wand, wor, tri, triand, trior, trireg 등의 집합을 나타낸다. 대부분 wire로 선언

wire Y;
wire A, B;
wire C=1'b0 // C는 논리값 0으로 선언

 - 넷의 데이터형
wire : 논리적인 행동이나 기능 없이 단지 연결하는데 사용한다.(디폴트)
tri :wire 와 같으며 하이임피던스 상태가 더 있다.
supply1 : 넷을 전원에 연결한다.
supply0 : 넷을 그라운드에 연결한다.
tri1 : 넷을 풀업(pull up) 시킨다.
tri() : 넷을 풀다운(pull down) 시킨다.
wor : 여러 디바이스 출력을 선으로 연결(wired)하여 "or"기능을 하는 넷
trior : wired-or와 같으나, 하이임피던스 상태가 더 있다.
wand : 여러 디바이스 출력을 선으로 연결(wired)하여 "and"기능을 하는 넷
triand : wired-and와 같은나 하이임피던스 상태가 더 있다.
trireg : 하이 임피던스 상태가 있는 저장형인 넷(신호강도)

 3) 레지스터
 레지스터는 데이터를 저장할 수 있다. 하드웨어에서 레지스터와 다르다. 즉 Verilog에서 레지스터는 단지 값을 저장할 수 있는 변수를 의미한다. 하드웨어에서 레지스터는 클럭이 필요하지만 Verilog에서는 그렇지 않다.
 레지스터 데이터형은 키워드 reg에 의해 정의 된다. 기본 논리값은 x 이다.

reg RESET;
initial // 초기화 선언
begin
RESET = 1'b1; // RESET를 1로 초기화
#100 RESET = 1'b0; // 100 단위 시간이 지난 뒤 RESET값을 바꾼다.
end

 책을 보면서 정리를 하는데 내용이 많네요.스크롤의 압박?
 논리값을 어떻게 나타내는지, net의 의미와 사용법, wire로 사용 한다는 것을 알았고 레지스터는 데이터를 저장하는 변수 역할을 하고 reg로 사용 한다는 것을 알게 되었습니다.
 다음에는 못다한 내용을 이어 가도록 하지요~~