52
1 VHDL 硬硬硬硬硬硬硬硬硬硬 硬硬 IC 硬硬硬硬硬硬

VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

  • Upload
    makoto

  • View
    191

  • Download
    0

Embed Size (px)

DESCRIPTION

VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例. 讲授内容. 数字 IC 设计中的前端设计内容 数字 IC 前端设计实例: UART 文档阶段 编码阶段 验证阶段. 数字 IC 设计流程. ……… SPEC …………. idea. initial. Verification. X=A and B Y=C nor D. A. X. B. Z. frontend. C. Y. D. Vdd. X. Vss. backend. V. B. A. A. X. VSS. B. - PowerPoint PPT Presentation

Citation preview

Page 1: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

1

VHDL 硬件描述语言及其应用-数字 IC 前端设计实例

Page 2: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

2

讲授内容 数字 IC 设计中的前端设计内容 数字 IC 前端设计实例: UART

文档阶段编码阶段验证阶段

Page 3: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

3

数字 IC 设计流程

用户需求

模块化 RTL代码

SPEC 验证

布局布线

时序分析

综合 门级仿真

物理设计

产品

前期设计 前端设计 后端设计 物理设计

Page 4: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

4

initial

frontend

backend

physical

X=A and BY=C nor D

A

B

A

B

XVVss

VssVdd

A

B

C

D

X

Y

Z

X

Vdd

VSS

Verification

………SPEC

…………

idea

tape out

Page 5: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

5

数字 IC 前端设计的层次 前端设计可分 3 个阶段:

1. 文档阶段: SPEC - > 设计文档2. 编码阶段:设计文档- >HDL 代码3. 验证阶段: SPEC - > 验证平台- > 大量的

验证

Page 6: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

6

讲授内容 数字 IC 设计中的前端设计内容 数字集成电路前端设计实例: UART

文档阶段编码阶段验证阶段

Page 7: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

7

DEBUG

DMA

MC

Bridge

FLASH

Bridge

3rd IP Timer Watchdog

PCI BUS

Harvard BUS MMU CPU Cache

Bridge

P ROM SDRAM

USB

AHB

APB

VCI

3rd IP

UART Appl. IP

JTAG DSP

Interrupt

Controller GPIO

实例来源:某 SoC 平台

Page 8: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

8

数字集成电路前端设计实例: UART

UART

UART

APB总线 irq UART 预期操作环境

Page 9: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

9

数字集成电路前端设计实例: UART 实例:通用异步收发器 UART

APB 外围总线的从设备 硬件流控制模式 : CTSN/RTSN 握手协议 采用的数据格式是 8 个数据位, 1 个可选的奇偶校验

位以及 1 个停止位

UART 数据格式

Page 10: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

10

文档阶段

1. SPEC - > 设计说明2. 定义接口:表格形式- > 接口一致性3. 子模块划分4. 子模块设计文档:

设计描述:子模块设计指导- > 设计文档 实现方法说明:流程图、状态图、时序图 寄存器描述

Page 11: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

11

1.SPEC 模块功能:

数据接收功能 数据发送功能 波特率生成器 APB 总线接口 数据流模式控制 ……

预期环境: APB 总线 其他 UART ……

Page 12: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

12

1.SPEC UART 数据发送功能描述

当 UART 发送器被使能可进行发送操作。其操作为将待发送 8 位数据转换成一个串行数据,按位时钟输出到发送器的串行输出端口上。在停止位发送完成后,如果没有新的数据传送到发送保持寄存器中,则发送器串行数据输出端保持高电平。数据发送完成置发送移位寄存器空标识位为 1 。

当有新数据传送到空的发送保持寄存器中时,发送重新开始,发送移位寄存器空标识位被清 0 。假如发送器被禁止,则它将继续工作直到当前数据被完全发送完成。此时发送保持寄存器不能够重新装载数据。

