ヒューマンデータ https://www.hdl.co.jp/home.htmlのダウンロードケーブル自作キット(BLKIT) を購入して組み立て、ダウンロードケーブルの動作確認のため 1chipMSX のFPGAを書き換えてみました。1chipMSXのコネクタとケーブルの接続の向きが分からなかったのですが、下の写真の向きに接続して正解でした。
ダウンロードケーブルの動作確認のためVHDLのソースを書き換えて動作が変わるか確認する必要があります。回路図とVHDLのソースを見比べてLEDをいじるのが簡単で安全そうなので、LEDの点滅を<という動きからXのようなLEDの点滅が交差するように変更しました。
ESEMSX3\pld\src\emsx_top.vhd の810行目から次のように変更して、QuartusII 6.0sp1 でコンパイルしました。( コンパイル手順 )
if (cnt = "000000000000000000000") then -- 21.48MHz / 2^21(approx:2M) => 10Hz case seq is when "0010" => pLed <= "1Z0000Z1"; iDipLed(2) <= not pDip(2); when "0011" => pLed <= "Z100001Z"; iDipLed(1) <= not pDip(1); when "0100" => pLed <= "0Z1001Z0"; iDipLed(0) <= not pDip(0); when "0101" => pLed <= "00Z11Z00"; iDipLed(1) <= not pDip(1); when "0110" => pLed <= "00011000"; iDipLed(2) <= not pDip(2); when "0111" => pLed <= "001ZZ100"; iDipLed(3) <= not pDip(3); when "1000" => pLed <= "01Z00Z10"; iDipLed(4) <= not pDip(4); when "1001" => pLed <= "1Z0000Z1"; iDipLed(5) <= not pDip(5); when "1010" => pLed <= "Z100001Z"; iDipLed(6) <= not pDip(6); when "1011" => pLed <= "0Z1001Z0"; iDipLed(7) <= not pDip(7); when "1100" => pLed <= "00Z11Z00"; iDipLed(6) <= not pDip(6); when "1101" => pLed <= "00011000"; iDipLed(5) <= not pDip(5); when "1110" => pLed <= "001ZZ100"; iDipLed(4) <= not pDip(4); when "1111" => pLed <= "01Z00Z10"; iDipLed(3) <= not pDip(3); when others => pLed <= "ZZZZZZZZ"; iDipLed <= not pDip ; end case; end if;
+------------------------------------------------------------------------+ ; Flow Summary ; +-------------------------+----------------------------------------------+ ; Flow Status ; Successful - Wed Dec 13 22:10:17 2006 ; ; Quartus II Version ; 6.0 Build 202 06/20/2006 SP 1 SJ Web Edition ; ; Revision Name ; emsx_top ; ; Top-level Entity Name ; emsx_top ; ; Family ; Cyclone ; ; Device ; EP1C12Q240C8 ; ; Timing Models ; Final ; ; Met timing requirements ; No ; ; Total logic elements ; 10,029 / 12,060 ( 83 % ) ; ; Total pins ; 171 / 173 ( 99 % ) ; ; Total virtual pins ; 0 ; ; Total memory bits ; 73,966 / 239,616 ( 31 % ) ; ; Total PLLs ; 1 / 2 ( 50 % ) ; +-------------------------+----------------------------------------------+ +-------------------------------------+ ; Flow Elapsed Time ; +----------------------+--------------+ ; Module Name ; Elapsed Time ; +----------------------+--------------+ ; Analysis & Synthesis ; 00:16:07 ; ; Fitter ; 00:09:07 ; ; Assembler ; 00:00:14 ; ; Timing Analyzer ; 00:01:35 ; ; Total ; 00:27:03 ; +----------------------+--------------+
Total logic elements が10026から10029に増えています。コンパイル時間が倍以上かかりましたが不明。
1chipMSXにダウンロードケーブル経由で書き換えて、無事に変更した通りにLEDが点滅。ちゃんとハンダ付けできているようです。これで安心してFPGAの書き換えができます。VHDLはこれから勉強します。
と思ったら、ビデオ出力が表示されなくなってしまいました。ダウンロードケーブルでCD-ROM の emsx_top.pof を書き戻して復活。やはり、よく分からないままVHDLを触るにはダウンロードケーブル必須ですね。
と思ったら、BIOSを書き込んでいないことに気づきました。BIOSを書いたら問題なく動作しました。
if (cnt = "000000000000000000000") then -- 21.48MHz / 2^21(approx:2M) => 10Hz case seq is when "0010" => pLed <= "000000Z1"; iDipLed(2) <= not pDip(2); when "0011" => pLed <= "0000001Z"; iDipLed(1) <= not pDip(1); when "0100" => pLed <= "000001Z0"; iDipLed(0) <= not pDip(0); when "0101" => pLed <= "00001Z00"; iDipLed(1) <= not pDip(1); when "0110" => pLed <= "0001Z000"; iDipLed(2) <= not pDip(2); when "0111" => pLed <= "001Z0000"; iDipLed(3) <= not pDip(3); when "1000" => pLed <= "01Z00000"; iDipLed(4) <= not pDip(4); when "1001" => pLed <= "1Z000000"; iDipLed(5) <= not pDip(5); when "1010" => pLed <= "Z1000000"; iDipLed(6) <= not pDip(6); when "1011" => pLed <= "0Z100000"; iDipLed(7) <= not pDip(7); when "1100" => pLed <= "00Z10000"; iDipLed(6) <= not pDip(6); when "1101" => pLed <= "000Z1000"; iDipLed(5) <= not pDip(5); when "1110" => pLed <= "0000Z100"; iDipLed(4) <= not pDip(4); when "1111" => pLed <= "00000Z10"; iDipLed(3) <= not pDip(3); when others => pLed <= "ZZZZZZZZ"; iDipLed <= not pDip ; end case; end if;
+------------------------------------------------------------------------+ ; Flow Summary ; +-------------------------+----------------------------------------------+ ; Flow Status ; Successful - Sun Dec 10 16:42:00 2006 ; ; Quartus II Version ; 6.0 Build 202 06/20/2006 SP 1 SJ Web Edition ; ; Revision Name ; emsx_top ; ; Top-level Entity Name ; emsx_top ; ; Family ; Cyclone ; ; Device ; EP1C12Q240C8 ; ; Timing Models ; Final ; ; Met timing requirements ; No ; ; Total logic elements ; 10,026 / 12,060 ( 83 % ) ; ; Total pins ; 171 / 173 ( 99 % ) ; ; Total virtual pins ; 0 ; ; Total memory bits ; 74,014 / 239,616 ( 31 % ) ; ; Total PLLs ; 1 / 2 ( 50 % ) ; +-------------------------+----------------------------------------------+ +-------------------------------------+ ; Flow Elapsed Time ; +----------------------+--------------+ ; Module Name ; Elapsed Time ; +----------------------+--------------+ ; Analysis & Synthesis ; 00:06:50 ; ; Fitter ; 00:03:53 ; ; Assembler ; 00:00:06 ; ; Timing Analyzer ; 00:00:40 ; ; Total ; 00:11:29 ; +----------------------+--------------+