深入理解FPGA电子系统设计:基于Quartus Prime与VHDL的Altera FPGA设计
上QQ阅读APP看书,第一时间看更新

4.3 组合逻辑电路与并行语句、进程语句的关系

组合逻辑电路的输出仅仅取决于当时的输入信号,而与电路之前的输入无关。前面两节都属于组合逻辑电路设计,观察设计程序可知,在VHDL语言中组合逻辑电路的实现可以使用并行信号赋值语句,也可以采用纯组合行为描述的进程语句,采用不依赖时钟的进程。例如,有如下两个实例。

【例4.3】并行语句实现的组合逻辑电路。

【例4.4】进程语句实现的组合逻辑电路。

两个程序描述的是实现相同功能的组合逻辑电路,由此可见,在某些时候,并行语句和进程语句可以实现相同的功能。但是对于时序逻辑电路的实现,就必须使用带有时钟信号的进程描述语句。

组合逻辑电路的设计有一个需要注意的问题,以例4.5所示的半加器设计为例,观察其时序仿真波形图4-3(通过Tool→Run Simulation Tool→Gate Level Simulation实现),不难看出图中48ns左右存在两个不希望出现的毛刺。

【例4.5】半加器的VHDL设计。

图4-3 半加器仿真波形图

通过processing-start-start TimeQuest Timing Analyzer编译后,在Table of Contents栏中选择TimeQuest Timing Analyzer并右击后选择Generate Report in TimeQuest,进入TimeQuest Timing Analyzer界面,然后选择Reports→Datasheet→Report Datasheet可以看到如图4-4所示的传输延迟(propagation delay)情况,需要注意的是,图中显示的延迟时间的长短与电路综合时所用的芯片型号有关。其中RR表示信号的上升时间,RF表示高到低的变化时间,FR表示低到高的变化时间,FF表示下降时间。观察仿真图,在40ns时输入信号a、b同时向相反的方向跳变,即电路出现了竞争,而信号a下降所需的时间比信号b上升所需的时间长,从而使传输到c和result的输入信号同时出现了高电平,这就是产生毛刺的原因。对于组合逻辑电路的设计,竞争冒险通常是不可避免的,因此不建议将组合逻辑电路的输出直接作为时钟或片选等对信号质量要求较高的场合。这同时也说明了在验证一个设计是否正确时,不仅要通过功能仿真看其逻辑是否正确,还要通过时序仿真看其时序功能是否正确。

图4-4 传输延迟时间示例