当前位置: 代码迷 >> 综合 >> 四、Testbench
  详细解决方案

四、Testbench

热度:65   发布时间:2023-12-28 09:34:34.0

文章目录

  • 一、initial
  • 二、$finish $stop
  • 三、$display $monitor
  • 四、$time $realtime
  • 五、$random $random(seed)
  • 六、$readmemb $readmemh
  • 七、$fopen $fclose
  • 八、task
  • 九、存储器
  • 十、while for repeat
  • 十一、force release
  • 十二、fork/join
  • 总结


基本都是不可综合语句

一、initial

initial语句用来对变量进行初始化,仿真器在仿真时刻0就可以得到初始值,如果不进行初始化,变量初始化为X。

initial
beginclock = 1‘b0;forever begin  //循环语句#5 clock = ~clock;  //5ns偏转一次,为10ns时钟,对应100MHzend
end

二、$finish $stop

$finish表示仿真结束

$stop表示仿真停止,但是不退出,在命令提示符后输入. 继续执行

三、$display $monitor

$display 打印,显示错误异常信息为主

$monitor相似功能,但是每次观察的信号发生改变就会打印一次。

四、$time $realtime

$time 64位整数乘以`timescale 1ns/10ps 的仿真时间单位(1ns),再四舍五入。

$realtime相似功能,但是返回值包括小数。

当`timescale 1ns/10ps时候,对应9.4ns

$time 返回9ns
$realtime 返回9.4ns

五、$random $random(seed)

$random取随机数,返回一个32位的带符号的随机整数。

{$random} 非负整数。

$random(seed) 其中seed指出随机数的序列

六、$readmemb $readmemh

$readmemb 用于存储器建模时的初始化,将一个文本文件里的数据,写入存储器。

$readmemh 其中readmemb 以二进制数的形式写入,readmemh以十六进制数写入。

`timescale 1ns/10ps
module myrom (read_data, addr, read_en_);input read_en_;input [3:0] addr;output [3:0] read_data;reg [3:0] read_data;reg [3:0] mem [0:15];initial$readmemb ("my_rom_data", mem);always @( addr or read_en_)if (! read_en_)read_data = mem[addr];
endmodule

七、$fopen $fclose

可以打开和关闭文件,用
$fdisplay写进信息到文件中。

八、task

任务,可以用来写函数,是按顺序执行的过程。
通常用于读取和写数据到存储器来

九、存储器

可以用数组搭一个存储器来,

reg [7:0]  rom [1023:0];

用下面的任务可以初始化作用
在这里插入图片描述

十、while for repeat

while以及for就是循环语句

repeat和for等价
repeat(3)等价于 for(integer i=0;i<3;i++)

十一、force release

force用来将固定值赋值给reg或者wire类型变量

release执行前变量值不会发生改变,执行后由具体驱动决定

十二、fork/join

fork/join内部的语句并发执行,当全部完成后才会执行后面的语句,内部用于并发执行多个仿真任务。

总结

我的Testbench模板

`timescale 1ns / 1ps
`define  CLK_PERIOD 8     //125MHz
//
// School: Shanghaitech
// Engineer: Junluoyu
// 
// Create Date: 2021/09/30 
// Design Name: 
// Module Name: _tb
// Project Name: 
// Target Devices: ZCU106
// Tool Versions: vivado2019.1
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module _tb();
/*----------------------例化------------------------*//*----------------------时钟信号---------------------*/
initial clk = 1;
always #(`CLK_PERIOD/2) clk=~clk; 
/*----------------------initial信号------------------*/
initial beginend
endmodule