--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--