如果采用流控制方式, CTSN 输入必须保持低电平,这样数据才能被发送。如果在发送过程中,被设置成高,移位寄存器中的数据被发送,完成后发送端保持不变直到 CTSN 被重新设置成 0 。

Page 13: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

13

2. 定义接口 APB 接口:

PSEL : 输入 -- slave select PENABLE : 输入 -- strobe (选通脉冲) PADDR ( 7 downto 0 ):输入 -- address bus (byte) PWRITE : 输入 --write PWDATA ( 31 downto 0 ):输入 -- write data bus PRDATA ( 31 downto 0 ) :输出 -- read data bus

UART 接口: RXD : 输入 TXD : 输出 CTSN : 输入 RTSN : 输出

其他接口: IRQ : 输出

Page 14: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

14

3. 子模块划分 按功能划分 按层次划分

Bau d - r a teg en er a to r

S er ia l p o r tC o n tr o lle r

R ec e iv er s h if tr eg is te r

T r an s m itte r s h if tr eg is te r

R ec e iv er h o lld in gr eg is te r

T r an s m it h o ld in gr eg is te r

8 * b itc lk C T S N

R T S N

T X DR X D

I n ter n a l I /O Bu s

Page 15: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

15

4. 子模块设计文档:设计描述例:数据发送子模块功能设计描述 输入信号:

发送时钟( txtick ) :由波特率发生部件产生的基准时钟 *8 得到的位时钟,高电平有效

发送器使能( TE ):高电平有效 发送器中断使能( TI ):高电平有效 奇偶校验选择( PS ):“ 0” 表示偶校验,“ 1” 表示奇校验 奇偶校验使能( PE ):高电平有效 流控制使能( FL ):高电平有效。 复位信号( rst ):高电平有效

输出信号: 发送移位寄存器空( TS ):说明发送移位寄存器中的数据已经发送

完毕 发送保持寄存器空( TH ):说明先前的数据已经发送完毕,目前没

有新的数据待发送。 数据发送输出端( TXD ) 中断输出信号( IRQ )

Page 16: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

16

4. 子模块设计文档:设计描述 数据发送: UART 发送器的使能位( TE )控制,高电平有效。

数据由发送保持寄存器( thold )传送到发送移位寄存器( tshift )中,并且将其转换成一个串行队列,输出到发送器的串行输出端口 TXD 上。它将自动在 8 位有效数据前添加开始位,并在数据后添加一位可选的奇偶校验位和一位停止位。在停止位发送完成后,如果没有新的数据传送到发送保持寄存器中,则发送器串行数据输出端保持高电平,并且设置发送移位寄存器空标识位( TSRE )为 1 。

当有新数据传送到发送保持寄存器中时,判断发送保持寄存器空标识位( THRE )是否为 1 ,如果为 1 且 TI = 1 ,则发出 irq 中断;如果 TSRE = 0 ,则发送开始, TSRE 被清除。假如发送器被禁止,则它将继续工作直到当前数据被完全发送完成。此时发送保持寄存器不能够重新装载数据。

流控制方式: CTSN 输入必须保持低电平,这样数据才能被发送。如果在发送过程中, CTSN 被设置成高,移位寄存器 tshift 中的数据被发送,完成后发送端保持高电平不变,直到 CTSN 被重新设置成 0 。

Page 17: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

17

4. 子模块设计文档:模块实现方法

数字 IC =数据通路+控制逻辑数据通路:寄存器提取;存储器?控制逻辑:

有限状态机:状态图,状态表…… 硬连逻辑:流程图,时序图……

Page 18: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

18

例:发送控制状态机

I D L E

D AT A

P AR I T Y

ST O P B IT

·¢ ËÍ Êý ¾Ýλ

·¢ ËÍ ÆæżУÑéλ

·¢ ËÍ Í£ Ö¹ λ

ÎÞ ÆæżУÑéλ·¢ ËÍ Í£ Ö¹ λ

·¢ ËÍ Íê ³É

Page 19: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

19

