Home > CPLD
Last modified: Apr 19, 2006
Table of Contents
CPLD with Verilog
CQ出版『VHDLで学ぶCPLD学習セット』をQuartus II と Verilog-HDL で開発する方法

Click to enlarge
TD4 on CPLD
毎日コミュニケーションズ『CPUの創り方』に掲載されているTD4 CPUをCQ出版『DesignWave 2003年1月号』付録CPLD上に実装

Click to enlarge
CPLD
CPLD with Verilog-HDL
CPLD (Complex Programmable Logic Device) を Verilog-HDL (Quartus II)で開発
CQ出版 DesignWave 『VHDLで学ぶCPLD学習セット』は、
AlteraのCPLD (MAX7032)を用い、VHDLをMax+PlusIIで合成し、実際に動かしてみるという学習セットです。
現在(2003年12月)、LeonardoSpectrum-Alteraのライセンスが切れてしまったためか、この学習セットは販売されていません。
ライセンスが切れたからといって使えないというのはもったいないので、Max+PlusIIの代わりにQuartus IIを用いて利用する方法を紹介します。
さらに学習セットではVHDLでの開発方法が記載されていますが、
ここではVerilog-HDLを用いることにします。
Quartus II setup
Quartus II web edition 3.0のライセンスセットアップをします。
詳細は省略。
- DesignWave 2003年1月号 (付録: CPLD基板) Max+PlusII
- DesignWave 2003年10月号 (付録: FPGA基板) Quartus II web edition 3.0
を参考に設定してください。
特に、Quartusのlisence setup方法を解説している後者。
HOWTO make
- New Project
Quartusを起動して、
[File] -> [New Project Wizerd]
- New Project Wizerd: Introduction
[Next]
- New Project Wizerd: Directory, Name, and Top-Level Entity
working directoryとprojectの名前、top-level entity(後述Verilog-HDLの中のトップモジュール)を指定します。

(画像をクリックすると拡大)
- New Project Wizerd: Add Files
まだファイルを作っていないので、空欄のまま。
- New Project Wizerd: EDA Tool Settings
Quartusのみを利用するので、何も指定しない。
- New Project Wizerd: Device Family

Family: MAX7000SとYesを選択
- New Project Wizerd: Select a Target Device

EPM7032SLC44-10を選択
- New Project Wizerd: Summary
[Finish]
- Assign Pins
回路図を参考にしながら、Verilog-HDL内のpinの名前と実際のデバイスのpinの対応表を作ります。
[Assignments] -> [Assign Pins...]
Number 1のpinを選択して、Pin nameに"GCLK1" (Verilog-HDL内での名前)と入力し、[Add]。

同様に、すべてのI/O pinに名前を付けます。
しかし、このダイアログで入力するのは大変なので、一旦Quartusを終了させ、
un1001b.csf
というテキストファイルを直接編集してしまいます。(正当な方法かどうかは分かりません。)
CHIP(UN1001B)
{
(省略)
GCLR : LOCATION = Pin_1;
(ここに追加。例えば、)
OE2 : LOCATION = Pin_2;
}
というように、すべてのpinに名前を付けます。
参考
$ grep LOCATION un1001b.csf > grep.csf
- Verilog-HDL
Verilog-HDLファイルを作成します。
例: sample.v (このファイル内のpinの名前は上記参考のgrep.csfを利用しています。)
[Project] -> [Add/Remove Files in Project]でVerilog-HDLファイルを追加します。

- Compilation
compile, fittingします。
[Processing] -> [Start Compilation]
- Program
CPLDのEEPROMに回路情報を焼き込みます。
[Tools] -> [Programmer]
書き込みツールを設定します。
[Hardware...]
Hardware Setting tabで[Add Hardware...]

Hardware type: ByteBlasterMV or ByteBlaster II
Port LPT1 (プリンタケーブルを繋いでいるポート)
を選択します。[OK]

ByteBlasterMVを選択して、[Select Hardware] -> [Close]

