FC2カウンター FPGAの部屋 Ruby
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Rubyスクリプトを Ocra-1.3.0rc1 でEXE化

MIPSサブセットプロセッサのシミュレーションのために、命令データメモリを初期化できるようにしています。

命令データメモリは、”VHDLでのブロックRAMや分散RAMの初期化(16進数で書かれた外部データファイル)“に書いてあるようにインスタンスしてあります。初期化のためのファイル名は、”init_idram.txt”です。このブログ記事ではデータビット長は16ビットでしたが、今回は、32ビット長になっています。

intel hexで出力されたプログラムを、init_idram.txt にロードするために、inst_load_hex.rb というRubyスクリプトを書いてあります。ごくごく、簡単にクラスも使わないで書いてあります。

#.hexファイルを読んで、命令をidram.vhdの分散RAMの初期値として書き込む

def usage
  STDERR.print "usage : #$0 [input .hex file name] [output init_idram.txt file] \n"
  exit 1
end

if ARGV.size < 2
  usage
else
  mem_data = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

  file = File.open(ARGV[0], 'r')

  while line=file.gets
    if line[0, 1] == ':' then # intel hex code
      max = line[1,2].hex
      address = (line[3,4].hex)/4
      if line[7,2] == "00" then # normal data record
        for i in 1..max/4 do
          mem_data[address] = line[9+(i-1)*8,8].hex
          address += 1         
        end
      end
    end
  end
  file.close

##  mem_data.each do |i|
##    printf("%0.8X", *i)
##    print "\n"
#  end

  init_data_file = File.open(ARGV[1], 'w') # RAMの初期化データファイルを出力でオープン
  i = 0
  while i < mem_data.size
    init_data_file.printf("%.8X\r\n", *mem_data[i])
    i += 1
  end
  init_data_file.close
end


これをEXE化したいと思いました。Rubyスクリプトでは、Rubyを起動してRubyスクリプト名を指定して動作させます。それが面倒なので、Rubyインタープリンタをパッケージ化できれば、それを起動すれば、intel hexで出力されたプログラムを、init_idram.txt にロードすることができます。

EXE化のために Ocra-1.3.0rc1 を使用しました。関連するページを下に示します。

ocra-1.2.0 Documentation
rubyforge.org/projects/ocra
github.com/larsch/ocra


Ocra は、RubyスクリプトをEXE化するRubyスクリプトです。
rubyforge.org/projects/ocra から、Ocra-1.3.0rc1 をダウンロードして、一番新しい Ruby2.0.0をインストールして、EXE化してみたところエラーが出てダメでした。

README_rdoc の REQUIREMENTS: にも記述がありますが、Rubyのバージョンを選ぶようです。そこで、Ruby-1.9.1-p378 をダウンロードして、それでEXE化してみたところ、出来ました。

..\Ruby-1.9.1-p378\bin\ruby.exe ocrasa.rb inst_load_hex.rb


Ocra_1_130618.png

inst_load_hex.exe が出来ました。
Ocra_2_130618.png

コマンドの入力で実行できました。

inst_load_hex.exe disp_test2.hex init_idram.txt


Ocra_3_130618.png

init_idram.txt を見ると、disp_test2.hex をロードできているのがわかります。
Ocra_4_130618.png

そのままインプリメントすれば、命令データメモリに、プログラムがロードされた状態でインプリメントされます。FPGAボードの電源ONで、命令データメモリにプログラムが入っている状態になります。
  1. 2013年06月18日 10:55 |
  2. Ruby
  3. | トラックバック:0
  4. | コメント:0

NetBeans IDE 7.0.1 でRubyを書く(Windows 7ではデバッカが起動できない)

”NetBeans IDE 6.8 でRubyをデバック”で、NetBeans IDEでRubyスクリプトを書いているということをブログに書いた。

RubyではパラメータからVHDLファイルを生成している。とても人力でVHDLを記述するのは無理なので、Rubyで自動生成させているわけだ。
RubyのIDEとして、NetBeans IDEを使用している。デバッカを便利に使っていたのだが、ある時から使えなくなってしまった。
今回、Windows 7 64bit版にNetBeans IDE 7.0.1をインストールして、Rubyを書きたいと思いインストールすることにした。

・ 最初にJAVA SEのJDK6をインストールした。

・ NetBeans IDE 7.0.1をここからインストールした。

・ NetBeans IDE 7.0.1では標準ではRubyをサポートしていないので、”NetBeans 7.0にRuby on Railsプラグインをインストールする手順”を見ながらRuby on Railsプラグインをインストールした。

・ JRuby 1.6.4 をダウンロードしてインストールした。

・ NetBeans IDE 7.0.1のツール・メニューからRubyプラットフォームを選択する。

