搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
知新_RL
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
VScode-git提交 无法推送refs到远端_无法推送refs到远端,您可以试着运行
2
趋势(被亚信并购)杀毒软件强制卸载_deltrendreg
3
vscode开发 vue3+ts 的 uni-app 微信小程序项目
4
美国地址
5
写一个函数实现:将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放)之解法改写
6
kafka springBoot 配置_springboot kafka配置参数详情
7
【人工智能】GPU、CPU 和 TPU 之间的区别_cpu、tpu
8
【Vue3】通用表单校验的两种方式_vue3 表单验证
9
Java如何快速向MySQL插入百万条数据_java百万级别的数据插入数据库
10
软件设计师考试重点知识点梳理_软件设计师知识点
当前位置:
article
> 正文
FPGA设计之Test bench介绍
作者:知新_RL | 2024-04-14 06:54:54
赞
踩
FPGA设计之Test bench介绍
Verilog
测试平台是一个例化的待测(
MUT
)模块,重要的是给它施加激励并观测其输出。
逻辑模块与其对应的测试平台共同组成仿真模型,应用这个模型可以测试该模块能否符合自己的设计要求。 编写 TESTBENCH 的目的是为了对使用硬件描述语言设计的电路进行仿真验证,测试设计电路的功能、性能与设计的预期是否相符。通常,编写测试文件的过程如下:
• 产生模拟激励(波形);
• 将产生的激励加入到被测试模块中并观察其响应;
• 将输出响应与期望值相比较。
通常,一个完整的测试文件其结构为
module Test_bench();//
通常无输入无输出
信号或变量声明定义
逻辑设计中输入对应
reg
型
逻辑设计中输出对应
wire
型
使用
initial
或
always
语句产生激励
例化待测试模块
监控和比较输出响应
endmodule
1、时钟激励设计
时钟激励产生方法一:
50%
占空比时钟
parameter ClockPeriod=10;
initial
begin
clk_i=0;
forever
#(ClockPeriod/2) clk_i=~clk_i;
end
时钟激励产生方法二:
50%
占空比时钟
initial
begin
clk_i=0;
always #(ClockPeriod/2) clk_i=~clk_i;
end
时钟激励产生方法3:产生固定数量的时钟脉冲
initial
begin
clk_i=0;
repeat(6)
#(ClockPeriod/2) clk_i=~clk_i;
end
时钟激励产生方法4:产生非占空比为
50%
的时钟
initial
begin
clk_i=0;
forever
begin
#((ClockPeriod/2)-2) clk_i=0;
#((ClockPeriod/2)+2) clk_i=1;
end
end
2、复位信号设计
复位信号产生方法一:异步复位
initial
begin
rst_n_i=1;
#100;
rst_n_i=0;
#100;
rst_n_i=1;
end
复位信号产生方法二:同步复位
initial
begin
rst_n_i=1;
@
(
negedge clk_i)
rst_n_i=0;
#100;
//
固定时间复位
repeat(10) @
(
negedge clk_i);
//
固定周期数复位
@
(
negedge clk_i)
rst_n_i=1;
end
复位信号产生方法三:复位任务封装
task reset;
input [31:0] reset_time;
//
复位时间可调,输入复位时间
RST_ING=0;
//
复位方式可调,低电平或高电平
begin
rst_n=RST_ING;
//
复位中
#reset_time;
//
复位时间
rst_n_i=~RST_ING;
//
撤销复位,复位结束
end
endtask
3、双向信号设计
双向信号描述一:
inout
在
testbench
中定义为
wire
型变量
//
为双向端口设置中间变量
inout_reg
作为
inout
的输出寄存,其中
inout
变
//
量定义为
wire
型,使用输出使能控制传输方向
//inout bir_port;
wire bir_port;
reg bir_port_reg;
reg bi_port_oe;
assign bi_port=bi_port_oe ? bir_port_reg : 1'bz;
双向信号描述二:强制
force
//
当双向端口作为输出口时,不需要对其进行初始化,而只需开通三态门
//
当双向端口作为输入时,只需要对其初始化并关闭三态门,初始化赋值需
//
使用
wire
型数据,通过
force
命令来对双向端口进行输入赋值
//assign dinout=(!en) din :16'hz;
完成双向赋值
initial
begin
force dinout=20;
#200
force dinout=dinout-1;
end
4、特殊信号设计
特殊激励信号产生描述一:输入信号任务封装
task i_data;
input [7:0] dut_data;
begin
@(posedge data_en); send_data=0;
@(posedge data_en); send_data=dut_data[0];
@(posedge data_en); send_data=dut_data[1];
@(posedge data_en); send_data=dut_data[2];
@(posedge data_en); send_data=dut_data[3];
@(posedge data_en); send_data=dut_data[4];
@(posedge data_en); send_data=dut_data[5];
@(posedge data_en); send_data=dut_data[6];
@(posedge data_en); send_data=dut_data[7];
@(posedge data_en); send_data=1;
#100;
end
endtask
//
调用方法:
i_data(8'hXX);
特殊激励信号产生描述二:多输入信号任务封装
task more_input;
input [7:0] a;
input [7:0] b;
input [31:0] times;
output [8:0] c;
begin
repeat(times)
//
等待
times
个时钟上升沿
@(posedge clk_i)
c=a+b;
//
时钟上升沿
a
,
b
相加
end
endtask
//
调用方法:
more_input(x,y,t,z); //
按声明顺序
特殊激励信号产生描述三:输入信号产生
,
一次
SRAM
写信号产生
initial
begin
cs_n=1;
//
片选无效
wr_n=1;
//
写使能无效
rd_n=1;
//
读使能无效
addr=8'hxx;
//
地址无效
data=8'hzz;
//
数据无效
#100;
cs_n=0;
//
片选有效
wr_n=0;
//
写使能有效
addr=8'hF1;
//
写入地址
data=8'h2C;
//
写入数据
#100;
cs_n=1;
wr_n=1;
#10;
addr=8'hxx;
data=8'hzz;
end
Testbench
中
@
与
wait
//@
使用沿触发
//wait
语句都是使用电平触发
initial
begin
start=1'b1;
wait(en=1'b1);
#10;
start=1'b0;
end
5、仿真控制语句及系统任务描述
仿真控制语句及系统任务描述
$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
位整型时间
$realtime
//
实行实型模拟时间
/*----------------------------------------------------------------
文本输入方式:
$readmemb/$readmemh
----------------------------------------------------------------*/
//
激励具有复杂的数据结构
//verilog
提供了读入文本的系统函数
$readmemb/$readmemh("<
数据文件名
>",<
存储器名
>);
$readmemb/$readmemh("<
数据文件名
>",<
存储器名
>,<
起始地址
>);
$readmemb/$readmemh("<
数据文件名
>",<
存储器名
>,<
起始地址
>,<
结束地址
>);
$readmemb:/*
读取二进制数据,读取文件内容只能包含:空白位置,注释行,二进制数
数据中不能包含位宽说明和格式说明,每个数字必须是二进制数字。
*/
$readmemh:/*
读取十六进制数据,读取文件内容只能包含:空白位置,注释行,十六进制数
数据中不能包含位宽说明和格式说明,每个数字必须是十六进制数字。
*/
/*
当地址出现在数据文件中,格式为
@hh...h,
地址与数字之间不允许空白位置,
可出现多个地址
*/
module
reg [7:0] memory[0:3];//
声明
8
个
8
位存储单元
integer i;
initial
begin
$readmemh("mem.dat",memory);//
读取系统文件到存储器中的给定地址
//
显示此时存储器内容
for(i=0;i<4;i=i+1)
$display("Memory[%d]=%h",i,memory[i]);
end
endmodule
/*mem.dat
文件内容
@001
AB CD
@003
A1
*/
//
仿真输出为
Memory[0] = xx;
Memory[1] = AB;
Memory[2] = CD;
Memory[3] = A1;
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/知新_RL/article/detail/420724
推荐阅读
article
FPGA
:
verilog
实现
直接型巴特沃斯高通
IIR
滤波器
_
fpga
实现
iir
滤波器
...
在matlab设计7阶(8级)高通
IIR
巴特沃斯
滤波器
,并
实现
verilog
代码,并在vivado中进行仿真_
fpga
实...
赞
踩
article
【
数
字IC/
FPGA
】
什么
是
无
符号
数
?
什么
是
有
符号
数
?...
【
数
字IC/
FPGA
】
什么
是
无
符号
数
?
什么
是
有
符号
数
?【
数
字IC/
FPGA
】
什么
是
无
符号
数
?
什么
是
有
符号
数
? ...
赞
踩
article
Xilinx
7 Series FPGA资源
ROM
IP
核的使用方法_
xilinx
fpga
如何读...
4、点击Other Options,我们选择加载初始化文件选项,选择初始化文件用来初始化
rom
寄存器,其他保持默认不变,...
赞
踩
article
Xilinx
FPGA
——
Vivado
生成
bit
文件时需要添加
的
约束_
fpga
生产
的
bit
流...
Vivado
设计过程中生成
的
bit
流文件需要通过特定
的
配置引脚导入到
FPGA
中。专用配置引脚上
的
不同电压级别决定了不同
的
...
赞
踩
article
FPGA——VIVADO生成固化文件,掉电不丢失_
set
_
prop
erty
cfgbvs
vcco
...
vivado固化代码文件_
set
_
prop
erty
cfgbvs
vcco
[
current
_
design
]
set
_p...
赞
踩
article
java
最短
路径
算法
开源包,用
java
编写的一个迪杰
斯特拉
算法
(单源最短
路径
算法
,
Dijkstra
算...
用
java
编写的一个迪杰
斯特拉
算法
(单源最短
路径
算法
,
Dijkstra
算法
)。,单源
dijkstra
,
package
T...
赞
踩
article
FPGA
_Verilog HDL_
计数
器实现
数字钟
60
秒
计数
设计实验_
verilog
数码管计时
60
...
一、题目
计数
器实现
数字钟
60
秒
计数
设计实验二、源代码说明:本实验实现了
数字钟
60
秒
计数
设计;可以输出定时时间eg:11....
赞
踩
article
【
FPGA
/
verilog
-入门学习2】
verilog
生成
上升
沿
下降
沿
脉冲_
时序电路
verilo...
使用脉冲边
沿
检测法设计一个上
下降
沿
检测功能。_
时序电路
verilog
程序表示
上升
沿
和
下降
沿
时序电路
verilog
程序表示...
赞
踩
article
【
FPGA
教程
案例79】通信案例5——基于
FPGA
的
QPSK
调制
解调
系统实现_
qpsk
fpga
...
我们在课程中,已经对
QPSK
调制器的基本原理进行了学习,在本课程中,我们将介绍
QPSK
解调
过程。其基本原理如下所示():...
赞
踩
article
FPGA
GT
高速
接口
实现 4K@
60Hz
视频
HDMI2.0
工程
解决方案
,提供4套工程源码和技术...
FPGA
GT
高速
接口
实现 4K@
60Hz
视频
HDMI2.0
工程
解决方案
,提供工程源码和
技术支持
_gt
高速
收发器ph...
赞
踩
article
FPGA
DAC
模块
SPI
通信...
1.串行外设接口(
SPI
)是微控制器和外围IC(如传感器、ADC、
DAC
、移位寄存器、SRAM等)之间使用最广泛的接口之...
赞
踩
article
基于紫光同创
FPGA
的
DDR3
读写实验
_
ddr3
axi
_
awburst
...
超级详细的3w字讲解!基于国产紫光同创平台!手撕
DDR3
读写~~
_
ddr3
axi
_
awburst
ddr3
axi
_
aw...
赞
踩
article
FPGA
-
以太网
UDP
通信
(三)...
至此,我们完成了IP层的发送与接受。同时,也已经了解了IP协议首部的具体内容,IP数据包就是紧跟在IP协议首部后面的。然...
赞
踩
article
FPGA
常用
接口协议
--
UART
_通用异步
收发器
fpga
verilog
hdl...
UART
接口协议
是一种比较简单、非常常用的一种
接口协议
,使用它的场景很常见,是我们学习
FPGA
一定要会的
接口协议
_通用异...
赞
踩
article
FPGA
-Verilog实现
uart
串口
异步
通信
_
verilog
串口
通信
...
(开发板:SF-AT7,软件平台:Vivado 2016.2。完整代码在文末,包括仿真文件与设计文件,通过仿真与板级验证...
赞
踩
article
三种
芯片
:
ASIC
、
FPGA
、SoC_
asic
处理器
芯片
...
ASIC
,全称Application-Specific Integrated Circuit,即。它是一种根据特定应用需...
赞
踩
article
语音
降噪
系统
FPGA
实现及
算法
详解_
fpga
音频
降噪
算法
...
在日常的
语音
通信中,由于外部噪声等干扰因素的存在,会使得
语音
质量受到影响,甚至无法正常进行通信。为了解决这个问题,我们可...
赞
踩
article
java
.
sql
.
SQLSyntaxErrorException
: Unknown
database
...
my
sql
连接_
unknown
database
'
test
unknown
database
'
test
...
赞
踩
article
FPGA
开发之
RAM
IP
的使用_
xilinx
fpga
ram
ip...
CORE Generator里有很多的
IP
核,适合用于各方面的设计。一般来说,它包括了:基本模块,通信与网络模块,数字信...
赞
踩
article
FPGA实现
CLAHE
算法
(
Verilog
)_
clahe
fpga
...
在介绍
CLAHE
算法
之前必须要先提一下直方图均衡化,直方图均衡化
算法
是一种常见的图像增强
算法
,可以让像素的亮度分配的更加...
赞
踩
相关标签
fpga开发
硬件架构
xilinx
IC
Verilog
fpga
数字IC
java最短路径算法开源包
verilog
matlab
FPGA教程
QPSK解调
音视频
4K 视频
GTH
HDMI2.0
udp
网络协议