比如对这个project,我们希望系统的最高工作频率为120MHz,那么我们点击Assignments→在窗口中可以设置:
又比如,我们希望节省FPGA芯片资源,那么就可以在综合时对面积进行优化,还是在刚才的窗口中设置:
此外,如果需要对某个信号进行单独的约束时,就要进入Assignments Editor对话框来添加约束,点击Assignments→
信号、约束种类和约束值,即设置完毕。
至于具体施加何种设计约束,就只有等待大家在实践中慢慢掌握了,可以查阅其他书籍或QuartusⅡ使用手册,更多的还是依靠经验。
,按下图的显示来选择约束
,
选择约束信号 约束种类约束值
5.4全编译
在以上步骤都完成后,我们将对整个project进行全编译(Compilation)。点击Processing→
。
全编译主要包括四步操作:分析综合(Analysis & Synthesis)、布局布线(Fitter)、编程配置(Assembler)、时序时延分析(Timing Analyzer),这些操作都是一次性完成的,无需干预。
全编译的同时还生成了一份编译报告,这个报告中包含了许多重要信息。尤其是时序分
析报告,如果设计中有时序违规的情况发生,报告中的那一项将被显示为红色。一般来说,我们必须保证项目中没有任何时序违规的情况。
5.5时序仿真
为了验证设计的正确性,必须进行时序仿真。 首先建立仿真文件,点击file→NEW→右键→Insert Node or Bus→
然后就是绘制仿真波形。大家要明白这一点,我们对设计进行仿真,无非是施加激励,
,即得到仿真波形文件。然后
导入需要仿真的信号。
然后观察输出(即响应)是否符合我们的设计要求。绘制波形就是施加激励的一种方式。下图是仿真之前的波形图,暂时将频率控制字设置为1。
运行仿真。点击Processing→,得到下图的仿真结果:
修改频率控制字为3,得到下图的仿真结果:
可以看出,仿真波形都是正确的,满足我们的设计要求,这样,就可以下载至FPGA中进行调试了。
补充一点:大家可以清晰地看到波形仿真中的毛刺,这是因为QuartusⅡ的仿真是综合后仿真,就是说是带有延时信息的。毛刺产生的原因是因为组合逻辑在系统工作频率很高时产生了竞争。
5.6下载编程
最后一步就是将全编译产生的编程文件(.pof或.sof文件)下载至FPGA中。
首先,我们需要设置配置方式和配置芯片,点击Assignments→Device→
:
在设置完成后,需要重新运行全编译。
然后,点击Tools→
下载电缆
配置方式
,进入下载编程配置窗口。
.pof编程文件
配置芯片
我们使用的下载电缆是ByteBlasterⅡ,如右图。
安装下载电缆的驱动请见补充教程7:安装QuartusII下载电缆。
最后,在硬件连接正常的情况下,点击
即完成
配置。需要注意的是,在任何情况下插拔下载电缆,都必须关电。
6.ModelSim和Testbench
我们在进行功能仿真时,经常需要用到ModelSim和Testbench。由于篇幅的限制,这里只做简要的介绍。
ModelSim的使用请见补充教程8:modelsim使用教程。
Testbench,其实就是测试平台的意思,一般Testbench的结构如下:
Testbench的编写一般使用行为级语法,因为它不需要被综合。而且一般使用元件例化的方法将被验证设计例化至Testbench文件中。下面结合DDS正弦波发生器的设计列举一个testbench的实例。
首先,我们要得到“被验证设计”文件。我们设计的DDS正弦波发生器的顶层文件是一个用原理图方式描述的文件(格式为.bdf),我们可以点击file→Create/Update→
, 得到verilog描述方式的顶层文件,如下:
module DDS_ generater (inclk, reset, enable, control_word, DDS_DATA); input inclk; input reset; input enable; input [5:0] control_word; output [11:0] DDS_DATA;
wire sys_clk;
wire [11:0] SYNTHESIZED_WIRE_0; wire SYNTHESIZED_WIRE_1;
altpll0 Ualtpll0 (.inclk0(inclk),
.areset(reset), .c0(sys_clk));
lpm_rom0 Ulpm_rom0 (.clock(sys_clk),
激励 被验证设计响应检查测试平台Testbench