在QuartusII仿真中输入激励波形数据

合集下载

QuartusII与Modelsim波形仿真区别

QuartusII与Modelsim波形仿真区别

QuartusII与Modelsim仿真的区别:用QuartusII写了一个隔直滤波器,运用QuartusII9.1自带的波形仿真,仿真结果与matlab 仿真后的结果比较近似。

仿真结果为:下图为testbench部分代码:LIBRARY ieee;USE ieee.std_logic_1164.all;use IEEE.STD_LOGIC_ARITH.ALL;useieee.std_logic_unsigned.all;useieee.std_logic_signed.all;ENTITY gezhi_filter_vhd_tst ISEND gezhi_filter_vhd_tst;ARCHITECTURE gezhi_filter_arch OF gezhi_filter_vhd_tst ISconstantclk_period :time :=10 ns; -- constants-- signals);END COMPONENT;BEGINi1 :gezhi_filterPORT MAP (-- list connections between master ports and signalsclk,clr,d00,d02,d04,d06,d11,d22,d_sf0,d_sf10,d_sf20,d_sf30,d_sf40,d_sf120,d_sf340,din_x, dou_y);clk_gen: PROCESS-- variable declarationsBEGINclk<='0'; -- code that executes only oncewait for clk_period/2;clk<='1';wait for clk_period/2;END PROCESS;clr_gen: PROCESSBEGIN--clr<='1'; -- code executes for every event on sensitivity list--wait for clk_period/4;clr<='0';WAIT;END PROCESS;din_x_gen: PROCESSBEGINdin_x<=CONV_STD_LOGIC_VECTOR(256,18); -- code that executes only oncewait for clk_period;din_x<=CONV_STD_LOGIC_VECTOR(-12,18); -- code that executes only oncewait for clk_period;din_x<=CONV_STD_LOGIC_VECTOR(32,18); -- code that executes only oncewait for clk_period;din_x<=CONV_STD_LOGIC_VECTOR(39,18); -- code that executes only oncewait for clk_period;din_x<=CONV_STD_LOGIC_VECTOR(-128,18); -- code that executes only oncewait for clk_period;din_x<=CONV_STD_LOGIC_VECTOR(512,18); -- code that executes only oncewait for clk_period;din_x<=CONV_STD_LOGIC_VECTOR(520,18); -- code that executes only oncewait for clk_period;din_x<=CONV_STD_LOGIC_VECTOR(15,18); -- code that executes only oncewait for clk_period;END PROCESS;END gezhi_filter_arch;调用modelsim6.5SE仿真后的波形图:仿真结果中,din_x是输入,dou_y是输出,modelsim结果中的红线X代表未知输出而不是0,导致最后的结果dou_y开头都是0输出,和Quartus仿真结果不同。

Quartus-II调用modelsim仿真方法

Quartus-II调用modelsim仿真方法

方法1:在quartus ii 11.0环境下,编辑生成并修改quartus生成的test bench文件,采用手动设置激励形成波形(有很多缺陷)。

具体步骤:1.新建工程在test目录下创建工程fulladder然后直接finish;2.编写VHDL:New一个VHDL FILE,输入代码:library ieee;use ieee.std_logic_1164.all;ENTITY fulladder IS PORT( a,b,cin : IN STD_LOGIC;s,cout: OUT STD_LOGIC);END fulladder;ARCHITECTURE fulladder OF fulladder ISBEGIN s<= a XOR b XOR cin;cout <=(a AND b) OR (a AND cin) OR (b AND cin);END fulladder;保存在test目录下,文件名为默认fulladder。

3. 在Quartes II 11.0界面菜单栏中选择 Tools-->options选项卡中选中EDA tool options,在该选项卡中下面的ModelSim-Altera一项指定安装路径为(如d:/Altera/11.0/modelsim_ae/win32aloem)4.在Quartes II 11.0界面菜单栏中选择Assignments->Settings。

