88
第第第 •CPLD/FPGA 第第第第 •AHDL 第第 •AHDL 第第第第

第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Embed Size (px)

Citation preview

Page 1: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

第二章

•CPLD/FPGA 使用方法•AHDL 语言•AHDL 实验设计

Page 2: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

可编程逻辑器件的选择• CPLD , FPGA or ASIC?

– 容量• 宏单元数,逻辑单元数• 寄存器数,门数• 存储器大小

– 速度• Tpd

– 可用管脚数• 固定输入管脚,可定义输入 / 输出管脚

• 工作电压– 电源电压– 接口电压

• 功耗• 封装形式• 配置方式

– 一次编程 OTP ( One Time Programmable)– 可再编程 ( Re-Programmable)

• 保持型, ISP• 上电加载型,需要外置 EPROM

Page 3: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Selection of CPLD or FPGA

• If circuit having a lot of combinatorial logic, use CPLD

• If circuit having a lot of Register logic, use FPGA

100% combinatorial logic0% Register

0% combinatorial logic100% Register

CPLD FPGA

Page 4: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

cont...• Select CPLD or FPGA depends on

– the circuit application• CPLD for Combinatorial Logic > Register Logic• FPGA for Register Logic > Combinatorial Logic

– Gate count need• CPLD gate count is smaller than FPGA

– Speed Grade• CPLD having less pin to pin I/O delay• CPLD in general run faster than FPGA

– Memory need• FPGA support Memory

– Price• in general FPGA is lower in cost than CPLD

Page 5: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Select Guide

Page 6: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

MAX 7000S Family Members

Feature

Usable gates

Macrocells

Max User I/O

tPD (ns)

fcnt (MHz)

7032/S

600

32

36

5

178.6

7064/S

1,250

64

68

6

151.5

7096

1,800

96

76

6

151.5

7128/S

2,500

128

100

7.5

125

7160/S

3,200

160

104

7.5

125

7192/S

3,750

192

124

10

100

7256/S

5,000

256

164

10

100

Page 7: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

FLEX 10K Family Members

Feature 10K10 10K20 10K30 10K40 10K50 10K10010K70

Typical gates 10,000 20,000 30,000 40,000 50,000 100,00070,000

Logic elements 576 1,152 1,728 2,304 2,880 4,9923,744

Total RAM bits 6,144 12,288 12,288 16,384 20,480 24,57618,432

Total Registers 720 1,344 1,968 2,576 3,184 5,3924,096

Max User I/O 150 198 248 278 310 406358

Available Now Now Now Now Now NowNow

Page 8: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Multi-volt System Guideline

• Both CPLD and FPGA from Altera support Multi-volt system interface

• Couple suggestion when doing Mulit-volt design– 5V device, use 70000S/10K/6K/8KA/9K

– 3.3V device, use 7000A/10KA/10KV/6KA/9KA

– 2.5V device, use 7000B/10KE

Page 9: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

cont...VCCINT

GNDINT

Core

VCCIO

GNDIO

VCCIO

GNDIO

User Option:Allows Interfaceto 5.0-, 3.3- &2.5-V Systems

VCCIO

Based on Process:User Connectsto Power Supply

VCCINT

Page 10: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

cont...

Typical Min Input High

Typical Max Input Low

5.0V TTL 2.0V 0.8V

CMOS 3.5V 1.5V

3.3V TTL 2.0V 0.8V

CMOS 2.0V 0.8V

2.5V CMOS 1.6V 0.7V

Interface Logics

Page 11: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

5.0-V Devices with MultiVolt Interface

(1) Input of Device Driven by Altera Device Output Must Have 5.0-V Tolerance.(2) Input of Device Driven by Altera Device Output Must Have 3.3-V Tolerance.(3) Use Open-drain outputs with pull-up to 5.0V.

Applicable Devices: FLEX10K, FLEX6000, FLEX8000, MAX7000/S, MAX9000/A

2.5V 3.3V 3.3V 5.0V 5.0V 2.5V 3.3V 3.3V 5.0V 5.0V

