欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

quartus使用笔记

程序员文章站 2024-02-24 23:28:28
...

Quartus

使能DEV_CLRn等特殊引脚功能

quartus使用笔记

在bdf文件中检索网络net

选中网络,Ctrl+F,可以查找所需的net!

quartus使用笔记

LogicLock操作步骤

参考

quartus使用笔记  quartus使用笔记

create new region

创建区域

  1. 打开逻辑锁区域Logic Regions窗口 [Alt+L]

quartus使用笔记

   2、添加逻辑区域

quartus使用笔记

3、定位逻辑锁在Chip Planner的区域:

quartus使用笔记

quartus使用笔记

4、将设计模块适配到新建的Region

quartus使用笔记

5、关闭Optimize I/O 选项

quartus使用笔记

quartus使用笔记

quartus使用笔记

6、编译设计quartus使用笔记

7、反标注节点位置[未找到]

quartus使用笔记
Altera建议使用增量式编译方式而不是使用逻辑锁,来保持当前的综合和适配结果!

Incremental Compilation操作步骤

参考quartus使用笔记

quartus使用笔记

ModelSim路径

quartus使用笔记

关闭网络连接

quartus使用笔记

生成TestBench模版

quartus使用笔记

执行结果:

quartus使用笔记

TestBench样例:

//This is a simple modelSim simulation flow demo

//Function: simple testbench of pll_tb.v

//2004-12-2 Westor

 

`timescale 1ns/100ps

 

module pll_ram_tb ();

 

reg        clk_in;    //50MHz

reg   rst;       //asynchronous reset, low-effect

reg  [7:0] data_in;   //data to ram

reg        wr_en;      //wirte enable

reg        rd_en;      //read enable

reg  [4:0] rd_addr;     //read addrress

 

wire       clk_out;      //clock output, 100MHz

wire       lock;         //pll lock indicator

wire       package_full; //indicate the ram is full     

wire [7:0] data_out;    //data to ram

 

initial

     begin

         clk_in = 0;

         rst    = 0;

         data_in = 8'h55;

         rd_en   = 1'bz;

         wr_en   = 1'bz;

         rd_addr = 5'b0;

        

         # 500

         rst     =1;

        

         # 1500

         rst     =0;

        

         # 1700

         rst     =1;

        

         repeat (9)

         write_ram;

        

         repeat (5)

         read_ram;

        

         repeat (8)

         begin     

         # 100

         write_ram;

        

         # 5

         read_ram;

         end

         # 8000

         $stop;

     end

 

always # 10 clk_in =~clk_in;

 

task write_ram;

     begin

     # 5

     wr_en = 1;

     data_in = data_in + 1;

    

     # 20

     wr_en = 1'bz;

     end      

endtask

 

 

task read_ram;

     begin

     # 5

     rd_en = 1;

     rd_addr = rd_addr + 1;

    

     # 20

     rd_en = 1'bz;

     end

endtask

 

 

pll_ram pll_ram_u1(clk_in, rst,

                data_in,

                wr_en, rd_en, rd_addr,               

                clk_out, lock,

                package_full,

                data_out

                );

 

endmodule

将测试文件添加到工程设置:

重要-注意名称填写来自上一步骤生成的vt文件。

quartus使用笔记

quartus使用笔记

quartus使用笔记

quartus使用笔记

quartus使用笔记

波形VWF文件仿真

quartus使用笔记

quartus使用笔记

quartus使用笔记quartus使用笔记

quartus使用笔记quartus使用笔记quartus使用笔记

Virtual Pin设置

quartus使用笔记

quartus使用笔记

 quartus使用笔记

quartus使用笔记

quartus使用笔记

quartus使用笔记

quartus使用笔记

quartus使用笔记

Quartus II Support for Verilog 2001

quartus使用笔记

编译结果查看:

需要选中fitter中的summary,才能看到最终的结果:

quartus使用笔记

查看内部寄存器在ModelSim仿真的值:

f1.Maintain Hierachy 设置为 “on”

quartus使用笔记

quartus使用笔记

f2.使用层次化调用的方法即”.”,添加wire信号到要观测的寄存器

  样例:wire name = 模块名.子实例名…端口定义名或寄存器名(一定不能用实例化的实参名)

quartus使用笔记

quartus使用笔记

quartus使用笔记

quartus使用笔记

特殊情况:SISR0寄存器虽然定义为reg[15:0]但由于某些位没有驱动,实际生成的网表是按SISR0_0、SISR0_1…来定义的,可以右击->view declaration在.vo文件查看。

quartus使用笔记quartus使用笔记quartus使用笔记

quartus使用笔记

quartus使用笔记quartus使用笔记

PLL模块的输入时钟一定要和设置的实际输入时钟一致否则没有输出信号:

quartus使用笔记

根据`timescale 1ns/10ps定义来计算时钟输入inclk0。