选中该界面下EDA Tool settings中的Simulation一项;Tool name中选择ModelSim-Altera;Format for output netlist中选择开发语言的类型VHDL或其它,如图:然后点击APPLY应用和OK。

5.设置完成后,编译工程:在Quartus II 11.0界面菜单栏中选择菜单栏选择Processing-->start Compilation,等待编译,无错后会在test目录下生成simulation目录,执行下一步。

Quartusii9.0原理图输入与波形仿真17教学提纲

Quartusii9.0原理图输入与波形仿真17教学提纲

在上图(主界面)圆圈所示有一图标(Detach Window)点击可以将原理 图输入界面从主界面分离出来。点击左下图所示工具栏的第四个在
得到的对话框中点击d:quart/quartus/libraries(这里的路径与各自的软 件安装选择有关)再点开primitives ,其中logic中
是各种逻辑门,pin中含有输入输出符号。如下图所示
本次已输入0,1,2,3 四个数 的2为2进制波形(如上图所 示) 点击保存波形文件。 点击主菜单中Processing— Simulator Tool进入波形仿 真对话框
Simulation mode选择为Functional 然后点击右侧按钮:Generate Functional Simulation Ntlist对波形进行编译 在Simulation input中选定仿真要用的波形文件 ,然后点对话框左下方的Start按钮,进行仿真 仿真结束后点击Report按钮可查看仿真结果
得到的仿真结果如图24,与理 论推算享福相符,可知此次仿 真准确
图24
Quartus ii 9.0 原理图输入与波形仿真
打开Quartus后,点击File-New Project Wizard(如图1), 建立工程文件,一直至图2做事点finish完成创建
图2
二,原理图文件的建立与输入
打开File-New或者点击快捷工具栏白色图标 然后再打开的对话框内点开Design File生成如下图5所示: 点击上图蓝色显示区域(Block Diagram/Schematic File) 双击或选定后点击下方OK均可即可得到原理图输入的 工作界面
图6中从上至下第6个图标为连线所用。逻辑门以及输入输出等的使用只需要 点至其对话框,双击代表它的标识即可如此便可以输入原理图

quartusii 波形仿真设定固定值

quartusii 波形仿真设定固定值

quartusii 波形仿真设定固定值用数字信号完成对数字量进行算术运算和逻辑运算的电路称为数字电路,或数字系统。

从整体上看,数字电路可以分为组合逻辑电路和时序逻辑电路两大类。

其中组合逻辑电路简称组合电路,由最基本的逻辑门电路组合而成,没有记忆功能,输出状态随着输入状态的变化而变化;时序逻辑电路简称时序电路,由最基本的逻辑门电路加上反馈逻辑回路(输出到输入)或器件组合而成的电路,与组合电路最本质的区别在于时序电路具有记忆功能,它的输出不仅取决于当时的输入值,而且还与电路过去的状态有关。

更多请参考数字电路基础安装并破解Quartus-ii 13.1以及对应的Modelsim参考 quartus安装及破解教程参考安装Modelsim、破解Modelsim二、门电路设计触发器实验1、新建工程新建文件夹称夹存放工程,在文件夹下新建四个文件夹第一行选择刚才新建的文件夹位置,第二行建议与文件夹名相同next到这里,根据自己的芯片型号选择本次用原理图以及波形文件来仿真,所以仿真工具Simulation选择None点击finsh即可2、绘图创建原理图文件File-new点击symbol tools,添加控件;点击PIN tool,添加输入输出端。

选择四个与非门,一个非门;两输入,两输出。

