第十章_EDA设计优化 -重庆科创职业学院教材

发布于:2021-09-12 04:16:28

第10章
设计优化和设计方 法

10.1 面积优化
FPGA/CPLD资源的优化具有实用意义:
(1)通过优化,可以使用规模更小的可编程逻辑芯片,从而降低系统成本。
(2)对于许多可编程逻辑器件(例如某些公司的CPLD器件),由于布线资 源有限,耗用资源过多而严重影响电路性能。 (3)为以后的技术升级,留下更多的可编程资源,方便添加产品的功能。 (4)对于多数可编程逻辑器件,资源耗用太多会使器件功耗显著上升。
10.1.1 资源共享

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;

Sel
A0
<
B
乘法
A1
<
B
乘法
Sel
A0 0
A1 1
B 选@

0
1 选@

Result

图10-1 先乘后 选择的设计方法 RTL结构

<
乘@

Result

图10-2 先选择 后乘设计方法 RTL结构

【例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;

图10-3 资源 共享反例

S
A0 R B1 选@

S
A0 R B1 选@ S
A0 R B1 选@

10.1.2 逻辑优化

在此构建了一个两输入的乘法器:
mc <= ta * 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;

【例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) := "100110111001"; BEGIN process(clk) begin if(clk'event and clk = '1') then ta<=ma; mc<=ta * tb; end if; end process; END rtl;

10.1.3 串行化

对8个16位数据进行乘法和加法运算,即 yout = a0 × b0 + a1 × b1 + a2 × b2 + a3 × b3

【例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;

a0[7:0]

[7:0] [7:0]

*

[15:0]

b0[7:0]

[7:0] [7:0]

clk
[15:0]

a1[7:0]

[7:0] [7:0]

*

[15:0] [15:0]

b1[7:0]

[7:0] [7:0]

+

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

[15:0]

[15: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]

[7:0] [7:0]

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

【例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;
接下页

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;

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

[0]

[2:0]

[1]

+

[0:2] [0:2] 0

[2]

[2:0] [2:0] D[2:0] Q[2:0] [2:0]

000 1

a1[7:0] [7:0] start
a3[7:0] [7:0] a2[7:0] [7:0]

[0]

[1]

e [7:0] d

e [7:0] d

[7:0] [7:0]

e [7:0] d
e [7:0] d

*

[15:0] [15:0]

[7: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]

[15:0]

R

E

E

b0[7:0] [7:0] b1[7:0] [7:0] b2[7:0] [7:0] b3[7:0] [7:0]

[2]

[1]

e

[0]

[7:0] d

e

[7:0] d

[7:0]

e

[7:0] d

[0]

[1]

e

[7:0] d

[0] [1]

图10-5 串行化结构

10.2 速度优化
10.2.1 流水线设计
显然该设计从输入到输出需经过的时间至少为Ta,就是说,时钟信号clk周期 不能小于Ta。

10.2.1 流水线设计

图10-7使用流水线

其最高频率为:

Fm a x

?

Fm a x1

?

Fm a x2

?

1 T1

图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;

接下页

接上页
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;

【例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;

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

10.2.2 寄存器配*
图10-10设计的Fmax将由t1决定,由于t1<T1,显然设计的速
度得到了提高。

10.2.3 关键路径法

10.3 使用MAX+plusII优化设计
10.3.1 全局逻辑综合选项

10.3.1 全局逻辑综合选项 1. 普通类型(Normal)

10.3.1 全局逻辑综合选项
2. 快速类型(Fast)
3. 所见即所得类型(WYSIWYG)
MAX+plusII中对应于综合类型各设有4种器件系列(Device Family): (1)MAX5000系列。 (2)MAX3000/MAX7000/MAX9000系列。 (3)CLASSIC系列。 (4)FLEX/ACEX系列。

10.3.2 时间需求选项

寄存器的时序参数
建立时间Tsu 输出时间Tco

组合电路的路径延时

时钟最大频率Fmax 保持时间Thold

恢复时间Tov

Tsu

Tco

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

Tco

Fmax

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

图10-16 时间需求设定

图10-17 建立保持时间分析器

10.3.3 打包(Clique)
图10-18 打包Clique设计示例

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

图10-20 使用Clique

10.3.3 打包(Clique)
图10-21 Clique对话框

10.3.3 打包(Clique)
图10-22 Clique后的Floorplan

10.3.3 打包(Clique)
Clique的注意事项:
仅仅对关联的逻辑进行Clique(打包到同一组)。
对速度有更高要求的模块使用打包,那些模块往往处于关 键路径,改善它们的速度会提高系统的整体速度。
Clique使用于层次化设计中,将大的、慢速的逻辑块分成 小模块,便合理使用Clique。
对整个设计应用打包(同一组)等于没有应用,打包是一 种局部的布局规划,适用于设计中的某些模块。

10.3.4 局部逻辑综合选项
图10-23 使用局部逻辑选项

10.3.4 局部逻辑综合选项

图10-25 分立逻辑选项

10.3.4 局部逻辑综合选项
图10-26 清除工程选项设置

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

10.3.5 Probe的使用
图10-28 右键菜单

10.3.5 Probe的使用
图10-29 加入探针后

10.3.5 Probe的使用

Probe 使用 技巧

图10-30 probe的仿真波形
(1)对dff的Q、D、CLK、ENA、CLRN、PRN可以使用probe,一般dff不 会轻易被化简掉。
(2)对LE的输出可以使用probe (3)对于不可使用probe的情况下,加一个LCELL,问题可能会得到解 决,不过,逻辑会改变,会增加一个LCELL Delay。可以在测试 (Debug)时加入,随后去掉LCELL。

10.4 其他设置
10.4.1 Slow Slew Rate设置
图10-31 Slow Slew Rate选择

10.4 其他设置
10.4.2 EPC系列配置器件设置与编程
图10-32 EPC2的编程 文件产生设置

图10-33 EPC2下载
图10-34 SuperPro L+编程器的器件选择

10.4.2 EPC系列配置器件设置与编程
图10-35 在SuperPro /Z编程器中选择编程文件

10.4 其他设置
10.4.3 编程文件转换
在MAX+plusII环境下可产生的编程、配置文件有下列几种:
?SRAM目标文件 SRAM Object File (.sof),用于Altera的FPGA器件 (如FLEX10K系列)等,对于该类器件MAX+plusII默认产生。
?编程器目标文件Programmer Object File (.pof),用于Altera的 CPLD器件(如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 File (.sbf)、JEDEC File (.jed)、Serial Vector Format File (.svf)。

10.4.3 编程文件转换
图10-36 编程文件转换

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


相关推荐

最新更新

猜你喜欢