CMOS TTL CMOS TTL CMOS CMOS TTL CMOS TTL CMOS

5.0V (1) (1) (1)

3.3V (2) (3)

Input Levels Output Levels

5.0V

VCCINT VCCIO

Note: For some of the smaller packages, there are no VCCIO pins, and therefore does not support Multi-volt interface.

Page 12: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

3.3-V Devices with MultiVolt Interface I

(1) Input of Device Driven by Altera Device Output Must Have 3.3-V Tolerance.(2) Use Open-drain outputs with pull-up to 5.0-V.

Applicable Devices: FLEX10KA, FLEX6000A, MAX7000A

2.5V 3.3V 3.3V 5.0V 5.0V 2.5V 3.3V 3.3V 5.0V 5.0V

CMOS TTL CMOS TTL CMOS CMOS TTL CMOS TTL CMOS

3.3V (1) (2)

2.5V

Input Levels Output Levels

3.3V

VCCINT VCCIO

Important: Do not tie the VCCIO of these devices to 5.0-V power source. This will damage our devices.

Page 13: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

3.3-V Devices with MultiVolt Interface II

(1) Input of Device Driven by Altera Device Output Must Have 3.3-V Tolerance.(2) Use Open-drain outputs with pull-up to 5.0-V.

Applicable Devices: FLEX10KV, EPF8282AV, EPM7032V

2.5V 3.3V 3.3V 5.0V 5.0V 2.5V 3.3V 3.3V 5.0V 5.0V

CMOS TTL CMOS TTL CMOS CMOS TTL CMOS TTL CMOS

3.3V 3.3V (1) (2)

Input Levels Output Levels

VCCINT VCCIO

Important: Do not tie the VCCIO of these devices to 5.0-V or 2.5-V power source. This will damage our devices.

Page 14: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

2.5-V Devices with MultiVolt Interface

(1) Input of Device Driven by Altera Device Output Must Have 3.3-V Tolerance.(2) Use Open-drain outputs with pull-up to 5.0-V.

Applicable Devices: FLEX10KE, FLEX10KB

2.5V 3.3V 3.3V 5.0V 5.0V 2.5V 3.3V 3.3V 5.0V 5.0V

CMOS TTL CMOS TTL CMOS CMOS TTL CMOS TTL CMOS

3.3V (1) (2)

2.5V

Input Levels Output Levels

2.5V

VCCINT VCCIO

Page 15: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Packaging Considerations

• Engineering– Pin Count– Board Space Efficiency– Pin Compatibility with Other Devices– Easy Prototype Development

• Manufacturing– Board Space Efficiency– PCB Trace Width Requirements– Compatibility with Solder Reflow Process– Quality / Yield / Cost

Page 16: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

84

100

160

208

240

304

100

144

256

356

600

100

256

484

672

1.4

0.6

1.5

1.5

1.9

2.9

0.4

0.8

1.1

1.9

3.1

0.2

0.4

0.8

1.1

60

160

100

140

120

100

250

200

200

180

190

500

600

600

600

Packaging Metrics

PLCC

PQFP (RQFP)

TQFP

Standard BGA(1.27-mm Pitch)

FineLine BGA(1.0-mm Pitch)

1.27

0.65

0.65

0.50

0.50

0.50

0.50

0.50

1.27

1.27

1.27

1.00

1.00

1.00

1.00

29 x 29

14 x 23

28 x 28

28 x 28

32 x 32

40 x 40

14 x 14

20 x 20

27 x 27

35 x 35

45 x 45

11 x 11

17 x 17

23 x 23

27 x 27

Pin Count

BoardArea (in2)

Pin Density(Pins/in2)

Lead/Ball Pitch (mm)

Body Size(mm)

PackageType

Declining Usage Mainstream Usage Advanced Usage

Page 17: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

PQFP

TQFP

TQFP

PQFP

Standard BGA

Standard BGA

TQFP

MicroBGA

TQFP

FineLine BGA

Standard BGA

FineLine BGA

FineLine BGA