控件之间点击并拖动鼠标成先,绘制成下图编译点击三角图标,保存在工程文件中的db文件夹下并编译3、仿真波形创建vwm波形文件同样是点击file-new仿真插入node和bus插入后得到如下波形修改CP的name为时钟clk,选中它再点击时钟波形产生时钟信号同样编辑输入端D,然后进行时序仿真,仿真编译后会自己弹出一个框显示如下波形:如果遇到报错如下:Error: (vsim-19) Failed to access library ‘unisims_ver’at “unisims_ver”. No such file or directory. (errno = ENOENT) 在主界面Tools->launch simulation library Compiler 中,选择output文件位置在qsim目录下:如果遇到如下报错:应该在quartus中设置modelsim的位置三、直接调用触发器实验同上面一样新建一个工程,新建原理图文件。

如何使用Quartus II进行仿真

如何使用Quartus II进行仿真

使用Quartus II进行仿真
我们以一个计数器为例,在QuartusII中对其进行仿真。

打开Quartus II,新建一个工程,新建Verilog HDL文件,程序内容如下:
保存文件名为Count.v,并置顶(在菜单栏选择【Project】→【Set as top-level
Entity】)。

执行编译。

然后,新建一个Waveform文件(或打开现有的也行)
点【Edit】→【End Time】,设置仿真结束时间,
(结束时间设得太长,仿真会很慢,如果确实需要,建议使用modelsim仿真软件)
在name栏空白处,双击一下,弹出节点添加窗口,点击【Node Finder…】,弹出节点选择窗口,
在【Filter】栏中可以选择不同的信号类型,一般选【Design Entry(all names)】,
点击
还可以选择工程中的各个模块,默认是只列出顶层信号,
选中Clk、Rst_n、Cout三个信号后,点击OK返回.vwf文件界面,
选中Cout信号,点右键,选择【Properties】,
在“Radix”一项中,选择“Unsigned Decimal”,(方便观察数值)选中Clk信号,在波形编辑栏中选择
,设定周期、起始、占空比等属性,
选中Rst_n信号,通过编辑栏“0”、“1”设定波形
然后保存文件(这一步很重要),点
,执行仿真
我们可以看到Cout已经有数值变化了,通过还可以放大缩小查看。

Quartus II 使用入门

Quartus II 使用入门

Quartus II 使用入门在这个实验中我们通过一个简单的实例来演示如何使用Quartus II6.0在PLD器件上做一个完整的逻辑设计。

我们将在PLD上实现一个三人表决器的逻辑。

三人表决,以少数服从多数为原则,多数人同意则议案通过,否则议案被否决。

这里,我们使用三个按键代表三个参与表决的人,置“0”表示该人同意议案,置“1”表示该人同意议案;两个指示灯用来表示表决结果,LED1 点亮表示议案通过,LED2 点亮表示议案被否决。

真值表如下:S2 S3 LED1 LED2S10 0 0 0 10 0 1 0 10 1 0 0 10 1 1 1 01 0 0 0 11 0 1 1 01 1 0 1 01 1 1 1 0下面我们就具体来实现这一设计。

以下内容为程序代码:<SCRIPT type=text/javascript><--<BR>GOOGLE_AD_CLIENT ;google_ad_width = 468;google_ad_height = 60;google_ad_format = "468x60_as";google_ad_type = "text_image";google_ad_channel = "";google_color_border = "FFFFFF";google_color_bg = "FFFFFF";google_color_link = "000000";google_color_text = "000000";google_color_url = "000000";//--></Script><Script src="/pagead/show_ads.js"type=text/javascript></Script>1.双击桌面上Quartus II6.0的图标,启动Quartus II6.0软件。

QuartusII12.1sp1使用说明

QuartusII12.1sp1使用说明

使用QuartusII建立1位全加器——基于原理图输入一、建立工程单击File New Project Wizard单击Next,选择工程的工作目录(注意,一个工程的全部文件保存在一个目录下),填写工程名,顶层文件名。

目录名字与后面2个名字最好一致。

单击Next。

此处不需要填,Next。

选择我们实验箱使用的器件EP2C5T144C8此处直接Next直接Finish二、添加设计原理图单击New快捷工具选择Block Diagram/Schematic File双击工作区的空白地方在Name处填入我们要找的器件,例如xor使用相同的方法添加教材Page49的器件,并将器件连接起来。

