昔は電子機器開発部署の部品棚にはロジックICの74シリーズのほとんどすべてが用意されていて、これらを使って開発の予備実験や試作などを行っていたものだが、もうそんなやり方は効率が悪いので、CPLDの開発環境を導入して74シリーズを使うのはやめようと思い、Xilinx(現AMD)のXC95xxとISE14.7をセットアップしたのは2010年頃だったろうか。それでもかなり遅い。
マイコンを使えばロジックICを使うような場面はだいたい賄えるので、CPLDを使う機会はほとんどなかったが、それでもロジック回路が組める環境があると安心感があった。
※注記 XC95シリーズのCPLDは生産中止品で、開発ツールISE14.7はほとんどこのXC95にしか使い道がないので、未来があまりないが、XC95シリーズは流通在庫が豊富であり、まだ当面の間入手は可能と思われます。
2016年頃にWindows10を導入したらISE14.7が動かなくなってしまい、ときどき思い出したようになんとか動かす事はできないかいじったりしていたが、結局決定的な解決策がないまま放置して、あれから10年近くCPLDが使えない状態になってしまっていた。
2026年年初からパソコンを新調し、環境を整備していたが、このときにまた、もう一度ISE14.7を導入してCPLDが使えるようにできないかな……?と思い、ネットで調べてみると、いつの間にやらAMDのISEアーカイブサイトにWindows10、11対応のISE14.7が上がっていたので、テストしてみることにした。ただこれは、Windows上にlinuxの仮想マシンを導入して、そこにISE14.7をインストールするというやり方で、デバイスドライバやダウンロードケーブルがちゃんと動作するのか?という不安があった。
結論を先にいうと、特に問題はなく、すんなり使えるようになった。備忘録として以下にまとめておく。
Windows10またはWindows11にISE14.7を導入する場合、あらかじめOracleのVirtualBox(仮想マシン)を入れておく必要がある。私は別の用途ですでにVirtualBox7.1.10をインストールしていたので、とくに問題はなかった。
VirtualBoxが入ったら、AMDのアーカイブサイトより、
Xilinx_ISE_14.7_Win10_14.7_VM_0213_1.zip
をダウンロードし解凍したら、Windows上からxsetup.exeを実行して、あとは案内に沿ってインストールする。
※ちょっとうろ覚えだが、途中ダウンロードケーブルのデバドラを入れるチェック項目があったように思う。入れ忘れ注意!!
インストールが完了したら、VirtualBoxのVirtualBoxマネジャーを開くと、図1のようにISE14.7が追加されているのが確認できる。
(windows98seとubuntuの22.04、14.04は先に入れてあったもの。)

図1.VirtualBoxにISE14.7が追加されている
このままでも動くのかもしれないが、ネットで情報収集したところ、いくつかの設定を行う必要があるらしい。
ISE14.7_VIRTUAL_MACHINEを選んだ状態で、設定アイコン(歯車)をクリックすると、各種の設定ができる。
※以下の設定は、VirtualMachineが停止している状態で行います。
上から順に、
まず一般→高度でクリップボードの共有を双方向に設定。
次にシステム→マザーボードで
・メインメモリーを6144MBに設定。
・チップセットをPIIX3に設定。
システム→プロセッサーで
・プロセッサー数を2に
・PAE/NXを有効化にチェック
システム→アクセラレーションで
・仮想化支援機能:ネステッドページングを有効化
ディスプレイ→スクリーンで
・ビデオメモリーを128MBに設定
・グラフィックコントローラーをVBoxSVGAに設定。
ネットワーク→アダプター1
・割り当てをNATに設定
USB
・USBコントローラを有効化にチェック、USB2.0にチェックを入れる。
・USBデバイスフィルターで、Xilinx USB Cable、Digilent USB Cable、Digilent USB Cable2の3つに☑が入っていることを確認。
・共有フォルダーに、Windowsと共有する任意のフォルダーを設定しておく(右の+マークで追加)。
ユーザーインターフェイス→デバイス
・共有フォルダ、クリップボードの共有にチェックが入っていることを確認。
以上で触れていないところはデフォルトのままでいいと思われる。
すべての設定ができたら、ISE14.7_VIRTUAL_MACHINEをダブルクリックするか、これを選んだ状態で起動ボタンを押すと、Linuxの仮想マシンが起動する(図2)。