PDIP

PLCC

PQFP

PGA

PGA

< 100 Pins

100 to 144

145 to 240

Above 240

Declining Mainstream AdvancedPin Count / Usage

Packaging Technology for PLDs

Higher Gate Count Has Driven Higher Pin Count

Declining Usage Mainstream Usage Advanced Usage

Page 18: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

常用封装形式

Page 19: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

84-Pin Plastic J-Lead Chip Carrier (PLCC)

Page 20: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

100-Pin Plastic Thin Quad Flat Pack(TQFP)

Page 21: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

208-Pin Plastic Quad Flat Pack(PQFP)

Page 22: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

功耗

Page 23: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

FPGA/CPLD 不同芯核电压器件流行趋势

资料来源:美国 Altera 公司

0%

20%

40%

60%

80%

100%

1992 1993 1994 1995 1996 1997 1998 1999 2000 2001

5.0 V

3.3 V2.5 V

1.8 V

初始

设计

百分

Page 24: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Power Consumption Improvements

0

2

4

6

8

10

PowerConsumption

(W)

EPF10K50 EPF10K100

3.3-V FLEX 10KA

5.0-V FLEX 10K

3.3-V Power Supply Reduces Power Consumption

P = VI

where:P = PowerV = VoltageI = Current

Page 25: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

ISP /ICR Increases Flexibility

No Device Handling

No Bent Leads

Allows Generic Inventory

Easy Prototyping

Supports Changes during Manufacturing/ Test Flow

Allows Field Upgrades

Add Enhancements Quickly & Easily

Mount Unprogrammed Program In-System Reprogram in the Field

Page 26: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

MAX+plus II ISP Flow

POF

MAX+plus II BitBlaster or other cable

JTAG Chain

Programmer TMSTCK

TDO

TDI

TMSTCK

TDO

TDI

TMSTCK

TDO

TDI

Any JTAGDevice

MAX 9000MAX 7000S

Any JTAGDevice

Page 27: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

此接口既可作编程下载口,也可作

JTAG 接口

ALTERA 的 ByteBlaster ( MV )下载接口

Page 28: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

图 3-46 10 芯下载口

引脚 1 2 3 4 5 6 7 8 9 10

PS 模式 DCK GND CONF_DONE VCC nCONFIG - nSTATUS - DATA0 GND

JATG 模式 TCK GND TDO VCC TMS - - - TDI GND

表 3-3 图 3-46 接口各引脚信号名称

CPLD 和 FPGA 的编程与配置

Page 29: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

CPLD 编程下载连接图

TCK 、 TDO 、 TMS 、 TDI 为 CPLD 的JTAG 口

对 CPLD 编程

CPLD 的 ISP 方式编程

Page 30: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

多 CPLD 芯片 ISP 编程连接方式

CPLD 的 ISP 方式编程

Page 31: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

FLEX10K PS 模式配置时序

使用 PC 并行口配置 FPGA

Page 32: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

多 FPGA 芯片配置电路

Page 33: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

注意:1 、不要忘了将多片配 置 控制信号 nCE 引 脚接地!2 、作为 PS 配置模式, 不要忘了将配置模式 控制信号脚 MSEL1 和 MSEL0 都接地!

FLEX 、 ACEX、 APEX 系列FPGA 配置电路

FPGA Passive Serial Configuration

被动串行配置模式

10 针标准配置 / 下载接口

通过配置电路后与 PC 机的并行

接口相接

对 FPGA 配置

FLEX 、 ACEX 、 APEX 等系列 FPGA 器件配置连线图

Page 34: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Altera 公司的 FPGA 配置方式与器件系列

器 件 功能描述 封装形式

EPC2 1695680× 1 位,3.3/5V 供电 20 脚 PLCC、32 脚 TQFP

EPC1 1046496× 1 位,3.3/5V 供电 8 脚 PDIP、20 脚 PLCC

EPC1441 440 800× 1 位,3.3/5V 供电 8 脚 PDIP、20 脚 PLCC

