195
电电电电电电 1 电电电电电电电电电 电电电电6

可靠设计与高速设计 学时分配:6

  • Upload
    nau

  • View
    143

  • Download
    0

Embed Size (px)

DESCRIPTION

可靠设计与高速设计 学时分配:6. 进度. 1. 绪论 。 2. 设计流程 。 3. 模块化硬件与进程模型 。 4. 信号传输模型 。 5. 核心语法与基础电路设计 。 6. 状态机设计 。 8. 可编程逻辑器件。 7. 可靠设计与高速设计 。 9. 数字信号处理的 fpga 实现 。 10. 数字系统的 RTL 设计 。. 声明. 本部分内容是数字电子系统的芯片级设计中要遇到的特殊问题,虽不是考试重点,但却是实际设计中的关键注意事项。 - PowerPoint PPT Presentation

Citation preview

Page 1: 可靠设计与高速设计 学时分配:6

电子科技大学 1

• 可靠设计与高速设计• 学时分配: 6

Page 2: 可靠设计与高速设计 学时分配:6

电子科技大学 2

进度• 1. 绪论 。• 2. 设计流程 。• 3. 模块化硬件与进程模型 。• 4. 信号传输模型 。• 5. 核心语法与基础电路设计 。• 6. 状态机设计 。• 8. 可编程逻辑器件。• 7. 可靠设计与高速设计 。• 9. 数字信号处理的 fpga 实现。• 10. 数字系统的 RTL 设计。

Page 3: 可靠设计与高速设计 学时分配:6

声明• 本部分内容是数字电子系统的芯片级设计中要

遇到的特殊问题,虽不是考试重点,但却是实际设计中的关键注意事项。

• 精选自一部分出版书籍、网络资料以及个人的一些设计经验,仅仅是众多设计原则和设计技巧中的沧海一粟,并且错误在所难免。

• 艺无止境,讲授本部分的目的仅仅是带领入门,修行仍靠自身。要熟练使用这些技巧,并且有进一步的提高,必须经过大量的项目实践去积累。

Page 4: 可靠设计与高速设计 学时分配:6

电子科技大学 4

OUTLINE

• 正确设计• 同步设计• 异步设计• 高速设计的其他手段

增加设计稳定性和工作速率的方法掺杂在这几部分内容中,不根据本部分的题目做硬性的划分。

Page 5: 可靠设计与高速设计 学时分配:6

电子科技大学 5

OUTLINE

• 正确设计• 同步设计• 异步设计• 高速设计的其他手段

•VHDL 结 构 体 描 述风格•rtl 风格注意事项•敏感信号的问题•条件判断语句的注意事项 •多驱动与总线复用 •毛刺的消除

Page 6: 可靠设计与高速设计 学时分配:6

电子科技大学 6

OUTLINE

• 正确设计• 同步设计• 异步设计• 高速设计的其他手段

•VHDL 结 构 体 描 述风格•rtl 风格注意事项•敏感信号的问题•条件判断语句的注意事项 •多驱动与总线复用 •毛刺的消除

Page 7: 可靠设计与高速设计 学时分配:6

电子科技大学 7

VHDL 结构体描述风格• 行为描述风格 可进行系统仿真,少数可用于综合。• RTL 描述风格 寄存器传输级描述,也能为数据流描述

风格。一般可被综合器综合。• 结构描述风格 多用于顶层的模块连接。

Page 8: 可靠设计与高速设计 学时分配:6

电子科技大学 8

行为描述风格• 这种风格的描述往往以以下语句为主要特征:

– 使用延时语句,包括惯性延时和传输延时;– 在多驱动的处理上采取判决函数;– 使用 Generic 语句对时序参数建模;– 使用其它具备行为级特性的语句如 wait for 等语句。

• 这部分属于高级仿真内容,在此不作讲述。

Page 9: 可靠设计与高速设计 学时分配:6

电子科技大学 9

结构体描述风格• 特征语句:

– PORT MAP;– GENERIC MAP。

• 不作详细讲述。

Page 10: 可靠设计与高速设计 学时分配:6

电子科技大学 10

RTL 描述风格• 面向可综合的设计,处于抽象设计与门

级设计之间的层次。• 其对应的硬件层次为寄存器云图

Page 11: 可靠设计与高速设计 学时分配:6

电子科技大学 11

OUTLINE

• 正确设计• 同步设计• 异步设计• 高速设计的其他手段

•VHDL 结 构 体 描 述风格•rtl 风格注意事项•敏感信号的问题•条件判断语句的注意事项 •多驱动与总线复用•毛刺的消除

Page 12: 可靠设计与高速设计 学时分配:6

电子科技大学 12

RTL 描述风格注意事项

1. “X” 状态的传递2. 时钟沿描述限制3. 关联性强的信号应该放在一个进程中

Page 13: 可靠设计与高速设计 学时分配:6

电子科技大学 13

1. “X” 状态的传递 (1)

• 不确定态“ X” 在前仿真中经常会出现。当然综合以后的时序仿真中一般是不会出现的。

• 在 RTL 级的描述中,要做好“ X” 状态的处理,以使得前仿真和后仿真的结果一致。

Page 14: 可靠设计与高速设计 学时分配:6

电子科技大学 14

1. “X” 状态的传递 (2)

• 例子:• if( sel = ‘1’ ) then • y <= ‘0’;• else • y <= ‘1`;• end if;

•从门级的观点看,该分支隐含的条件为: If ( sel = ‘0’ )。•因此在后仿真时没问题,因为 sel 一般不会出现‘ X’。•但是前仿真时,当 sel = ‘X’ 时,会得出 y <= ‘1’的结果,违反了电路原理。

Page 15: 可靠设计与高速设计 学时分配:6

电子科技大学 15

1. “X” 状态的传递 (3)

• 例子:• if( sel = ‘1’ ) then • y <= ‘0’;• elsif( sel = ‘0’ ) then• y <= ‘1’;• else • y <= ‘X`;• end if;

•加上‘ X’ 状态的处理。

Page 16: 可靠设计与高速设计 学时分配:6

电子科技大学 16

1. “X” 状态的传递 (4)

• 实际上,第一种描述方式在设计中也是很经常见的,但是这个时候要尽力避免不确定态的出现:– 电路初始化要完善,特别是时序电路中要有

可靠的复位描述;– 尽量少用组合回环或反馈;– 测试矢量要完善。

Page 17: 可靠设计与高速设计 学时分配:6

电子科技大学 17

1. “X” 状态的传递 (5)

• 时序电路的复位例子 : 时钟处理模块 (2 分频 )• Process( clk )• Begin

• If( clk’event and clk = ‘1’ ) then • clk2d <= not din;• End if;• End process;

Page 18: 可靠设计与高速设计 学时分配:6

电子科技大学 18

1. “X” 状态的传递 (5)

• 时序电路的复位例子 : 时钟处理模块 (2 分频 )• Process( clk, reset_n )• Begin • if( reset_n = ‘0’ ) then clk2d <= ‘0’;• elsIf( clk’event and clk = ‘1’ ) then • clk2d <= not din;• End if;• End process;

•注:时序电路的复位是强烈推荐使用的,但是在某些情况下,复位电路会稍微降低系统的工作速率。是否取消复位电路,要看具体的目标芯片和系统的速率需求。

Page 19: 可靠设计与高速设计 学时分配:6

电子科技大学 19

1. “X” 状态的传递 (6)

• 组合回环的避免•组合电

•这种组合回环,用 VHDL 的逻辑运算语句来描述,会无法通过综合;用 port map 语句来描述可通过综合。•RTL 级别描述的组合回环很少使用 ( 并且不推荐使用 ) ,一般仅用在一些特殊场合中 (比如多时钟切换中的毛刺避免等 ) ,但是这在仿真时 dout 往往会出现不确定态,这是必须要注意的。

dout

Page 20: 可靠设计与高速设计 学时分配:6

电子科技大学 20

2. 时钟沿描述限制 (1)

• 一个进程中,只能有一个时钟沿判断语句!• Process(clk1, clk2)• Begin• if( clk1’event and clk1 = ‘1’) then • …• end if;• if( clk2’event and clk2 = ‘1’ ) then• end if;• End process;

Page 21: 可靠设计与高速设计 学时分配:6

电子科技大学 21

2. 时钟沿描述限制 (2)

• 一个进程中,只能有一个时钟沿判断语句!• Process(clk)• Begin• if( clk’event and clk = ‘1’) then • …• end if;• if( clk’event and clk = ‘1’ ) then• end if;• End process;

Page 22: 可靠设计与高速设计 学时分配:6

电子科技大学 22

