1 / 55

EDA 技术 实用教程

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

gavril
Download Presentation

EDA 技术 实用教程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. EDA技术实用教程 第10章 设计优化和设计方法

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

  3. 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;

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

  5. 【例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 资源共享反例

  6. 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;

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

  8. 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;

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

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

  11. 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;

  12. 图10-5 串行化结构

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

  14. 10.2.1 流水线设计 图10-7使用流水线 其最高频率为:

  15. 图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; 接下页

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

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

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

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

  20. 10.2.3 关键路径法

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

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

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

  24. 10.3.2 时间需求选项 寄存器的时序参数 组合电路的路径延时 建立时间Tsu 输出时间Tco 时钟最大频率Fmax 保持时间Thold 恢复时间Tov

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

  26. 图10-16 时间需求设定

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

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

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

  30. 图10-20 使用Clique

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

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

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

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

  35. 10.3.4 局部逻辑综合选项

  36. 图10-25 分立逻辑选项

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

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

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

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

  41. 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。可以在测试(Debug)时加入,随后去掉LCELL。

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

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

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

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

  46. 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)。

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

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

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

  50. 实 验 实验10-1 采用流水线技术设计高速数字相关器 (3)实验内容1:根据上述原理设计一个并行4位数字相关器(例10-10是样例程序)。提示:利用CASE语句完成4个1位相关结果的统计。 【例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 <= "010";--2 WHEN "0111"|"1011"|"1101"|"1110" => c <= "001"; --1 WHEN "1111" => c <= "000"; -- 0; WHEN OTHERS => c <= "000"; END CASE; END PROCESS;

More Related