quartusii抢答器六人 ii中$fopen不能写在模块中吗?

Quartus II的编译速度一直是个问题:太慢!尤其在进行FPGA调试时,加入SignalTAP II后编译时间明显延长,一次就要15分钟(对我当前的机器配置和设计来说)。 使用Quartus II快5年了,这是一个很深刻的体会,也带来几个好处。1. 我在等待编译结果时不得不翻翻书、看看文档,由此也多学了许多知识。2. 我不得不尝试提高使用SignalTAP II的效率,尽量减少重复编译的次数,由此也积累了些好的调试习惯。3. 我开发了几个vjtag调试工具,可以不经过编译就控制(可控性)和观察(可测性)FPGA内部的工作情况。4. 我认识到了软件可编程比硬件可编程的优势,软件的编译和更新比硬件配置文件的编译和更新快多了。5. 我认识到了仿真的重要性,仿真比调试不但有更好的可控性和可测性,更重要的是反复编译的速度快了许多。 在等待编译结果时最好不要让PC机执行其他对内存和CPU占用率高的程序:比如听歌看电影、硬盘查毒、反复点击网页等等。否则,编译时间一定短不了,白白浪费了生命。 在Quartus II的Tools - Options - General - Processing下面有一个性能选项,在Help文档里是这样介绍的: Run design processing at a lower priority (recommended for single processor machines): Runs a design process, such as a compilation or simulation, at a lower priority. This option is recommended for single processor machines because design processing tasks may use enough system resources to disable the Quartus II user interface for the duration of the processing task. Turn this option on if you want to use the Quartus II user interface while running a design process on a single processor machine. This option is turned off by default. 这一选项缺省是关闭的,也就是说Quartus II的编译进程是运行在正常的优先级下的。如果打开这一选项,Quartus II的编译进程的优先级会低于正常的进程,带来的效果是其它程序可以运行得更快,当然,编译就更慢了。提醒一句,不要由于看到了recommended这个词就毫不犹豫地打开这一选项。 前些天,一个偶然的情况下,我在Windows任务管理器里发现了手工改变进程优先级的方法。当然,对于已经知道这一秘密的朋友来说,这一雕虫小技算不了什么,但是我还是要写出来,让更多的朋友受益。 在Windows任务管理器的进程一栏,列出了CPU当前运行的各个进程,并且给出了内存使用情况。在任意一个进程上点击右键,可以看到一个“设置优先级”的功能。察看大部分进程的优先级,都在“标准”状态。通过把一个进程的优先级设置为高于“标准”,可以给该进程分配更多的CPU资源,相应地,其运行速度也就上去了。 在前面提到的Quartus II的性能选项中,只有两种选择:关闭时,编译进程运行在“标准”;打开时,编译进程运行在“低于标准”。通过手工修改Quartus II编译进程的优先级选项,可以设置编译进程运行在“高于标准”,甚至是“高”的优先级。这里,不建议设置为优先级最高的“实时”,因为对于Windows的稳定正常运行,应该有比Quartus II编译更重要的进程。 Quarutus II编译过程中,通常要顺序运行quartus_map、quartus_fit、quartus_asm、quartus_tan四个进程。其中前两个进程占用了编译时间的95%以上。手工修改这两个进程的优先级就可以实现调整编译速度的目的。 需要特别提醒的是,正常情况下,把Quartus II的性能选项关闭即可得到较佳的编译速度,不需要手工更改进程的优先级。但是,如果在Quartus II的编译过程中,可能会有意或无意地运行其它程序,而这些程序的运行性能又是可以牺牲的,那么可以考虑采用手工修改进程优先级的方法,保证Quartus II的编译过程不受干扰。 此外,在任务管理器里修改不是很方便,也许存在命令行修改进程优先级的方法。如果存在的话,可以结合Quartus II的命令行执行编译的方法,实现自动修改编译进程优先级。 PS: 倒数第二段话是本文的核心。 此外,对于提高工作效率和节省时间来说,享受编译的过程并充分利用时间积极思考是比提高软件运行速度更有效的的方法。反思一下,两次编译之间的时间是否比用于编译的时间更长?提高人脑的效率远比提高电脑的效率意义重大和深远。
* Name: SyntaxHighlighter.brushes.Verilog
* Author: Yuphone Chang
* Email: yuphone@qq.com/
* Create Date: 5.18, 2010
SyntaxHighlighter.brushes.Verilog = function()
var datatypes = 'reg integar unsigned ' +
'wire tri wand triand tri0 tri1 supply0 supply1 trireg ' +
'parameter specparam defparam event ';
var primitives = 'and nand or nor xor xnor ' +
'buf not ' +
'bufif0 bufif1 notif0 notif1 '
'pullup pulldown ' +
'pmos rpmos nmos rnmos ';
var keywords
= 'module endmodule ' +
'input output inout ' +
'begin end ' +
'assign deassign always initial genvar ' +
'forever repeat disable wait ' +
'function endfunction' +
'endtask ' +
'generate endgenerate ' +
'specify endspecify ' +
'posedge negedge ' +
'if else for while ' +
'case casex casez endcase default ' +
'include timescale ' +
'ifdef endif ' +
'celldefine endcelldefine ' +
'attribute '
'fork join ';
var functions = 'display displayb displayo displayh ' +
'write writeb writeo writeh ' +
'strobe strobeb strobeh strobeo ' +
'monitor monitorb monitoro monitorh ' +
'fopen fclose ' +
'readmemb readmemh ' +
'finish stop ' +
'time stime realtime timeformat ' +
'printtimescale ' +
'setup hold setuphold skew recovery period width ';
this.regexList = [
// one line comments
{ regex: SyntaxHighlighter.regexLib.singleLineCComments,css: 'comments' },
// multiline comments
{ regex: SyntaxHighlighter.regexLib.multiLineCComments, css: 'comments' },
// double quoted strings
{ regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' },
// single quoted strings
{ regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' },
// constants
{ regex: new RegExp("[0-9]+['][bBoOdDhHeEfFtT][0-9a-fA-FzZxX_]+", 'g'), css: 'constants' },
// datatypes
{ regex: new RegExp(this.getKeywords(datatypes), 'gm'), css: 'color1 bold' },
// primitives
{ regex: new RegExp(this.getKeywords(primitives), 'gm'), css: 'color2 bold' },
// keywords
{ regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword bold' },
// functions
{ regex: new RegExp(this.getKeywords(functions), 'gm'), css: 'functions bold' }
SyntaxHighlighter.brushes.Verilog.prototype = new SyntaxHighlighter.Highlighter();
SyntaxHighlighter.brushes.Verilog.aliases = ['verilog', 'v'];例程是产生128点的高斯信号,可以根据需要修改产生的波形,数据存储到mif文件的方法相同。
x=-0.0017;
Peak=100000;
for i=-64:64
a(i+65)=exp(x*i*i);
for i=1:129
gaosi_sig(i)=round(Peak*a(i))-1;
gaosi_sig =floor((gaosi_sig/max(gaosi_sig))*(2^(width-1)-1));
fid=fopen('gaosi.mif','w');
fprintf(fid,'WIDTH=12;\n');
fprintf(fid,'DEPTH=256;\n');
fprintf(fid,'ADDRESS_RADIX=UNS;\n');
fprintf(fid,'DATA_RADIX=DEC;\n');
fprintf(fid,'CONTENT BEGIN\n');
for i=1:129
fprintf(fid,'\t%d:%d;\n',i-1,gaosi_sig(i));
fprintf(fid,'END\n');
完成之后,可以将mif文件导入ROM的IP核中,就可以了~~~
使用matlab生成sine波mif文件
1使用matlab生成sine波mif文件在使用altera 的FPGA中的rom过程中常常会使用到.mif文件或.hex文件。对于初学者,无论mif还是hex都是很令人疑惑的东西,这里就对mif文件...
利用matlab进行ROM初始化mif文件方法(转)
工具使用版本:Quartus II 13.0+Matlab2012d
撰写人:Strive_JP
http://comm.chi...
用Quartus II创建并仿真ROM的步骤:1.在Quatus工程下生成一个ROM2.编写.mif文件,作为ROM的初始化文件3.将.mif文件拷贝到Modelsim工程下4.进行Modelsim仿...
*详细原因:
交 如何用&em&MATLAB&/em&做FPGA中&em&ROM&/em&中的.&em&MIF&/em&文件 3积分 立即下载 ...
在进行FPGA设计时,经常要对rom模块进行初始化。ISE或Quartus II软件本身具备的初始化功能对于较小的rom是行之有效的,但面对大容量的rom时就显得捉襟见肘了。而matlab作为一神器,...
使用quartus ii 写DDS模块时需要生成0-0.5pi范围的正弦查找表,需要使用ROM核,初始化ROM需要使用.mif文件或hex文件。...
主要是通过matlab生成mif的形式,再在fpga中直接读取mif中数据,来生成载波。。...
1.用quartus II创建ROM的步骤:
Tool ------- Megawizard plug-in managerm -------
memory compiler -------- R...
没有更多推荐了,fid=fopen('./test.mif','W' ); % test.mif is the file which you want to use in Quartus II %
fprintf(fid,'WIDTH=2;\n'); % WIDTH is the word band %
fprintf(fid,'DEPTH=4096;\n\n'); % DEPTH is the the number of datas %
fprintf(fid,'ADDRESS_RADIX=UNS;\n');
fprintf(fid,'DATA_RADIX=UNS;\n\n');
fprintf(fid,'CONTENT BEGIN\n');
y = randi([0 3],1,4096);
for x = 1:4096
fprintf(fid,'%d:%d;\n',x-1,y(x));
fprintf(fid,'END;'); % the end of the file %
fclose(fid);
用MATLAB生成*.mif(QUARTUS II)内存初始化文件
【转载地址】http://blog.sina.com.cn/s/blog_58942aff01009grm.html
做FPGA设计时经常要调用芯片内存。特别对于ROM,内存的初始化就显得比较重...
编写MATLAB脚本产生正弦信号的mif文件
信号发生器可以用一个存储器实现,根据不同的地址信号,输出不同的信号值即可。配置RAM或ROM中的数据可以用mif文件,mif文件是存储器初始化文件,即memory
initialization f...
matlab输出mif文件
/r/nN=linspace(0,2*pi,101);M=127.5*(sin(N)+1);number=[0:100];for i=1:101comer(i)=:;endfor i=1:101sem...
使用matlab生成sine波mif文件
1使用matlab生成sine波mif文件在使用altera 的FPGA中的rom过程中常常会使用到.mif文件或.hex文件。对于初学者,无论mif还是hex都是很令人疑惑的东西,这里就对mif文件...
将Bmp图像文件转成mif格式的存储,用于例化ROM
用MATLAB生成MIF文件
程序:close all
clcdepth =256; %存储器的单元数
widths = 8;%数据宽度为8位
N = 0 :255;
s =sin(2*pi *N/256);%...
mif文件生成方法
mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据。常见生成方法:
Quartus自带的mif编辑器生成mif软件生成高级编程语...
没有更多推荐了,利用FPGA的IP核实现FIR滤波器
利用FPGA的IP核实现FIR滤波器&自己在Chinaaet的第一篇博客,呵呵~记录一下,利用Altera提供的IP核进行FIR滤波器的设计流程,以及中途遇到的一些坑。主要是按照杜勇老师编写的《数字滤波器的MATLAB与FPGA实现:Altera/Verilog版》 进行的。一、首先是设计指标:采用最优化设计方法(firpm),设计一个阶数为16阶(长度为17)的线性相位低通FIR滤波器,截止频率为500hz,fs=2000hz。,系数量化位数为12bit,输入数据位宽为12bit,输出数据位宽为25Bit,系统时钟为2khz。&二、设计流程:(1)利用MATLAB设计滤波器系数,浮点数类型。(2)Matlab测试滤波器性能,输入观察输出。(3)利用FPGA的FIR滤波器IP核设计滤波器。(4)编写testbench,测试滤波器性能。输入Matlab产生的激励文本文件, & & &&&& & & 输出硬件处理后的信号,写入文本文件中。(5)Matlab分析硬件处理后保存在文本文件中的信号。三、设计步骤:1,利用MATLAB设计滤波器系数。代码如下:function hn=Fir_Coefficient_DesignN=17; & & &%滤波器长度Sample_Freq=2000; & %采样频率fc=500; & &%低通滤波器的通带截止频率B=12; & & &%量化位数Cut_Off_Freq=[0 500 700 Sample_Freq/2];Cut_Off_Freq=Cut_Off_Freq./(Sample_Freq/2); %归一化Fir_Amplitude=[1 1 0 0];
Fir_Coefficient=firpm(N-1,Cut_Off_Freq,Fir_Amplitude);hn=Fir_Cfreqz(Fir_Coefficient,1,1024,Sample_Freq);&注意MATLAB中频率归一化是针对fs/2,即采样率的一半。接下来将滤波器系数写入文本文件中,fid=fopen('Fir_Coefficient.txt','w');for k=1:length(Fir_Coefficient) & & & & & fprintf(fid,'%.14f',Fir_Coefficient(k));
& & & if(k~=length(Fir_Coefficient) ) & & & & & & & & &fprintf(fid,'\r\n'); & & & endendfclose(fid);由于采用FIR Complier13.0,其中的用户手册有这么一句:&&需要注意的就是最后一个系数后面不能有回车,否则导入系数文件的时候又会被FIR Complier识别为一个新的系数。这样,系数就被写进了文本文件Fir_Coefficient.txt(2)Matlab测试滤波器性能,输入观察输出。&&&&思路就是生成两个信号,一个在通带内,一个在阻带内,然后调用filter函数进行滤波处理,观察输出信号的频谱。代码如下:&&&&f1=200; & & & %信号1频率为200Hzf2=800; & & & %信号2频率为800HzFs=2000; & & &%采样频率为2KHzN=12; & & & & %量化位数t=0:1/Fs:1;c1=2*pi*f1*t;c2=2*pi*f2*t;s1=sin(c1);%产生正弦波s2=sin(c2);%产生正弦波s=s1+s2; & %产生两个单载波合成后的信号s=s/max(abs(s));%归一化处理Q_s=round(s*(2^(N-1)-1));%12比特量化%调用自已设计的滤波器函数对信号进行滤波hn=Fir_Coefficient_DFilter_s=filter(hn,1,Q_s);然后观察输入输出频谱:可以看到800hz处的信号被衰减在-40db一下,符合要求。&&接下来将测试信号以二进制数据格式写入Excitation_Signal_Bin.txt文件中,供给第四步仿真FPGA时testbench调用。&&&&fid=fopen('Excitation_Signal_Bin.txt','w');for i=1:length(Q_s) & &B_s=dec2bin(Q_s(i)+(Q_s(i)&0)*2^N,N) & &for j=1:N & & & if B_s(j)=='1' & & & & & tb=1; & & & else & & & & & tb=0; & & & end & & & fprintf(fid,'%d',tb); & & &end & &fprintf(fid,'\r\n');endfprintf(fid,';');
fclose(fid);&(3)利用FPGA的FIR滤波器IP核设计滤波器。&&&&&这个Altera提供的FIR Compiler v13.0有些老了,现在有FIR Compiler II v13.0,也就是2.0版本的FIR的IP核。这里还是用FIR Compiler v13.0吧,2.0版本日后再研究研究。&&&&打开MegaWizard Plug-In Manager,选择FIR Compiler v13.0,特别需要注意的是文件保存位置!只能保存在当前的工程目录下,不能放在别的文件夹里面!如果不放在工程目录下,后一步的modeisim仿真就会出错!&&&&&接下来就是参数设置,单击上方的&Edit Coefficient&,跳出&Coefficient Generator Dialog&对话框,选择下方的&Imported Coefficient Set&,导入之前设计的滤波器系数&Fir_Coefficient.txt&。&&&&输入输出声明如下,输入一路,有符号二进制数,输入位宽12bit,输出选择基于&实际的系数&,&全精度&。输出位宽这里计算出是25bit。& &&&系数量化单位选择12bit,滤波器结构选择&分布式算法,全并行结构&,流水级数选择1,数据和滤波器系数的存储都选择&Logic Cells&。这里 有什么不懂的,就要多看用户手册,写的比较清楚。&& &&&&接下来选择step 2,生成仿真文件,选择&Verilog HDL&,还可以生成.m文件供MATLAB进行仿真分析,最后,Step3: Generate,这样整个滤波器便设计完成了。接下来编写.v文件例化,即可。其输入输出信号参见IP核用户手册即可。这里给出代码参考:&&&&module Fir_FPGA (&&&&reset_n,clk,Xin,&&&&Yout);&&&&&&&&input&&&&&&&&reset_n; & //复位信号,低电平有效&&&&input&&&&&&&& & & & //FPGA系统时钟/数据速率:2kHz&&&&input&&&& signed [11:0]&&&&X &//数据输入频率为2kHZ&&&&output signed [24:0]&&&&Y //滤波后的输出数据&&&&wire ast_sink_valid,ast_source_ready,ast_source_&&&&wire [1:0] ast_source_&&&&wire [1:0] ast_sink_&&&&assign ast_sink_valid=1'b1;&&&&assign ast_source_ready=1'b1;&&&&assign ast_sink_error=2'd0;&&&&fir&&&&u_fir(&&&&&&&&.clk(clk),&&&&&&&&.reset_n(reset_n),&&&&&&&&.ast_sink_data(Xin),&&&&&&&&.ast_sink_valid(ast_sink_valid),&&&&&&&&.ast_source_ready(ast_source_ready),&&&&&&&&.ast_sink_error(ast_sink_error),&&&&&&&&.ast_source_data(Yout),&&&&&&&&.ast_sink_ready(ast_sink_ready),&&&&&&&&.ast_source_valid(ast_source_valid),&&&&&&&&.ast_source_error(ast_source_error));(4)编写testbench,测试滤波器性能。&&&&主要就是将第二步MATLAB生成的激励信号输入module,然后将输出写入文本文件,供下一步MATLAB进行分析。&&&&这里采用Quartus II 软件的&processing-&start-&start Test Bench Template Writer&选项自动生成模块测试文件(Fir_FPGA.vt),该目录自动存储在&工程目录\simulation\modelsim&下,然后打开文件,编写文件即可。主要是时钟,复位信号,按照时钟节拍输入和输出数据。这里给出输入和输出:&&&&//从外部TX文件(SinIn.txt)读入数据作为测试激励integer Preg [11:0] stimulus[1:data_num];initialbegin & //文件必须放置在&工程目录\simulation\modelsim&路径下&&&&&&&&$readmemb(&Excitation_Signal_Bin.txt&,stimulus);&&&&Pattern=0;&&&&repeat(data_num)&&&&&&&&begin&&&&&&&&&&&&Pattern=Pattern+1;&&&&&&&&&&&&Xin=stimulus[Pattern];&&&&&&&&&&&&#clk_//采用并行结构,数据周期等于时钟周期&&&&&&&&endend&//将仿真数据dout写入外部TXT文件中(Response_Signal.txt)integer file_initial
begin & //文件放置在&工程目录\simulation\modelsim&路径下 & & & & & & & & & & & & & & & & & & & & & & & & &&&&&file_out = $fopen(&Response_Signal.txt&);&&&&if(!file_out)&&&&&&&&begin&&&&&&&&&&&&$display(&could not open file!&);&&&&&&&&&&&&$&&&&&&&&endendwire rst_wire signed [24:0] dout_s;assign dout_s = Y & & & & & & & & & //将dout转换成有符号数据assign rst_write = clk& (reset_n);//产生写入时钟信号,复位状态时不写入数据always @(posedge rst_write )&&&&$fdisplay(file_out,&%d&,dout_s);&&&&然后在quartus ii中设置&Assignment-&Settings&选择&EDA Tool Setting&,设置如下:主要就是选择modelsim。&&&&&再选择下边的&Simulation&,设置仿真工具名称(Modelsin-Altera),下面的NativeLink setting,选中第二项&Compile test bench&,选择上面编辑的Fir_FPGA.vt,设置好名称之类的选项后,选择quartus ii 中的&Tool-&Run simulation tool-&RT Simulation&,就可以启动Modelsim进行仿真。仿真完成后,处理后数据自动保存在Response_Signal.txt中。&(5)Matlab分析硬件处理后保存在文本文件中的信号。&&&&&最后,用MATLAB分析Response_Signal.txt中的数据,主要就是输入输出的频谱情况。分析结果如下:&&&&&可以看到,800hz处信号被衰减,达到预期效果。四、总结(1)Fir滤波器阶数=抽头数目减去1。(2)firpm函数使用偶数阶系数,偶对称,总是在奈奎斯特频率处不为0。(3).m文件返回值,可以在函数中指出。例如function hn=Fir_Coefficient_Design代码……Fir_Coefficient=firpm(N-1,Cut_Off_Freq,Fir_Amplitude);hn=Fir_C(4)也是困扰了我一晚上的,生成的IP核按照CB哥的教程放入自己新建的core文件夹下,启动modelsim进行仿真时总是提示& Library auk_dspip_lib not found&,提示找不到这个库。&&&&&后来google了一下,在这个网址下&http://www.alteraforum.com/forum/showthread.php?t=29063&。一哥们给出解答:&Move your generated megafunction files back to the main project folder&,需要把生成的FIR IP核全部文件放在工程目录下,好像这个Bug不影响其他的IP核,呵呵,日后用到其他IP核再说。
关注微信公众号fid=fopen('../test1.mif','W' ); % test1.mif is the file which you want to use in Quartus II %fprintf(fid,'WIDTH=8;/n'); % WIDTH is the word band %fprintf(fid,'DEPTH=128;/n/n'); % DEPTH is the the number of datas %fprintf(fid,'ADDRESS_RADIX=UNS;/n');fprintf(fid,'DATA_RADIX=UNS;/n/n');fprintf(fid,'CONTENT BEGIN/n/n');x=0:1:127;y=round(31*sin(pi*x/64))+32;fprintf(fid,'%d:%d;/n',x,y);fprintf(fid,'END;'); % the end of the file %
fclose(fid);plot(x,y);
mif文件生成方法
mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据。常见生成方法:
Quartus自带的mif编辑器生成mif软件生成高级编程语...
用MATLAB生成*.mif(QUARTUS II)内存初始化文件
【转载地址】http://blog.sina.com.cn/s/blog_58942aff01009grm.html
做FPGA设计时经常要调用芯片内存。特别对于ROM,内存的初始化就显得比较重...
在quartus和modelsim中使用mif和hex文件
.mif和.hex文件都是quartus支持的数据文件格式,常被用作内存初始化文件(rom中可初始化为mif或hex均可,ram初始化只能用hex文件)。可是,modelSim却不支持.mif文件,只...
用MATLAB生成MIF文件
程序:close all
clcdepth =256; %存储器的单元数
widths = 8;%数据宽度为8位
N = 0 :255;
s =sin(2*pi *N/256);%...
编写MATLAB脚本产生正弦信号的mif文件
信号发生器可以用一个存储器实现,根据不同的地址信号,输出不同的信号值即可。配置RAM或ROM中的数据可以用mif文件,mif文件是存储器初始化文件,即memory
initialization f...
没有更多推荐了,}

我要回帖

更多关于 quartusii模块制作 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信