2. 时钟沿描述限制 (3)

• 所以,不能在一个进程中判断两次或以上的时钟沿,甚至是判断同一个时钟的同一个沿也不行。

Page 23: 可靠设计与高速设计 学时分配:6

电子科技大学 23

OUTLINE

• 正确设计• 同步设计• 异步设计• 高速设计的其他手段

•VHDL 结 构 体 描 述风格•rtl 风格注意事项•敏感信号的问题•条件判断语句的注意事项 •多驱动与总线复用 •毛刺的消除

Page 24: 可靠设计与高速设计 学时分配:6

电子科技大学 24

敏感信号的问题 (1)

1. 敏感信号表只对前仿真引擎起作用,对综合器不起作用,而综合后生成的仿真模型是保证不遗漏敏感信号的,因此设计者不小心造成的敏感信号表的遗漏往往会导致前仿真和后仿真的不一致。

Page 25: 可靠设计与高速设计 学时分配:6

电子科技大学 25

敏感信号的问题 (2)

2. 引起硬件动作的被读信号应该都放在敏感信号表中,纯组合电路描述中的所有被读的信号都必须放在敏感信号表中,这些信号包括:

1) 组合电路描述中,所有被读取的信号;2) 时序电路中的时钟信号,异步控制信号。

3. 敏感信号遗漏的后果可参考 <sry4_ 信号传输模型 .ppt>的 p.22 – p.27。

Page 26: 可靠设计与高速设计 学时分配:6

电子科技大学 26

敏感信号的问题 (3)

• 敏感信号表遗漏情况下,前仿真的波形看起来很像锁存,因此这种错误在某些资料中也称为“仿真锁存器”。

Page 27: 可靠设计与高速设计 学时分配:6

电子科技大学 27

OUTLINE

• 正确设计• 同步设计• 异步设计• 高速设计的其他手段

•VHDL 结 构 体 描 述风格•rtl 风格注意事项•敏感信号的问题•条件判断语句的注意事项 •多驱动与总线复用 •毛刺的消除

Page 28: 可靠设计与高速设计 学时分配:6

电子科技大学 28

条件判断语句的注意事项• 锁存的避免• 无关态的使用• 优先级问题

Page 29: 可靠设计与高速设计 学时分配:6

电子科技大学 29

锁存的避免• 冗余锁存器的其他例子,可参考 <sry5_ 核心语法与

基础电路设计 .ppt> 的条件判断语句部分。这里只做补充。

• 例子:设计一个状态机,一共有两个状态 s0, s1 。输入信号为一个比特的 din 。当 din = ‘1’ 时,状态机进行状态翻转;当 din = ‘0’ 时,状态保持为当前态。

• 描述方法 1 :可以将 din当成状态机时钟 clk 的使能;本方法在此不再讲述。

• 描述方法 2 :按照状态机描述的三进程模板进行描述,以下是状态寄存器和次态译码进程。译码输出进程省略。

Page 30: 可靠设计与高速设计 学时分配:6

电子科技大学 30

• 状态寄存器进程:• Process( clk, reset )• Begin • if( reset = ‘1’ )then• Pst <= s0;• elsif( clk’event and clk = ‘1’) then • pst <= Nst;• end if;• End process;

Page 31: 可靠设计与高速设计 学时分配:6

• 次态译码进程• Process( Pst, din )• Begin • case Pst is• when s0 =>• if( din = ‘1’ ) then • Nst <= s1;• else • Nst <= s0;• end if;• when s1 => ….• End process;

•在 din = ‘0’ 时,初学者往往认为状态机不翻转,则可不必再对 Nst赋值,因为此时 Nst和 Pst 的值一样,都为 s0 ,再赋值一次显得多余。

Page 32: 可靠设计与高速设计 学时分配:6

电子科技大学 32

• 事实上,这个“多余”的赋值非常致命,少了这一句,电路将出现惊人的复杂化,并且工作不正常。因为次态译码从纯组合电路变成了锁存电路。

• 思考:上一页中,初学者思路的漏洞在哪里?• 解答:在初始时刻,也就是在 reset 之后,如果 din = ‘0’ ,则 Nst没有获得明确的值。它只好“保持原来状态”。上述思路的漏洞在于没有考虑到初始时刻的情况,而是假定电路已经发生状态翻转之后再作分析。

Page 33: 可靠设计与高速设计 学时分配:6

电子科技大学 33

锁存的避免 -- 总结• 组合电路描述中,条件判断语句必须指

明所有条件分支情况下,被赋值信号的值。

• 分支不完整,意味着电路需要在某种电平状态下,让被赋值的信号“保持原值”,这只能使用锁存电路实现。

Page 34: 可靠设计与高速设计 学时分配:6

电子科技大学 34

无关态的使用• 代码段 1 :• Case sel is

• when “000” => dout <= dina;

• when “010” => dout <= dinb;

• when others => dout <= ‘0’;

• End case;

Page 35: 可靠设计与高速设计 学时分配:6

电子科技大学 35

无关态的使用• 代码段 2 :• Case sel is

• when “000” => dout <= dina;

• when “010” => dout <= dinb;

• when others => dout <= ‘ ’- ;

• End case;

Page 36: 可靠设计与高速设计 学时分配:6

电子科技大学 36

• 代码段 1 的综合结果:

MUX

doutdina

dinb

Sel(0)

Sel(1)

Sel(2)

Page 37: 可靠设计与高速设计 学时分配:6

电子科技大学 37

• 代码段 2 的综合结果:

MUXdina

dinbdout

•Sel(1)

Page 38: 可靠设计与高速设计 学时分配:6

电子科技大学 38

无关态的使用 -- 总结• 对比以上两段代码的综合结果,可以发

现,善于使用无关态‘ -’来填补分支,可以引导综合工具生成很优化的电路。

• 无关态‘ -’ 在本质上时起了冗余电路删简的作用。

Page 39: 可靠设计与高速设计 学时分配:6

电子科技大学 39

优先级问题

1. Case 语句无优先级, if 语句有优先级。2. Multiple if statement和 single if

statement 具有两种不同的优先级顺序。

Page 40: 可靠设计与高速设计 学时分配:6

电子科技大学 40

Single if

• Process( a )• Begin • if ( a(0) = ‘1’ ) then b <= “001”;• elsif( a(1) = ‘1’ ) then b <= “010”;• elsif( a(2) = ‘1’ ) then b <= “100”;• else b <= “000”;• end if;• End process;

Page 41: 可靠设计与高速设计 学时分配:6

电子科技大学 41

Multiple if

• Process( a )

• Begin

• b <= “000”;

• if( a (0) = ‘1 ‘ ) then b <= “001”; end if;

• if( a (1) = ‘1 ‘ ) then b <= “010”; end if;

• if( a (2) = ‘1 ‘ ) then b <= “100”; end if;

• End process;

Page 42: 可靠设计与高速设计 学时分配:6

电子科技大学 42

OUTLINE

• 正确设计• 同步设计• 异步设计• 高速设计的其他手段

•VHDL 结 构 体 描 述风格•rtl 风格注意事项•敏感信号的问题•条件判断语句的注意事项 •多驱动与总线复用•毛刺的消除

Page 43: 可靠设计与高速设计 学时分配:6

电子科技大学 43

多驱动与总线复用• 当多个信号源同时去驱动同一个负载,就会形成多驱动。可暂且简单称为输出碰撞。

• 没有处理好多驱动,不但会造成逻辑混乱,而且容易损坏器件。具体原理可参考 <sry4_ 信号传输模型 .ppt> 中关于高阻态的内容。

Page 44: 可靠设计与高速设计 学时分配:6

电子科技大学 44

多驱动与总线复用• 多驱动处理的要点:

– 行为级思维 硬件思维;– 总线复用;– 线与;– 双向端口中的高阻态;

Page 45: 可靠设计与高速设计 学时分配:6

电子科技大学 45

多驱动与总线复用• 多驱动处理的要点:

– 行为级思维 硬件思维;– 总线复用;– 线与;– 双向端口中的高阻态;

Page 46: 可靠设计与高速设计 学时分配:6

• 例子:任天堂游戏机的游戏卡 (省略去游戏进度存储模块 ) 内部的电路框图为:

Flash 存储器 存储接口控制

Addr(23:0)

csrdwr

Ad(15:0)

A(23:16)

Data(15:0)

Page 47: 可靠设计与高速设计 学时分配:6

电子科技大学 47

• 为了研究日本游戏技术,现在要求盗版该游戏卡,其中用 CPLD代替接口控制芯片。请写出CPLD 中,低 16位地址控制部分的代码。

