testbench内容学习_2之时序产生及文件读写

1. 时钟产生:

1)使用initial方式产生占空比50﹪的时钟

    initial
    begin
       CLK = 0;
       #delay;                //delay是延时时间
       forever
       #(period/2) CLK = ~CLK;    
    end

注意:一定要给时钟赋初始值,因为信号的缺省值为z,如果不赋初值,则反相后还是z,时钟就一直处于高阻z状态。
产生的时钟信号如下图所示:

2)使用always方式

    initial         
       CLK = 0;
    always  #(period/2) CLK = ~CLK;

3)使用repeat产生确定数目的时钟脉冲

initial
begin
   CLK = 0;
   repeat(6)                        //重复6次
   begin
     #(period/2) CLK = ~CLK;            
   end
end

4)产生占空比非50﹪的时钟

initial
   CLK = 0;
always
begin
   #3 CLK = ~CLK;
   #2 CLK = ~CLK;
end

2. 仿真控制语句及显示

仿真控制语句以及系统能够任务描述: 

$stop        //停止运行仿真,modelsim中可以继续仿真
$stop(n)     //带参数系统任务,根据参数0,1,或2不同,输出仿真信息
$finish      //结束运行仿真,不可继续仿真
$finish(n)   //带参数系统任务,根据参数的不同:0,1或2,输出仿真信息
                 // 0: 不输出任何信息
                // 1: 输出当前仿真时刻和位置
               // 2:输出房前仿真时刻、位置和仿真过程中用到的memory以及cpu时间的统计
$random        //产生随机数
$random%n     //产生范围-n到n之间的随机数
{$random}%n    //产生范围0到n之间的随机数

仿真终端显示描述

$monitor    //仿真打印输出,打印出仿真过程中的变量,使其终端显示
            /*  $monitor($time,,,"clk = %d reset = %d out = %d",clk,reset,out); */
$display   //终端打印字符串,显示仿真结果等
           /*  $display("Simulation start !");
               $display("At time %t,input is %b %b %b,output is %b",$time,a,b,en,z);
        
           */
$time      //返回64位整型时间
$stime     //返回32位整型时间
$realtiime //实行实型模拟时间

3.文件数据读写

声明文件指针类型:integer类型

1) 打开文件函数:integer $fopen(file_path_string,file_openway_string);

@file_path_string:文件路径及名称,支持绝对路径及相对路径,绝对路径使用'/'号而非'\'

@file_openway_string:文件打开方式,支持w、r、wb、rb

return :返回文件指针

注:若文件不存在,则新建。若文件存在,则原先内容删除,重新写入

2) 文件写入函数:$fdisplay或者$fmonitor

void $fdisplay(file_context, string_format, string_data);

@filecontext:即文件的句柄, integer类型

@string_format: 字符串格式

@string_data: 依据string_format格式的数据

3)关闭文件函数$fclose

void $fclose(file_context)

@file_context:文件句柄,这里用integer类型

流程:先用$fopen打开文件,获取文件句柄,再$fdisplay写入数据,再用$fclose关闭文件

代码示例:

file_1 = $fopen("D:/xilinx_project/comp/comp.srcs/sim_1/new/test1.txt","wb");
if(!file_1)
    begin
        $fclose(file_1);
        $stop;
    end
else 
    begin
        $fdisplay(file_1,"%b\t%b\t%b\n%b\t%b\n",4'hA,4'h8,4'h9,4'hb,4'h1); 
            //4'hA:代表4位,hA代表是十六进制的A,即一个十六进制是4位

        $fclose(file_1);
    end

3.2 文件读操作

分为二进制$readmemb与$readmemh,分别对应二进制与十六进制

void $readmemb(file_path,mem,[start_num, end_num]);

@file_path:文件路径,字符串型

@mem: 寄存器,reg型数组

[start_end, end_num]:可选参数,分别对应,寄存器读入的开始位置、及末尾位置

注:不指定位置,默认从头读到尾

//寄存器声明:
reg[1:0] mem[5:0];          //mem为6个以2个位reg构成的寄存器

//块中
begin

$readmemb("D:/xilinx_project/comp/comp.srcs/sim_1/new/test1.txt",mem,0,3);
$display("memory is %b %b %b",mem[0],mem[1],mem[4]);

end

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值