(1ns是时间单位,10ps是仿真精度)

quartus使用笔记

quartus使用笔记

充分使用模版功能查看verilog运算符功能,以及systemverilog语法:

quartus使用笔记

quartus使用笔记

使用verilog2001构建可定制参数的v文件:

quartus使用笔记

1.使用了generate语法,但是还不属于systemverilog,systemverilog是verilog的扩展,语法更简洁更灵活。使用systemverilog可以更改文件后缀名为.sv或者在verilog HDL input选项选择SystemVerilog

quartus使用笔记

2.一开始编译不成功是因为使用了`include语句,直接通过Add Files添加到工程即可。否则报错…not support synthesizing nested module declaration!这个问题困惑了很久,一只以为设置宏parameter参数的格式不对。

3.Genenrate语法一共3种:

   Generate语法要求必须有begin,且begin后面必须有name(实例化使用);genvar变量在一个文件中通用不能重复定义,变量名称不能一样,begin后面的name名称也是一样。

   1)If:

   2)Case:

   2)For:

4、verilog2001的在quartus2的支持:借助自带的help文档,这个功能是需要单独安装的在13.0sp1版本quartus.

quartus使用笔记quartus使用笔记

   Quartus/13.0sp1/quartus/common/help/webhelp/master.htm#mergedProjects/quartus/gl_quartus_welcome.htm

5、systemverilog 在 quartus2的支持:

     同4.

//-----------------------------------------------------------------------------
wire FANA_flag;
wire FANB_flag;
//`include "fan_det.v"//Wrong:can not add this words,case to false:Not support synthesizing nested module declaration.
fan_det  #(2) fan_det_inst
   (
         .clk(clk),//40mHz
			.rst(rst2_n),
         .in({FANB_STUS,FANA_STUS}),//fan pin
			.out({FANB_flag,FANA_flag}) //state out 
   );