• 读数据时低 16位地址的控制协议:当 cs = ‘0’时, Addr(15:0) 即初始化为 Ad(15:0) 的值。 Cs 上升后, Addr(15:0)即被锁住,不再受 Ad(15:0) 的影响;在 cs = ‘1’ 的期间,每一个 rd 上升沿均导致 Addr(15:0) 进行加一计数。

• 写数据时的控制也差不多,只需要将上面的 rd换成 wr即可。

Page 48: 可靠设计与高速设计 学时分配:6

电子科技大学 48

Addr(15:0)

cs

rd

读数据时的低 16位地址控制时序图

N N+1 N+2

•写数据的时序图基本上一样,只是 rd与 wr互换

wr

Page 49: 可靠设计与高速设计 学时分配:6

电子科技大学 49

• 代码实现方法 1 ,包括读控制进程和写控制进程:

• Rdproc: Process( cs, rd )• Begin • if( cs = ‘0’) then • Addr( 15 downto 0 ) <= Ad(15 downto 0);• elsif( rd’event and rd = ‘1’ ) then• Addr( 15 downto 0) <= Addr( 15 downto 0)

+ ‘1’;• end if;• End process;

Page 50: 可靠设计与高速设计 学时分配:6

电子科技大学 50

• Wrproc: Process( cs, wr )• Begin • if( cs = ‘0’) then • Addr( 15 downto 0 ) <= Ad(15 downto 0);• elsif( wr’event and wr = ‘1’ ) then• Addr( 15 downto 0) <= Addr( 15 downto 0)

+ ‘1’;• end if;• End process;

Page 51: 可靠设计与高速设计 学时分配:6

电子科技大学 51

• 以上代码的描述实际上“照搬”控制协议中的描述,并且符合人的“直觉思维”。从“软件”的角度来看,确实没有任何算法上的错误。

• 但是综合时,出现了多驱动的错误。• 原因:代码被综合成如下形式:

Rd 模块

Wr 模块

Addr(15:0)

Page 52: 可靠设计与高速设计 学时分配:6

电子科技大学 52

• 这是典型的“直觉”描述,没能生成正确的电路。

• 修正方法如下:

Page 53: 可靠设计与高速设计 学时分配:6

电子科技大学 53

• rwproc: Process( cs, wr, rd )• Begin • cclk <= wr and rd;• if( cs = ‘0’) then • Addr( 15 downto 0 ) <= Ad(15 downto 0);• elsif( cclk’event and cclk = ‘1’ ) then• Addr( 15 downto 0) <= Addr( 15 downto 0)

+ ‘1’;• end if;• End process;

Page 54: 可靠设计与高速设计 学时分配:6

软件思维硬件思维 的转变• 在电路描述时,必须摒弃软件思维方式,一切从硬件的角度去思考代码的描述。

• 在具体的项目实践中,必须先画好模块的接口时序图,然后画出或者在脑子里形成模块的内部原理框图,最后才是代码实现。

• 企图一开始就依靠“软件算法”思维进行代码实现,最后才分析时序和电路图,是非常不可取的。

• 硬件思维的形成,需要一定的硬件设计训练才能达到,熟练了之后才可能科学地在初始阶段完成模块划分和时序设计。

Page 55: 可靠设计与高速设计 学时分配:6

电子科技大学 55

多驱动与总线复用• 多驱动处理的要点:

– 行为级思维 硬件思维;– 总线复用;– 线与;– 双向端口中的高阻态;

Page 56: 可靠设计与高速设计 学时分配:6

电子科技大学 56

总线复用• 两个模块输出数据给同一个负载模块的

设计中,必须处理好总线复用。

数据源 a

数据源 b

负载sel

Page 57: 可靠设计与高速设计 学时分配:6

电子科技大学 57

• 加上 sel 的实质就是:

数据源 a

数据源 b

负载sel

douta

doutb

•dout

Page 58: 可靠设计与高速设计 学时分配:6

电子科技大学 58

• 或者

数据源 a

数据源 b

负载

douta

doutb

•dout

MUX

sel

Page 59: 可靠设计与高速设计 学时分配:6

电子科技大学 59

• 代码描述:• If ( sel = ‘1’ ) then

• dout <= douta;

• Else

• dout <= doutb

• End if;

•另外:尽量不要在芯片内部使用三态,某些 FPGA 不支持这种特性,在 ASIC 设计中也会带来一些测试上的问题。

Page 60: 可靠设计与高速设计 学时分配:6

电子科技大学 60

多驱动与总线复用• 多驱动处理的要点:

– 行为级思维 硬件思维;– 总线复用;– 线与;– 双向端口中的高阻态;

Page 61: 可靠设计与高速设计 学时分配:6

• CMOS工艺中只有漏极开路输出 (Open drain) 的电路才能实现线与;

• 对应于 TTL工艺,则为集电极开路 (Open) collector)。

• 有部分 FPGA 可以将引脚设置为 OD 门输出,这个时候可以实现正常的线与逻辑;但是有部分FPGA没有这种输出逻辑,这时候可以用高阻输出或者直接切换到输入模式来代替OD 模式,以实现安全的线与功能。当然这个时候要在芯片外部使用上下拉电阻来代替线与情况下的弱输出。

Page 62: 可靠设计与高速设计 学时分配:6

• 典型案例: I2C控制模块。

I2C 模块 S I2C 模块 M

•假设某时刻,模块 M需要检测到线上电平为高,才会放心地向该信号线输出有效串行数据,返回给模块 S(fpga)。

fpga 带 I2C 接口的asic

其他 I2C 模块 S

Page 63: 可靠设计与高速设计 学时分配:6

电子科技大学 63

多驱动与总线复用• 多驱动处理的要点:

– 行为级思维 硬件思维;– 总线复用;– 线与;– 双向端口中的高阻态;

Page 64: 可靠设计与高速设计 学时分配:6

电子科技大学 64

• 描述全双向端口,当 dir = ‘1’ 时,数据从 da 流向db; dir = ‘0’ 时,数据从 db 流向 da。

双向

dir

da db

Page 65: 可靠设计与高速设计 学时分配:6

电子科技大学 65

双向端口代码实现:分两个方向分别描述

• -- da db:

• If( dir = ‘1’ ) then

• db <= da;

• Else

• db <= “ZZZZ”;

• End if;

• -- db da:

• If( dir = ‘0’ ) then

• da <= db;

• Else

• da <= “ZZZZ”;

• End if;

Page 66: 可靠设计与高速设计 学时分配:6

电子科技大学 66

双向端口设计时序• 时序为:

da

db

dir

ZZZZ

ZZZZ

Page 67: 可靠设计与高速设计 学时分配:6

双向端口的测试矢量时序• TestBench 时序正好与 RTL相反 !!

da

db

dir

ZZZZ

ZZZZ

强行赋值高阻态,仿真完成后自然会被覆盖

Page 68: 可靠设计与高速设计 学时分配:6

双向端口设计和仿真总结• 双向的设计和描述对于初学者来说是比较难以

理解的。总之• 其设计时序规律为:可分为两个方向分别描述,

对于作为被赋值者的任何一个端口,当它作为输出时,就被赋给输入的值;当它作为输入时,就被赋给高阻态;

• 其仿真时序规律为:对于任意一个端口,作为输出时,强行赋值高阻态。

• 以上规律的实质就是避免输出碰撞。 (请自行画出双向口的内部电路图 ---- 事实上就是两个三态 buffer反向并行,这就是以上描述方法的原因。 )

Page 69: 可靠设计与高速设计 学时分配:6

电子科技大学 69

OUTLINE

• 正确设计• 同步设计• 异步设计• 高速设计的其他手段

•VHDL 结 构 体 描 述风格•rtl 风格注意事项•敏感信号的问题•条件判断语句的注意事项 •多驱动与总线复用•毛刺的消除

Page 70: 可靠设计与高速设计 学时分配:6

电子科技大学 70

毛刺的消除• 毛刺产生的机理

– 竞争和冒险– 延时不平衡– 线间干扰

• 毛刺消除的方法– 竞争冒险的避免– Gray Coding

– 寄存器消除– 其他

时序电路中,异步复位、时钟等输入端出现毛刺时,都会引起系统的误动作。

Page 71: 可靠设计与高速设计 学时分配:6

电子科技大学 71

毛刺产生的机理• 毛刺产生的机理

– 竞争和冒险 (请参考数字逻辑设计课程的教材 )导致毛刺。

– 组合延时,布线延时的不平衡,导致译码输出毛刺。

– 线间的信号耦合,导致毛刺的产生。•实际上可以认为,不管是否出现竞争冒险,只要是纯组合译码输出的电路,就可能会产生毛刺。

