FC2カウンター FPGAの部屋 Rubyスクリプトを Ocra-1.3.0rc1 でEXE化
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

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/2497-41946792
この記事にトラックバックする(FC2ブログユーザー)