当前态 次态 转移条件 操作 输出IDLE IDLE rst=1 寄存器复位

TXD

=tshift(0)

DATA txen , txtick =1 且thempty , ctsn=0

thold - >tshift

DATA IDLE rst=1 寄存器复位DATA txtick=1 求校验位; tshift 移

位PARITY tshift 数据移空;

txtick=1 且 paren=1

求校验位; tshift 移位

tshift(0)=tpar

STOPBIT tshift 数据移空; txtick=1 且 paren=0

tshift 移位tshift(0)=1

PARITY IDLE rst=1 寄存器复位STOPBIT txtick=1 tshift 移位

STOPBIT IDLE rst=1

txtick=1

寄存器复位tshift 移位

Page 20: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

20

4. 子模块设计文档:寄存器描述 寄存器的功能:保持历史值

数据通路:寄存器,计数器,移位器控制输出信号的行为:命令、控制寄存器如实反映当前电路工作状态:状态寄存器

方法:保存采样信号值- > 历史值和当前值比较必要中间值:例如有限状态机的状态、跨周期

信号等模块输出信号寄存器输出

Page 21: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

21

控制寄存器 该寄存器用来控制 UART 的操作第 0 位:接收器使能( RE ),高电平有效。第 1 位:发送器使能( TE ),高电平有效。第 2 位:接收器中断使能( RI ),高电平有效。第 3 位:发送器中断使能( TI ),高电平有效。第 4 位:奇偶校验选择( PS ),“ 0” 表示偶校验,

“ 1” 表示奇校验。第 5 位:奇偶校验使能( PE ),高电平有效。第 6 位:流控制使能( FL ),高电平有效。第 7 位:回送使能( LB ),高电平有效。第 8 位:外部时钟使能( EC ),高电平有效,此时 PIO

[3] 用作时钟。

Page 22: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

22

UART 状态寄存器 用来反映 UART 的状态第 0 位:接收数据就绪( DR ),说明在接收保持寄存器中,

数据已经准备就绪。第 1 位:发送移位寄存器空( TS ),说明发送移位寄存器

中的数据已经发送完毕。第 2 位:发送保持寄存器空( TH ),说明先前的数据已经

发送完毕,目前没有新的数据待发送。第 3 位:接收到暂停( BR ),说明在数据接收过程接收到暂停信息。

第 4 位:溢出( OV ),说明由于超出限度一个或多个字符而丢失。

第 5 位:奇偶错( PE ),说明检测到奇偶错。第 6 位:格式错( FE ),说明检测到格式错。

Page 23: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

23

编码阶段 编程前准备 设计思路:设计文档- >RTL 代码? 编码风格 编码实例 文件层次化管理

Page 24: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

24

编程前准备遵守工程指定命名及格式规则

版本、设计日期、编者信息以及注释的使用

标识符对应具体功能含义:如 thempty( transmit hold empty )

标识符表明信号 / 变量属性:如 cts_n,cts_,ctsn

Page 25: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

25

设计思路

模块设计:考虑电路结构 串行:对输入的处理分步骤进行( process ) 并行:对到达的信号同时处理(多个等价 proces

s ) 流水线:多步骤、每个步骤同时处理

设计考虑: 在内部模块之间的输入输出可采用组合逻辑,不同芯片之间必须采用寄存器输入输出(否则增加后端实现难度)

尽量将组合电路和时序电路分开

Page 26: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

26

编码风格 自顶向下规划

并发:并行等价进程规划顺序:串行进程规划

自底向上编码独立功能顺序编码:顺序语句- >process并发进程:协调信号通信关系

Page 27: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

27

自顶向下:并行等价进程规划baudop : process(rst, r_p, uarti_p ) --baudrate/bitclock process-- baud rate generate -- rx/tx clock -- reset operationend process;apbop : process(rst, r_p, apbi) --apb operation-- read/write registers ( APB slave Interface )-- reset operation-- update registers-- drive outputsend process;txrxop : process(rst, r_p, apbi) --transmit/receiver operation-- filter rx data-- transmitter operation-- receiver operation-- reset operation-- update registers-- drive outputsend process;