Page 72: 可靠设计与高速设计 学时分配:6

电子科技大学 72

延时不平衡导致的毛刺:

计数器计数器

正常信号变化 :“011” “100”实际信号变化 : “011” “111” “100”

导致 dout输出毛刺dout

clk

Page 73: 可靠设计与高速设计 学时分配:6

电子科技大学 73

毛刺消除的方法 (1)

• 竞争与冒险的避免 (略 )• Gray 编码方法 计数器 ( 状态机 ) 电路中,采用 Gray 编码可以避免总线上的多个 bit 同时在一个时钟周期内翻转而导致毛刺。如上一页图中的计数器即可采用这种编码。 (附: Gray码在任何相邻的两组代码中,仅有一位数码不同 )

• 注: Gray码方法也是降低设计功耗的一个常用手段,因为它降低了寄存器的电平翻转率。

Page 74: 可靠设计与高速设计 学时分配:6

电子科技大学 74

毛刺消除的方法 (2)

• 寄存器消除:– 寄存器的数据输入端 D 和时钟使能端 EN 对

毛刺不敏感,因此可以利用 D和 EN来吸收毛刺信号。

Page 75: 可靠设计与高速设计 学时分配:6

寄存器采样 (利用 D端 )

计数器计数器 寄存器>

寄存器>

dd qq

qq

vec

110 111 000

dd

clkclk

vec 001

clkclk

Page 76: 可靠设计与高速设计 学时分配:6

电子科技大学 76

时钟使能吸收

计数器计数器计数器计数器clk2clk2

vec

clkclk

计数器计数器 计数器计数器cece

vec

clkclk 注意这里 ce宽度为 clk 的一个周期

Page 77: 可靠设计与高速设计 学时分配:6

电子科技大学 77

OUTLINE

正确设计• 同步设计• 异步设计• 高速设计的其他手段

•同步设计的概念•时钟质量的保证•路径延迟及其优化•时钟驱动的 TestBench

Page 78: 可靠设计与高速设计 学时分配:6

电子科技大学 78

OUTLINE

正确设计• 同步设计• 异步设计• 高速设计的其他手段

•同步设计的概念•时钟质量的保证•路径延迟及其优化•时钟驱动的 TestBench

Page 79: 可靠设计与高速设计 学时分配:6

电子科技大学 79

同步设计的概念

整个系统有一个时钟,最多还有一些派生 ( 分频,倍频等,保证与源时钟有确定的相位关系 ) 时钟。

整个系统有一个时钟,最多还有一些派生 ( 分频,倍频等,保证与源时钟有确定的相位关系 ) 时钟。

系统中的主要存储元件大都是时钟沿敏感的元件 (即寄存器 ) ,而不是电平敏感的元件 (即锁存器 ) 。

系统中的主要存储元件大都是时钟沿敏感的元件 (即寄存器 ) ,而不是电平敏感的元件 (即锁存器 ) 。

Page 80: 可靠设计与高速设计 学时分配:6

电子科技大学 80

• 数字系统设计中,应该尽量地采用纯粹的同步系统 (单时钟系统 ) 设计。

• 异步设计会给电路带来很多不安全的因素。

Page 81: 可靠设计与高速设计 学时分配:6

电子科技大学 81

同步系统的时序特点• 信号变化都是发生在时钟沿 ( 之后的微小

时间处 ) ,即系统中的动作基本上都是“绑定”在时钟沿上。

• 信号在敏感的时钟沿之后可能会有一段不稳定时间,随后将保持一段时间的稳定,等待下一个敏感的时钟沿的采样。

111 000 001

Page 82: 可靠设计与高速设计 学时分配:6

电子科技大学 82

OUTLINE

• 正确设计• 同步设计• 异步设计• 高速设计的其他手段

•同步设计的概念•时钟质量的保证•路径延迟及其优化•时钟驱动的 TestBench

Page 83: 可靠设计与高速设计 学时分配:6

电子科技大学 83

时钟质量的保证

1. 时钟 Skew 的最小化;2. PLL 的使用;3. 门控时钟与时钟使能;4. 派生时钟与派生使能;5. 其他…

•减少时钟的skew•避免时钟毛刺

Page 84: 可靠设计与高速设计 学时分配:6

电子科技大学 84

时钟质量的保证

1. 时钟 Skew 的最小化;2. PLL 的使用;3. 门控时钟与时钟使能;4. 派生时钟与派生使能;5. 其他…

Page 85: 可靠设计与高速设计 学时分配:6

同步系统中的时钟 skew

时钟的 skew(偏移,偏斜,抖动 )

时钟的 skew(偏移,偏斜,抖动 )

d q

>

d q

>

din q1 q2

clk clkddindin

clkclk

clkdclkd

q1q1

q2q2

错误错误

正确正确

skew

Page 86: 可靠设计与高速设计 学时分配:6

电子科技大学 86

同步系统设计中应该使时钟的 skew最小化同步系统设计中应该使时钟的 skew最小化

使用快速的导线类型来对时钟布线( 如在 fpga 中,采用全铜层工艺来实现全局通道 ) 。

使用快速的导线类型来对时钟布线( 如在 fpga 中,采用全铜层工艺来实现全局通道 ) 。

使用时钟树 (Distribution Tree)使用时钟树 (Distribution Tree)

在前端设计上,应遵循一定的设计原则来避免时钟的过分偏移 ( 接下去一部分内容中讲述 ) 。

在前端设计上,应遵循一定的设计原则来避免时钟的过分偏移 ( 接下去一部分内容中讲述 ) 。

Page 87: 可靠设计与高速设计 学时分配:6

电子科技大学 87

时钟质量的保证

1. 时钟 Skew 的最小化;2. PLL 的使用;3. 门控时钟与时钟使能;4. 派生时钟与派生使能;5. 其他…

•目前所使用的中、高端 FPGA 内部均集成了 DPLL ,甚至模拟锁相环。•这些锁相环提供对时钟的分频、倍频以及移相功能,并且保证skew最小。

Page 88: 可靠设计与高速设计 学时分配:6

电子科技大学 88

时钟质量的保证

1. 时钟 Skew 的最小化;2. PLL 的使用;3. 门控时钟与时钟使能;4. 派生时钟与派生使能;5. 其他…

Page 89: 可靠设计与高速设计 学时分配:6

电子科技大学 89

门控时钟 (gated clk)

计数器clk

sw

dout

clko

clk

clko

sw

dout

•如果将 sw输入给寄存器的时钟使能端 en ,就可以基本上避免这个误触发

skew

Page 90: 可靠设计与高速设计 学时分配:6

电子科技大学 90

Gated clk 的危害

1. 容易导致时序电路的误触发;2. 增大了 clk的 skew。

• 因此在设计中,尽量避免时钟通过组合电路,避免使用组合电路来产生时钟。

Gated Clk 也不是绝对不可用的,在某些情况下,它可以作为低功耗设计的手段。

Page 91: 可靠设计与高速设计 学时分配:6

电子科技大学 91

时钟质量的保证

1. 时钟 Skew 的最小化;2. PLL 的使用;3. 门控时钟与时钟使能;4. 派生时钟与派生使能;5. 其他…

Page 92: 可靠设计与高速设计 学时分配:6

电子科技大学 92

• 例 1 :设计一个计数器系统,该系统包含两个计数器,其中一个计数器以系统时钟 clk频率计数;另一个计数器以 clk的 1/4频率计数。

两个计数器同时复位。假设仅要求两个计数器速度满足 4倍关系,对相位无任何要求。

Page 93: 可靠设计与高速设计 学时分配:6

电子科技大学 93

• 传统设计思路 (暂省略复位信号 ) :

Couter_a

Counter_b4 分频

clk

clk4d

douta

doutb

clk

clk4d

Page 94: 可靠设计与高速设计 学时分配:6

电子科技大学 94

• 优化设计思路Couter_a

Counter_b4 分频

clk

en4d

douta

doutb

clk

en4d

•注意 en4d 的脉冲宽度只有一个 clk 的周期。

Page 95: 可靠设计与高速设计 学时分配:6

电子科技大学 95

选择派生使能方案的原因• 派生时钟方案增加了全局通道的耗费,

这在全局通道比较稀缺的 FPGA 中是相当致命的。 ASIC 实现时导致了时钟树耗费增加。

• 派生使能不但可以消除以上的缺点,而且其时钟 skew比派生时钟方案的 skew更小。

Page 96: 可靠设计与高速设计 学时分配:6

电子科技大学 96

注意派生使能的产生• Process( clk, reset )• Begin• if( reset = ‘1’ ) then

clk_vec <= ( others => ‘0’ );• elsif( clk’event and clk = ‘1’ ) then