図2.Linuxの仮想マシンが起動
これでこの仮想マシンのデスクトップ上にあるProject Navigatorをダブルクリックすれば、ISE14.7が起動する(図3)。

図3.ISE14.7を起動している様子
起動できたので、簡単なテスト回路をVHDLで記述して動作確認しておく。使用デバイスはXC9572XL(PC44)。
テスト用の回路は図4に示す通り。電源の3.3Vは外部からACアダプタとレギュレータで供給し、クロックは部品箱に入っていた8.192MHzの水晶発振器を使用した。
図4.製作したテスト用回路
ISE14.7による回路記述は次の通り。
ファイルのNew Projectから、XC9572test20260110という名前(任意)をつけてプロジェクトを作成する。このときに、Locationに、上で設定したWindowsと共有しているホルダを指定するとWindowsからも見ることができるので管理しやすくなる。次のページでデバイスとパッケージ、開発言語(VHDL)を選択してFinishするとプロジェクトが生成される。
この状態ではソースファイルがないので、VHDLを記述するファイル(*.vhd)とピン接続を記述指定するファイル(*.ucf)を作成する。
左上ペインのプロジェクト名を右クリックして、"New Source"を選び、VHDL MODULEを選んで、"ledMain.vhd"と名前をつけてNext,Finish。同じく"New Source"から"Inplementation Constrains File"を選び、"led.ucf"と名前をつけて生成する。
ピン配置はGUIではできないのでucfファイルで行う。
今回記述したテスト用のledMain.vhdは次の通り
--ここから
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;
entity testmain is
Port ( LED1 : out STD_LOGIC;
LED2 : out STD_LOGIC;
clk : in STD_LOGIC
);
end testmain;
architecture rtl of testmain is
signal ledcnt : unsigned(19 downto 0):="00000000000000000000";
signal led_sig : std_logic:='0';
begin
process(clk)
begin
if(rising_edge(clk)) then
if ledcnt = to_unsigned(1000000,ledcnt'length)then
led_sig <= not led_sig;
ledcnt <= to_unsigned(0,ledcnt'length);
else
ledcnt <= ledcnt + 1;
end if;
end if;
end process;
LED1 <= led_sig;
LED2 <= not led_sig;
end rtl;
--ここまで
これはクロックを100万カウントするごとにLED1を点滅させる回路で、LED2はLED1の反転。
次に、led.ucfは次の通り。
--ここから
# Clock
NET "clk" LOC = "P5";
# LEDs
NET "LED1" LOC = "P18";
NET "LED2" LOC = "P19";
--ここまで
vhdとucfが書けたら保存して、ledMain.vhdを選んだ状態で、左中段ペインのImplement Designを右クリックしてRun。
そうするとすべての処理が一括で行われて、最後に
Process "Generate Programming File" completed successfully
が出たら成功だ。
次に生成されたオブジェクトファイルをCPLDに書き込む。
製作した基板に電源とダウンロードケーブル(DLC9LPMCを使用)を接続し、
ISEのToolsからiMPACTを起動する。Warning はOKで抜けて、
まず左ペインのBoundary Scanをダブルクリックすると、右ペインに
”Right Click to Add Device or Initialize JTAG chain”
と出るので、その部分で右クリックして、"Initialize Chain"を選択。
すると、接続しているデバイスが表示されるので、"Yes"を選んでContinue。
先ほどビルドされたオブジェクトファイル"testmain.jed"をOPEN。
OKで抜けて、あとは左下ペインのProgramをダブルクリックすれば書き込まれ、書き込みが終了すると回路が動作する。
動作している様子は次の通り(動画1)。
動画1.動作の様子
コード記述でロジック回路が組めるというのは、いまだにちょっと感動します(^-^)
今回使用したXC9572というCPLDデバイスは、マクロセルという回路単位が72個入ったもので、マクロセルというのはざっとフリップフロップ1個とゲート数個だと考えれば、だいたい実装可能な回路規模のイメージができる。
今回は8.192MHzのクロックを100万分の1に分周してLEDを点滅させていて、100万分の1は大体2の20乗分の1なのでごく大雑把にはDフリップフロップ20個程度だと考えればよい。実際のところ、ISEのFitter Reportを見ると、72個のマクロセルのうち22個を使ったと書いてあるので、ほぼ計算が合う。
実務上はそれほど使う機会が多いとは思えないが、逆にこの程度の規模のCPLDでなにかおもしろいものができないか考えるのも面白いかもしれない。
最近のコメント