收藏 分享(赏)

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

上传人:yjrm16270 文档编号:8088691 上传时间:2019-06-08 格式:DOCX 页数:12 大小:19.64KB
下载 相关 举报
在QuartusII仿真中输入激励波形数据.docx_第1页
第1页 / 共12页
在QuartusII仿真中输入激励波形数据.docx_第2页
第2页 / 共12页
在QuartusII仿真中输入激励波形数据.docx_第3页
第3页 / 共12页
在QuartusII仿真中输入激励波形数据.docx_第4页
第4页 / 共12页
在QuartusII仿真中输入激励波形数据.docx_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、Verilog HDL 仿真激励的产生 收藏 一、变量初始化变量初始化的基本原则为:可综合代码中完成内部变量的初始化,Testbench 中完成可综合代码所需的各类接口信号的初始化。初始化的方法有两种:一种是通过 initial 语句块初始化;另一种是在定义时直接初始化。当 initial 语句块中有多条语句时,需要用 beginend 或者 forkjoin 语句。直接初始化,如:reg 7:0 cnt = 8b00000000;二、时钟信号的产生1、普通时钟信号:a. 基于 initial 语句的方法:view plaincopy to clipboardprint?parameter c

2、lk_period = 10; reg clk; initial begin clk = 0; forever #(clk_period/2) clk = clk; end parameter clk_period = 10;reg clk;initial beginclk = 0;forever#(clk_period/2) clk = clk;end b. 基于 always 语句的方法:view plaincopy to clipboardprint?parameter clk_period = 10; reg clk; initial clk = 0; always #(clk_per

3、iod/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 begin clk = 1; #High_time; clk = 0; #Low_time; end paramete

4、r High_time = 5,Low_time = 20;/ 占空比为 High_time/(High_time+Low_time)reg clk;always beginclk = 1;#High_time;clk = 0;#Low_time;end 3、相位偏移的时钟信号: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; alwa

5、ys begin clk_a = 1; #High_time; clk_a = 0; #Low_time; end assign #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_

6、a; 4、固定数目的时钟信号:view plaincopy to clipboardprint?parameter clk_cnt = 5, clk_period = 2; reg clk; initial begin clk = 0; repeat(clk_cnt) #(clk_period/2) clk = clk; end parameter clk_cnt = 5, clk_period = 2;reg clk;initial beginclk = 0;repeat(clk_cnt)#(clk_period/2) clk = clk;end 三、复位信号的产生1、异步复位信号:view

7、 plaincopy to clipboardprint?parameter rst_repiod = 100; reg rst_n; initial begin rst_n = 0; #rst_repiod; rst_n = 1; end parameter rst_repiod = 100;reg rst_n;initial beginrst_n = 0;#rst_repiod;rst_n = 1;end 2、同步复位信号:view plaincopy to clipboardprint?parameter rst_repiod = 100; reg rst_n; initial begi

8、n rst_n = 1; (posedge clk) rst_n = 0; #rst_repiod; rst_n = 1; end parameter rst_repiod = 100;reg rst_n;initial beginrst_n = 1;(posedge clk)rst_n = 0;#rst_repiod;rst_n = 1;end 四、数据信号的产生数据信号的产生主要有两种形式:一、初始化和产生都是在 initial 块中进行;二、初始化在 initial 语句中完成,而产生却在 always 语句块中完成。前者符合不规则数据序列,并且要求长度较短;后者适合具有一定规律的数据序

9、列。本文来自 CSDN 博客,转载请标明出处:http:/ QuartusII 仿真中输入激励波形数据收藏 1207 次阅读 | 0 个评论 2007-05-09 07:35 目前越来越多的通信系统采用 FPGA 进行硬件设计,而 FPGA 设计中非常重要而频繁进行的一环是仿真。仿真能将硬件设计中的逻辑和时序问题及早暴露出来,以便工程师改进设计或调整方案。仿真是硬件设计流程中较为耗时和烦琐的一环。主要原因有:仿真的激励波形必须由设计者自行创建,测试波形必须人工输入;仿真的结果正确与否必须由设计者自行判断,很难自动化;时序仿真前必须对整个设计做耗时的全编译;仿真过程是计算机软件模拟芯片对测试输入