EPC1213 212 942×位,5V 供电 8 脚 PDIP、20 脚 PLCC、32 脚 TQFP

EPC1064 65 536×位,5V 供电 8 脚 PDIP、20 脚 PLCC、32 脚 TQFP

EPC1064V 65 536×位,5V 供电 8 脚 PDIP、20 脚 PLCC、32 脚 TQFP

Page 35: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

FPGA 使用 EPC 配置器件的配置时序

用专用配置器件配置 FPGA

Page 36: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

OTP 配置器件:

EPC1441 、 EPC1 、 EPC1213等

FPGA 配置器件

FPGA 的配置电路原理图

Page 37: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

选择 Global Project Device… 项

注意,被编译文件的工程名为“ DAC” ,因此,其配置文件名应该为“ DAC . POF ”

编译前选择配置器件

Page 38: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

对于低芯核电压 FPGA(如 EP1K30 ),需选择此

项,电路中的配置芯片应该接 3.3V 工作电压。

选择配置芯片的型号为 EPC1PC8

选择 PS 模式

编译前选择配置器件

Page 39: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

MCU 用 PPS 模式配置 FPGA 电路

使用单片机配置 FPGA

Page 40: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

单片机使用 PPS 模式配置时序

Page 41: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

用 89C52 进行配置

Page 42: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

可编程逻辑器件的电路设计• 电源滤波• 调试输出管脚• 不用管脚的处理• 上电过程

– VCCINT,VCCIO– Configure Time

• 设计注意事项– 同步时序电路– 复位输入 Global Reset input – 时钟考虑

Page 43: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

设计实例• CPLD 设计实例

– CPLD 实验电路原理图• FPGA 设计实例

– FPGA 实验电路原理图

Page 44: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

CPLD 实验电路板

Page 45: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

CPLD 电路实验板框图

7128SLC84-15

JTAG

4 个按键

4 个发光管

1MHZ 晶振

1 个别数码管

5V Pwr

测试管脚

扩展接口

10 段条形LED

Page 46: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

ISP, 电源滤波滤波电容

JTAG for ISP

Page 47: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

数码管

a

b

cd

e

fg

共阴

Page 48: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

晶振

Page 49: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

FPGA 实验电路板

Page 50: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

FPGA 电路板框图

FLEX10K10LC84-4

10, 000 门容量

4X4

键盘

6 个扫描显示数码管

1M 晶振FLASH 29F010

SRAM 62256

复位电路 扬声器

电源

JTAG 下载接口

ROM

信号输入

扩展电路

Page 51: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

4x4 扫描键盘输入

0

1

1

1

0 1 1 1

1 0 1 1

1 1 0 1

1 1 1 0

Page 52: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

扫描显示电路a

b

cde

f g

100000010000001000 …

Page 53: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

下载电路和配置电路

JTAG

下载电路

配置ROM

下载模式选择电路

Page 54: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

FLASH & SRAM

FLASH

128Kx8

SRAM32kx8

Page 55: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Generic PLD usage

• It apply to both EPLD and FPGA– always having 20% Macro-cell/Logic Cell not used

• have space for future add in logic purpose

– always having 20% of I/O pin not used• have space for future add in logic purpose

– always let Max+Plus II do the pin assign for you at the first time

• if some pin must be locked down, do it first. The rest of the I/O pin, let Max+Plus II assign it automatically

Page 56: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Always check the RPT file

• After Max+Plus II finish the compilation, it will generate a file named as “*.RPT”

• Connect the Vcc, Gnd as suggested by the RPT file

• Check the Pins

Page 57: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

MaxPlus II 开发流程

SCH .gdfAHDL .tdfVHDL .vhd

Family DevcicePin AssigmentSysthesis Option

Scf :input Outputburied

EPC1MCUROM

ISP .pofICR .sof

设计输入 编译综合 下载调试 实际运行

Delay MatrixRegister FreqSetup/Hold

时序分析

时序仿真

Page 58: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

AHDL

• Altera Hardware Description Language– develop by Altera

– integrate into the Altera software Max+Plus II