保存此文件。

三、编译工程四、功能仿真与时序仿真注意,仿真前,必须已经建立好QuartusII的工程。

1、新建波形文件2. 双击上图红色框处添加激励与观察的信号,然后单击下图的Node Finder添加信号。

单击List,添加所有Pins信号单击下图红色框,再单击OK,OK。

需要添加的输入输出信号都添加到了观察区。

对输入进行绘制输入激励信号,如下图所示。

点击processing,Simulation Tool,设置仿真用的波形文件,以及仿真的类型。

然后单击Start Simulator开始仿真。

注意功能仿真,需要先生成仿真网表,软件自动完成。

仿真完成后,可以观察到输出信号的波形,注意此文件是Read-Only。

启动仿真,得到:从上图可以观察到信号的延时。

五、引脚锁定1.选择“Assignments”下assignment editor2.Category下选Pin3.双击“to”,选择原理图的端口,对应location下FPGA的引脚根据以下要求进行引脚锁定4.引脚锁定后需要重新编译试验箱选择模式5.A对应键1B对应键2Ci对应键3S对应D1C0对应D2。

在QuartusII仿真中输入激励波形数据

在QuartusII仿真中输入激励波形数据

Verilog HDL仿真激励的产生收藏一、变量初始化变量初始化的基本原则为:可综合代码中完成内部变量的初始化,Testbench中完成可综合代码所需的各类接口信号的初始化。

初始化的方法有两种:一种是通过initial语句块初始化;另一种是在定义时直接初始化。

当initial语句块中有多条语句时,需要用begin…end或者fork…join语句。

直接初始化,如:reg [7:0] cnt = 8'b00000000;二、时钟信号的产生1、普通时钟信号:a. 基于initial语句的方法:view plaincopy to clipboardprint?parameter clk_period = 10;reg clk;initial beginclk = 0;forever#(clk_period/2) clk = ~clk; endparameter clk_period = 10;reg clk;initial beginclk = 0;forever#(clk_period/2) clk = ~clk; endb. 基于always语句的方法:view plaincopy to clipboardprint? parameter clk_period = 10;reg clk;initialclk = 0;always #(clk_period/2) clk = ~clk; parameter clk_period = 10;reg clk;initialclk = 0;always #(clk_period/2) clk = ~clk;2、自定义占空比的时钟信号:view plaincopy to clipboardprint?parameter High_time = 5,Low_time = 20;// 占空比为High_time/(High_time+Low_time) reg clk;always beginclk = 1;#High_time;clk = 0;#Low_time;endparameter High_time = 5,Low_time = 20;// 占空比为High_time/(High_time+Low_time) reg clk;always beginclk = 1;#High_time;clk = 0;#Low_time;end3、相位偏移的时钟信号:view plaincopy to clipboardprint?parameter High_time = 5,Low_time = 20,pshift_time = 2; // 相位偏移为360*pshift_time/(High_time+Low_time)reg clk_a;wire clk_b;always beginclk_a = 1;#High_time;clk_a = 0;#Low_time;endassign #pshift_time clk_b = clk_a;parameter High_time = 5,Low_time = 20,pshift_time = 2;// 相位偏移为360*pshift_time/(High_time+Low_time)reg clk_a;wire clk_b;always beginclk_a = 1;#High_time;clk_a = 0;#Low_time;endassign #pshift_time clk_b = clk_a;4、固定数目的时钟信号:view plaincopy to clipboardprint? parameter clk_cnt = 5, clk_period = 2; reg clk;initial beginclk = 0;repeat(clk_cnt)#(clk_period/2) clk = ~clk; endparameter clk_cnt = 5, clk_period = 2; reg clk;initial beginclk = 0;repeat(clk_cnt)#(clk_period/2) clk = ~clk;end三、复位信号的产生1、异步复位信号:view plaincopy to clipboardprint? parameter rst_repiod = 100;reg rst_n;initial beginrst_n = 0;#rst_repiod;rst_n = 1;endparameter rst_repiod = 100;reg rst_n;initial beginrst_n = 0;#rst_repiod;rst_n = 1;end2、同步复位信号:view plaincopy to clipboardprint? parameter rst_repiod = 100; reg rst_n;initial beginrst_n = 1;@(posedge clk)rst_n = 0;#rst_repiod;rst_n = 1;endparameter rst_repiod = 100;reg rst_n;initial beginrst_n = 1;@(posedge clk)rst_n = 0;#rst_repiod;rst_n = 1;end四、数据信号的产生数据信号的产生主要有两种形式:一、初始化和产生都是在initial块中进行;二、初始化在initial语句中完成,而产生却在always语句块中完成。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

