# 前言
·在FPGA的设计中,我们经常会使用到按键来实现功能仿真,例如按键消抖设计,dpram设计等,使用任务及随机函数编写激励测试文件可以更加快捷方便。
---
# 一、任务及随机函数
1、任务:
task<任务名>
<端口及数据类型声明>
<语句1>
<语句2>
............
2、随机函数:$random,可以随机产生一个有符号的32位整数
$random%b(b>0):产生一个(-b+1~b-1)的随机整数;
{$random}%b可产生(0~b-1)的随机整数。
# 二、代码部分
## 1.任务
```
代码如下
task press_key;
begin
repeat(50)begin
myrand={$random}%65536;//加括号是正,产生0-65535
#myrand key_in=~key_in;
end
key_in=1'b0;
#50_000_000;
//按下抖动
repeat(50)begin
myrand={$random}%65536;
#myrand key_in=~key_in;
end
key_in=1'b1;
#50_000_000;
//释放抖动
end
endtask
```
```
## 2.随机函数
代码如下
reg [15:0]myrand;
myrand={$random}%65536;
---
##3.仿真模型key_model
`timescale 1ns/1ns
module key_model(key);output reg key;
reg [15:0]myrand;
initial begin
key=1'b1;
press_key;
#10000;
press_key;
#10000;
press_key;
$stop;
end
task press_key;
begin
repeat(50)begin
myrand={$random}%65536;//加括号是正,产生0-65535
#myrand key=~key;
end
key=1'b0;
#50_000_000;
//按下抖动
repeat(50)begin
myrand={$random}%65536;
#myrand key=~key;
end
key=1'b1;
#50_000_000;
//释放抖动
end
endtask
endmodule
注意:调用key_model仿真模型的时候,在设置仿真脚本时,需要将key_model加入到仿真脚本中
# 总结
使用按键仿真模型key_model可以很好的压缩仿真代码的长度并且使其更具可读性。