FPGA设计基础|FPGA设计基础06——测试文件编写
FPGA设计基础06——测试文件编写
1.什么是测试文件?
①测试文件就是给设计好的v文件做测试的文件。
②模块写好了需要验证其功能,则需要给出模块的输入信号,比如时钟、复位信号。
③总的来说,其作用是写入输出信号,也就是我们常说的激励信号
2.测试文件怎么写?
先看要测试的文件的端口列表(一会要例化以及输入信号要编写):
module text_qqnum
(
clk,
rst_n,
qqnum//输出博主的 QQ号:841185604
);
下面开始测试文件的编写:
①时间标尺
`timescale 1 ns/1 ns//时间单位/时间精度
②测试模块名
module txet_qqnum_tb();
//可以不用里面的信号
③信号编写(由端口可知一共有2输入、1输出)
//例化的v模块的输入信号
//输入用regregclk;
regrst_n;
//例化的v模块的输出信号
//输出用wire
wire[3:0] qqnum;
④时钟以及复位具体输入的编写
//时钟周期,单位为ns
parameter CYCLE= 20;
//复位时间,此时表示复位3个时钟周期的时间。
parameter RST_TIME = 3 ;
//生成时钟输入信号
initial begin
clk = 0;
forever
#(CYCLE/2)
clk=~clk;
end//产生复位信号
initial begin
rst_n = 1;
#2;
rst_n = 0;
#(CYCLE*RST_TIME);
rst_n = 1;
end
⑤ 待测文件模块例化
text_qqnum u_text_qqnum
(
.clk(clk),
.rst_n(rst_n),
.qqnum(qqnum));
【FPGA设计基础|FPGA设计基础06——测试文件编写】⑥其他信号具体编写
//可能还会有其他输入信号赋值
//此例子没有
endmodule
至此已经完成测试文件的编写。
3.总结一下就是:时间标尺、信号定义、输入信号的具体编写、例化待测模块。
4.待测模块代码:
module text_qqnum
(
clk,
rst_n,
qqnum
);
inputclk;
inputrst_n;
outputqqnum;
reg [3:0]x;
reg [3:0]qqnum;
reg [3:0]cnt;
wireadd_cnt;
wireend_cnt;
always@(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
qqnum <= 4'b1000;
end
else begin
qqnum <= x;
end
endalways @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
cnt <= 0;
end
else if(add_cnt)begin
if(end_cnt)
cnt <= 0;
else
cnt <= cnt + 1;
end
endassign add_cnt = 1 ;
assign end_cnt = add_cnt && cnt== 9-1 ;
always@(*)begin
if(cnt == 0)begin
x = 4'b1000;
end
else if(cnt == 1)begin
x = 4'b0100;
end
else if(cnt == 2)begin
x = 4'b0001;
end
else if(cnt == 3)begin
x = 4'b0001;
end
else if(cnt == 4)begin
x = 4'b1000;
end
else if(cnt == 5)begin
x = 4'b0101;
end
else if(cnt == 6)begin
x = 4'b0110;
end
else if(cnt == 7)begin
x = 4'b0000;
end
else if(cnt == 8)begin
x = 4'b0100;
end
else begin
x = 4'b1000;
end
end endmodule
5.测试模块代码:
`timescale 1 ns/1 ns//时间标尺时间单位/时间精度module txet_qqnum_tb();
//例化的v模块的输入信号
//输入用regregclk;
regrst_n;
//例化的v模块的输出信号
//输出用wirewire[3:0] qqnum;
//时钟周期,单位为nsparameter CYCLE= 20;
//复位时间,此时表示复位3个时钟周期的时间。parameter RST_TIME = 3 //生成本地时钟
initial begin
clk = 0;
forever
#(CYCLE/2)
clk=~clk;
end//产生复位信号
initial begin
rst_n = 1;
#2;
rst_n = 0;
#(CYCLE*RST_TIME);
rst_n = 1;
end//待测试的模块例化text_qqnum u_text_qqnum
(
.clk(clk),
.rst_n(rst_n),
.qqnum(qqnum));
//可能还会有其他输入信号赋值
//此例子没有endmodule
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 爱琐搭配(喜欢复古、冷淡,像这种双环设计的气质耳环)
- Python基础|Python基础 - 练习1
- 别墅庭院设计,不同的别墅庭院设计也给人视觉上完全不一样的!
- Java|Java基础——数组
- 数据库设计与优化
- Java基础-高级特性-枚举实现状态机
- 营养基础学20180331(课间随笔)??
- iOS面试题--基础