QuartusII中添加激烈波形的数据
目前越来越多的通信系统采用FPGA进行硬件设计,而FPGA设计中非常重要而频繁进行的一环是仿真。

仿真能将硬件设计中的逻辑和时序问题及早暴露出来,以便工程师改进设计或调整方案。

仿真是硬件设计流程中较为耗时和烦琐的一环。

主要原因有:仿真的激励波形必须由设计者自行创建,测试波形必须人工输入;仿真的结果正确与否必须由设计者自行判断,很难自动化;时序仿真前必须对整个设计做耗时的全编译;仿真过程是计算机软件模拟芯片对测试输入的逻辑处理,通常计算时间消耗很大。

在这4个步骤中,第2步依赖于设计者的经验和特定设计逻辑的复杂程度,第3、4步则由计算机完成,基本上是个定数,只有第一步还具有提高效率的空间。

我们在进行实际的FPGA 设计处理信号时,针对第1步有大量仿真数据输入的需求,在研究Quartus II激励波形文件的格式后,编程设计了一种将输入数据转化为激励波形的方法。

QuartusII中仿真流程
现在Altera公司的器件均可由Quartus II进行设计。

Quartus II除了能完成语法检查、综合、布局布线、生成配置文件和时序分析的设计全流程,还自带仿真功能(Quartus II Simulator)。

Quartus II中时序仿真的流程图如图1所示。

vwf文件全称是矢量波形文件(Vector Waveform File),是Quartus II中仿真输入、计算、输出数据的载体。

一般设计者建立波形文件时,需要自行建立复位、时钟信号以及控制和输入数据、输出数据信号等。

其中工作量最大的就是输入数据的波形录入。

比如要仿真仅1KB 的串行输入数据量,则手工输入信号的波形要画8000个周期,不仅费时费力而且容易出错。

如果能找到一种简易的将输入数据转化为激励波形的方法,则可以极大提高仿真速度,减少手工操作时间,因此需要研究vwf文件的格式。

vwf文件格式分析
既然vwf文件是仿真数据的载体,那么必需首先弄清楚该文件存放数据的格式,再针对这种格式做一定的变换得到所需要的波形。

以时钟信号clk为例,vwf文件以如下方式存储和表示该信号。

● 说明部分
SIGNAL(“clk”)
{
_TYPE = NINE_LEVEL_BIT;
SIGNAL_TYPE = SINGLE_BIT;
WIDTH = 1;
LSB_INDEX = -1;
DIRECTION = INPUT;
PARENT = “”;
}
● 数据部分
TRANSITION_LIST(“clk”)
{
NODE
{
REPEAT = 1;
NODE
{ REPEAT = 3000;
LEVEL 0 FOR 50.0;
LEVEL 1 FOR 50.0;
}
}
}
在第2部分数据说明中,LEVEL 0表示低电平,LEVEL 1表示高电平,FOR后面跟着是持续时间,REPEAT表示重复次数。

手工描画的波形在存储时均被转化为此形式表示,这种形式也会被一一对应地表现为波形。

其实这就是一种文本方式描述数据的格式,一些其他波形文件格式(例如.tbl文件)也是与此相似的。