対応する*.pofファイルのProgram/Configureのcheck boxをチェックします。
プリンタケーブルとボードを接続し、ボードの電源を入れておきます。
[Processing] -> [Start Programming]
書き込みが終ると、回路が構成されます。
sample.vではDSW2-3, DSW2-4の2bitで指定した値を加算しながらインクリメントする16bitカウンタが7セグメントLEDに表示されます。
TD4 on CPLD
毎日コミュニケーションズ『CPUの創り方』の中で製作される"TD4" (Toriaezu Dousasurudakeno 4bit-CPU) をCPLDで実装しました。
CPLDはDesignWave 2003年1月号の付録であるAltera EPM7256ATC100-10を利用しました。
『CPUの創り方』では、汎用ロジックIC (74HC*)を用いてTD4を作っていきます。
74*で作ると半田付けが面倒なのでCPLDという選択をしました。
74*で作る雰囲気を味わうために、74*のlibraryを組み合わせて回路図を書き、合成させようと試みました。
しかし、マウスで回路図すべてを描くのは骨が折れるので、
結局RTL (Register Transfer Level)記述のVerilog-HDLで設計しました。
作り始めは、Quartusを利用してRTLから合成、fitting、JTAG downloadまでしようと考えましたが、
QuartusはMAX7000Aのような古いデバイスはサポートしていませんでした。
そこで、legacy deviceに対応している MAX+plus II を利用しました。
しかし、free edition の MAX+plus II では RTL を合成するライセンスがないです。
そこで、他社の合成ツールを利用してRTLをEDIF (Electronic Design Interchange Format)に落し、
EDIF を MAX+plusII で fitting、JTAG downloadまで行ないました。
TD4 Specification
| General register
| 4bit * 2 |
| Address space
| 4bit (16byte) |
| Program counter
| 4bit |
| Flag register
| 1bit (Carry) |
| Arithmthic operation
| 4bit add |
| clock
| 10MHz |
| logic cells
| 9/256 (3%) (チャタリング除去回路含む) |
|
Block Diagram
Instruction Set (opcode)
- arithmetic
ADD_A_Im 0x0,
ADD_B_Im 0x5
- move
MOV_A_Im 0x3,
MOV_B_Im 0x7,
MOV_A_B 0x1,
MOV_B_A 0x4
- jump
JMP_Im 0xF
- branch
JNC_Im 0xE
- Port IN
IN_A 0x2,
IN_B 0x6
- Port OUT
OUT_B 0x9,
OUT_Im 0xB
Mother Board
手元に3.3Vで動作するクロックがなかったので、トグルスイッチを使って手動クロックを発生することにしました。
プッシュスイッチだとチャタリング除去にアナログ素子(R,C,74HC14?)あるいは、タイマ(クロック)が必要ですが、
トグルスイッチだと2つのNANDゲートでチャタリング除去ができてマクロセルの少ないCPLDでは手頃です。
Register Transfer Level (RTL)
td4.tar.gz
td4/
td4/alu.v ALU (Arithmetic Logic Unit)
td4/decoder.v opcode decoder
td4/epm7256a.v mother board top module
td4/mux.v MUX (multiplexer) module
td4/opcode.v opcode header file
td4/pc.v PC (Program Counter) module
td4/register.v register module
td4/rom.v ROM module
td4/td4.v TD4 CPU top module
HOWTO make
- license setup
MAX+plus IIのlicense setupを行ないます。
- import EDIF
RTLから合成ツールを用いてEDIFを生成し、*.edfと名付けます。
MAX+plus IIの [File] - [Project] - [Name] で *.edf を選択します。
- assign device
MAX+plus II では、GUIでEPM725ATC100-10を選択できません。
とりあえず、[Assign] - [Device]で、EPM7256AETC100-10を選択し、*.acfを編集します。
CHIP *
BEGIN
DEVICE = EPM7256ATC100-10;
END
GLOBAL_PROJECT_SYNTHESIS_ASSIGNMENT_OPTIONS
BEGIN
DEVICE_FAMILY = MAX7000A;
END;
- prefit
[MAX+plus II] - [Compile] compiler window で [Start]
- pin assign
[Assing] - [Pin/Location/Chip...] でNode Name, Pin, Pin Typeを設定するか、
または、*.acf を直接編集します。
CHIP *
BEGIN
|RESET : INPUT_PIN = 98;
|LED0 : OUTPUT_PIN = 40;
|LED1 : OUTPUT_PIN = 42;
|LED2 : OUTPUT_PIN = 46;
|LED3 : OUTPUT_PIN = 50;
|TSW0 : INPUT_PIN = 78;
|TSW1 : INPUT_PIN = 80;
END
- postfit
compiler window で [Start]
- download
ByteBlasterMVなどをprinter portに接続します。
[Option] - [Hardware Setup]で設定を確認します。
(Windows2000/XPでは予めdevice driver "Altera ByteBlaster"を設定する必要があります。)
[MAX+plus II] - [Programmer] で [Program]
Reference
- CQ出版 DesignWave 『VHDLで学ぶCPLD学習セット』解説書
- CQ出版 『トランジスタ技術』 2001年7月号-2002年1月号 連載 (上記解説書の元記事)
- CQ出版 『DesignWave』 2003年10月号
- 毎日コミュニケーションズ 『CPUの創り方』
- CQ出版 『DesignWave』 2003年1月号
- Altera MAX 7000 Programmable Logic Device Family Data Sheet