5784|3

195

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

vivado怎么给一个子程序写testbench [复制链接]

一个工程中太多程序了,但是用不到那么多,只想看其中一个子程序的时序图,但是不知道怎么写testbench,需要把所有的程序都写在一个程序中?还是像工程中一样,分不同的testbench?
此帖出自FPGA/CPLD论坛

最新回复

yet
最近在玩这个,有基本的模式,修改一下基本能用。   1. 给模块取一个名字(可任意取,一般在仿真模块后加"_test")     例如:         module myDesign_test;           /*/*/         endmodule 2. 定义变量类型    将输入信号定义为reg类型的;将输出信号定义为wire类型的; 3. 例化模块,并将输入的信号和2中定义的信号进行关联。    例如: myDesign myDesignuut(.rst(rst),                                       .clk(clk),                                       .data_in(data_in),                                          ...........                                       .data_out(data_out) ); 4. 产生时钟模块    根据需要产生一个或多个时钟。一般先定义时钟周期为一个常量。    例如:     Parameter CYCLE = 100;     always   #(CYCLE) clk = ~clk;//定义系统时钟     always @(clk) clk2 = ~clk2;//二分频         -----各种生成时钟的方法就不说了 5. 时钟控制和reset信号的控制 一般放在initial模块里,跟据具体需要对reset信号进行编辑;并注意时钟信号的初始化,否则无法产生正常的时钟信号(若不初始化,clk可能默认为x状态,~x状态仍为x,即不会产生时钟驱动)。 例如:    initial begin clk = 0; clk2 = 0; .............//时钟相关信号初始化 rst = 0; #(3*CYCLE); rst = 1; #(CYCLE); rst = 0; ......//根据需要对整个系统的复位信号进行设计,要有清晰的时序观念 end 6. 初始化文件操作 基本的文件操作包括读和写,将它们写在一个initial中(仅关心文件的打开和关闭,不进行仿真过程中的写操作)。 读操作需要一个采用ROM格式写的文件,和一个ROM单元: 例如:       reg[10:0] my_rom [2:0];       $readmemb("my_rom_file.txt",my_rom); 写操作需要一个文件句柄,还要注意仿真结束前关闭文件操作。 例如: integer fid; fid = $fopen("resut.txt"); ......... #(1000000*CYCLE); $fclose(fid); 7. 控制信号和输出结果的编程 根据具体的实例对控制信号进行编程,并采样其输出结果,分多个initial模块进行。要形成很强的时序观念,并尽量使每个initial模块结构相对单一。此时大多调用文件写操作保存仿真结果。 例如: .......       $fdisplay(fid,"%b",data_out);       ....... 8.结束testbench程序的运行 用$stop 或$finish结束程序的运行,另起一个initial。 例如:          initial         begin               #(1000000*CYCLE);              $ stop;         end /++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/   详情 回复 发表于 2020-10-25 09:19
点赞 关注
 

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

讲的特别棒,看来一边就觉得完全理解了

此帖出自FPGA/CPLD论坛
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
vivado自带了一些吧
此帖出自FPGA/CPLD论坛
 
 
 

回复

224

帖子

0

TA的资源

一粒金砂(高级)

4
 

最近在玩这个,有基本的模式,修改一下基本能用。

 

1. 给模块取一个名字(可任意取,一般在仿真模块后加"_test")

    例如:

        module myDesign_test;

          /*/*/

        endmodule

2. 定义变量类型

   将输入信号定义为reg类型的;将输出信号定义为wire类型的;

3. 例化模块,并将输入的信号和2中定义的信号进行关联。

   例如:

myDesign myDesignuut(.rst(rst),

                                      .clk(clk),

                                      .data_in(data_in),

                                         ...........

                                      .data_out(data_out) );

4. 产生时钟模块

   根据需要产生一个或多个时钟。一般先定义时钟周期为一个常量。

   例如:

    Parameter CYCLE = 100;

    always   #(CYCLE) clk = ~clk;//定义系统时钟

    always @(clk) clk2 = ~clk2;//二分频

        -----各种生成时钟的方法就不说了

5. 时钟控制和reset信号的控制

一般放在initial模块里,跟据具体需要对reset信号进行编辑;并注意时钟信号的初始化,否则无法产生正常的时钟信号(若不初始化,clk可能默认为x状态,~x状态仍为x,即不会产生时钟驱动)。

例如:

   initial

begin

clk = 0;

clk2 = 0;

.............//时钟相关信号初始化

rst = 0;

#(3*CYCLE);

rst = 1;

#(CYCLE);

rst = 0;

......//根据需要对整个系统的复位信号进行设计,要有清晰的时序观念

end

6. 初始化文件操作

基本的文件操作包括读和写,将它们写在一个initial中(仅关心文件的打开和关闭,不进行仿真过程中的写操作)。

读操作需要一个采用ROM格式写的文件,和一个ROM单元:

例如:

      reg[10:0] my_rom [2:0];

      $readmemb("my_rom_file.txt",my_rom);

写操作需要一个文件句柄,还要注意仿真结束前关闭文件操作。

例如:

integer fid;

fid = $fopen("resut.txt");

.........

#(1000000*CYCLE);

$fclose(fid);

7. 控制信号和输出结果的编程

根据具体的实例对控制信号进行编程,并采样其输出结果,分多个initial模块进行。要形成很强的时序观念,并尽量使每个initial模块结构相对单一。此时大多调用文件写操作保存仿真结果。

例如:

.......

      $fdisplay(fid,"%b",data_out);

      .......

8.结束testbench程序的运行

用$stop 或$finish结束程序的运行,另起一个initial。

例如:

         initial

        begin

              #(1000000*CYCLE);

             $ stop;

        end

/++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/

此帖出自FPGA/CPLD论坛
个人签名爱好拍砖打假
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表