・ Rubyプラットフォームマネージャーが開くので、”プラットフォームを自動検出”で自動検出させるか、”プラットフォームを追加”でjruby.exeを指定する。
NetBeans_1_111007.png

・ Rubyプラットフォームマネージャーの”Gem マネージャー”ボタンをクリックして、Gem マネージャーを開く。自動的に設定してくれるようだ。
NetBeans_2_111007.png

・ Gem マネージャーを閉じ、Rubyプラットフォームマネージャーを閉じる。

これで、設定は終了した。
今度は、デバッカの起動を試みる。

・ プログラムの先頭にブレークポイントを設定しておく。

・ NetBeans IDE 7.0.1のデバック・メニューから”ファイルをデバック”を選択する。

・ ダイアログが開く。そのまま、了解ボタンをクリックする。(プログラムの先頭にブレークポイントを設定したので、問題ないはず)
NetBeans_3_111007.png

・ デバッカが起動して、ブレークポイントで止まるはずが止まらない。
NetBeans_4_111007.png

結局、デバッカが動かなかった。
Windows 7 32ビット版でも同様だった。

次にVirtualBox 4.1.4を使用して、Windows XP SP3上に同様に、NetBeans IDE 7.0.1をインストールして、Rubyの設定を行なって、デバッカを起動したら、問題なく動作した。
NetBeans_5_111007

問題なくブレークポイントで止まっている。
Windows XP 32ビット版だと、NetBeans IDE 7.0.1のRubyデバックができるようだ。

  1. 2011年10月07日 12:24 |
  2. Ruby
  3. | トラックバック:0
  4. | コメント:0

NetBeans IDE 6.8 でRubyをデバック

この頃、仕事でVHDLファイルを生成するためのRubyプログラムを書いている。Rubyはダウンロードしたのだが、コマンドプロンプトでやるのでは、どうにも効率がわるい。
そこで、NetBeans IDE 6.8を使ってRubyを書いて、デバックしてみることにした。Java SE Development Kit 6u18 および NetBeans IDE 6.8をダウンロードしてインストールし、起動した。
起動後にRubyプラグインを入れる必要がある。ツールメニューからプラグインを選択すると、プラグインダイアログが開く。使用可能なプラグインタブをクリックして、RubyおよびRailsを選択してインストールする。
更に既存のRubyファイルをプロジェクトに入れてデバックしてみることにした。下の図が新規プロジェクトを作って、既存のRubyソフトをプロジェクトに入れたところ。
NetBeans_IDE_68_1_100205.png

ここのText Editorで記述をミスればワーニングやエラーが出てくる。理由も出てくる。ここでは英語だが、一部日本語でも職場ではでてきた。
NetBeans_IDE_68_2_100205.png

更に、ここで書くと、例えばfile. と入力するとその下のメソッドを表示してくれる。説明もあるものは出てくる。しかしこんなにメソッドがあるのか?まだ良くわからないけどしぼれるのかな?
NetBeans_IDE_68_3_100205.png

次にデバックなのだが、まだ良くわからないのだが、単体ファイルをデバックするときには、デバックメニューからファイルをデバックを選ぶと良いみたいだ。(デバックの前に行番号をクリックしてブレークポイントを設定しておく)
NetBeans_IDE_68_4_100205.png

そうするとファイルのデバックダイアログが出てくる。
NetBeans_IDE_68_5_100205.png

ここに、実行引数とRubyオプションを入れて、了解ボタンをクリックしデバックカーを実行する。そうするとデバックモードになって、ブレークポイントで停止する。Text Editorの変数にマウスカーソルを合わせると値が表示されるようだ。
NetBeans_IDE_68_6_100205.png

右下の変数タブをクリックすると変数の値を見ることができる。
NetBeans_IDE_68_7_100205.png

コマンドプロンプトからやるのよりもとても便利。
更にデバッカーを起動すると、サーバー用のTCPポート3000が使われていてサーバーが起動出来ないと言うエラーが出たが、これはRuby Railsのサンプルプロジェクトをロードする。プロジェクトを右クリックし、右クリックメニューからプロパティーを選ぶとプロジェクトプロパティーのダイアログが出てくるので、そこのサーバーポート番号を変更する。
NetBeans_IDE_68_8_100205.png

NetBeans IDE 6.8を使ってRubyを書くと便利だと思った。

#職場でやってみたのだが、うまくいかなかったので、家でもやってみたらうまく行った。備忘録として書いてみました。

(2010/02/08:追記)
RubyおよびRailsプラグインの記述を追加。

  1. 2010年02月06日 05:19 |
  2. Ruby
  3. | トラックバック:0
  4. | コメント:0