Verilog HDL
2007/06/15 15:03
http://blog.naver.com/PostPrint.nhn?blogId=babojay&logNo=40038759144#
Chapter 4.
Modules & Ports
*Objectives
- ModuleÁ¤ÀÇÀÇ ±¸¼º¿ä¼Òµé :
Module name, Port lists, Parameters, Variables ¼±¾ð,
Dataflow, Behavioral, ÇÏÀ§ module instantiation, Task &
Functions
- Port list¸¦ Á¤ÀÇÇÏ°í ¼±¾ðÇÏ´Â ¹æ¹ý
- Module instantiation¿¡¼ÀÇ
port ¿¬°á ±ÔÄ¢
- PortÀÇ ¿ÜºÎ ¿¬°á ¹æ¹ý : List ¼ø¼, port name
- Hierachical
name referencing
4.1 Modules
±×¸² 4-1 Components of Module in Verilog
- module·Î ½ÃÀÛÇÏ¿© endmodule·Î ³¡³´Ù.
- Port list, Port declaration˼
port°¡ Á¸ÀçÇÒ ¶§¸¸ »ç¿ë
- ³»ºÎ 5°¡Áö block(Variable declaration, dataflow, ÇÏÀ§
module instantiation, behavioral, tasks & functions)Àº ¼ø¼¿¡ »ó°ü¾øÀÌ ¸ðµâ³» ¾îµð¿¡µç ¿Ã ¼ö
ÀÖ´Ù.
SR latchÀÇ ¿¹·Î ¾Ë¾Æº»´Ù.
±×¸² 4-2 SR latch
Ex)
module
SR_latch(Q, Qbar, Sbar, Rbar); // module name(SR_latch)
// port lists(Q, Qbar...)
output Q,
Qbar; //
port declaration
input Sbar, Rbar;
nand n1(Q, Sbar,
Qbar); // ÇÏÀ§ moduleÀÇ
instantiation
nand n2(Qbar, Rbar, Q);
endmodule // end of SR_latch
module
Top; // Stimulus ¸ðµâ. port list,
port declaration »ý·«
wire q,
qbar; // wire, reg, variables
declaration
reg set, reset;
SR_latch m1(q, qbar, ~set, ~reset); // ÇÏÀ§ moduleÀÇ instantiation
initial //
behavioral block, initial
begin
$monitor($time, " set = %b, reset
= %b, q = %b\n", set, reset, q);
set = 0; reset = 0;
#5 reset =
1;
#5 reset =
0;
#5 set =
1;
end
endmodule // end of Top
* SR_latch ¸ðµâ Á¤ÀÇ¿¡¼´Â variable, dataflow, behavioral blockÀÌ
»ý·«
** Top ¸ðµâ(Stimulus)¿¡´Â port list, port declarationÀÌ ¾ø´Â ¹Ý¸é,
variable(wire, reg) ¼±¾ð, behavioral ±¸¹®ÀÌ
Æ÷ÇԵǾú´Ù.
*** module, module
name, endmoduleÀ» Á¦¿ÜÇÑ ¸ðµç ºÎºÐÀº
»ý·«°¡´ÉÇÏ´Ù.
4.2 Ports
- ModuleÀÌ ¿ÜºÎ¿Í ¼ÒÅëÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â interface.
4.2.1 List of Ports
- ModuleÀº »ý·«°¡´ÉÇÑ port ¸®½ºÆ®¸¦ Æ÷ÇÔÇÑ´Ù.
- ¿ÜºÎ¿ÍÀÇ ¾î¶°ÇÑ ½ÅÈ£±³È¯µµ ¾ø´Â °æ¿ì port´Â
ÇÊ¿ä°¡ ¾ø°Ô µÇ°í ±× listµµ ¾ø´Ù.
±×¸² 4-3. I/O ports for Top & Full Adder
- Top¸ðµâ ¾È¿¡ fulladder°¡fulladd4¶ó´Â À̸§À¸·Î instantiationµÇ¾î
ÀÖ´Ù.
- a, b, c_inÀº input, sum, c_outÀº outputÀ¸·Î Á¤ÀÇ µÇ¾î ÀÖ´Ù.
-
Top¸ðµâÀº ¿ÜºÎ¿Í ¾î¶°ÇÑ ½ÅÈ£±³È¯µµ ¾øÀ¸¹Ç·Î port¿Í port list°¡ ¾ø´Ù.
Ex)
module fulladd4(sum, c_out, a, b,
c_in);
module Top;
4.2.2 Port Declaration
- ¸®½ºÆ®¿¡ ÀÖ´Â ¸ðµç port´Â ´ÙÀ½°ú
°°Àº typeÀ¸·Î ¼±¾ðµÈ´Ù.
- moduleÀÇ port´Â ±× ¹æÇâ¿¡ µû¶óinput, output, inoutÀ¸·Î Á¤ÀÇ µÈ´Ù.
Ex)
module fulladd4(sum, c_out, a, b,
c_in);
output[3:0]
sum;
output c_out;
input[3:0] a,
b;
input c_in;
...
...
endmodule
* ¸ðµç port´Â Ưº°È÷ ÁöÁ¤ÇÏÁö ¾Ê´Â ÇÑ wire·Î ¼±¾ðµÈ´Ù.
** output port°¡ ±×
°ªÀ» °è¼Ó À¯ÁöÇϵµ·Ï ¼³°èÇÑ´Ù¸é reg·Î ¼±¾ðÇØ ÁÖ¾î¾ß
ÇÑ´Ù.
*** input port´Â reg·Î
¼±¾ðÇÒ ¼ö ¾ø´Ù.
Ex)
module DFF(q,
d, clk, reset);
output q;
reg
q; // q port´Â ±× °ªÀ» °è¼Ó À¯ÁöÇÑ´Ù.
input d, clk,
reset;
...
...
endmodule
4.2.3 Port Connection Rules
- ModuleÀÇ ³»ºÎ¿Í ¿ÜºÎ¸¦ ¿¬°áÇÏ´Â
µ¥¿¡´Â ¸î°¡Áö ±ÔÄ¢ÀÌ ÀÖ´Ù. PortÀÇ Å¸ÀÔ¿¡ µû¶ó¼ ±× ±ÔÄ¢Àº ´ÙÀ½°ú °°´Ù.
±×¸² 4-5 Port Connection Rules
- Width matching : size°¡ ´Ù¸¥ ½ÅÈ£³¢¸® ¿¬°áÀÌ Çã¿ëÀº µÇÁö¸¸ °æ°í(warning)ÀÌ ¹ß»ýÇϴ°Ô
º¸Åë
- Unconnected Ports : ¿¬°áÇÏÁö ¾ÊÀº ä µÎ¾îµµ »ó°ü¾ø´Ù. ¿¹¸¦ µé¾î ´ÜÁö µð¹ö±ëÀ» Çϱâ À§ÇØ ¸¸µç
output port°¡ ±×·¸´Ù.
Ex)
fulladd4
fa0(SUM, , A, B, C_IN); // c_out port¿¡ ¿¬°áÀÌ ¾ø´Ù.
- ±ÔÄ¢¿¡ ¾î±ß³ª´Â ¿¬°áµéÀÇ ¿¹
Ex)
module
Top;
reg [3:0] A,
B;
reg C_IN;
reg [3:0]
SUM;
wire
C_OUT;
...
fulladd4 fa0(SUM, C_OUT, A, B,
C_IN); // Illegal : output(sum) -
reg(SUM)
...
endmodule
4.2.4 Connecting Ports to External Signals
-
¸®½ºÆ® ¼ø¼´ë·Î ¿¬°á
Module Á¤ÀÇ ÇÒ¶§ port list¿¡ ¿°ÜµÈ ¼ø¼´ë·Î
instantiation¿¡ ½ÅÈ£¸¦ Àû¾îÁÖ´Â °ÍÀ¸·Î ¿¬°áµÈ´Ù.
Ex)
module Top;
reg [3:0] A,
B;
reg C_IN;
wire [3:0]
SUM;
wire
C_OUT;
...
fulladd4 fa_ordered(SUM,
C_OUT, A, B, C_IN);
...
endmodule
module fulladd4(sum, c_out, a, b, c_in);
output [3:0]
sum;
output c_out;
input [3:0] a,
b;
input
c_in;
...
<module
internals>
...
endmodule
- À̸§À¸·Î ¿¬°á
¼ö½Ê¿©°³ÀÇ port¸¦ °®´Â Å« design¿¡¼ ¾î¶² ¼ø¼·Î portµéÀÌ
Á¤ÀÇ µÇ¾ú´ÂÁö ÀÏÀÏÀÌ ´Ù ±â¾ïÇÏ´Â °ÍÀÌ ºÒ°¡´ÉÇÏ°Ô µÈ´Ù. ±×¸®ÇÏ¿© ´ÙÀ½°ú °°ÀÌ portÀÇ À̸§À¸·Î ¿¬°áÇÏ°Ô µÇ¸é portÀÇ ¼ø¼´Â ¹«½ÃµÇ¸ç,
¿¬°áÇÏÁö ¾Ê´Â port´Â ÀÚ¿¬È÷ »ý·«µÈ´Ù.
Ex)
fulladd4
fa_byname(.c_out(C_OUT), .sum(SUM), .b(B), .c_in(C_IN), .a(A));
* À̸§¿¡ ÀÇÇÑ port¿¬°áÀ» »ç¿ëÇϸé moduleÀÇ port list¿¡¼ port¸¦ Á¤¸®ÇÏ´Â °úÁ¤¿¡¼ ¼ø¼°¡ ¹Ù²î¾îµµ ¿¬°á¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê´Â´Ù.
4.3 Hierarchical Names
-
°èÃþ±¸Á¶¸¦ Æ÷ÇÔÇÑ À̸§À» »ç¿ëÇÏ¸é ¾îµð¼µç ºÒ·¯ »ç¿ëÇÒ ¼ö ÀÖ´Ù. °èÃþÀÌ Ãß°¡µÉ ¶§ ¸¶´Ù Á¡(".")À¸·Î ºÐ¸®ÇÏ¿© °èÃþÀÇ À̸§À» ºÙ¿©
»ç¿ëÇÑ´Ù.
±×¸² 4-6 SR LatchÀÇ °èÃþ±¸Á¶
- Root level : Top-level moduleÀ» ÀǹÌÇÑ´Ù. Design ¾îµð¿¡¼µµ instantiationµÇÁö ¾ÊÀº
moduleÀ̸ç hierarchical nameÀÇ ½ÃÀÛÁ¡ÀÌ´Ù.
- module instance´Â ¹°·ÐÀÌ°í ½ÅÈ£(signals),
º¯¼ö(variables)µµ hierarchical nameÀ¸·Î ÂüÁ¶°¡ °¡´ÉÇÏ´Ù.
´ÙÀ½Àº ±×¸² 4-6ÀÇ ¸ðµç Hierarchical NameÀÌ´Ù.
Ex)
stimulus
stimulus.q
stimulus.qbar
stimulus.set
stimulus.reset
stimulus.m1
stimulus.m1.Q stimulus.m1.Qbar
stimulus.m1.S stimulus.m1.R
stimulus.m1.n1
stimulus.m1.n2