Page 28: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

28

自顶向下:串行进程的规划 在最小信号间隔( clk )内更新信号及输出uartop : process(rst, r, apbi, uarti ) --serial process

variable v : uartregs;-- baud rate generate-- read/write registers ( APB slave Interface )-- rx/tx clock -- filter rx data-- transmitter operation-- receiver operation-- reset operation

-- update registersrin <= v;

-- drive outputs

end process;

Page 29: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

29

编码实例:有限状态机实现

发送控制状态机

I D L E

D AT A

P AR I T Y

ST O P B IT

·¢ ËÍ Êý ¾Ýλ

·¢ ËÍ ÆæżУÑéλ

·¢ ËÍ Í£ Ö¹ λ

ÎÞ ÆæżУÑéλ·¢ ËÍ Í£ Ö¹ λ

·¢ ËÍ Íê ³É

Page 30: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

30

case r.txstate is

when idle => -- idle state if (r.txtick = '1') then v.tsempty := '1'; end if; if ((r.txen and (not r.thempty) and r.txtick) and

(not ctsn)) = '1' then

v.tshift := "10" & r.thold & '0'; v.txstate := data;

v.tpar := r.parsel; v.irq := r.tirqen; v.thempty := '1'; v.tsempty := '0';

v.txclk := "00" & r.tick; v.txtick := '0'; end if;

数据发送代码段

编码实例:有限状态机实现

Page 31: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

31

when data => -- transmit data frame

if r.txtick = '1' thenv.tpar := r.tpar xor r.tshift(1);v.tshift := '1' & r.tshift(10 downto 1);

if r.tshift(10 downto 1) = "1111111110" then

if r.paren = '1' then v.tshift(0) := r.tpar; v.txstate := parity; else v.tshift(0) := '1'; v.txstate := stopbit; end if; end if;

end if;数据发送代码段(续)

编码实例:有限状态机实现

Page 32: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

32

when parity => -- transmit parity bit

if r.txtick = '1' thenv.tshift := '1' & r.tshift(10 downto 1); v.txstate := stopbit;

end if;

when stopbit => -- transmit stop bit if r.txtick = '1' then

v.tshift := '1' & r.tshift(10 downto 1); v.txstate := idle;

end if;

end case; 数据发送代码段(续)

编码实例:有限状态机实现

Page 33: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

33

scaler := r.scaler - 1; -- baud rate generate(tick)

if (r.rxen or r.txen) = '1' then

v.scaler := scaler;

v.tick := scaler(11) and not r.scaler(11);

if v.tick = '1' then v.scaler := r.brate; end if;

end if;

txclk := r.txclk + 1; -- tx clk generate ( 8*tick )

if r.tick = '1' then

v.txclk := txclk;

v.txtick := r.txclk(2) and not txclk(2);

end if;发送定标代码段:位时钟

编码实例:控制信号

Page 34: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

34

编码实例:记录的使用- > 信号锁存type uartregs is record rxen : std_logic; -- receiver enabled txen : std_logic; -- transmitter enabled rirqen : std_logic; -- receiver irq enable tirqen : std_logic; -- transmitter irq enable parsel : std_logic; -- parity select paren : std_logic;-- parity select flow : std_logic; -- flow control enable dready : std_logic; -- data ready rsempty : std_logic; -- receiver shift register empty (internal) tsempty : std_logic; -- transmitter shift register empty thempty : std_logic; -- transmitter hold register empty break : std_logic; -- break detected

rhold : std_logic_vector(7 downto 0); rshift : std_logic_vector(7 downto 0); tshift : std_logic_vector(10 downto 0);

Page 35: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

35