– description the hardware in language instead of graphic

• easy to modify

• easy to maintain

– very good for

• complex combinational logic

– BCD to 7 Segment converter

– address decoding

• state machine

• more than you want……..

Page 59: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

AHDL 学习内容

• 组合逻辑电路的设计方法• 时序逻辑电路的设计方法• 状态机电路的设计方法• 层次化的设计方法

Page 60: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

General AHDL Format

SUBSDESIGN decode( a0, a1, b : input; out1, out2 : output;)Variable c: : node; begin out1 = a0 & !a1; -- out1 c=!out1; out2 = c # b; % out2 %end;

关键字

I/O 端口定义

AHDL format

逻辑定义

中间变量

decode.tdf

AHDL 注释

一样

Page 61: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

组合逻辑电路的设计方法• Boolean Expressions & Equations

• Truth Table

• IF-THEN-ELSE

• CASE Statement

• Bus Operation

• Tri-state Buffer

• Open Drain Buffer

Page 62: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Boolean Expressions & Equations

CONSTANT IO_ADDRESS = H“A";

SUBDESIGN decode1(

a[3..0] : input; nior : input; cs0 : output;

test : output; )variable

cs1 : node;begin

cs0 = (a[3..0] == H " A");cs1= !cs0;test=lcell(cs1);

end;

cs0=(a[3..0]==IO_ADDRESS);