clk_vec <= clk_vec + ‘1’;

end if;• End process;

Page 97: 可靠设计与高速设计 学时分配:6

电子科技大学 97

• Process( clk_vec )• Begin • if( clk_vec = “00” ) then • en4d <= ‘1’;• else• en4d <= ‘0’;• end if;• End process;

•注意,这里是组合电路输出 en4d ,难免产生毛刺;但是因为 en4d 是使能信号,所以这仍然是安全的。

Page 98: 可靠设计与高速设计 学时分配:6

电子科技大学 98

( 时钟质量保证 )小结

( 以下要点均针对前端设计 )

• 时钟的纯净:时钟最好不要通过任何组合电路,或者不要用组合电路产生时钟;

• 时钟的单一:数字系统设计时,应该尽量减少时钟的数目,最好整个系统只有一个时钟;当需要派生时钟时,尽量用派生使能去代替。

Page 99: 可靠设计与高速设计 学时分配:6

电子科技大学 99

OUTLINE

正确设计• 同步设计• 异步设计• 高速设计的其他手段

•同步设计的概念•时钟质量的保证•路径延迟及其优化•时钟驱动的 TestBench

Page 100: 可靠设计与高速设计 学时分配:6

电子科技大学 100

时序电路的主要时序参数clk

Dinclk

Din

Th

Tsu

Tco

Page 101: 可靠设计与高速设计 学时分配:6

电子科技大学 101

路径延迟Din

clk

Din组合电路

Tco Tcom Tsu

路径延迟

clk

时钟周期不能小于路径延迟

这里Tcom 包含了网络走线延迟

Page 102: 可靠设计与高速设计 学时分配:6

电子科技大学 102

路径的定义• 路径:是一系列标识一条电路的逻辑路线的元素;

• 路径可能包含一个信号网络 (net)或一组信号网络 (net) ,以及相关的元件;

• 当一个元件被包含在一条路径中时,它的输入和输出也包含在这个路径中。

• 路径从一个 pad或者一个同步元件 (触发器 )的输出端开始,一直到遇到一个 pad或一个同步元件 (触发器 ) 的输入端时终止。

Page 103: 可靠设计与高速设计 学时分配:6

电子科技大学 103

关键路径• 一个同步系统中的关键路径,就是它所有

的路径中,路径延迟最长的那一条。• 显然,这个同步系统的最高工作频率,等

于关键路径延迟的倒数。

Page 104: 可靠设计与高速设计 学时分配:6

电子科技大学 104

延时优化的几个要点1. 长路径的避免2. 优先级电路的延时优化3. 数据通路拷贝4. 数据运算式变换 5. 变量运算优化6. 组合路径切割7. 双时钟沿问题8. 其他

Page 105: 可靠设计与高速设计 学时分配:6

电子科技大学 105

长路径的避免• 实际上是一个很泛的技巧,总之,在设

计中,时序能走短路径就尽量走短路径;组合电路能缩小就尽量缩小。以下仅举两例来说明。

Page 106: 可靠设计与高速设计 学时分配:6

电子科技大学 106

回忆• <sry6_ 状态机设计 .ppt> 中提出过一个

问题 :

Page 107: 可靠设计与高速设计 学时分配:6

状态机设计中,状态编码采用 Binary 编码和 One-hot 编码对系统会造成什么样的性能影响?这两种编码对 FPGA/CPLD 的适用情况如何?

Binary One-hot

S0 00 0001

S1 01 0010

S2 10 0100

S3 11 1000

Page 108: 可靠设计与高速设计 学时分配:6

电子科技大学 108

• 解答: one-hot 编码方式只用一个 bit来表示一个状态,这大大缩小了状态译码的组合电路规模,使得路径延时更小,因此状态机的时钟可以运行在更高的频率上。

• 特例:不妨想象该状态机就是一个循环计数器,如果采用 binary 编码,则该计数器存在明显的组合电路;而如果采用 one-hot 编码,该计数器的综合结果就是一个移位寄存器序列,根本不存在任何组合门!

Page 109: 可靠设计与高速设计 学时分配:6

电子科技大学 109

扇入系数与组合规模• 这个例子实际上也说明了一个问题:组

合电路的规模往往受影响于其扇入系数:• 扇入 组合电路规模 从而路径延

时 系统工作速率

• 减少组合逻辑的扇入是提高系统工作速率的基本手段。

Page 110: 可靠设计与高速设计 学时分配:6

电子科技大学 110

• One-hot因为寄存器消耗量比较大,所以往往用在寄存器资源比较丰富的 FPGA中, CPLD 中使用得比较少。

Page 111: 可靠设计与高速设计 学时分配:6

电子科技大学 111

再回忆• <sry6_ 状态机设计 .ppt> 中的另外一个

问题…

Page 112: 可靠设计与高速设计 学时分配:6

问题: Mealy 机中,能否用“次态”信号替代“输入”信号,与“现态”信号进行译码输出?

问题: Mealy 机中,能否用“次态”信号替代“输入”信号,与“现态”信号进行译码输出?

或者,保留 s5 态,然后直接用“次态”信号进行译码输出?

或者,保留 s5 态,然后直接用“次态”信号进行译码输出?

Regs

译码

Clk

Present_state

Q(n)

Next_state

Q(n+1) 译码

DataOutZ(n)

din

Page 113: 可靠设计与高速设计 学时分配:6

电子科技大学 113

• 对比原图:

Regs

译码

Clk

Present_state

Q(n)

Next_state

Q(n+1) 译码

DataOutZ(n)

din

Page 114: 可靠设计与高速设计 学时分配:6

电子科技大学 114

• 经过对比发现,虽然两者在逻辑上是等效的,并且修改后的方案中似乎减少了输出译码电路的扇入,

• 但是输出译码和次态译码相粘连,形成了一条很长的路径,导致系统工作速度下降。

Page 115: 可靠设计与高速设计 学时分配:6

电子科技大学 115

反馈多路选择与专用时钟使能• 时钟使能的两种实现方式:

– 寄存器内部的专用时钟使能电路;– 反馈多路选择,如下图:

10

clken

dindout

•因为增加了额外的路径,因此降低了寄存器的最高工作速率。

Page 116: 可靠设计与高速设计 学时分配:6

电子科技大学 116

延时优化的几个要点1. 长路径的避免2. 优先级电路的延时优化3. 数据通路拷贝4. 数据运算式变换 5. 变量运算优化6. 组合路径切割7. 双时钟沿问题8. 其他

Page 117: 可靠设计与高速设计 学时分配:6

电子科技大学 117

优化时序的设计调整• 设计时,往往需要针对具体的情况来进

行设计的调整,以使系统的时序得到优化。

• 时序优化的原则,最主要的还是在保证正确逻辑的基础上,尽量缩小关键路径的延迟。

Page 118: 可靠设计与高速设计 学时分配:6

电子科技大学 118

例:带优先级的多路选择器• 假设该选择器的真值表如下:

Sel(0)

Sel(1)

Sel(2)

Sel(3)

z

x x x 1 d

x x 1 0 c

x 1 0 0 b

1 0 0 0 a

0 0 0 0 0

abcd

sel

z

Page 119: 可靠设计与高速设计 学时分配:6

电子科技大学 119

正常的描述方法 1 :多 if 语句• Process(a, b, c, d, sel)• Begin • z <= ‘0’; -- 要记得初始化 ! 不推荐此风格。• if( sel(0) = ‘1’ ) then z <= a; end if;• if( sel(1) = ‘1’ ) then z <= b; end if;• if( sel(2) = ‘1’ ) then z <= c; end if;• if( sel(3) = ‘1’ ) then z <= d; end if;• End process;

Page 120: 可靠设计与高速设计 学时分配:6

电子科技大学 120

正常的描述方法 2 :单 if 语句• Process(a, b, c, d, sel)• Begin • if ( sel(3) = ‘1’ ) then z <= d; • elsif( sel(2) = ‘1’ ) then z <= c; • elsif( sel(1) = ‘1’ ) then z <= b; • elsif( sel(0) = ‘1’ ) then z <= a; • else z <= ‘0’;• end if;• End process;

Page 121: 可靠设计与高速设计 学时分配:6

电子科技大学 121

综合后的电路图

10

10

10

10

0

a

Sel(0) b

c

d z

Sel(1)

Sel(2)

Sel(3)

可以发现这样的规律 :这种简单 if 语句描述生成的硬件中,条件优先级别越高的模块往往越靠近输出端。

Page 122: 可靠设计与高速设计 学时分配:6

电子科技大学 122

调整情况 1: 数据到达延迟( b b_late )