编码实例:记录的使用- > 信号锁存 thold : std_logic_vector(7 downto 0); irq : std_logic; -- tx/rx interrupt (internal) tpar : std_logic; -- tx data parity (internal) txstate : txfsmtype; txclk : std_logic_vector(2 downto 0); -- tx clock divider txtick : std_logic; -- tx clock (internal)

rxstate : rxfsmtype; rxclk : std_logic_vector(2 downto 0); -- rx clock divider rxdb : std_logic_vector(1 downto 0); -- rx delay dpar : std_logic; -- rx data parity (internal) rxtick : std_logic; -- rx clock (internal) tick : std_logic; -- rx clock (internal) scaler : std_logic_vector(11 downto 0); brate : std_logic_vector(11 downto 0); rxf : std_logic_vector(7 downto 0); -- rx data filtering buffer

end record;

Page 36: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

36

编码实例:时钟同步architecture rtl of uart is

type rxfsmtype is (idle, startbit, data, parity, stopbit);type txfsmtype is (idle, data, parity, stopbit);type uartregs is record……

signal r, rin : uartregs;begin

uartop : process(rst, r, apbi, uarti ) --serial processvariable v : uartregs;……rin <= v;end process;

regs : process(clk) -- signal registered by base clk begin if rising_edge(clk) then r <= rin; end if; end process;

end architecture;

Page 37: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

37

文件层次化管理 设计的层次化:

顶层- >底层:结构描述- > 行为描述不同用途文件:命名规则区分,如 _top,_pack

age等 目录的层次化:

工作目录不同目的文件- > 不同目录,如 src , sim ,

doc……

Page 38: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

38

文件层次化管理 testbench

Source top Testbenchgenerate

testcaseharnesspackagesource

Page 39: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

39

验证阶段

1. 验证环境和测试方案- >testbench

2. 根据设计文档确定验证点( testcase )-> 验证文档:描述每个验证点的目的、具体实现步骤

3. 验证文档- >testcase 提取4. 覆盖率分析- > 不理想- >回到第 2 阶段5. 记录验证结果- >.log 文件

Page 40: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

40

验证环境架构及建立方式 基于软件模拟的层次式架构

testcase 层:由过程( procedure )调用组成行为模型以及 BFM :不可综合的代码,描述系统环境中可能的其他电路模型或行为

testbench :验证配置 testbench组织: configurations 装配 testcase ,行为模型, BFM 以及待测模块 DU

T

Page 41: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

41

UART 验证环境架构

testcase1 testcase2 testcasen

APB_wr APB_rd UART_tx UART_rx

DUT-UART

……….

Page 42: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

42

确定验证点 testcase 提取: procedures

激励:从单一功能到复杂功能,辅以覆盖率工具

响应:针对具体 testcase 描述检查相关响应

Page 43: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

43

例:数据发送进程 testcase 生成testcase1: 验证 UART是否能够正确发送数据

a. 保持发送时钟基准时钟 *8 得到的位时钟 txtick ;b.调用 APB_write 过程向 UART 控制寄存器写入“ 000101010” ;c.调用 APB_write 过程向 UART 发送保持寄存器 thold写入“ 101

01010” ;d.调用 TXD_verify 过程,并检测是否正确接收“ 10101010”

testcase2: 验证 UART能否检验出奇偶校验错,并据此发出中断请求a. 保持发送时钟基准时钟 *8 得到的位时钟 txtick ;b.调用 APB_write 过程向 UART 控制寄存器写入“ 000101010” ;c. 调用 APB_write 过程向 UART 发送保持寄存器 thold写入“ 101

01010” ;d.调用 TXD_verify 过程,并检测是否正确接收“ 10101010” ,偶

校验无误,并接收到 IRQ 信号;e.调用 APB_write 过程向 UART 控制寄存器写入“ 000111010” ;f. 调用 APB_write 过程向 UART 发送保持寄存器 thold写入“ 101

01010” ;g.调用 TXD_verify 过程,并检测是否正确接收“ 10101010” ,奇

校验无误,并接收到 IRQ 信号;testcase3 :溢出错误检查testcase4 :发送过程清 TEtestcase5 :流控制检查