cs0=(a[3..0]==B “101x ");

cs0=a3&!a2&a1&!a0;

Define node

Page 63: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

常用运算符• Addition : +• Subtraction : -• Numeric Equality : ==• Not equal to : !=• Greater than : >• Greater than or equal to : >=• Less than : <• Less than or equal to : <=• Logical OR : #• Logical AND : &

Page 64: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Truth Tablei[3..0] Segment 7

0 0

1 1

2 2

F F

a

b

cd

e

fg

How easy to make any modification

Page 65: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

IF-THEN-ELSESUBDESIGN priority( low, medium, high : input; highest_level[3..0] : output;)beginif ( high == B”1”) thenhighest_level[] = B”1000”;elsif (medium == B”1”) thenhighest_level[] = B”0100”;elsif (low == B”1”) thenhighest_level[] = B”0010”;elsehighest_level[] = B”0001”;end if;end;

Page 66: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

CASE StatementSUBDESIGN decoder(low, medium, high : input; highest_level[3..0] : output;)variablecode[2..0] : node;begincode2=high;code1=medium;code0=low;case code[] iswhen 4 => highest_level[] = B”1000”;when 2 => highest_level[] = B”0100”;when 1 => highest_level[] = B”0010”;when others => highest_level[] = B”0001”;end case;end;

What is the usage of this statement

Page 67: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Bus OperationSUBDESIGN decode1( a[3..0], b[3..0] : input; out[3..0] : output;)beginout0 = a0 & b0;out1 = a1 & b1;out2 = a2 & b2;out3 = a3 & b3;end;

SUBDESIGN decode1( a[3..0], b[3..0] : input; out[3..0]: output;)beginout1[] = a[] & b[];end;

Same functionbut easier

Page 68: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

More on Bus OperationBus Operationa[9..0], b[9..0]

– a[] = b[]; – a[7..4] = b[9..6];– a[9..8] = VCC;– a[9..8] = 1;– a[9..8] = 2;– a[9..8] = 3;– a[3..0] = GND– a[3..0] = 0;– temp = b0& b1;

a[2..1] = temp

a7=b9, a6=b8, a5=b7, a4=b6 % a[9..8] connect to VCC

a[9..8] = B”01”

a[9..8] = B”10” a[9..8] = B”11”

a[3..0] connect to GND a[3..0] = B”0000”

a2 = temp, a1 = temp

Page 69: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Advance Bus Operation• Bus

– b[3..0]• b3, b2, b1, b0 (having 4 members)

• MSB is b3, LSB is b0

• ARRAY BUS– a[3..0][2..0]

• a3_2, a3_1, a3_0, a2_2, a2_1, a2_0, a1_2, a1_1, a1_0, a0_2, a0_1, a0_0 (having 12 members)

• MSB is a3_2, LSB is a0_0

a[3..2][1..0] = b[];

a3_1 = b3 a3_0 = b2a2_1 = b1 a2_0 = b0

This one change first

Page 70: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Tri-state Buffer

Method 1 Method 2

SUBDESIGN tri_state(a, enable : input; b : output;)beginb = tri(a, enable);end;

SUBDESIGN tri_state( a, enable : input; b : output;)variable temp : tri;begintemp.in = a;temp.oe = enable;b = temp.out;end;

Page 71: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

时序电路的设计

• Register– DFFE (D-FF with enable)

– TFF/TFFE

– JKFF/JKFFE

– SRFF/SRFFE

• Counter

• Use “Clock Enable”

Page 72: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Register Logic

Method 1 Method 2

SUBDESIGN flip_flop( d, clk : input; q : output;)beginq = dff(d,clk, ,);end;

SUBDESIGN flip_flop( d, clk : input; q : output;)variable temp : dff;begintemp.d = d;temp.clk = clk;q = temp.q;end;

I want a D-Flipflop

Page 73: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Register Buses

SUBDESIGN bus_reg( clk, d[7..0] : input; q[7..0] : output;)variable ff[7..0] : dff;beginff[].clk = clk;ff[].d = d[];q[] = ff[].q;end;

ff[0].clk = clk;ff[1].clk = clk;ff[2].clk = clk;ff[3].clk = clk;ff[4].clk = clk;ff[5].clk = clk;ff[6].clk = clk;ff[7].clk = clk;

ff[0].d = d[0];ff[1].d = d[1];ff[2].d = d[2];ff[3].d = d[3];ff[4].d = d[4];ff[5].d = d[5];ff[6].d = d[6];ff[7].d = d[7];

q[0] = ff[0].q;q[1] = ff[1].q;q[2] = ff[2].q;q[3] = ff[3].q;q[4] = ff[4].q;q[5] = ff[5].q;q[6] = ff[6].q;q[7] = ff[7].q;

Page 74: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Design 8 bits Counter is Easy

SUBDESIGN 8bits(clk : input; q[7..0] : output;)variable temp[7..0] : dff;begintemp[].clk = clk;temp[].d = temp[].q +1 ;q[] = temp[].q;end;

Page 75: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

9-bit up/down counter with load and enable

SUBDESIGN ahdlcnt (  clk,

ld, en, clr, up/down,d[8..0] :INPUT;

  q[8..0] :OUTPUT;) VARIABLE  count[8..0] :DFF; 

BEGIN  count[].clk = clk; count[].clrn = !clr;  IF ld THEN count[] = d[]; ELSIF en THEN IF up/down THEN count[] = count[] + 1; ELSE count[] = count[] - 1; ENDIF; ELSE count[] = count[]; END IF; q[] = count[];END;

Page 76: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Clock Enable• If you wish to load a register on a specific rising edge of the global

Clock, Altera recommends that you use the Clock Enable input of one of the DFFE, TFFE, JKFFE, or SRFFE Enable-type flipflops to control when the register is loaded.

Reg_ctrl[3..0].d =DB[3..0];

Reg_ctrl[3..0].clk = niow;

Reg_ctrl[3..0].ena= cs;

Reg_ctrl[3..0].d =DB[3..0];

Reg_ctrl[3..0].clk = niow&cs;

Page 77: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

State MachineSUBDESIGN simple( clk, reset, jump : input; q : output;)variable ss : MACHINE WITH STATES (S0,S1);beginss.clk = clk;ss.reset = reset;case ss is when s0 => q = gnd; if (jump) then ss = s1; end if; when s1 => q = vcc; if (jump) then ss = s0; end if;end case;end;

State Machine Diagram

Note : All State Machine Variable mustbe associated with a CLOCK

S0

S1

jump=1jump=1

q = 0

q = 1

jump=0

jump=0

Page 78: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

状态机仿真波形

if (jump) thenss = s1;end if;

if (jump) thenss = s0;end if;

Page 79: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

State Machine (2)SUBDESIGN stepper( reset, ccw, cw, clk : input; phase[3..0] : output;)variable ss : MACHINE OF BITS (temp[3..0]) WITH STATES ( s0 = B”0001”, s1 = B”0010”, s2 = B”0100”, s3 = B”1000”);beginss.clk = clk;if (reset) thenss = s2;end if;phase[] = temp[];

TABLE ss, ccw, cw => ss; s0, 1, x => s3; s0, x, 1 => s1; s1, 1, x => s0; s1, x, 1 => s2; s2, 1, x => s1; s2, x, 1 => s3; s3, 1, x => s2; s3, x, 1 => s0;END TABLE;end;

Note : No need to declare what is TEMPIt is automatic declare as DFF

Page 80: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

仿真波形

User can control the State Bit

Page 81: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

State Machine without Recover StateSUBDESIGN recover( clk, go : input; ok : output;)variable sequence : MACHINE OF BITS (q[2..0]) with STATES ( idle, one, two, three, four, illegal1, illegal2, illegal3);beginsequence.clk = clk;case sequence iswhen idle => if (go) then sequence = one; end if;when one => sequence = two;when two => sequence = three;when three => sequence = four;end case;ok = (sequence == four);end;

State Machine stuck at FOUR

Page 82: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Better have Recover within State Machine

SUBDESIGN recover( clk, go : input; ok : output;)variable sequence : MACHINE OF BITS (q[2..0]) with STATES ( idle, one, two, three, four, illegal1, illegal2, illegal3);beginsequence.clk = clk;case sequence iswhen idle => if (go) then sequence = one; end if;when one => sequence = two;when two => sequence = three;when three => sequence = four;when OTHERS => sequence = idle;end case;ok = (sequence == four);end;

Three bits have Eight State

Only Five State is interesting,but better have this RECOVER options

Page 83: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

层次化的设计方法 --- 模块的调用

VARIABLE counter : 4count; decoder : 16dmux;

BEGIN counter.clk = clk; counter.dnup = GND; decoder.(d,c,b,a) = counter.(qd,qc,qb,qa); out[15..0] = decoder.q[15..0];END;

INCLUDE "4count";

INCLUDE "16dmux";

SUBDESIGN macro1

(

clk : INPUT;

out[15..0] : OUTPUT;

)

Page 84: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

LPM 模块的调用INCLUDE "lpm_add_sub.inc";

SUBDESIGN lpm_add1

(

a[8..1], b[8..1] : INPUT;

c[8..1] : OUTPUT;

carry_out : OUTPUT;

)

BEGIN

% Megafunction instance with positional port association %

(c[], carry_out, ) = lpm_add_sub(GND, a[], b[], GND,,,)

WITH (LPM_WIDTH=8,

LPM_REPRESENTATION="unsigned");

END;

Page 85: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

AHDL with Graphic

• Use the File menu to create Symbol for the AHDL design

• The symbol can be used for graphic entry

生成用户库

Page 86: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

Hierarchical Design

• Break design into modules• Enter and debug each module separately• Create Default Symbols or Include Files

for each module• Use these modules in the top-level design

file• Assign each module with individual logic

options, if necessary

Page 87: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

AHDL 帮助

Page 88: 第二章 CPLD/FPGA 使用方法 AHDL 语言 AHDL 实验设计 可编程逻辑器件的选择 CPLD, FPGA or ASIC? – 容量 宏单元数,逻辑单元数 寄存器数,门数 存储器大小

AHDL 上机实验• 设计一个秒表,并验证设计

– 设计内容• 用于体育运动计时的秒表

– 系统描述• 输入: 一个按键• 输出: 60 秒数字显示,带分钟,最长可计 9 分 59 秒• 功能:开始计时 / 停止计时 / 回零• 具体请参考实验二讲义

– 验证方案• 用 FPGA 实验电路板验证• 确认输入的实现方式• 输出的表现形式