--AP2g/MAC+5xKAEJP
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
¤¤¯¤¿¤Ë¤Ç¤¹¡£
¡¢ruby¤Ç¼ÂÍÑ¥×¥í¥°¥é¥à¤ò ¤¿¤¤¤Î¤Ç¡¢Åººï¤ò¤ª´ê¤¤¤·¤è¤¦¤¨Â
»×¤¤¤Þ¤¹¡£
¤ä¤ê¤¿¤¤¤³¤È¡§
Verilog¥·¥ß¥å¥ì¡¼¥¿¤«¤éPLI(Program Language Interface)¤Ç
³°ÉôÇÈ·Á¥Ó¥å¡¼¥ï¤ò¸Æ¤Ö¡£ÇÈ·Á¥Ó¥å¡¼¥ï¤ÏUCB¤¬ºî¤Ã¤¿ºÆÇÛÉÛ²Ä
¥×¥í¥°¥é¥à¤¬¤¢¤Ã¤Æ¡¢ÍѤÎPLI¤Î¥³¡¼¥É¤Ï¤Ç¤¤Æ¤¤¤ë¡£
Verilog¥·¥ß¥å¥ì¡¼¥¿¤ÏUnix¥Ã¥È¤ò»È¤Ã¤ÆÇÈ·Á¥Ó¥å¡¼¥ï¤ÈÄÌ¿®¤¹¤ë¡£
ÌäÂê¤ÏUCB¤ÎÇÈ·Á¥Ó¥å¡¼¥ï¤¬¸ÅŵŪ¤Ê£Ø¥Ä¡¼¥ë¥¥Ã¥È¤Ç ¤¤Æ¤¢¤Ã¤Æ¡¨Â
»ä¤Ë¤ã¤µ¤Ã¤Ñ¤ê¤ï¤«¤é¤Ê¤¯¡¢¼ê¤ò²Ã¤¨¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¡¢¤È¤¤¤¦¤³¤È¤Ç¤¹¡£
¤Ç¡¢ÇÈ·Á¥Ó¥å¡¼¥ï¤òTcl/Tk¤Ç ´¹¤¨¤è¤¦¤È»×¤Ã¤¿¤Î¤Ç¤¹¤¬¡¨Â
Ôã¤Â¤ÏUnix¥Ã¥È¤ò°·¤¨¤Ê¤¤¤è¤¦¤À¡£¤Çruby+tk¤Î ֤Ǥ¹¡¨Â
źÉդΥƥ¹¥È¥×¥í¥°¥é¥à¤ò ¤¤Æ¤ß¤Þ¤·¤¿¡¨Â
Ìïîçßéîðõôßóéçîáìßîáíå
±°±°±°±°±°±°±°±°±°¤Î¤è¤¦¤Êdata¥Õ¥¡¥¤¥ë¤ò ¤¤Æ¤ª¤¤Þ¤¹¡£Âè°ì¹à¤¬»þ´Ö¤Îº¹Ê¬¡¢Æó¹à¤¬ÃͤǤ¹¡¨Â
òõâù ôë÷áöéå÷åò®òäáôá
¤È¤«¤¹¤ë¤È¡¢¤é¤·¤¤³¨¤Ï Þ¤¹¡¨Â
¤µ¤Æ¼ÁÌä¤Ç¤¹¡£
1) ɸþÎϤϤ¤¤º¤¨ÂÕîéø¥Ã¥È¤«¤é¤ÎÆþÎϤËÃÖ¤´¹¤¨¤Þ¤¹¤¬¡¢¤³¤ÎÄ´»Ò¤Ç
ËÄÂç¤Ê¥Ç¡¼¥¿¤ò¼õ¤±¤È¤Ã¤Æ¤¤¤Ã¤Æ¡¢Tk¤ÎCanvas¤ÏÌäÂê¤Ê¤¤¤Ç¤¹¤«¡©
(¤¢¤È¥º¡¼¥àµ¡¤ÉÆþ¤ì¤Ê¤¯¤Á¤ã¤À¤á¤À¤·)
2) WViewer¥¯¥é¥¹Ãæ¤Ç»È¤Ã¤Æ¤¤¤ë¡¢$v, $c, $scr¤ÏºÇ ¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤Ë¤·¤¨Â
¤¿¤Î¤Ç¤¹¤¬¡¢Âç°èÊÑ¿ô¤Ë¤·¤Ê¤¤¤È¤À¤á¤Ç¤·¤¿¡£¤³¤ì¤Ï¤¤¤¦¤â¤Î¤Ç¤¹¤«¡©
3) draw_scale¤È¤¤¤¦¥á¥É¤Ç¤ä¤Ã¤Æ¤¤¤ë¤³¤È¤Ï¡¢ºÇ ¨Â
¤ö ëÃáîöáó®îå÷¨æ©®®¤Îľ¸å¤Ç¤ä¤Ã¤Æ¤¿¤Î¤Ç¤¹¤¬¡¢¤¬ÊѤǤ·¤¿¡£
¤³¤ì¤Ï¤Ê¤¼¡©
4) ¾ľ¤·¤¿¤Û¤¦¤¬¤¤¤¤ÅÀ
°Ê¾å¤è¤í¤·¤¯¤ª¤Í¤¬¤¤¤·¤Þ¤¹¡£
--
¿ÍÀ¸¤òÇØÉ餤Åꤲ
µÆÃ« À¿(Kikutani Makoto) kikutani / eis.or.jp kikutani / jdc.ericsson.se
hgf03701 / niftyserve.or.jp http://www.eis.or.jp/muse/kikutani/
--AP2g/MAC+5xKAEJP
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="tkwaviewer.rb"
#!/usr/bin/ruby
# test program for WaveViewer which can be called from Verilog PLI
require "tkclass"
# initial window size
$width 500'
$height 100'
$vwidth 0
$pr_time_step 00
class WViewer
def initialize(signame)
@high height.to_i * 0.2
@low height.to_i * 0.7
@pr_time
@last_x
@last_y low
@frm kFrame.new{|f|
TkLabel.new(f) {
text signame
pack('side' top')
}
# canvas for vertical axis
$v kCanvas.new(f) {
relief 'sunken'
bg 'LightCyan1'
height $height
width $vwidth.to_s
pack('side' left', 'fill' y')
}
# canvas for plotting the points
$c kCanvas.new(f) {
xscrollcommand proc{|idx|
$scr.set *idx
}
relief 'sunken'
bg 'LightCyan1'
height $height
width $width
closeenough '3'
pack('side' top', 'fill' both', 'expand' 1')
}
$scr kScrollbar.new(f) {
orient 'horizontal'
command proc{|idx|
$c.xview *idx
}
pack('side' bottom', 'fill' x')
}
pack
}
end
def draw_scale
# draw vertical scale
TkcLine.new($v, $vwidth/2+10, @low, $vwidth/2+10, @high, 'fill' blue')
TkcLine.new($v, $vwidth/2, @low, $vwidth/2+10, @low, 'fill' blue')
TkcLine.new($v, $vwidth/2, @high, $vwidth/2+10, @high, 'fill' blue')
TkcText.new($v, 5, @high, 'text' 1', 'fill' red')
TkcText.new($v, 5, @low, 'text' 0', 'fill' red')
end
def plot_bit(dt, b)
x last_x + dt
if b 1
y high
else
y low
end
TkcLine.new($c, @last_x, @last_y, x, @last_y)
TkcLine.new($c, x, @last_y, x, y)
if x > pr_time
TkcText.new($c, x, @low+10, 'text' , 'fill' green')
@pr_time + pr_time_step
end
@last_x
@last_y
end
def set_scrarea
$c.configure('scrollregion', "0 0 #@last_x #$height")
end
end
# 1st line is the signal name
signal ets
view Viewer.new(signal)
view.draw_scale
# now plot points from stdin
while gets
dt, b plit
view.plot_bit(dt.to_i, b.to_i)
end
# set scroll area
view.set_scrarea
Tk.mainloop
--AP2g/MAC+5xKAEJP--