10

10

10

10

0

a

Sel(0)

c

d z

Sel(1)

Sel(2)

Sel(3)

b

假设分析发现, b 到达多路选择器的时间比 a, c, d晚,那么如何改变设计,以使得时序更加优化?

Page 123: 可靠设计与高速设计 学时分配:6

电子科技大学 123

调整情况 1: 数据到达延迟( b b_late )

10

10

10

10

0

a

Sel(0) b_late

c

d z

Sel(1)

Sel(2)

Sel(3)

假设分析发现, b 到达多路选择器的时间比 a, c, d晚,那么如何改变设计,以使得时序更加优化?

Page 124: 可靠设计与高速设计 学时分配:6

电子科技大学 124

优化目标

10

10

10

10

0

a

Sel(0) b_late

c

d z

Sel(1)

Sel(2)

Sel(3)

优化目标:针对 b_late 进行优化,减小该信号到达 z 的延迟。

Page 125: 可靠设计与高速设计 学时分配:6

电子科技大学 125

优化思路

10

10

10

10

0

a

Sel(0) b_late

c

d z

Sel(1)

Sel(2)

Sel(3)

Page 126: 可靠设计与高速设计 学时分配:6

电子科技大学 126

优化后的电路图

如何在保证优先级不变的基础上,修改代码的描述?

10

10

10

10

0

a

Sel(0) c

d

b_latez

Sel(2)

Sel(3)

Sel(3:1)控制逻辑

zt

Page 127: 可靠设计与高速设计 学时分配:6

电子科技大学 127

优化描述方法 1 :多 if 语句Process( a, b, c, d, sel)Begin zt <= ‘0’; if( sel(0) = ‘1’ ) then zt <= a; end if; if( sel(2) = ‘1’ ) then zt <= c; end if; if( sel(3) = ‘1’ ) then zt <= d; end if; if( ( sel(1) = ‘1’ ) and ( sel(2) = ‘0’ ) and ( sel(3) =

‘0’) ) then z <= b_late; else z <= zt; end if;End process;

10

10

10

10

0

a

Sel(0) c

d

b_latez

Sel(2)

Sel(3)

Sel(3:1) 控制逻辑

zt

1010

1010

1010

1010

0

a

Sel(0) c

d

b_latez

Sel(2)

Sel(3)

Sel(3:1) 控制逻辑

zt

Page 128: 可靠设计与高速设计 学时分配:6

电子科技大学 128

