2020年4月3日金曜日

激安中華FPGAで「動かしてわかるCPUの作り方10講」を動かしてみる

最近電気回路の勉強を始めていて、FPGAに興味を持っていた。でもお値段が高いのだ。

「動かしてわかるCPUの作り方10講」ではDE0-CVという開発ボードを勧めているのだが、これは二万円ほどする。

https://gihyo.jp/book/2019/978-4-297-10821-2 
http://solitonwave.shop/?pid=135615075

安価な電子回路はAliexpressでいつも探すのだが、三千円くらいのFPGAボードがいくつか見つかる。はたしてこれは「動かしてわかるCPUの作り方10講」で使えるのか、調べてみた。

購入したのはこれ。E6とE10バージョンがあり、E6は6kLE、E10は10kLEの規模である。

https://www.aliexpress.com/item/32813061054.html

DE0-CVとの違いは、

・ 規模が1/10と小さい(DE0-CVは49kLE)
・ SRAMがついていない
・入力スイッチが少ない(8bitディップスイッチ)
・7segLEDが8桁(ダイナミック点灯)

注文してから二週間ほどで手元に届いたので、「動かしてわかるCPUの作り方10講」の例題をいくつか試してみた。

 E6とDE0-CVはどちらもAltera(INTEL)のFPGAを使っているので、開発ツールは同じものが使える。今回はQuartus Prime 13.0 Sp1を使った。
ただし、FPGAの型番(E6はCyclone IV E  EP4CE6E22C8)は異なるので、デバイスの型番とピン配置をE6に合わせて指定し直す必要がある。

動かしてみてわかったのは、論理回路はそのまま動くが、表示用の7SEGLEDの点灯のさせ方が違うことだった。例題では7SEGLEDの各素子に表示を指示するが、E6ではLEDの桁位置を指示に加える必要がある。

このために新たなポート、led_bitとDIN0〜DIN3までを指定した。



第8章-3, cpu_dec_slowのdec_7seg.vhdに以下のコードを加えた。

    process(LED_activating_counter, CLK)
    begin
     if(rising_edge(CLK)) then
        LED_activating_counter<= LED_activating_counter + "01";
     end if;
     
    case LED_activating_counter is 
        when "00" =>
        led_bit <= "1110";
          DIN <= DIN0; 
        when "01" =>
        led_bit <= "1101"; 
          DIN <= DIN1;
        when "10" =>
        led_bit <= "1011";
          DIN <= DIN2; 
        when "11" =>
        led_bit <= "0111";
          DIN <= DIN3;
        when others =>
       led_bit <= "1111";        
    end case;
    end process;

CLKの立ち上がりごとに7SEGLEDの桁をずらして(led_bitで指定)点灯させた。


クロックが遅いので表示がチラチラするが、1〜10までの和が順番に表示される。

第8章以降の例題ではROM, RAMも実装されるが、FPGA内に作るため外付けSRAMは不要である。 また、使うロジック数も2000LE程度でE6の規模に収まる。

「動かしてわかるCPUの作り方10講」の範囲内では、3000円の激安中華FPGAで例題を十分にこなせることが確認できた。
価格の面でFPGAの購入をためらっているのであれば、良い選択肢と思われる。


なお、E6の製造元はFPGAのプログラム例、ピン配置、回路図を下記で公開している。

http://www.mediafire.com/file/wyhlxgfw3g3755p/A-C4E6E10_board.rar

0 件のコメント:

コメントを投稿