혼자공부하는 Verilog_hdl_2

윤현식·2023년 5월 8일
0

Verilog_독학

목록 보기
2/5
post-thumbnail

모듈

verilog는 모듈(module)의 개념을 제공한다.

모듈은 verilog에서 기본적인 설계 블록이다.

모듈은 요소 또는 하위 수준 설계 블록의 집합임.

모듈은 포트 인터페이스(입력/출력)를 통해 상위 수준의 블록에 필요한 기능을 제공한다.

module <모듈이름> <(모듈 입출력 정의)>;

<모듈 내용>

endmodule

다음은 T-플리플롭을 모듈로 정의한것임.

module T_FF(q,clock,reset);

<T플립플롭의 기능>

endmodule

verilog는 행위적이고 구조적인 언어임.

각 모듈의 내부는 설계의 쓰임에 따라 4가지 추상화 수준으로 정의할 수 있음.

행위 또는 알고리즘 수즌(Behavioral or algorithmic level)

verilog에서 제공하는 추상화의 가장 상위 수준임.

자세한 하드웨어 구현에 관계없이 원하는 디자인 알고리즘을 바로 사용함으로써 모듈을 구현한다.

C언어와 유사함.

데이터 플로우 수준(Dataflow level)

데이터의 흐름을 명백히 나타냄으로써 모듈을 구현한다.

설계자는 하드웨어 레지스터 사이의 데이터 흐름과 데이터가 어떻게 처리되는지를 알아야한다.

게이트 수준(Gate level)

논리 게이트와 게이트 사이의 연결에 의해 모듈이 구현된다.

이 수준에서의 설계는 게이트 수준 논리 다이어그램에 의해서 묘사하는 것과 유사하다.

스위치 수준(Switch level)

verilog에서 제공하는 추상화의 가장 하위 수준이다. 스위치와 기억노드 그리고 그것들의 연결에 의해서 모듈이 구현된다.
스위치 수준에 대한 지식을 요구한다.

verilog는 설계 시, 4개의 추상화 수준을 혼용하는 것을 허용한다.

디지털 설계에서 레지스터 전송 수준(RTL)이라는 용어는 종종 행위 수준 구조와 데이터 플로우 수준 구조를 섞어서 사용하는 Verilog 표현을 뜻하고, 이는 논리합성 도구의 입력으로 사용가능하다.

인스턴스

모듈은 실제 객체를 만들 수 있는 템플릿을 제공함.

모듈이 불러졌을 때, Verilog는 템플릿으로부터 고유한 객체를 생성한다.

개체는 이름, 변수, 파라미터, 그리고 입출력 인터페이스를 가짐.

모듈 템플릿으로부터 객체를 생성하는 것을 파생(instanciation)이라 하고, 객체를 인스턴스라고 한다.

module ripple_carry_counter(q,clk,reset);

output [3:0] q; // 출력 신호
input clk, reset; // 입력 신호

T_FF tff0 (q[0],clk,reset);

T_FF tff1 (q[1],q[0],reset);

T_FF tff2 (q[2],q[1],reset);

T_FF tff3 (q[3],q[2],reset);

endmodule

module T_FF(q,clk,reset);

output q;

input clk,reset;

wire d;

D_FF dff0(q,d,clk,reset);

not n1(d,q);

endmodule

시뮬레이션 요소

설계 블록이 완성되었을 때, 반드시 테스트를 해야한다.

설계 블록의 기능적인 면은 스티뮬러스를 적용시키고 결과를 보는 것으로 테스트가 가능하다.

이러한 블록을 stimulus 블록이라고 하며 테스트 벤치라고 불린다.

module stimulus;

reg clk;
reg reset;
wire [3:0]q;

ripple_carry_counter r1(q,clk,reset);

initial
    clk = 1'b0;
always
    #5 clk = ~clk ;

initial     
begin
    reset = 1'b1;
    #15 reset = 1'b0;
    #180 reset = 1'b1;
    #10 reset = 1'b0;
    #20 $finish;

end

initial 

$monitor($time,"output q =%d",q);

endmodule
profile
Verilog, C, HW 개발

0개의 댓글