10、的逻辑处理,通常计算时间消耗很大。在这 4 个步骤中,第 2 步依赖于设计者的经验和特定设计逻辑的复杂程度,第 3、4 步则由计算机完成,基本上是个定数,只有第一步还具有提高效率的空间。我们在进行实际的FPGA 设计处理信号时,针对第 1 步有大量仿真数据输入的需求,在研究 Quartus II 激励波形文件的格式后,编程设计了一种将输入数据转化为激励波形的方法。QuartusII 中仿真流程现在 Altera 公司的器件均可由 Quartus II 进行设计。Quartus II 除了能完成语法检查、综合、布局布线、生成配置文件和时序分析的设计全流程,还自带仿真功能(Quartus II S

11、imulator)。Quartus II 中时序仿真的流程图如图 1 所示。vwf 文件全称是矢量波形文件(Vector Waveform File),是 Quartus II 中仿真输入、计算、输出数据的载体。一般设计者建立波形文件时,需要自行建立复位、时钟信号以及控制和输入数据、输出数据信号等。其中工作量最大的就是输入数据的波形录入。比如要仿真仅1KB 的串行输入数据量,则手工输入信号的波形要画 8000 个周期,不仅费时费力而且容易出错。如果能找到一种简易的将输入数据转化为激励波形的方法,则可以极大提高仿真速度,减少手工操作时间,因此需要研究 vwf 文件的格式。vwf 文件格式分析既然

12、 vwf 文件是仿真数据的载体,那么必需首先弄清楚该文件存放数据的格式,再针对这种格式做一定的变换得到所需要的波形。以时钟信号 clk 为例,vwf 文件以如下方式存储和表示该信号。 说明部分SIGNAL(“clk”)_TYPE = NINE_LEVEL_BIT;SIGNAL_TYPE = SINGLE_BIT;WIDTH = 1;LSB_INDEX = -1;DIRECTION = INPUT;PARENT = “”; 数据部分TRANSITION_LIST(“clk”)NODEREPEAT = 1;NODE REPEAT = 3000;LEVEL 0 FOR 50.0;LEVEL 1 FO

13、R 50.0;在第 2 部分数据说明中,LEVEL 0 表示低电平,LEVEL 1 表示高电平,FOR 后面跟着是持续时间,REPEAT 表示重复次数。手工描画的波形在存储时均被转化为此形式表示,这种形式也会被一一对应地表现为波形。其实这就是一种文本方式描述数据的格式,一些其他波形文件格式(例如.tbl 文件)也是与此相似的。串行数据转化为 vwf 文件的方法在用软硬件接收和处理通信线路上某种协议的数据时,通常都会取得一定量的典型数据做试验使用,这些典型数据就会被用作仿真的输入数据。多数通信线路传输串行数据流,硬件系统接收的输入信号是串行的。将试验数据逐比特地转化为激励波形就是建立测试激励的主

14、要工作。由上一部分对 vwf 文件格式分析可知,数据流会被映射成电平的持续时间,而持续时间是时钟周期的整数倍。数据流可以看作是 0、1 比特流的单向延伸,确定了 0、1 流即可将对应的持续时间计算出来,从而给出波形的文本描述。因此只要能将试验数据的 0、1 流识别出来,再以 vwf 文件格式为基准生成对应文本,就能将输入数据自动地转化为激励波形。数据文件到串行激励波形的编程实现识别数据的 0、1 游程算法(C 或 C+)如下。/ rl 即为所识别的 0、1 比特游程,fpin 是输入数据文件的指针,datin 是无符号字符datin=fgetc(fpin);tmp=datinrl=0;n =0

15、;while(!feof(fpin) for(i=n;i8;i+)if (datini)elsen=i;break;while (i=8) for(i=0;i8;i+)if (datini)elsen=i;break;/ tmp0 时,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);elsefprintf(fpout,” LEVEL 0 FOR %.1f; ”,time_last);rl=0; if (tmp)tmp=0x00;elsetmp=0x80; /此括号对应第一个 while()最后将输出的文本复制到.vwf 文件相应的信号数据部分即可。总结对于并行数据输入,该方法除了形式上要麻烦一些并无本质的不同。另外,在硬件逻辑中可以很容易用串并转换将串行数据变换为并行数据,在仿真中并行数据输入问题可以等效地转换为串行数据输入。我们在进行网络数据 HDLC 协议解析的 FPGA 设计中,对试验数据进行输入仿真时使用了该方法,加快了仿真的速度。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报