|
http://donny.co.kr/wp/?p=231
[Verilog] »õ·Î ÄÄÆÄÀÏÇÏÁö ¾Ê°í Å×½ºÆ® ÀÔ·Â/Á¶°ÇÀ» ¹Ù²Ù´Â ¹æ¹ý
Posted on October 27, 2010
Compiled-code¹æ½Ä Verilog ½Ã¹Ä·¹ÀÌÅÍ´Â Å©°Ô ¼¼´Ü°è·Î µ¿ÀÛÇÕ´Ï´Ù.
Compile: Verilog CodeÀÇ ¹®¹ýÀ» üũÇϰí, ÇØ¼®Çϰí(parse/analyze)Çϰí CompileÇÑ´Ù.
Elaboration: °èÃþ±¸Á¶(design hierarchy)¸¦ ±¸ÃàÇÏ°í ½ÅÈ£µéÀ» ¿¬°áÇϰí ÃʱⰪÀ» °è»êÇÑ´Ù.
Simulation: ȸ·ÎÀÇ µ¿ÀÛÀ» ½Ã¹Ä·¹À̼ÇÇÑ´Ù.
º¹ÀâÇÏ°Ô ³ª´©¾î »ý°¢ÇÏ°í ½ÍÁö ¾ÊÀº ºÐµéµµ °è½ÇÅÙµ¥, CÇÁ·Î±×·¥À» ÇØº¸½Å ºÐµéÀ̶ó¸é ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖ½À´Ï´Ù.
Compiler: CÄÄÆÄÀÏ·¯¸¦ ÀÌ¿ëÇØ¼ C Äڵ带 ObjectÄÚµå·Î ¸¸µå´Â °Í°ú À¯»çÇÕ´Ï´Ù.
Elaboration: ObjectÄڵ带 Linker·Î ¿¬°áÇØ¼ ½ÇÇàÈÀÏ(Executable)À» ¸¸µå´Â °Í°ú À¯»çÇÕ´Ï´Ù. C Code°Ç, ¾î¼Àºí¸®ÄÚµå°Ç ¾ð¾î¿¡ °ü°è¾øÀÌ ObjectÄÚµå´Â µ¿ÀÏÇÑ °Í°ú °°ÀÌ ElaborationÀº VHDL¿Í Verilog¸¦ ±¸ºÐÇÏÁö ¾Ê½À´Ï´Ù.
Simulation: ½ÇÇàÈÀÏ(Executable)À» ½ÇÇàÇÏ´Â °Í°ú °°½À´Ï´Ù.
¿©±â¼ ÁÖ¸ñÇÒ ºÎºÐÀº ÇÁ·Î±×·¥À» ½ÇÇàÇÒ¶§ ¸Å¹ø »õ·Î ÄÄÆÄÀÏÇÏÁö ¾Ê°í ½ÇÇàÈÀϸ¸ ½ÇÇàÇϵíÀÌ, ½Ã¹Ä·¹À̼ǵµ ÄÄÆÄÀÏ °úÁ¤À» »ý·«ÇÒ ¼ö°¡ ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù.
ÄÄÆÄÀÏ¿¡ ¼Ò¿äµÇ´Â ½Ã°£ÀÌ Àüü ½Ã¹Ä·¹À̼ǿ¡¼ Â÷ÁöÇÏ´Â ½Ã°£ÀÌ Å©Áö ¾ÊÀº °æ¿ìµµ ¸¹Áö¸¸, ¼³°è°¡ º¹ÀâÇÏ°í ¸Å¿ì ´Ù¾çÇÑ °æ¿ì¿¡ ´ëÇØ¼ ½Ã¹Ä·¹À̼Ç(regression)À» ÇÒ °æ¿ì, ÀÌ ½Ã°£À» ÁÙÀÌ´Â °ÍÀÌ ÀûÁö¾ÊÀº È¿°ú°¡ ÀÖ½À´Ï´Ù.
¹°·Ð Verilog ¼Ò½ºÄڵ尡 º¯°æµÈ °æ¿ì¶ó¸é »õ·Î ÄÄÆÄÀÏÀ» ÇØ¾ßÇÕ´Ï´Ù¸¸, »çÁøÀÌ ¹Ù²î°í ¸ð´ÏÅÍ ÇØ»óµµ°¡ ¹Ù²î¾ú´Ù°í Æ÷Åä¼¥À» »õ·Î ÄÄÆÄÀÏÇÏÁö ¾ÊµíÀÌ, ½Ã¹Ä·¹ÀÌ¼Ç ÀÔ·Â, Á¶°Ç¸¸ ¹Ù²î¾úÀ» °æ¿ì¿£ »õ·Î ÄÄÆÄÀÏ ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù.
Cadence NC-Verilog¸¦ ±âÁØÀ¸·Î ¼³¸íÇØº¸°Ú½À´Ï´Ù.
NC-Verilog´Â µÎ°¡Áö ¹æ¹ýÀ¸·Î ½ÇÇàÀÌ °¡´ÉÇÑ µ¥ single-stepÀ¸·Î ½ÇÇàÇÏ´Â commandÀÎ ncverilog°ú 3-stepÀ¸·Î ½ÇÇàÇÏ´Â commandÀÎ ncvlog, ncelab, ncsimÀÌ ÀÖ½À´Ï´Ù.
3-stepÀ¸·Î ½ÇÇàÇÏ´Â °æ¿ì¿£ ¸¶Áö¸· ´Ü°èÀÎ ncsim¸¸ ¹Ýº¹ÀûÀ¸·Î ½ÇÇàÇÏ¸é µË´Ï´Ù.
$ ncvlog subblock1.v subblock2.v topmodule.v
$ ncelab topmodule
$ ncsim topmodule
$ ncsim topmodule (Àç½ÇÇà)
ncverilog¸¦ »ç¿ëÇÏ´Â °æ¿ì¿£ ncverilog -R ¿É¼ÇÀ» ÀÌ¿ëÇÏ¸é ¸¶Áö¸· simulation´Ü°è¸¸ ½ÇÇàÇÏ°Ô µË´Ï´Ù.
3-stepÀ¸·Î ½ÇÇàÇÏ´Â °æ¿ì¿£ ¸¶Áö¸· ´Ü°èÀÎ ncsim¸¸ ¹Ýº¹ÀûÀ¸·Î ½ÇÇàÇÏ¸é µË´Ï´Ù.
$ ncverilog subblock1.v subblock2.v topmodule.v
$ ncverilog -R (Àç½ÇÇà)
ÀÌ·¸°Ô ÄÄÆÄÀÏÀ» ÇÏÁö ¾Ê°í ½Ã¹Ä·¹À̼Ǹ¸ ´Ù½Ã ½ÇÇàÇÏ¸é¼ ÀÔ·ÂÀ» ¹Ù²Ù´Â ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.
1. ¿ÜºÎÆÄÀÏÀ» »ç¿ëÇÏ´Â ¹æ¹ý
Image processingÀ» Çϴ ȸ·Î¶ó°í °¡Á¤Çϸé ÀÔ·ÂÀº ÁÖ·Î »çÁø µ¥ÀÌÅÍÀÔ´Ï´Ù. ½Ã¹Ä·¹ÀÌ¼Ç Áß¿¡ »çÁø ÆÄÀÏÀ» ÀÐ¾î¼ »ç¿ëÇϵµ·Ï ¸¸µé¸é, »çÁø ÆÄÀϸ¸ ¹Ù²ãÁÖ¸é ÄÄÆÄÀϰúÁ¤¾øÀÌ ½Ã¹Ä·¹À̼ÇÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ë½Å ¿ÜºÎÆÄÀÏÀ» ÀоîµéÀÌ´Â ºÎºÐ(parser)¸¦ Verilog³ª C¾ð¾î·Î ±¸ÇöÇØ¾ßÇÕ´Ï´Ù.
Verilog·Î ±¸ÇöÇÏ´Â °æ¿ì¿£ C¾ð¾î¿Í À¯»çÇÑ $fopen, $fscanfÀ» ÀÌ¿ëÇÏ¸é µË´Ï´Ù. ´Ü, ÅØ½ºÆ®ÆÄÀϸ¸ ÀÐÀ» ¼ö ÀÖÀ¸¹Ç·Î PPM°ú °°Àº ASCII µ¥ÀÌÅÍÀÇ ÆÄÀÏ formatÀ» »ç¿ëÇØ¾ßÇÕ´Ï´Ù.
C¾ð¾î¸¦ ÀÌ¿ëÇÏ´Â °æ¿ì ¿øÇϴ´ë·Î ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ¿© decodingÀÌ ÇÊ¿ä¾ø´Â BMP¸¦ ºñ·Ô, ´Ù¾çÇÑ ÀÔ·ÂÀ» ÀоîµéÀÏ ¼ö ÀÖ½À´Ï´Ù. VerilogÀÇ PLI(Programing Language Interface)³ª SystemVerilogÀÇ DPI(Direct Programming Interface)¸¦ ÀÌ¿ëÇÏ¸é µË´Ï´Ù.
2. $test$plusargs, $value$plusargs ¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ý
$test$plusargs()´Â Verilog-1995¿¡µµ Á¸ÀçÇß´ø ±â´ÉÀ̰í, $value$plusargs()´Â Verilog-2001¿¡¼ È®ÀåµÈ ±â´ÉÀÔ´Ï´Ù.
°£´ÜÇÑ ¿¹·Î ½Ã¹Ä·¹ÀÌ¼Ç °á°ú¸¦ waveformÀ¸·Î ÀúÀåÇÏ¸é ½Ã¹Ä·¹ÀÌ¼Ç ¼Óµµ°¡ »ó´çÈ÷ ´À·ÁÁö°í, ÀúÀå°ø°£À» ¸¹ÀÌ Â÷ÁöÇÒ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼ ÇÊ¿äÇÑ °æ¿ì¿¡¸¸ signal dump¸¦ ¹Þ°Ô µÇ´Âµ¥ À̸¦ À§ÇØ ´ë°³ »ç¿ëÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.,
1. VerilogÄڵ带 ¼öÁ¤Çؼ $dumpvars¿Í °°Àº ±¸¹®À» ÁÖ¼®À¸·Î ó¸®ÇÑ µÚ »õ·Î ÄÄÆÄÀÏÇÕ´Ï´Ù.
initial
begin
// $dumpvars;
end
2. `ifdef / `ifndef ¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ý. command line¿¡¼ ¼³Á¤ÀÌ °¡´ÉÇϹǷΠº¸´Ù ±ò²ûÇÑ ¹æ¹ýÀÌÁö¸¸, ÀÌ ¹æ¹ý ¿ª½Ã »õ·Î ÄÄÆÄÀÏÀ» ÇØ¾ßÇÕ´Ï´Ù.
initial
begin
`ifndef nodump
$dumpvars;
`endif
end
$ncverilog +define+nodump ¡¦..
ÀÌ·± °æ¿ì $test$plusargs¸¦ ÀÌ¿ëÇÏ¸é µË´Ï´Ù. +defineÀ» »ç¿ëÇÏ´Â °Í°ú À¯»çÇÏÁö¸¸ »õ·ÎÀÌ ÄÄÆÄÀÏÀ» ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. (-R ¿É¼Ç¿¡ ÁÖ¸ñ)
initial
begin
if(!$test$plusargs(¡°nodump¡±))
$dumpvars;
end
$ ncverilog -R (dumpÆÄÀÏ »ý¼º)
$ ncverilog -R +nodump (dumpÆÄÀÏ »ý¼º ¾ÈÇÔ)
Âü°í·Î, °£´ÜÈ÷ ¼³¸íÇϱâ À§ÇØ dumpvars¸¦ »ç¿ëÇߴµ¥, vcdÇü½Äº¸´Ù shmÀ̳ª fsdbÇü½ÄÀ» »ç¿ëÇÏ¸é ¼Óµµ,¿ë·®¿¡ °³¼± È¿°ú°¡ ÀÖ½À´Ï´Ù.
$value$plusargs ¸¦ ÀÌ¿ëÇϸé command line¿¡¼ 10Áø¼ö, 16Áø¼ö, 2Áø¼ö, ½Ç¼ö µî º¸´Ù »ó¼¼ÇÑ ÀÔ·ÂÀÌ °¡´ÉÇÕ´Ï´Ù.
$value$plusargs (string, variable)
%b – binary conversion
%d – decimal conversion
%e – real exponential conversion
%f – real decimal conversion
%g – real decimal or exponential conversion
%h – hexadecimal conversion
%o – octal conversion
%s – string (no conversion)
%x – (undergound equivalent for %h)
¿¹Á¦·Î Ŭ·° Á֯ļö¸¦ ¹Ù²Ù´Â °æ¿ì¸¦ »ìÆìº¾½Ã´Ù.
filename: test.v
module test;
reg clock = 0;
real clock_h_period;
always #clock_h_period
clock = !clock;
initial begin
if(!$value$plusargs(¡°clock_h=%F¡±, clock_h_period)) begin
clock_h_period = 10;
end
$monitor(¡°%t %b¡±, $time, clock);
#100 $finish;
end
endmodule
$ ncverilog test.v +nocopyright
Loading snapshot worklib.test:v ¡¦¡¦¡¦¡¦¡¦¡¦.. Done
ncsim> source ¡¦/tools/inca/files/ncsimrc
ncsim> run
0 1
10 0
20 1
30 0
40 1
50 0
60 1
70 0
80 1
90 0
Simulation complete via $finish(1) at time 100 NS + 0
./test.v:15 #100 $finish;
ncsim> exit
$ ncverilog -R +clock_h=20 +nocopyright
Loading snapshot worklib.test:v ¡¦¡¦¡¦¡¦¡¦¡¦.. Done
ncsim> source ¡¦/tools/inca/files/ncsimrc
ncsim> run
0 1
20 0
40 1
60 0
80 1
Simulation complete via $finish(1) at time 100 NS + 0
./test.v:15 #100 $finish;
ncsim> exit
¹Ýº¹ ȸ¼ö¸¦ ÀÔ·ÂÇϰųª, Random °ª »ý¼º¿¡ »ç¿ëÇÒ seedÀÔ·Â(@KyonghoKimÀÇ ÄÚ¸àÆ®)Çϰųª ´Ù¾çÇÑ È¯°æÀûÀÎ º¯¼ö¿¡ ´ëÇÑ ¹Ýº¹ÀûÀÎ ½Ã¹Ä·¹À̼Ç(regression)À» ¼öÇàÇÒ ¶§ À¯¿ëÇÒ °ÍÀÔ´Ï´Ù. |
|