//---------------------------------------------------------------------------------------------
/*
 Detect the fan state.
*/
module fan_det
#(parameter N=1)//the number of the fan.
(
         input clk,//40mHz
		input rst,
         input [N-1:0] in,//fan pin
		output reg [N-1:0] out //state out 
);
reg            clk_div;                   //0x1A286分频输出
reg     [15:0] clk_count;                 //分频计数器
reg     [15:0] min;                       //一分钟寄存器
//
reg        [N-1:0]    FAN_D1;      //用于FAN_STUS输入同步,且转为单CLK脉冲
reg        [N-1:0]    FAN_D2; 
wire       [N-1:0]   FAN_trigger;         //风扇单CLK脉冲输入
//
reg    [15:0]  FAN_count[0:N-1];           //风扇转速脉冲计数器     
//
assign    FAN_trigger =  (FAN_D1)  & (~FAN_D2);//bit &
aaa@qq.com(posedge clk or negedge rst) //同步
   begin
     if(~rst)
       begin
         FAN_D1 <= {N{1'b0}};
         FAN_D2 <= {N{1'b0}};
       end
     else
       begin
         FAN_D1 <= in;
         FAN_D2 <= FAN_D1;
       end
   end    
//SystemVerilog
/*
ACTION: 	Set the Verilog Input Version for the file to SystemVerilog_2005 
or save the file as a SystemVerilog Design File (.sv).
*/
genvar i;
genvar j;
generate
  for(i=0;i<=N;i=i+1)
   begin:fan_cnt//name
		aaa@qq.com(posedge clk or negedge rst)
		  begin
			 if(!rst)
				FAN_count[i]<=16'h00;
			 else
				begin
if(( min >= 16'h0BEB ) && ( FAN_trigger[i] ))//上电5秒后开始计数,FANA_STUS为高
					 FAN_count[i] <= FAN_count[i] + 16'h01;
				  if( min == 16'h5372 )    //计数35秒后,清零
					 FAN_count[i] <= 16'h00;
				end
		  end
   end
endgenerate
//
generate
  for(j=0;j<=N;j=j+1)
   begin:fan_cout//name
		aaa@qq.com(posedge clk or negedge rst)
		  begin
			 if(!rst)
				out[j] <= 1'b0;
			 else
				if( ( min >= 16'h5370 ) && ( min<=16'h5372 ) )
				  begin
			 if(FAN_count[j] >= 12'h3E8) //半分钟分扇发出的脉冲大于1000个
						begin
						  out[j] <= 1'b0;
					 end
					else
						begin
						  out[j] <= 1'b1;  //小于风扇转速过低标志位置高
						end
					end
		  end
	end
endgenerate
endmodule 

UDP使用:

quartus使用笔记

quartus使用笔记

quartus使用笔记

quartus使用笔记

不可忽略的警告:

1、使用第三方EDA工具仿真PLL需要1ps的时间单位:

quartus使用笔记

  • Warning (202000): An incorrect timescale is selected for the Verilog Output (.VO) file of this PLL design. It's required that the timescale should be 1 ps when simulating a PLL design in a third party EDA tool.

2、unsafe behavior 暗指毛刺glitch:

quartus使用笔记

quartus使用笔记

3、Modelsim Altera performance:

quartus使用笔记

辅助编辑器Notepad++quartus自带的编辑器功能有限,唯一特色就是具有Template功能

1、分栏功能使用:

左击文件的标签页不放拖到空白处,放开后选择“复制到另一视图”

quartus使用笔记

右击分页线选择旋转可以改变分栏方向

quartus使用笔记

2、更改文本的编码,在quartus中显示中文:

quartus使用笔记

3、层次折叠及快捷键:

quartus使用笔记

折叠快捷键推荐”ALT+2”

quartus使用笔记

4、快速打开文件所在的文件夹:

quartus使用笔记

5、带颜色代码粘贴功能:

先选中要粘贴的代码,再选择”插件->NppExport->Copy RTF tp clipboard”

quartus使用笔记

6、值得推荐的自带Template功能:

quartus使用笔记

芯片验证UVM方法:

quartus使用笔记quartus使用笔记

仿真分类:

quartus使用笔记

Testbench参考模板:

quartus使用笔记quartus使用笔记

光标定位设置:

quartus使用笔记

add wave语法:

quartus使用笔记

quartus使用笔记

add wave -hex -group CONTROL \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_15 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_14 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_13 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_12 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_11 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_10 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_9 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_8 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_7 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_6 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_5 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_4 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_3 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_2 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_1 \

/AILC_vlg_tst/i1/inst3/inst2/CONTROL_0

 

force语句:

在两个仿真器中,force保持一个值直到它被release,而一个deposited值保持其值仅到信号更新。在Verilog-XL中, force命令使force节点减速,但可以在一个表达式和一个信号之间创建一个连续关系。它可以为一个位或部分赋值,而$deposit只能影响整个线网或寄存器。

quartus使用笔记

使用相对NativeLink路径:

   使用这种方式路径比较干净易于查看,没有特殊符号产生。

quartus使用笔记

quartus使用笔记

 

自定义仿真脚本

  先使用自动生成,拷贝修改后改为自定义,可以保留自己需要的波形及仿真操作:

quartus使用笔记

同时关闭自动sim脚本生成功能,否则脚本回循环不能定位到上图指定的脚本:

quartus使用笔记

关于路径空格报错:

 有3种解决方式:

1、

quartus使用笔记

2、在空格前加反斜杠

quartus使用笔记

3、使用花括号

quartus使用笔记

仿真文件:

VCD

quartus使用笔记

quartus使用笔记

Wlf文件

quartus使用笔记

do文件

quartus使用笔记

 

Task & event:

quartus使用笔记

$monitor:

quartus使用笔记

Toggle Leaf Names:

    quartus使用笔记    

ModelSim保存波形设置:

quartus使用笔记

quartus使用笔记

quartus使用笔记

synthesis preserve:

这个命令不适用于端口,适用于内部逻辑,只要实际用到了该reg基本可以保留,

一般找不到(在modelsim的列表里查找)是因为虽然定义了实际没有使用到,被优化掉了。

quartus使用笔记

quartus使用笔记

引脚配置修改QSF文件:

quartus使用笔记

Quartus裁剪:

quartus使用笔记

Dsp builder 安装:

32位 dsp builder 安装步骤 2018.11.25 wuhou

先安装matlab,再重新安装dsp builder:

1、合并两个license文件,并新建LM_LICENSE_FILE路径在用户和系统环境变量

2、替换目录下的两个dll,原先的dll改为bk

C:\altera\13.0sp1\quartus\dsp_builder\bin

验证:找一个自带的demo,双击看是否可以编译及Export:

quartus使用笔记

quartus使用笔记

 

Dsp builder  Path设置:

quartus使用笔记

查看引脚配置类型:

quartus使用笔记

FIR IP核使用测试:

简介:

在时域中,FIR滤波器的输入/输出就是一个输入信号与单位脉冲相应的卷积。离散方程为y(n)=x(n)*h(n)=∑x(k)h(n-k)=∑h(k)x(n-k),其中y(n)为滤波输出,x(n)为采样数据,h(n)为滤波抽头系数.设计FIR滤波器就是要找到N个系数N-1阶滤波器通常需要N个系数描述,通常需要N个乘法器和N-1个2输入加法器实现。根据FIR表达式,滤波器实质上就是进行乘累加运算,乘累加的次数由滤波器阶数决定。其串行结构如图:

quartus使用笔记

  对于滤波器的因数也可以用Matlab的FDATool工具得到,一般可在DSP程序中使用,对于FPGA可直接使用自带的IP 核。

quartus使用笔记

quartus使用笔记

实验参数:

  36阶,16位无符号数据输入,带通(2.5K~7.5K),采样频率设为20KHz,可以设置输入通道数,这里选择了1个作为测试,可视具体情况而定。

quartus使用笔记

quartus使用笔记

quartus使用笔记

quartus使用笔记

Matlab仿真文件说明:

 一共四个文件,其中output.txt为执行之后的输出文件,主文件如下所示为fir_1_model.m直接运行即可看到滤波器效果。主要用来验证FIR滤波因数的正确性。

quartus使用笔记

quartus使用笔记

quartus使用笔记

quartus使用笔记

重要使用说明:

1、Quartus13.032位上可以使用FIR IP核,但64位电脑不行,对于64位电脑建议使用15.0版本。

2、同时对应的IP核需要对应的**文件,否则仿真会报错,license见附录。

3、对于signal tap文件打开卡顿时由于你编译次数太多,保留了太多log,导致文件很大,建议删去。

quartus使用笔记

4、想要读取ram模块内容时建议先打开quartus使用笔记 ,把文件下载到FPGA,再打开quartus使用笔记 直接监控或者quartus使用笔记读取状态并设置自己想要的标志位。Ram模块可以读取也可以通过Jtag写入注意选择正确的更新图标,不要弄反了^_^

5、大的工程尽量分开为几个小工程编译,否则时间太耗费了。

6、IP核的目录在 quartus使用笔记,和quartus是单独并列的一个文件夹,一共不到800MBits对于13.0,作为精简版如不需要可以去掉。实际单独拷贝过来,试过不能用(会卡在启动界面上),还是需要完成安装。

 

EPCQ:

quartus使用笔记

quartus使用笔记

时序分析:

quartus使用笔记

quartus使用笔记

1、打开时序分析工具tools->TimeQuest Timing Analyzer

quartus使用笔记

2、建立时序网表Netlist->Create Timing Netlist

quartus使用笔记

3、新建sdc文件并编辑,插入Create Clock约束【告诉时序分析输入时钟的频率大小】,完全不需要手写任何代码

quartus使用笔记

quartus使用笔记

关于高版本打开低版本产生的错误警告可以通过修改qsf文件屏蔽

quartus使用笔记

quartus使用笔记

quartus使用笔记

 

 

相关标签: Quartus