赞
踩
选中网络,Ctrl+F,可以查找所需的net!
参考:
create new region
创建区域
2、添加逻辑区域
3、定位逻辑锁在Chip Planner的区域:
4、将设计模块适配到新建的Region
5、关闭Optimize I/O 选项
6、编译设计
7、反标注节点位置[未找到]
Altera建议使用增量式编译方式而不是使用逻辑锁,来保持当前的综合和适配结果!
参考:
执行结果:
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文件。
需要选中fitter中的summary,才能看到最终的结果:
f1.Maintain Hierachy 设置为 “on”
f2.使用层次化调用的方法即”.”,添加wire信号到要观测的寄存器
样例:wire name = 模块名.子实例名…端口定义名或寄存器名(一定不能用实例化的实参名)
特殊情况:SISR0寄存器虽然定义为reg[15:0]但由于某些位没有驱动,实际生成的网表是按SISR0_0、SISR0_1…来定义的,可以右击->view declaration在.vo文件查看。
PLL模块的输入时钟一定要和设置的实际输入时钟一致否则没有输出信号:
根据`timescale 1ns/10ps定义来计算时钟输入inclk0。
(1ns是时间单位,10ps是仿真精度)
充分使用模版功能查看verilog运算符功能,以及systemverilog语法:
1.使用了generate语法,但是还不属于systemverilog,systemverilog是verilog的扩展,语法更简洁更灵活。使用systemverilog可以更改文件后缀名为.sv或者在verilog HDL input选项选择SystemVerilog。
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/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 &
- always@(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
- always@(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
- always@(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使用:
1、使用第三方EDA工具仿真PLL需要1ps的时间单位:
2、unsafe behavior 暗指毛刺glitch:
3、Modelsim Altera performance:
辅助编辑器Notepad++:quartus自带的编辑器功能有限,唯一特色就是具有Template功能
1、分栏功能使用:
左击文件的标签页不放拖到空白处,放开后选择“复制到另一视图”
右击分页线选择旋转可以改变分栏方向
2、更改文本的编码,在quartus中显示中文:
3、层次折叠及快捷键:
折叠快捷键推荐”ALT+2”
4、快速打开文件所在的文件夹:
5、带颜色代码粘贴功能:
先选中要粘贴的代码,再选择”插件->NppExport->Copy RTF tp clipboard”
6、值得推荐的自带Template功能:
芯片验证UVM方法:
仿真分类:
Testbench参考模板:
光标定位设置:
add wave语法:
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保持一个值直到它被release,而一个deposited值保持其值仅到信号更新。在Verilog-XL中, force命令使force节点减速,但可以在一个表达式和一个信号之间创建一个连续关系。它可以为一个位或部分赋值,而$deposit只能影响整个线网或寄存器。
使用这种方式路径比较干净易于查看,没有特殊符号产生。
先使用自动生成,拷贝修改后改为自定义,可以保留自己需要的波形及仿真操作:
同时关闭自动sim脚本生成功能,否则脚本回循环不能定位到上图指定的脚本:
关于路径空格报错:
有3种解决方式:
1、
2、在空格前加反斜杠
3、使用花括号
仿真文件:
VCD
Wlf文件
do文件
这个命令不适用于端口,适用于内部逻辑,只要实际用到了该reg基本可以保留,
一般找不到(在modelsim的列表里查找)是因为虽然定义了实际没有使用到,被优化掉了。
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:
Dsp builder Path设置:
查看引脚配置类型:
简介:
在时域中,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表达式,滤波器实质上就是进行乘累加运算,乘累加的次数由滤波器阶数决定。其串行结构如图:
对于滤波器的因数也可以用Matlab的FDATool工具得到,一般可在DSP程序中使用,对于FPGA可直接使用自带的IP 核。
实验参数:
36阶,16位无符号数据输入,带通(2.5K~7.5K),采样频率设为20KHz,可以设置输入通道数,这里选择了1个作为测试,可视具体情况而定。
Matlab仿真文件说明:
一共四个文件,其中output.txt为执行之后的输出文件,主文件如下所示为fir_1_model.m直接运行即可看到滤波器效果。主要用来验证FIR滤波因数的正确性。
重要使用说明:
1、Quartus13.0在32位上可以使用FIR IP核,但64位电脑不行,对于64位电脑建议使用15.0版本。
2、同时对应的IP核需要对应的破解文件,否则仿真会报错,license见附录。
3、对于signal tap文件打开卡顿时由于你编译次数太多,保留了太多log,导致文件很大,建议删去。
4、想要读取ram模块内容时建议先打开 ,把文件下载到FPGA,再打开 直接监控或者读取状态并设置自己想要的标志位。Ram模块可以读取也可以通过Jtag写入注意选择正确的更新图标,不要弄反了^_^。
5、大的工程尽量分开为几个小工程编译,否则时间太耗费了。
6、IP核的目录在 ,和quartus是单独并列的一个文件夹,一共不到800MBits对于13.0,作为精简版如不需要可以去掉。实际单独拷贝过来,试过不能用(会卡在启动界面上),还是需要完成安装。
1、打开时序分析工具tools->TimeQuest Timing Analyzer
2、建立时序网表Netlist->Create Timing Netlist
3、新建sdc文件并编辑,插入Create Clock约束【告诉时序分析输入时钟的频率大小】,完全不需要手写任何代码
singal tap:
改了出发条件的模式选项也需要重新编译:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。