Chiusakpung's Electronics Blog

블로그 이미지
Computer programming ...
by 치우삭풍
  • Total hit
  • Today hit
  • Yesterday hit


대부분의 프로그래밍 언어는 기본 단위가 있어 그 단위로 알고리즘이 논리 정연하게 구획되어 있다. C언어의 기본 단위는 함수, Java의 경우 기본 단위는 객체인데, Verilog에도 함수는 있으나 더 근본적인 module이라는 단위가 있다. Verilog가 HDL(Hardware Description Language)인 고로, 이 module은 AND 게이트, 계수기(Counters), 중앙처리장치(CPU), 혹은 컴퓨터 전체, 혹은 컴퓨터 네트워크 등 물리적인 대상들을 의미한다.

다음은 계수기의 예제이다.

module counter;

integer R;

 

initial

        for (R=1; R <= 10; R = R + 1)

               $display ("R= %d", R);

endmodule


위의 계수기는 정수 1부터 10까지 하나씩 세면서 각 숫자를 화면에 출력한다. $display 함수가 화면에 출력하는 함수인데, $가 달린 것을 보니 왠지 PHP문법 비슷한 것 같다. 그런데 매개변수 항을 보면 C의 printf() 문법과 동일해 보임을 알 수 있다. - 다음의 $display의 EBNF를 살펴보면 알 수 있듯이 이는 우연이 아닌 완전 동일한 것이다.

dlsplay_statement             ::= $display; I $display ( <arguments> );

write_statement               ::= $write; I $write ( <arguments> );

arguments                     ::= <argument> | <argument>, <arguments>

argument                      ::= "<string>" I <expression>


\n New line  Quotation

\t Tabulator

\\ Character\

\"

%%      mark Character %

%h, %H  Hexadecimal number

%d, %D Decimal number

%o, %O Octal number

%b, %B Binary number

%f, %F Real number

%c      Single character

%s      Character string

%t      Time

%m      Present module name

 그럼 이제 Verilog 프로그램과 module에 대한 EBNF를 살펴보고 마치도록 한다.

VERILOG program        ::= <module> I <VERILOG_program> <module>

module                 ::= module <name_of_module> <list of ports>;
                                  <module item>                              

                           endmodule

name_of_module         ::= <identifier>

list of ports          ::= I ( <port_list> )

port_list               ::= <identifier> I <port_list> , <port_list>

module_item             ::= <parameter_declaration> I <input_declaration>

                 I <output declaration> | <inout declaration> 
                 I <reg_declaration> I <integer_declaration> | <wire_declaration>
                 I <event_declaration>
I <gate_instantiation> 
                 I <module_instantiation> 
| <always_statement> 
                 | <initial_statement>
| <continuous_assign> I <function>
                 I <task>
I <module_item> <module item>

module_instantiation   ::= <type_of_module>

                           <name_of_instance> ( <module arguments> );

AND

ARTICLE CATEGORY

전체 (126)
EECS (56)
Physics (5)
Misc. (60)

RECENT ARTICLE

RECENT COMMENT

RECENT TRACKBACK

CALENDAR

«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

ARCHIVE