USB Blaster もどきの動作確認を兼ねた1chipMSXの修正内容


注意
参照先の情報を元に自分なりに解釈して修正したり、Quartus IIをいじりまわして設定したりしています。
自分の環境では一応動作は確認していますが、他の環境に適応できるとは限りませんので修正および改造は自己責任でお願いします。

PCを新調したのに従って、開発環境の整備も兼ねて久しぶりに1chipMSXをいじってみることにした。
PIC,AVR,Xilinxと確認はうまくっていたが、Alteraでつまづく。
まず、ByteBlasterIIのデバイスドライバをインストールできない。
対応するためにUSB Blasterもどきを作る。
次に1chipMSXのコンパイルを試みる。
Quartus II 10.1 Web Editionで1chipMSXのプロジェクト(emsx_top.qpf)を開くと、ワーニングメッセージが表示される。
コンパイルするとエラーメッセージが出てコンパイルできず。

いろいろググったりして調べた内容を元にいろいろ修正。
今更感満開だが忘備録も兼ねてまとめてみた。

プロジェクトを開いた時のワーニング内容

Critical Warning: Setting INCREMENTAL_COMPILATION to "OFF" is no longer supported. Assignment is ignored. To disable partitions, set the IGNORE_PARTITIONS global assignment to "ON" instead.

たぶん、直さなくても問題はないと思う。
毎回ワーニングが表示されるのも煩わしいので、メッセージに従って『emsx_top_assignment_defaults.qdf』の内容を修正する。

『emsx_top_assignment_defaults.qdf』の修正箇所

24行目削除
set_global_assignment -name INCREMENTAL_COMPILATION -value OFF

最後の行に追加
set_global_assignment -name IGNORE_PARTITIONS On


コンパイルしようとすると、エラーが表示されてコンパイルができなかった。
エラーの内容を確認すると、宣言文と内容で変数が違うみたいな内容らしい。
C言語でいうところで、冒頭のプロトタイプ宣言と実際の関数の記述で使っている変数名が違うみたいなところか。
エラーの意味が分かったら、その部分を修正していく。

コンパイル時のエラー内容

Error (10495): VHDL Subprogram Declaration error at vm2413.vhd(55): declaration of function or procedure "CONV_REGS_VECTOR" must have corresponding Subprogram Body
Error: Can't elaborate user hierarchy "eseopll:U32"
Error: Quartus II Analysis & Synthesis was unsuccessful. 2 errors, 55 warnings
	Error: Peak virtual memory: 275 megabytes
	Error: Processing ended: Thu Jan 13 20:30:49 2011
	Error: Elapsed time: 00:00:11
	Error: Total CPU time (on all processors): 00:00:05
Error: Quartus II Full Compilation was unsuccessful. 4 errors, 55 warnings

『vm2413.vhd』の55行目以降に宣言文があって、302行目以降に実際の記述がある。
赤で示されているところが異なっている部分なので、これを修正する。

『vm2413.vhd』の55行目以降

  function CONV_REGS_VECTOR ( inst : REGS_TYPE ) return REGS_VECTOR_TYPE;
  function CONV_REGS ( inst_vec : REGS_VECTOR_TYPE ) return REGS_TYPE;

 中略

  function CONV_VOICE_VECTOR ( voice : VOICE_TYPE ) return VOICE_VECTOR_TYPE;
  function CONV_VOICE ( vector : VOICE_VECTOR_TYPE ) return VOICE_TYPE; 