testcase 提取

Page 44: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

44

testcase 实例 - 接收过程--read RXD procedure for testbenchprocedure rxc(signal rxd : in std_logic;

d: out std_logic_vector) is variable rxdata : std_logic_vector(7 downto 0); begin wait until rxd = '0'; wait for TXPERIOD/2; for i in 0 to 7 loop

wait for TXPERIOD; rxdata(i):= rxd;

end loop; wait for TXPERIOD ; d := rxdata; end; --end rxc

testcase - >procedure

Page 45: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

45

testcase 实例 - 发送过程 ( 续 )

--transmit td(data) to txd procedure for testbench procedure txc(signal txd : out std_logic;

td : integer) is variable txdata : std_logic_vector(10 downto 0); begin txdata := "11" & std_logic_vector(conv_unsigned(td, 8)) & '0'; for i in 0 to 10 loop

wait for TXPERIOD ; txd <= txdata(i); end loop;

end; --end txc

Page 46: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

46

testcase 实例 -APB写数据过程( 续 )--read RXD procedure for testbench

procedure apbwr(signal pclk : in bit; signal paddr: out std_logic_vector ; signal pwdata: out std_logic_vector ; signal pwrite: out std_logic; signal psel: out std_logic; signal penable: out std_logic;tadd: in std_logic_vector ; twdata: out std_logic_vector ) is

begin wait on pclk; if pclk’event and pclk=‘0’ then paddr <= taddr; pwdata <= twdata; pwrite <= ‘1’;psel <= ‘1’; penable

<=‘0’; end if; wait on pclk; if pclk’event and pclk=‘0’ then penable<=‘1’; end if; wait on pclk; if pclk’event and pclk=‘0’ then penable<=‘0’; end if; end; --end apbwr

Page 47: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

47

architecture testbench_UART of testbench is UARTcheck:processvariable data_tmp:std_logic_vecter(7 downto 0);begin rst<=0; wait for 20 ns; rst<=1;wait for 100 ns; rst<=0;--testcase 1apbwr(pclk,paddr,pwdata,pwrite,psel,penable,”0000010

0”,”10101010”);apbwr(pclk,paddr,pwdata,pwrite,psel,penable,”0000100

0”,” 000101010”);rxc(txd,data_tmp);assert data_tmp =“10101010” report “UART transmit testc

ase1 error!!” severity error; --testcase 2 …………end process; --end UARTcheckend; --end testbench_UART 实例 -UART testcase1

Page 48: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

48

testbench

1 )将上述 procedure 在 testbench 的 process 中排列组合,分别调度就组成一个面向UART 的 黑盒子 testbench generater

2 )把 UART 和 testbench generater 在顶层模块配置指定- >testbench ,则可进行模拟验证

Page 49: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

49

testbench

复用:将所有过程集中在 package 中,供所有设计者使用

在 testbench 中配置

rea

d_

task

wri

te_

task

D UV

c lkg en

tes tc as em o d u le

p ac k ag es en d

tes th ar n es s

ͼ 6-4 ¿É¸´Ó ÃtestbenchµÄ½øÒ »²½¸Ä½ø

Page 50: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

50

覆盖率分析 代码覆盖率: EDA 工具 + testcase

验证施加的激励使得 RTL 代码都被覆盖了,验证仍然可能是不完整的

如果 RTL 代码根本就没有达到完整的覆盖,则验证肯定是不完整的。

功能覆盖率:边缘功能点( corner case )多功能交叉、组合随机测试

Page 51: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

51

覆盖率分析period1 period2

BU

G

RA

TE

Time ( effort ) ready to ship ship ?

Bug rate with code coverage

Page 52: VHDL 硬件描述语言及其应用 - 数字 IC 前端设计实例

52

小结 数字 IC 前端设计

用心良苦的文档加快编码编码遵守规则,忠实再现验证阶段:关键为 testcase 提取