串行数据转化为vwf文件的方法
在用软硬件接收和处理通信线路上某种协议的数据时,通常都会取得一定量的典型数据做试验使用,这些典型数据就会被用作仿真的输入数据。

多数通信线路传输串行数据流,硬件系统接收的输入信号是串行的。

将试验数据逐比特地转化为激励波形就是建立测试激励的主要工作。

由上一部分对vwf文件格式分析可知,数据流会被映射成电平的持续时间,而持续时间是时钟周期的整数倍。

数据流可以看作是0、1比特流的单向延伸,确定了0、1流即可将对应的持续时间计算出来,从而给出波形的文本描述。

因此只要能将试验数据的0、1流识别出来,再以vwf文件格式为基准生成对应文本,就能将输入数据自动地转化为激励波形。

数据文件到串行激励波形的编程实现
识别数据的0、1游程算法(C或C++)如下。

// rl即为所识别的0、1比特游程,fpin是输入数据文件的指针,datin是无符号字符datin=fgetc(fpin);
tmp=datin&0x80;
rl=0;
n =0;
while(!feof(fpin)) {
for(i=n;i<8;i++){
if (((datin<<i)&0x80) == tmp)
rl++;
else{
n=i;
break;
}
}
while ((i==8) && (!feof(fpin))) {
datin=fgetc(fpin);
for(i=0;i<8;i++){
if (((datin<<i)&0x80) == tmp)
rl++;
else{
n=i;
break;
}
}
}
// tmp=0时,rl为0游程;反之rl为1游程
剩下的就是将游程转换为.vwf文件格式输出。

// clk_t设为一个时钟周期对应的ns数或参照vwf文件说明的单位
// fpout为输出文本文件的指针
time_last=rl*clk_t;
if(tmp)
fprintf(fpout,” LEVEL 1 FOR %.1f; ”,time_last);
else
fprintf(fpout,” LEVEL 0 FOR %.1f; ”,time_last);
rl=0;
if (tmp)
tmp=0x00;
else
tmp=0x80;
} //此括号对应第一个while()
最后将输出的文本复制到.vwf文件相应的信号数据部分即可。

总结
对于并行数据输入,该方法除了形式上要麻烦一些并无本质的不同。

另外,在硬件逻辑中可以很容易用串并转换将串行数据变换为并行数据,在仿真中并行数据输入问题可以等效地转换为串行数据输入。

我们在进行网络数据HDLC协议解析的FPGA设计中,对试验数据进行输入仿真时使用了该方法,加快了仿真的速度。

各位老师好!我最近用matlab的fdatool设计了fir滤波器,并将设计的滤波器移植到了fpga 上面,并且用了quartus软件进行了波形仿真,但觉得波形仿真生成的16进制数据不直观就想放到matlab上面来图形显示滤波的波形,最后在网上找了一些m函数进行波形文件tcl 到matlab可执行的文件的转换,但是问题又来了波形仿真文件上面的16进制数据是有符号
之分的,但是转换到matlab上执行的时候matlab没有区分数据的符号,导致图形的正部分和负部分有一个很大的振幅差。

想请问坛里的老师具体要怎么修改m函数,自己也是matlab 新手,向各位学习了。

m函数代码
clear all;
%以只读方式打开.tbl文件
fid = fopen('D:\fir24.sim.tbl','r'); %波形文件我是放在了D盘
data = fscanf(fid,'%s');
fclose(fid);
b = find(data == '='); %找出“=”的下标
number = length(b); %取得文件长度
j = 0;
for i = 1:number
if data(b(i) - 1) == '0'%滤除说明中的“=”
j = j+1;
%取出幅度值,数据为十六进制数
c_s(j,1) = data(b(i) + 1);
c_s(j,2) = data(b(i) + 2);
end
end
d_s = hex2dec(c_s); %将十六进制数转化为十进制数
stem(d_s);。

相关文档
最新文档