优化描述方法 2 :双 if 语句Process( a, b, c, d, sel)Begin if ( sel(3) = ‘1’ ) then zt <= d; elsif( sel(2) = ‘1’ ) then zt <= c; elsif( sel(0) = ‘1’ ) then zt <= a; else zt <= 0; end if; if ( ( sel(1) = ‘1’ ) and ( sel(2) = ‘0’ ) and ( sel(3) =

‘0’ ) then z <= b_late; else z <= zt; end if;End process;

Page 129: 可靠设计与高速设计 学时分配:6

电子科技大学 129

!优化描述方法 3 :单 if嵌套case• Process( a, b, c, d, sel)

• Begin • if ( sel(1) = ‘1’ ) then • case ….. End case;• elsif( sel(3) = ‘1’ ) then z <= d;• elsif( sel(2) = ‘1’ ) then z <= c;• elsif( sel(0) = ‘1’ ) then z <= a;• else z <= 0;• end if;• End process;

Case sel( 3 downto 2 ) is when “00” => z <= b; when “01” => z <= c; when “10” => z <= d; when others => z <=d;End case;

Page 130: 可靠设计与高速设计 学时分配:6

电子科技大学 130

方法 3 综合后的电路图

10

10

10

10

0

a

Sel(0) c

d

b_latez

Sel(2)

Sel(3)

Sel(3:1)

zt

Sel(1)dc 无 优 先 级

mux

Page 131: 可靠设计与高速设计 学时分配:6

方法分析• 方法 1 和方法 2 实际上是等效的,都可以生成前述的优化电路;而方法 3 的结果并不是优化的, b_late 到输出 z 的延时仍然很大。

• 所以要注意,并不是将 b_late 对应的 if 条件写在最优先级别处就一定可以获得最小的延时,方法 3中 b_late 被读的条件处理不当会导致b_late 进入复杂的硬件从而又增大延迟。

• 代码设计时,必须弄清楚所用的综合工具对特定描述风格的综合结果。

• 一般来说,代码描述的风格不要太抽象化,应该遵循硬件一一对应的模块化原则,这样有利于综合器生成与人脑直观相符合的硬件电路。特别在优化描述时更是应该如此。

Page 132: 可靠设计与高速设计 学时分配:6

电子科技大学 132

调整情况 2 :控制到达延迟( Sel(1) -> Sel(1)_late)

10

10

10

10

0

a

Sel(0)

c

d z

Sel(1)

Sel(2)

Sel(3)

b

假设分析发现, Sel(1)到达多路选择器的时间比其他 Sel(n)晚,那么如何改变设计,以使得时序更加优化?

Page 133: 可靠设计与高速设计 学时分配:6

优化思路

10

10

10

10

0

a

Sel(0)

c

d z

Sel(1)_late

Sel(2)

Sel(3)

b

优化思路仍然和 b_late 的情况一样,因此可以用前述的代码进行优化。

Page 134: 可靠设计与高速设计 学时分配:6

电子科技大学 134

带优先级的电路优化方法总结• 对于带有优先级别的电路,在进行延时优化时,要兼顾好延时和优先级。

• 对于单纯的 if 语句描述 (single if statement OR multiple if statement) ,一般生成的硬件都是越高优先级条件判断对应的模块越靠近输出端。但这不意味着对应的单个控制信号 (如 Sel(1)) 的优先级越高。

Page 135: 可靠设计与高速设计 学时分配:6

电子科技大学 135

带优先级的电路优化方法总结(续 )

• 如果到达比较晚 (即延时较大 ) 的信号 ( 不管是 data 信号还是 control 信号 ) 所对应的硬件模块,并不是处于最高优先级处时,那么就应该想办法将该模块向靠近输出端的位置搬移,以减小该信号所在的路径 (很可能成为关键路径 ) 的延迟。

• 可以通过搬移 if 条件模块的方法搬移需要移动的模块;

• 搬移之后,要调整 if 条件判断式,保证原来的优先级不变。

Page 136: 可靠设计与高速设计 学时分配:6

10

10

10

10

0

a

Sel(0) c

d

b_latez

Sel(2)

Sel(3)

Sel(3:1)控制逻辑

zt

不被搬移的部分保持不动。显然他们之间的优先级关系也不会被改变。

为保持不动的部分的输出定义一个信号。

因优化而被搬移的部分。

记得调整条件判断式,保证整体优先级不变。

Page 137: 可靠设计与高速设计 学时分配:6

电子科技大学 137

代码结构• Process( … )

• Begin

• -- 固定不动部分的代码描述 (对 zt赋值 ) ;

• -- 被搬移部分的代码描述 (对 z赋值 ) ;• End process;

Page 138: 可靠设计与高速设计 学时分配:6

电子科技大学 138

延时优化的几个要点1. 长路径的避免2. 优先级电路的延时优化3. 数据通路拷贝4. 数据运算式变换 5. 变量运算优化6. 组合路径切割7. 双时钟沿问题8. 其他

Page 139: 可靠设计与高速设计 学时分配:6

例:数据通路复用考虑下面的代码:If( CONTROL = ’1’ )then

PTR := PTR1;

elsePTR := PTR2;

end if;

OFFSET := BASE - PTR;

ADDR := ADDRESS - OFFSET;

COUNT <= ADDR + B;

Page 140: 可靠设计与高速设计 学时分配:6

电子科技大学 140

综合后的电路图

PTR

PTR1

PTR2

CONTROL

BASE ADDRESS

OFFSET

ADDR

B

COUNT

Page 141: 可靠设计与高速设计 学时分配:6

电子科技大学 141

优化目标

PTR

PTR1

PTR2

CONTROL

BASE ADDRESS

OFFSET

ADDR

B

COUNT

假设 CONTROL 是一个 late arriving input signal 。现在要对该信号进行优化,减小该信号到达 COUNT 的延时。

Page 142: 可靠设计与高速设计 学时分配:6

电子科技大学 142

优化思路

PTR

PTR1

PTR2

CONTROL

BASE ADDRESS

OFFSET

ADDR

B

COUNT

Page 143: 可靠设计与高速设计 学时分配:6

电子科技大学 143

优化后的电路图

OFFSET1 B

COUNT1

PTR1

BASE ADDRESS ADDR1

COUNT2

PTR2

BASE ADDRESS

OFFSET2

ADDR2

B

CONTROL

COUNT

Page 144: 可靠设计与高速设计 学时分配:6

电子科技大学 144

Data-Path Duplication方法代码实现

• 在此略去,请自行完成该代码的编写。

Page 145: 可靠设计与高速设计 学时分配:6

性能对比

传统方法:

数据通路复用方法:

注:这里的 Data Arrival Time指的是 CONTROL 到达输出端 COUNT 的延时。

可见,逻辑复用方法在提高时序性能的同时,引起资源耗费增大。

Page 146: 可靠设计与高速设计 学时分配:6

电子科技大学 146

延时优化的几个要点1. 长路径的避免2. 优先级电路的延时优化3. 数据通路拷贝4. 数据运算式变换 5. 变量运算优化6. 组合路径切割7. 双时钟沿问题8. 其他

Page 147: 可靠设计与高速设计 学时分配:6

电子科技大学 147

例: if 条件判断式中的数据运算

• 考虑下面的代码:if (A + B < 24) then

Z <= C;

elseZ <= D;

end if;

综合后的电路图如下:

A

B

24

CD

Z

Page 148: 可靠设计与高速设计 学时分配:6

电子科技大学 148

优化目标

A

B

24

CD

Z

假设 A为 late arrival signal 。则考虑如何针对A 进行优化,减小 A 到达 Z 的延时。

Page 149: 可靠设计与高速设计 学时分配:6

电子科技大学 149

优化思路

A

B

24

CD

Z

If( A+B < 24 ) If( A < 24-B ) 关键:尽量减小 A”穿过”的运算步骤 ( 级数 )!!

Page 150: 可靠设计与高速设计 学时分配:6

电子科技大学 150

优化思路

24

BA

CD

Z

If( A+B < 24 ) If( A < 24-B ) 关键:尽量减小 A”穿过”的运算步骤 ( 级数 )!!

Page 151: 可靠设计与高速设计 学时分配:6

电子科技大学 151

优化后的代码

if (A < 24 - B) thenZ <= C;

elseZ <= D;

end if;

Page 152: 可靠设计与高速设计 学时分配:6

电子科技大学 152

阶段性总结• 以上“优先级电路的延时优化”、“数

据通路拷贝”和“数据运算式变换 ”三种方法实际上都属于“信号搬移”方法。

• 其要点是想办法把形成关键路径的“迟到”信号尽量往路径输出端 ( 路径末端 )搬移,以减少路径延时。

Page 153: 可靠设计与高速设计 学时分配:6

电子科技大学 153

延时优化的几个要点1. 长路径的避免2. 优先级电路的延时优化3. 数据通路拷贝4. 数据运算式变换 5. 变量运算优化6. 组合路径切割7. 双时钟沿问题8. 其他

Page 154: 可靠设计与高速设计 学时分配:6

电子科技大学 154

• 注意这里所说的“变量”指的是 “非常量”,其包含 VHDL 中的“变量”和“信号”。

• 变量计算和常量计算的综合结果在组合逻辑规模上有着天壤之别。

Page 155: 可靠设计与高速设计 学时分配:6

电子科技大学 155

例:变量乘法与常量乘法• 假设 a, b均为 3bit 信号 (变量 ) ,则 y <= a *

b 的结果可能为 (假设 a, b, y均为无符号数 ) :

Page 156: 可靠设计与高速设计 学时分配:6

电子科技大学 156

• 假如在硬件运行的过程中, a始终为一个常数 100 ,则可以将代码改成 y <= b * “100” 。此时综合得到的电路为:

左移 2bitb y

Page 157: 可靠设计与高速设计 学时分配:6

电子科技大学 157

• 可见,如果能够用常量运算,就尽量用常量运算表达式。误用变量表达式虽然在逻辑上并没有错误,但是会导致组合电路规模过大,不但浪费芯片资源,而且降低系统工作速率。

Page 158: 可靠设计与高速设计 学时分配:6

电子科技大学 158

延时优化的几个要点1. 长路径的避免2. 优先级电路的延时优化3. 数据通路拷贝4. 数据运算式变换 5. 变量运算优化6. 组合路径切割7. 双时钟沿问题8. 其他

Page 159: 可靠设计与高速设计 学时分配:6

电子科技大学 159

组合路径切割• 常用手段有:

1. 状态机拆分;2. 流水线技术;3. 其它等。

Page 160: 可靠设计与高速设计 学时分配:6

电子科技大学 160

状态机拆分• 经典案例:预定标计数器。• 设计一个 32bit 的计数器,采用 binary 编码。按照常规的设计:

• If( reset = ‘1’ ) then • dout <= ( others => ‘0’ );• Elsif( clk’event and clk = ‘1’ ) then • dout <= dout + ‘1’;• End if;

Page 161: 可靠设计与高速设计 学时分配:6

电子科技大学 161

综合后的速度• 用Mentor Graphics LeonadoSpectrum针对 SCL05u ASIC库进行综合,得出关键路径延时为约 14.07 ns ,则 clk 的最高工作频率约为 69.6 MHz。

• 为了提高该设计的最高工作频率,修改方案:

Page 162: 可靠设计与高速设计 学时分配:6

电子科技大学 162

Counter(9:0)

Counter(23:10)clk

en

Dout(23:10)

Dout(9:0)

Page 163: 可靠设计与高速设计 学时分配:6

电子科技大学 163

• 注意上图中 en 的高脉冲宽度为一个 clk时钟周期。

• 综合后,其关键路径延时为 6.40 ns, clk 的最高工作频率可达 140.8 MHz !!

• 可见,进行状态机拆分后,各状态机的状态译码的组合电路规模都比原来小,从而减小了关键路径的延时。

Page 164: 可靠设计与高速设计 学时分配:6

电子科技大学 164

流水线技术• 流水线技术几乎是最常用的提供系统工

作速率的强有力手段。

Page 165: 可靠设计与高速设计 学时分配:6

电子科技大学 165

流水线设计例子• 设计 din1 + din2 + din3 + din4 结果输出给 dout。

din1

din2

din3

din4

dout

Page 166: 可靠设计与高速设计 学时分配:6

电子科技大学 166

流水线技术• 其思想是利用寄存器将一条长路径切分成几段小路径,从而达到提高工作速率的作用。

• 假设原路径延时为 t ,加入 2 级流水线并且假设路径切割均匀,则路径延时可以减少到约 t/3 ,从而系统速率可以提高到原来的 3倍左右。

• 当然要注意的是输出同时会往后推迟 3 个时钟周期。所以采用流水线技术时,要记得进行时序调整。

Page 167: 可靠设计与高速设计 学时分配:6

电子科技大学 167

关于寄存输入和寄存输出• 数字系统中,各模块应采取(寄存输入

和)寄存输出,这样做有如下优点:1. 模块化清晰 ( 特别是寄存输出 ) ;2. 提高系统最高工作速率;3. 有利于整个系统和单个模块分别进行静态

时序分析。

Page 168: 可靠设计与高速设计 学时分配:6

电子科技大学 168

延时优化的几个要点1. 长路径的避免2. 优先级电路的延时优化3. 数据通路拷贝4. 数据运算式变换 5. 变量运算优化6. 组合路径切割7. 双时钟沿问题8. 其他

Page 169: 可靠设计与高速设计 学时分配:6

思考

dindout

clk

有人认为,以上系统可以设计为上升沿和下降沿都使用的系统,这样可以增大时钟沿的使用率,并且可以使得第二个寄存器能在数据稳定中间采样,从而保证数据的安全。这个说法对吗?为什么?

Tco Tcom Tsu

路径延迟

clk

Page 170: 可靠设计与高速设计 学时分配:6

电子科技大学 170

OUTLINE

正确设计• 同步设计• 异步设计• 高速设计的其他手段

•同步设计的概念•时钟质量的保证•路径延迟及其优化•时钟驱动的 TestBench

Page 171: 可靠设计与高速设计 学时分配:6

电子科技大学 171

TestBench

• TestBench 是用行为风格的代码来设计的,• 所以很多初学者喜欢用一堆 after 语句来生成同步系统所用的输入数据。

• 实际上,应该将 TestBench当成一个也受同步系统时钟驱动的元件。

Page 172: 可靠设计与高速设计 学时分配:6

电子科技大学 172

• 以下 TestBench 的写法一般情况下不可取:

Datain <= datain + ‘1’ after clk_cycle;

• 推荐的写法应该是 If( clk’event and clk = ‘1’ ) then

datain <= datain + ‘1’ <after …>; end if;

被测模块TestBenchdatainclk

Page 173: 可靠设计与高速设计 学时分配:6

电子科技大学 173

OUTLINE

• 正确设计• 同步设计• 异步设计• 高速设计的其他手段

Page 174: 可靠设计与高速设计 学时分配:6

电子科技大学 174

异步系统• 异步系统包括:

– 全异步系统:硬件的行为不受时钟绑定,完全由自定时技术来完成信号的交互和握手。

– 异步多时钟系统:系统的行为由多个异步的时钟来驱动。可包含“全局同步,局部异步”和“全局异步,局部同步”等。

Page 175: 可靠设计与高速设计 学时分配:6

电子科技大学 175

异步设计• 全异步设计的特点:

– 由于系统的行为不绑定在时钟上,因此不用考虑同步系统难度很大的全局时钟同步问题;

– 避免了由时钟信号造成的连续漏电,以及为负责的功率管理系统而付出的开销。

– 没有全局同步产生的电流瞬变,因此在低功耗设计方面有先天的优势。

– 能达到的处理速度比同步系统高,因为它不用考虑最坏情况下的所谓“关键路径”。

– 采用自定时技术,设计难度过高,在 FPGA 中无法实现。

Page 176: 可靠设计与高速设计 学时分配:6

异步多时钟系统设计简介如果一个系统中存在多个独立 ( 异步 ) 时钟,并

且存在多时钟域 (clock domain) 之间的信号传输,那么电路会出现亚稳态。

din

aclkbclk

adat bdat

aclk

adat

bclk

bdat

Page 177: 可靠设计与高速设计 学时分配:6

•Sync_a2b

消除亚稳态 ---- 同步化

din

aclkbclk

adat bdatbdat1 bdat2

aclk

adat

bclk

bdat1

bdat1

Page 178: 可靠设计与高速设计 学时分配:6

异步多时钟系统模型

aClk Logic

aClk Logic

bClk Logic

bClk Logic

Sync_a2b

Sync_a2b

aSig

aClk bClk

aClk Domain bClk Domain

bSig

Page 179: 可靠设计与高速设计 学时分配:6

电子科技大学 179

注意其信号命名和模块划分方法

• 这种信号命名和模块划分的方法有如下优点:– 有利于检查信号所通过的时钟域;– 有利于各模块进行单独的静态时序分析;– 有利于在静态时序分析中快速地设定 false

path;•异步信号穿越时钟域时,这些信号与异步时钟之间的相位关系数是无穷的,所以在整个系统静态时序分析时必须忽略这些信号路径。

Page 180: 可靠设计与高速设计 学时分配:6

电子科技大学 180

多时钟域系统设计的经典案例:

异步 FIFO数字系统设计当中,应该尽量避免使用异步多

时钟,否则会带来很多潜在的问题 ( 不仅仅是亚稳态的问题 ) 。

关于多时钟域数字系统设计的方法,可以参考 《 Synthesis and Scripting Techniques for Designing Multi-Asynchronous Clock Designs》, Clifford E. Cummings。

以下只给出大概的结论。

Page 181: 可靠设计与高速设计 学时分配:6

电子科技大学 181

异步设计的注意事项小结• 注意使用同步化电路来对异步信号进行同步;• 进行科学的模块划分和信号命名;• 尽量减少握手控制信号的数目,以避免同步化造成的信号拉伸而破坏控制信号之间的相位关系;

• 快时钟域信号进入慢时钟域时,要注意信号丢失的避免和检测;

• 计数器要尽量采用 Gray 编码,以避免同步化造成的信号拉伸。

Page 182: 可靠设计与高速设计 学时分配:6

电子科技大学 182

附: Gray Bin

• gray[0] = bin[0] ^ bin[1];• gray[1] = bin[1] ^ bin[2];• gray[2] = bin[2] ^ bin[3];• gray[3] = bin[3];

• bin[0] = gray[3] ^ gray[2] ^ gray[1] ^ gray[0];

• bin[1] = gray[3] ^ gray[2] ^ gray[1];• bin[2] = gray[3] ^ gray[2];• bin[3] = gray[3];

Page 183: 可靠设计与高速设计 学时分配:6

电子科技大学 183

OUTLINE

• 正确设计• 同步设计• 异步设计• 高速设计的其他手段

•串转并

Page 184: 可靠设计与高速设计 学时分配:6

电子科技大学 184

例: cascade Tree (for循环的优化 )

• 设计奇偶校验位生成电路:对数据data(3:0)生成校验位 c。

• 一种思路如下:result := ’0’;for I in data’RANGE loopresult := result XOR data(I);end loop;C <= result;

Page 185: 可靠设计与高速设计 学时分配:6

电子科技大学 185

综合后的电路图

Data(e)

Data(2)

Data(1)

Data(0)

0

c

Data(3)

Page 186: 可靠设计与高速设计 学时分配:6

电子科技大学 186

改进思路 ( 目标电路图 )

Data(2)

Data(1)

Data(0)

c

Data(3)

Page 187: 可靠设计与高速设计 学时分配:6

电子科技大学 187

改进的描述方法

Sig1 <= Data(3) xor Data(2);

Sig2 <= Data(1) xor Data(0);

C <= sig1 xor sig2;

问题 : 对于 Data(n:0) ,代码该如何设计?•注:在串转并中,适当地使用平衡的二叉树结构,不但可以减少延时,而且有利于方便地引入流水线结构。

Page 188: 可靠设计与高速设计 学时分配:6

电子科技大学 188

小结• 正确设计:

– VHDL 结构体有三种描述风格:行为描述风格, RTL 描述风格和结构描述风格;

– RTL 风格的描述中,要注意一个进程里只能判断一次时钟沿;注意避免 X 状态的传递;

– 敏感信号表不完整,往往会造成前仿真和后仿真结果不一致;

– 条件判断语句中,要注意对所有分支进行输出信号的赋值,以避免锁存;

Page 189: 可靠设计与高速设计 学时分配:6

电子科技大学 189

– 巧妙地使用无关态,可以引导综合器综合出优化的电路;

– case 无优先级; single if和multiple if 语句的优先级顺序;

– 硬件描述中,应加强硬件思维,打破软件思维;

– 注意要正确地使用多路开关或者三态缓冲来进行总线复用,避免总线冲突;

Page 190: 可靠设计与高速设计 学时分配:6

电子科技大学 190

– 双向端口描述中,注意高阻态的赋值;注意其测试矢量生成时,也要注意设置高阻态;

– 毛刺消除的要点:竞争和冒险的避免;Gray 编码;寄存器消除方法 ( 数据输入吸收,时钟使能吸收 ) 。

Page 191: 可靠设计与高速设计 学时分配:6

电子科技大学 191

• 同步设计– 尽量避免使用门控时钟,应以时钟使能来代替;

– 尽量避免使用派生时钟,应以派生使能来代替;

– 路径与路径延时的含义;路径延时与系统工作时钟的最高频率的关系;

– 缩小组合电路的规模,可以降低系统的路径延时从而提高最高工作速率;

Page 192: 可靠设计与高速设计 学时分配:6

电子科技大学 192

– 善于使用“信号搬移 " 技术进行延时优化,可以提高系统速度;手段包括优先级别电路中的模块搬移、数据通路拷贝、数据运算式变换等;

– 在优先级别电路中进行信号搬移时,要注意修正条件判断式,使得优先级别不变;

– 可能的情况下,应该尽量使用常量运算来代替变量 ( 信号 )运算;

Page 193: 可靠设计与高速设计 学时分配:6

电子科技大学 193

– 可以使用状态机拆分、流水线等技术进行路径切割,达到延时优化的目的;

– (寄存器输入和)寄存输出不仅可以提高系统工作速率,而且有利于模块和整体进行分别的静态时序分析;

Page 194: 可靠设计与高速设计 学时分配:6

电子科技大学 194

• 异步设计– 尽量避免使用异步设计;– 异步多时钟系统中,注意做好时钟域之间的

同步;– 引入时钟域同步后,容易造成信号相位拉伸;– 为避免矢量拉伸对数据矢量的破坏,可以考虑采用 Gray码进行计数器编码;

– 为了在静态时序分析中快速地进行 false path的设置,最好根据时钟域来进行信号命名。

Page 195: 可靠设计与高速设计 学时分配:6

电子科技大学 195

• 高速设计的其他手段– 串转并不但可以降低系统的延时,而且可以

大幅度提高系统的数据吞吐率。二叉树结构可以有助于引入平衡的流水线。

• 其他– 安全的状态机描述:注意使用 others 分支,

并且该分支不能以 null来规定其行为,以处理状态机的“跑飞”。具体可参考 <sry6_状态机设计 .ppt>.