VHDL设计中电路优化问题探讨
发布时间:2008/5/28 0:00:00 访问次数:358
近年来,随着集成电路技术和eda技术的不断发展,集设计、模拟、综合和测试功能为一体的vhdl语言,已作为ieee标准化的硬件描述语言。由于其在语法和风格上类似于现代高级汇编语言,具有良好的可读性,描述能力强,设计方法灵活,易于修改,又具有可移植性,可重复利用他人的ip模块(具有知识产权的功能模块)等诸多优势而成为eda设计方法的首选。vhdl设计是行为级设计,所带来的问题是设计者的设计思考与电路结构相脱节。设计者主要是根据vhdl的语法规则,对系统目标的逻辑行为进行描述,然后通过综合工具进行电路结构的综合、编译和优化,并通过仿真工具进行逻辑功能仿真和系统时延的仿真。实际设计过程中,由于每个工程师对语言规则和电路行为的理解程度不同,每个人的编程风格各异,往往同样的系统功能,描述的方式不一,综合出来的电路结构更是大相径庭。即使最终综合出的电路都能实现相同的逻辑功能,但其电路的复杂程度和时延特性差别很大,甚至某些臃肿的电路还会产生难以预料的问题。因此,对vhdl设计中简化电路结构,优化电路设计的问题进行深入探讨,很有必要。
vhdl电路设计的优化与vhdl描述语句、eda工具以及可编程器件(pld)的选用都有着直接的关系。设计人员首先应注意到以下基本问题:
① pld器件的逻辑资源是有限的。
② 可编程器件具有特定的结构,应注意器件结构与实际系统的匹配,使系统性能达到最佳。
③ 不是所有的设计都能实现到任意选择的结构中去。
④ 电路优化的目标相当于求最优解的问题。
1 vhdl设计中提高硬件综合效率的主要策略
vhdl作为一种硬件描述和仿真语言,最终要实现的是实际硬件电路。但是其设计初衷并非综合,某些语句并不被综合器支持,所以在选择语句时应考虑到综合与仿真的效率。只有使用综合工具支持的语句,设计出的程序才有意义。在编程时要注意以下几点:
① 尽量不使用wait for xx ns语句和after xx ns语句。xx ns表明在执行下一操作之前需要等待的时间,但综合器不予支持,一般忽略该时间,而不会综合成某种元件,故对于包含此类语句的程序,仿真结果与综合结果往往不一致。
② 声明信号和变量时尽量不赋初值,定义某确定数值时,使用常量而不用变量赋初值的形式。因为大多数综合工具将忽略赋值等初始化语句,诸如:variabal s∶integer∶=0。
③ 函数或过程调用时尽量使用名称关联。因为名称关联可以比位置关联更好地防止产生不正确的端口连接和元件声明,也不要在同一个语句中同时使用两种关联。诸如:
clk_1:bufes port map(i=>clock_in,clock_out);(不正确的用法)
clk_1:bufes port map(i=>clock_in,o=>clock_out);(正确的用法)
④ 正确使用when_else语句、if_else语句和case语句。vhdl设计电路的复杂程度除取决于设计功能的难度外,还受设计工程师对电路描述方法的影响。最常见的使电路复杂化的原因之一是,设计中存在许多本不必要的类似latch的结构,并且这些结构通常都由大量的触发器组成,不仅使电路更复杂,工作速度降低,而且由于时序配合的原因还会导致不可预料的结果。例如,描述译码电路时,由于每个工程师的写作习惯不同,有的喜欢用if...else语句,有的喜欢用when...else方式,而用if...else时,稍不注意,在描述不需要寄存器的电路时没加else,则会引起电路不必要的开销。
例程1: if ina=″00000″ then
outy<=″0000111″;
elsif ina=″00001″ then
outy<=″0001000″;
elsif ina=″00010″ then
outy<=″0001001″;
……
else
outy<=″0000000″;
end if;
例程2: outy<=″0000111″ when ina=″00000″ else
″0001000″ when ina=″00001″ else
″0001001″ when ina=″00010″ else
……
″0000000″;
例程2由于使用when...else完整条件语句,不会生成锁存器结构,所以不会有问题。而例程1若不加else outy
近年来,随着集成电路技术和eda技术的不断发展,集设计、模拟、综合和测试功能为一体的vhdl语言,已作为ieee标准化的硬件描述语言。由于其在语法和风格上类似于现代高级汇编语言,具有良好的可读性,描述能力强,设计方法灵活,易于修改,又具有可移植性,可重复利用他人的ip模块(具有知识产权的功能模块)等诸多优势而成为eda设计方法的首选。vhdl设计是行为级设计,所带来的问题是设计者的设计思考与电路结构相脱节。设计者主要是根据vhdl的语法规则,对系统目标的逻辑行为进行描述,然后通过综合工具进行电路结构的综合、编译和优化,并通过仿真工具进行逻辑功能仿真和系统时延的仿真。实际设计过程中,由于每个工程师对语言规则和电路行为的理解程度不同,每个人的编程风格各异,往往同样的系统功能,描述的方式不一,综合出来的电路结构更是大相径庭。即使最终综合出的电路都能实现相同的逻辑功能,但其电路的复杂程度和时延特性差别很大,甚至某些臃肿的电路还会产生难以预料的问题。因此,对vhdl设计中简化电路结构,优化电路设计的问题进行深入探讨,很有必要。
vhdl电路设计的优化与vhdl描述语句、eda工具以及可编程器件(pld)的选用都有着直接的关系。设计人员首先应注意到以下基本问题:
① pld器件的逻辑资源是有限的。
② 可编程器件具有特定的结构,应注意器件结构与实际系统的匹配,使系统性能达到最佳。
③ 不是所有的设计都能实现到任意选择的结构中去。
④ 电路优化的目标相当于求最优解的问题。
1 vhdl设计中提高硬件综合效率的主要策略
vhdl作为一种硬件描述和仿真语言,最终要实现的是实际硬件电路。但是其设计初衷并非综合,某些语句并不被综合器支持,所以在选择语句时应考虑到综合与仿真的效率。只有使用综合工具支持的语句,设计出的程序才有意义。在编程时要注意以下几点:
① 尽量不使用wait for xx ns语句和after xx ns语句。xx ns表明在执行下一操作之前需要等待的时间,但综合器不予支持,一般忽略该时间,而不会综合成某种元件,故对于包含此类语句的程序,仿真结果与综合结果往往不一致。
② 声明信号和变量时尽量不赋初值,定义某确定数值时,使用常量而不用变量赋初值的形式。因为大多数综合工具将忽略赋值等初始化语句,诸如:variabal s∶integer∶=0。
③ 函数或过程调用时尽量使用名称关联。因为名称关联可以比位置关联更好地防止产生不正确的端口连接和元件声明,也不要在同一个语句中同时使用两种关联。诸如:
clk_1:bufes port map(i=>clock_in,clock_out);(不正确的用法)
clk_1:bufes port map(i=>clock_in,o=>clock_out);(正确的用法)
④ 正确使用when_else语句、if_else语句和case语句。vhdl设计电路的复杂程度除取决于设计功能的难度外,还受设计工程师对电路描述方法的影响。最常见的使电路复杂化的原因之一是,设计中存在许多本不必要的类似latch的结构,并且这些结构通常都由大量的触发器组成,不仅使电路更复杂,工作速度降低,而且由于时序配合的原因还会导致不可预料的结果。例如,描述译码电路时,由于每个工程师的写作习惯不同,有的喜欢用if...else语句,有的喜欢用when...else方式,而用if...else时,稍不注意,在描述不需要寄存器的电路时没加else,则会引起电路不必要的开销。
例程1: if ina=″00000″ then
outy<=″0000111″;
elsif ina=″00001″ then
outy<=″0001000″;
elsif ina=″00010″ then
outy<=″0001001″;
……
else
outy<=″0000000″;
end if;
例程2: outy<=″0000111″ when ina=″00000″ else
″0001000″ when ina=″00001″ else
″0001001″ when ina=″00010″ else
……
″0000000″;
例程2由于使用when...else完整条件语句,不会生成锁存器结构,所以不会有问题。而例程1若不加else outy
上一篇:快速动作的表面贴装多层熔断器设计
热门点击
- 10KV线路单相接地故障处理方法初探
- 常见连接器和插座介绍
- 用LM324等设计的低成本高精度温度测量电路
- 电池低电压指示及控制电路设计
- 集成电路中的MOS晶体管模型
- MOS管的阈值电压探讨
- 电流、磁力线方向演示器
- PN结耗尽区研究
- MOS晶体管的平方律转移特性
- 镍氢电池充电器(三)
推荐技术资料
- Seeed Studio
- Seeed Studio绐我们的印象总是和绘画脱离不了... [详细]