第十章 EDA设计优化

You might also like

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 55

EDA 技术实用教

第 10 章
设计优化和设计方

KX
康芯科技

10.1 面积优

FPGA/CPLD 资源的优化具有实用意义:

( 1 )通过优化,可以使用规模更小的可编程逻辑芯片,从而降低系统成本。

( 2 )对于许多可编程逻辑器件(例如某些公司的 CPLD 器件),由于布线


资源有限,耗用资源过多而严重影响电路性能。

( 3 )为以后的技术升级,留下更多的可编程资源,方便添加产品的功能。

( 4 )对于多数可编程逻辑器件,资源耗用太多会使器件功耗显著上升。

10.1.1 资源共享
KX
康芯科技

10.1.1 资源共享

【例 10-1 】
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
USE ieee.std_logic_arith.all;
ENTITY multmux IS
PORT (A0, A1 , B : IN std_logic_vector(3 downto 0);
sel : IN std_logic;
Result : OUT std_logic_vector(7 downto 0));
END multmux;
ARCHITECTURE rtl OF multmux IS
BEGIN
process(A0,A1,B,sel)
begin
if(sel = '0') then Result <= A0 * B;
else Result <= A1 * B;
end if;
end process;
END rtl;
KX
康芯科技
Sel
A0

B
×
0
乘法器0 Result 图 10-1 先乘后
选择的设计方法
A1 1
RTL 结构

B
× 选择器

乘法器1

Sel
A0 0
A1 1 图 10-2 先选择
Result 后乘设计方法 R
B 选择器 × TL 结构

乘法器
KX
康芯科技
【例 10-2 】
ARCHITECTURE rtl OF muxmult IS
signal temp : std_logic_vector(3 downto 0);
BEGIN
process(A0,A1,B,sel)
begin
if(sel = '0') then temp <= A0;
else temp <= A1;
end if;
result <= temp * B;
end process;
END rtl;

A 0
S R
B
A 1
0 R
选择器
图 10-3 资源 B
1 S
共享反例
选择器 A 0 R
B
1
选择器
KX
康芯科技

10.1.2 逻辑优化 在此构建了一个两输入的乘法器:


在此构建了一个两输入的乘法器:
mc
mc<=
<=tata**tb;
tb;
【例 10-3 】
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
ENTITY mult1 IS
PORT(clk : in std_logic;
ma : In std_logic_vector(11 downto 0);
mc : out std_logic_vector(23 downto 0));
END mult1;
ARCHITECTURE rtl OF mult1 IS
signal ta , tb : std_logic_vector(11 downto 0);
BEGIN
process(clk) begin
if(clk'event and clk = '1') then
ta <= ma; tb <= "100110111001"; mc <= ta * tb;
end if;
end process;
END rtl;
KX
康芯科技

【例 10-4 】
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
ENTITY mult2 IS
PORT(clk : in std_logic;
ma : In std_logic_vector(11 downto 0);
mc : out std_logic_vector(23 downto 0));
END mult2;
ARCHITECTURE rtl OF mult2 IS
signal ta : std_logic_vector(11 downto 0);
constant tb : std_logic_vector(11 downto 0) := "1001101110
01";
BEGIN
process(clk) begin
if(clk'event and clk = '1') then ta<=ma; mc<=ta * tb;
end if;
end process;
END rtl;
KX
康芯科技

10.1.3 串行化 对对88个 个16 16位数据进行乘法和加法运算,即


位数据进行乘法和加法运算,即
yout
yout = a0 × b0 ++aa1 ××bb1 ++aa2 ××bb2 ++aa3 ××bb3
= a × b
0 0 1 1 2 2 3 3

【例 10-5 】
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
ENTITY pmultadd IS
PORT(clk : in std_logic;
a0,a1,a2,a3 : in std_logic_vector(7 downto 0);
b0,b1,b2,b3 : in std_logic_vector(7 downto 0);
yout : out std_logic_vector(15 downto 0));
END pmultadd;
ARCHITECTURE p_arch OF pmultadd IS
BEGIN
process(clk) begin
if(clk'event and clk = '1') then
yout <= ((a0*b0)+(a1*b1))+((a2*b2)+(a3*b3));
end if;
end process;
END p_arch;
KX
康芯科技
[7:0] [7:0]
a0[7:0]
[7:0] [7:0]
* [15:0]

b0[7:0]

clk
[15:0]
[7:0] [7:0]
a1[7:0]
* [15:0] [15:0]

b1[7:0] [7:0] [7:0]


[15:0]
+ [1:16] [1:16]
D[15:0] Q[15:0] [15:0][15:0]
yout[15:0]

[15:0]

[7:0] [7:0]
a2[7:0]
[7:0] [7:0]
* [15:0]

b2[7:0]

[7:0] [7:0]
a3[7:0]
[7:0] [7:0]
* [15:0]

b3[7:0]

图 10-4 并行并行乘法 RTL 结构


KX
康芯科技

【例 10-6 】
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
ENTITY smultadd IS
PORT(clk , start : in std_logic;
a0,a1,a2,a3 : In std_logic_vector(7 downto 0);
b0,b1,b2,b3 : In std_logic_vector(7 downto 0);
yout : out std_logic_vector(15 downto 0));
END smultadd;
ARCHITECTURE s_arch OF smultadd IS
signal cnt : std_logic_vector(2 downto 0);
signal tmpa , tmpb : std_logic_vector(7 downto 0);
signal tmp , ytmp : std_logic_vector(15 downto 0);
BEGIN
tmpa <= a0 when cnt = 0 else
a1 when cnt = 1 else
a2 when cnt = 2 else
a3 when cnt = 3 else
a0;

接下页
KX
康芯科技

tmpb <= b0 when cnt = 0 else


b1 when cnt = 1 else
b2 when cnt = 2 else
b3 when cnt = 3 else
b0;

tmp <= tmpa * tmpb;


process(clk) begin
if(clk'event and clk = '1') then
if(start = '1') then cnt <= "000";
ytmp <= (others=>'0');
elsif (cnt <4) then cnt <= cnt + 1;
ytmp <= ytmp + tmp;
elsif (cnt = 4) then yout <= ytmp;
end if;
end if;
end process;
END s_arch;
KX
康芯科技

[7:0]
a0[7:0]
clk

[0]
[2:0]
[1] e
[2]
+ [0:2] [0:2]
0
[2:0] [2:0] [2:0]
[7:0]
d
D[2:0] Q[2:0]
000 e
1 [7:0]
d [7:0] [7:0]
[7:0]
a1[7:0]
start
e * [15:0] [15:0]

a3[7:0] [7:0]
[7:0]
d [7:0]
[15:0]
+ [1:16] [1:16]
D[15:0] Q[15:0] [15:0] [15:0]
D[15:0] Q[15:0] [15:0][15:0]
yout[15:0]
[7:0] R E
a2[7:0] e
[7:0] E
[0] d
[1]

[2]
[7:0]
b0[7:0]

[1] e
[7:0]
[0] d
e
[7:0]
d [7:0]
[7:0]
b1[7:0] e
[7:0] [7:0] [0]
b2[7:0] d
[7:0] [1]
b3[7:0]
e
[7:0]
d
[0]
[1]

图 10-5 串行化结构
KX
康芯科技

10.2 速度优化

10.2.1 流水线设计

显然该设计从输入到输出需经过的时间至少为 Ta ,就是说,时钟信号 clk 周


期不能小于 Ta 。
KX
康芯科技

10.2.1 流水线设计

图 10-7 使用流水
线
其最高频率为:
11
FFmax  FFmax
max   FFmax
max11  
max22 
TT11
KX
康芯科技

图 10-8 流水线工作图示

【例 10-7 】
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
ENTITY adder4 IS
PORT(clk : in std_logic;
a0,a1,a2,a3 : in std_logic_vector(7 downto 0);
yout : out std_logic_vector(9 downto 0));
END adder4; 接下页
KX
康芯科技

接上页

ARCHITECTURE normal_arch OF adder4 IS


signal t0,t1,t2,t3 : std_logic_vector(7 downto 0);
signal addtmp0,addtmp1 : std_logic_vector(8 downto 0);
BEGIN
process(clk) begin
if(clk'event and clk='1') then
t0 <= a0; t1 <= a1; t2 <= a2; t3 <= a3;
end if;
end process;
addtmp0 <= '0'&t0 + t1;
addtmp1 <= '0'&t2 + t3;
process(clk) begin
if(clk'event and clk = '1') then
yout <= '0'&addtmp0 + addtmp1;
end if;
end process;
END normal_arch;
KX
康芯科技
【例 10-8 】
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
ENTITY pipeadd IS
PORT(clk : in std_logic;
a0,a1,a2,a3 : in std_logic_vector(7 downto 0);
yout : out std_logic_vector(9 downto 0));
END pipeadd;
ARCHITECTURE pipelining_arch OF pipeadd IS
signal t0,t1,t2,t3 : std_logic_vector(7 downto 0);
signal addtmp0,addtmp1 : std_logic_vector(8 downto 0);
BEGIN
process(clk) begin
if(clk'event and clk='1') then
t0 <= a0; t1 <= a1; t2 <= a2; t3 <= a3;
end if;
end process;
process(clk) begin
if(clk'event and clk = '1') then
addtmp0 <= '0'&t0 + t1;
addtmp1 <= '0'&t2 + t3;
yout <= '0'&addtmp0 + addtmp1;
end if;
end process;
END pipelining_arch;
KX
康芯科技

10.2.2 寄存器配平

如果其中的两个组合逻辑块的延时差别过大,如 T1 大于 T2 ,于是其总体的
工作频率 Fmax 取决于 T1 ,即最大的延时模块,从而导致设计的整体性能受到限
制。
KX
康芯科技

10.2.2 寄存器配平

图 10-10 设计的 Fmax 将由 t1 决定,由于 t1<T1 ,显然设计


的速度得到了提高。
KX
康芯科技

10.2.3 关键路径法
KX
康芯科技

10.3 使用 MAX+plusII 优化设



10.3.1 全局逻辑综合选项
KX
康芯科技

10.3.1 全局逻辑综合选项

1. 普通类型( Norma
l)
KX
康芯科技

10.3.1 全局逻辑综合选项

2. 快速类型( Fast )

3. 所见即所得类型( WYSIWY
G)

MAX+plusII中对应于综合类型各设有
MAX+plusII 中对应于综合类型各设有44种器件系列( DeviceFamily
种器件系列(Device Family):
):
(11)
( MAX5000系列。
)MAX5000 系列。
(22)
( MAX3000/MAX7000/MAX9000系列。
)MAX3000/MAX7000/MAX9000 系列。
(33)
( CLASSIC系列。
)CLASSIC 系列。
(44)
( FLEX/ACEX系列。
)FLEX/ACEX 系列。
KX
康芯科技

10.3.2 时间需求选项

寄存器的时序参数
寄存器的时序参数
组合电路的路径延时
组合电路的路径延时
建立时间 Ts
u
输出时间 Tco

时钟最大频率 Fmax

保持时间 Thold

恢复时间 Tov
KX
康芯科技

Tsu Tco

Fmax
图 10-14 部分寄存器时序参

Tsu Thold

图 10-15 部分
寄存器参数时
序图

Tco Fmax
KX
康芯科技

图 10-16 时间需求设定
KX
康芯科技

图 10-17 建立保持时间分析器
KX
康芯科技

10.3.3 打包( Clique )

图 10-18 打包 Clique 设计示例


KX
康芯科技

图 10-19 图 10-18 设计适配后的 Floorpla


KX
康芯科技

图 10-20 使用 Clique
KX
康芯科技

10.3.3 打包( Clique )

图 10-21 Clique 对话框


KX
康芯科技

10.3.3 打包( Clique )

图 10-22 Clique 后的 Floorplan


KX
康芯科技

10.3.3 打包( Clique )

Clique 的注意事项:

仅仅对关联的逻辑进行 Clique (打包到同一组)。

对速度有更高要求的模块使用打包,那些模块往往处于关
键路径,改善它们的速度会提高系统的整体速度。

Clique 使用于层次化设计中,将大的、慢速的逻辑块分成
小模块,便合理使用 Clique 。

对整个设计应用打包(同一组)等于没有应用,打包是一
种局部的布局规划,适用于设计中的某些模块。
KX
康芯科技

10.3.4 局部逻辑综合选项

图 10-23 使用局部逻辑选项
KX
康芯科技

10.3.4 局部逻辑综合选项
KX
康芯科技

图 10-25 分立逻辑选项
KX
康芯科技

10.3.4 局部逻辑综合选项

图 10-26 清除工程选项设置
KX
康芯科技

10.3.5 Probe 的使用

图 10-27 是一个简单的设计(图形方式),假如需要
观察节点 1 ( Q 端)的波形。

图 10-27 未加 Probe 的设计


KX
康芯科技

10.3.5 Probe 的使用

图 10-28 右键菜单
KX
康芯科技

10.3.5 Probe 的使用

图 10-29 加入探针后
KX
康芯科技

10.3.5 Probe 的使用

图 10-30 probe 的仿真波形

( 1 )对 dff 的 Q 、 D 、 CLK 、 ENA 、 CLRN 、 PRN 可以使用 probe ,


一般 dff 不会轻易被化简掉。
Probe
使用 ( 2 )对 LE 的输出可以使用 probe
技巧 ( 3 )对于不可使用 probe 的情况下,加一个 LCELL ,问题可能会得到
解决,不过,逻辑会改变,会增加一个 LCELL Delay 。可以在测试( D
ebug )时加入,随后去掉 LCELL 。
KX
康芯科技

10.4 其他设置
10.4.1 Slow Slew Rate 设置

图 10-31 Slow Slew Rate 选


KX
康芯科技

10.4 其他设置
10.4.2 EPC 系列配置器件设置与编程

图 10-32 EPC
2 的编程文件
产生设置
KX
康芯科技

图 10-33 E
PC2 下载

图 10-34 SuperPro L+ 编程器的器件选择


KX
康芯科技

10.4.2 EPC 系列配置器件设置与编程

图 10-35 在 SuperPro /Z 编程器中选择编程文件


KX
康芯科技

10.4 其他设置
10.4.3 编程文件转换

在 MAX+plusII 环境下可产生的编程、配置文件有下列几种:

SRAM 目标文件 SRAM Object File (.sof) ,用于 Altera 的 FPGA 器


件(如 FLEX10K 系列)等,对于该类器件 MAX+plusII 默认产生。
 编程器目标文件 Programmer Object File (.pof) ,用于 Altera 的 C
PLD 器件(如 MAX7000S 系列)和专用配置器件(如 EPC2 系列),默认产生。
 Intel HEX 格式文件 Hexadecimal (Intel-Format) File (.hex) 。
用于第三方编程器对 Altera 的配置器件编程等用途。
 表格文件 Tabular Text File (.ttf) ,用于单片机配置 FPGA 器件等
用途。
 JTAG 链文件 JTAG Chain File (.jcf) 。
 FLEX Chain File (.fcf) 。
 Jam 编程文件 Jam Byte-Code File (.jbc) 、 Jam File (.jam) 。
 其他格式编程文件 Raw Binary File (.rbf) 、 Serial Bitstream F
ile (.sbf) 、 JEDEC File (.jed) 、 Serial Vector Format File (.svf) 。
KX
康芯科技
10.4.3 编程文件转换

图 10-36 编程文件转换
KX
康芯科技

10.4 其他设置
10.4.4 MAX+plusII 在 Windows 2000 上的安装设置
具体安装步骤如下:

( 1 )首先安装 MAX+plusII ;
( 2 )选择(“开始”→“设置”→“控制面板”);
( 3 )双击“游戏选项”,然后选择“添加”→“添加其他”→“从磁盘安
装”命令,再单击“浏览”浏览驱动所在目录: MAX+plusII 的安装目录 \drive
rs\win2000 ;
( 4 )选择 win2000.inf ,单击确定;
( 5 )在“数字签名未找到”对话框中,选择是;
( 6 )在“选择一个设备驱动程序”窗口中,选择 Altera ByteBlaster ,并
单击“下一步”;
( 7 )在接下去的“数字签名未找到”对话框中,仍选择“是”;
( 8 )安装完成,依提示,重新启动计算机
KX
康芯科技

实 验

实验 10-1 采用流水线技术设计高速数字相关器

(11)实验目的:设计一个在数字通信系统中常见的数字
( )实验目的:设计一个在数字通信系统中常见的数字
相关器,并利用流水线技术提高其工作速度,对其进行仿真和
相关器,并利用流水线技术提高其工作速度,对其进行仿真和
硬件测试。
硬件测试。
(22)实验原理:数字相关器用于检测等长度的两个数字
( )实验原理:数字相关器用于检测等长度的两个数字
序列间相等的位数,实现序列间的相关运算。
序列间相等的位数,实现序列间的相关运算。
一位相关器即是异或门,异或的结果可以表示两个
一位相关器即是异或门,异或的结果可以表示两个11位数 位数
据的相关程度。异或为
据的相关程度。异或为00表示数据位相同;异或为
表示数据位相同;异或为11表示数据
表示数据
位不同。多位数字相关器可以由多个一位相关器构成,如
位不同。多位数字相关器可以由多个一位相关器构成,如NN位 位
的数字相关器由
的数字相关器由NN个异或门和
个异或门和NN个
个11位相关结果统计电路构成。
位相关结果统计电路构成。
KX
康芯科技

实 验
实验 10-1 采用流水线技术设计高速数字相关器

((33)实验内容
)实验内容11:根据上述原理设计一个并行
:根据上述原理设计一个并行44位数字
位数字
相关器(例 10-10是样例程序)。提示:利用
相关器(例10-10 CASE语句完成
是样例程序)。提示:利用CASE 语句完成
44个
个11位相关结果的统计。
位相关结果的统计。

【例 10-10 】
stemp <= a XOR b;
PROCESS(stemp) BEGIN
CASE stemp IS
WHEN "0000" => c <= "100"; --4
WHEN "0001"|"0010"|"0100"|"1000" => c <= "011"; --3
WHEN "0011"|"0101"|"1001"|"0110"|"1010"|"1100" => c <= "0
10";--2
WHEN "0111"|"1011"|"1101"|"1110" => c <= "001"; --1
WHEN "1111" => c <= "000"; -- 0;
WHEN OTHERS => c <= "000";
END CASE;
END PROCESS;
KX
康芯科技

验 实验 10-1 采用流水线技术设计高速数字相关器
(44)实验内容
( )实验内容22:利用实验内容
:利用实验内容11中的 中的44位数字相关器设计并行
位数字相关器设计并行16 16
位数字相关器。使用 MAX+plusII估计最大延时,并计算可能运行频率。
位数字相关器。使用MAX+plusII 估计最大延时,并计算可能运行频率。
(55)实验内容
( )实验内容33:在步骤
:在步骤44的基础上,利用设计完成的
的基础上,利用设计完成的44位数字相关
位数字相关
器设计并行16
器设计并行 16位数字相关器,其结构框图见图
位数字相关器,其结构框图见图10-38 10-38,并利用 MAX+plusII
,并利用MAX+plusII
计算运行速度。
计算运行速度。

a[3..0]
4位相关器
b[3..0] 3

+ 4
a[7..4]
4位相关器 图 10-38
b[7..4] 3
16 位相
a[11..8]
+ 5
c[15..0]
关器结构
4位相关器
b[11..8] 3

a[15..12]
+ 4
4位相关器
b[15..12] 3
KX
康芯科技



实验 10-1 采用流水线技术设计高速数字相关器

(66)实验内容
( )实验内容44:上面的 16位数字相关器是用
:上面的16 位数字相关器是用33级组合
级组合
逻辑实现的,在实际使用时,对其有高速的要求,试使用流水
逻辑实现的,在实际使用时,对其有高速的要求,试使用流水
线技术改善其运行速度。在输入、输出及每一级组合逻辑的结
线技术改善其运行速度。在输入、输出及每一级组合逻辑的结
果处加入流水线寄存器,提高速度,可参照本章内容进行设计。
果处加入流水线寄存器,提高速度,可参照本章内容进行设计。
(77)实验思考题:考虑采用流水线后的运行速度与时钟
( )实验思考题:考虑采用流水线后的运行速度与时钟clcl
ock的关系,测定输出与输入的总延迟。若输入序列是串行化
ock 的关系,测定输出与输入的总延迟。若输入序列是串行化
的,数字相关器的结构如何设计?如何利用流水线技术提高其
的,数字相关器的结构如何设计?如何利用流水线技术提高其
运行速度?
运行速度?
(88)实验报告:根据以上的实验内容写出实验报告,包括
( )实验报告:根据以上的实验内容写出实验报告,包括
设计原理、程序设计、程序分析、仿真分析、硬件测试和详细
设计原理、程序设计、程序分析、仿真分析、硬件测试和详细
实验过程。
实验过程。
KX
康芯科技


验实验 10-2 线性反馈移位寄存器( LFSR )设计

( 1 )实验目的:学习用 VHDL 设计 LFSR ,掌握利用 FPGA 的特殊


结构中高效实现 LFSR 的方法。
( 2 )实验原理: LFSR 即 Linear Feedback Shift Register 线性反馈移
位寄存器,是一种十分有用的时序逻辑结构,广泛用于伪随机序列发生、可
编程分频器、 CRC 校验码生成、 PN 码等等。图 10-39 是典型的 LFSR 结
构。

图 10-39 LFSR 举
KX
康芯科技


验实验 10-2 线性反馈移位寄存器( LFSR )设计
( 3 )实验内容:依据图 10-39 设计一个 LFSR ,其生成多项式为 X4+
X3+X0 。试在 EPF10K20TC144-4 器件上加以实现,并利用本章中提及的 M
AX+plusII 优化选项,使之达到最高运行速度,并在 EDA 开发系统上,对
其产生的码序列进行观察。
( 4 )实验思考题:另有一种 LFSR 的结构,见图 10-40 ,试分析与图
10-39 中 LFSR 结构的异同点。

图 10-40 另一种 LFSR 结


KX
康芯科技



实验 10-2 线性反馈移位寄存器( LFSR )设计

( 5 )实验思考题 2 :用 LFSR 设计可编程分频器,对电子


琴实验中的音阶发生电路的可编程计数器(实现可编程分频功
能)用 LFSR 替代。
( 6 )实验思考题 3 :对图 10-40 结构的 LFSR 电路进行改
进,设计成串行 CRC 校验码发生器(提示:反馈线上加入 xor ,
xor 的一个输入端接待编码串行有效信息输入)。
( 7 )实验报告:作出本项实验设计的完整电路图,详细说
明其工作原理,完成测试实验内容,对实验中的码序列进行记
录,写出电路可达到的最高运行速度及修改的 MAX+plusII 选
项。

You might also like