可靠设计与高速设计教学幻灯片.ppt

  1. 1、本文档共194页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
可靠设计与高速设计教学幻灯片.ppt

!优化描述方法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; 方法3综合后的电路图 1 0 1 0 1 0 1 0 0 a Sel(0) c d b_late z Sel(2) Sel(3) Sel(3:1) zt Sel(1) d c 无优先级 mux 方法分析 方法1和方法2实际上是等效的,都可以生成前述的优化电路;而方法3的结果并不是优化的,b_late到输出z的延时仍然很大。 所以要注意,并不是将b_late对应的if条件写在最优先级别处就一定可以获得最小的延时,方法3中b_late被读的条件处理不当会导致b_late进入复杂的硬件从而又增大延迟。 代码设计时,必须弄清楚所用的综合工具对特定描述风格的综合结果。 一般来说,代码描述的风格不要太抽象化,应该遵循硬件一一对应的模块化原则,这样有利于综合器生成与人脑直观相符合的硬件电路。特别在优化描述时更是应该如此。 调整情况2:控制到达延迟 ( Sel(1) - Sel(1)_late) 1 0 1 0 1 0 1 0 0 a Sel(0) c d z Sel(1) Sel(2) Sel(3) b 假设分析发现,Sel(1)到达多路选择器的时间比其他Sel(n)晚,那么如何改变设计,以使得时序更加优化? 优化思路 1 0 1 0 1 0 1 0 0 a Sel(0) c d z Sel(1)_late Sel(2) Sel(3) b 优化思路仍然和b_late的情况 一样,因此可以用前述的代码 进行优化。 带优先级的电路优化方法总结 对于带有优先级别的电路,在进行延时优化时,要兼顾好延时和优先级。 对于单纯的if语句描述(single if statement OR multiple if statement),一般生成的硬件都是越高优先级条件判断对应的模块越靠近输出端。但这不意味着对应的单个控制信号(如Sel(1))的优先级越高。 带优先级的电路优化方法总结(续) 如果到达比较晚(即延时较大)的信号(不管是data信号还是control信号)所对应的硬件模块,并不是处于最高优先级处时,那么就应该想办法将该模块向靠近输出端的位置搬移,以减小该信号所在的路径(很可能成为关键路径)的延迟。 可以通过搬移if条件模块的方法搬移需要移动的模块; 搬移之后,要调整if条件判断式,保证原来的优先级不变。 1 0 1 0 1 0 1 0 0 a Sel(0) c d b_late z Sel(2) Sel(3) Sel(3:1) 控制 逻辑 zt 不被搬移的部分保持不动。显然他们之间的优先级关系也不会被改变。 为保持不动的部分的输出定义一个信号。 因优化而被搬移的部分。 记得调整条件判断式,保证整体优先级不变。 代码结构 Process( … ) Begin -- 固定不动部分的代码描述(对zt赋值); -- 被搬移部分的代码描述(对z赋值); End process; 延时优化的几个要点 长路径的避免 优先级电路的延时优化 数据通路拷贝 数据运算式变换 变量运算优化 组合路径切割 双时钟沿问题 其他 例:数据通路复用 考虑下面的代码: If( CONTROL = ’1’ )then PTR := PTR1; else PTR := PTR2; end if; OFFSET := BASE - PTR; ADDR := ADDRESS - OFFSET; COUNT = ADDR + B; Process( clk_vec ) Begin if( clk_vec = “00” ) then en4d = ‘1’; else en4d = ‘0’; end if; End process; 注意,这里是组合电路输出en4d,难免产

文档评论(0)

youngyu0329 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档