『vm2413.vhd』の302行目以降

  function CONV_REGS_VECTOR ( regs : REGS_TYPE ) return REGS_VECTOR_TYPE is
  begin
    return  regs.INST & regs.VOL & "00" & regs.SUS & regs.KEY & regs.BLK & regs.FNUM;
  end CONV_REGS_VECTOR;
  
  function CONV_REGS ( vec : REGS_VECTOR_TYPE ) return REGS_TYPE is
  begin
    return ( 
      INST=>vec(23 downto 20), VOL=>vec(19 downto 16),
      SUS=>vec(13), KEY=>vec(12), BLK=>vec(11 downto 9), FNUM=>vec(8 downto 0)
      );
  end CONV_REGS;  

  function CONV_VOICE_VECTOR ( inst : VOICE_TYPE ) return VOICE_VECTOR_TYPE is
  begin
    return inst.AM & inst.PM & inst.EG & inst.KR & 
           inst.ML & inst.KL & inst.TL & inst.WF & inst.FB & 
           inst.AR & inst.DR & inst.SL & inst.RR;
  end CONV_VOICE_VECTOR;
  
  function CONV_VOICE ( inst_vec : VOICE_VECTOR_TYPE ) return VOICE_TYPE is
  begin
    return ( 
      AM=>inst_vec(35), PM=>inst_vec(34), EG=>inst_vec(33), KR=>inst_vec(32),
      ML=>inst_vec(31 downto 28), KL=>inst_vec(27 downto 26), TL=>inst_vec(25 downto 20),
      WF=>inst_vec(19), FB=>inst_vec(18 downto 16),
      AR=>inst_vec(15 downto 12), DR=>inst_vec(11 downto 8), SL=>inst_vec(7 downto 4), RR=>inst_vec(3 downto 0)
      );
  end CONV_VOICE;

『vm2413.vhd』の55行目以降の修正内容

  function CONV_REGS_VECTOR ( regs : REGS_TYPE ) return REGS_VECTOR_TYPE;
  function CONV_REGS ( vec : REGS_VECTOR_TYPE ) return REGS_TYPE;

  中略

  function CONV_VOICE_VECTOR ( inst : VOICE_TYPE ) return VOICE_VECTOR_TYPE;
  function CONV_VOICE ( inst_vec : VOICE_VECTOR_TYPE ) return VOICE_TYPE;


ソースを修正してコンパイルできたものの、今度はPOFファイルにHEXファイルを埋め込むため「Convert Programming Files」を開き『emsx_top.cof』を読み込ませると、ファイルが古い旨のメッセージが表示されて設定画面の内容もなんかおかしい。
内容を修正したものの、アドレス割り当てをAutoのままだと、正しくPOFファイルが生成されずMSXとしては動かなかった。
アドレスの割り当てを手動で設定してやることで、正しくPOFファイルを生成することができた。
SOFファイルのプロパティでComplessionしてやらないと、容量が間に合わなくなるので設定する必要がある。

POFファイルへHEXファイル埋め込み
SOF Data Properties
1)Configration device: EPCS4 選択

2)SOF Data 選択
3)Add File... クリック
emsx_top.sof 読み込み

4)SOF Data 選択
5)Properties クリック
5-1)Start選択
5-2)Start address(32-bit hexadecimal): 0x0
SOF Data Properties
6)emsx_top.sofを選択
7)Propertiesをクリック
7-1)Compressionをチェック
emsx_top.sof Properties
8)Add Hex data クリック
8-1)Relative addressing を選択
8-2)Set start addressをチェックして 0x0400000
8-3)Hex file に emsx_top.hex
HEX Data Properties
9)出力されるPOFファイルを好みの名前に変更
10)設定内容を保存
保存したら次からはOpen Conversion Setup Data...で設定を読み込める
11)GenerateをクリックしてPOFファイル生成

参考リンク

1chipMSX Wiki
1チップMSXのwiki
ここで各種情報や各サイトへのリンクが貼ってある。

1chipMSXのコンパイル手順
Jun's Homepageにある1chipMSXのコンパイル手順

iso.enat.jp さんのブログ
1chipMSXのQuartus IIの各バージョンでのコンパイル結果やFPGAについて

USB-Blasterもどきの製作
USB-Blasterもどきの製作記事


戻る

nazo-fjt.com