
要求
1:输出端口的定义与题目所给的一样,如start,stop,clear等等。并且题目不要求随机的时间,固定时间4s即可,也就是说不需要随机数的产生
2.每一个输入与输出变量表示的什么意思,要用注释给出,例如input start;//输入信号start,表示测试开始
3.需要正确的test代码以及modelsim仿真结果的以及图片
4.代码层次分明,谢谢你。
5.芯片选择cycloneIV E, 引脚数144,内核速度等级 8,如下图
6.输入高电平使得数码管中的a,b,c,d,e,f,g亮

//`timescale 1ns / 1ns
`timescale 1us / 1us
module ts_speed_testbench();
reg clk = 0;
reg rst_n = 1;
reg [5:0] key; //6 个按键
wire[6:0] led_dat; //{g,f,e,d,c,b,a} //7段LED 排列
wire led_dp; //dp 小数点
wire[7:0] led_seg; //数码管段位,最左是7,最右是 0
wire led;
parameter CLK_PERIOD = 20; //50KHz 20us
//parameter CLK_PERIOD = 20; //50MHz 20ns
//parameter RDY_PERIOD = 1000*1000; //1ms
parameter RDY_PERIOD = 1000; //1ms
initial begin
clk = 0;
rst_n = 1;
key = 6'b111111; //6 个按键全部抬起
#(RDY_PERIOD*10) rst_n = 0;
#(RDY_PERIOD*10) rst_n = 1;
////////////////////////////////////////////////////////////////////////////
// 不到 4 秒按 STOP 显示 Err
#(RDY_PERIOD*10) key[0] = 0; //按下 [clr]
#(RDY_PERIOD) key[0] = 1; //抬起 [clr]
#(RDY_PERIOD*200) key[1] = 0; //按下 [start]
#(RDY_PERIOD) key[1] = 1; //抬起 [start]
#(RDY_PERIOD*3000) key[2] = 0; //按下 [stop]
#(RDY_PERIOD) key[2] = 1; //抬起 [stop]
////////////////////////////////////////////////////////////////////////////
// 001 按下 [start] 4秒+300ms 等待后 STOP 显示 存储一条记录 300ms
#(RDY_PERIOD*10) key[0] = 0; //按下 [clr]
#(RDY_PERIOD) key[0] = 1; //抬起 [clr]
#(RDY_PERIOD*200) key[1] = 0; //按下 [start]
#(RDY_PERIOD) key[1] = 1; //抬起 [start]
#(RDY_PERIOD*4300) key[2] = 0; //按下 [stop]
#(RDY_PERIOD) key[2] = 1; //抬起 [stop]
////////////////////////////////////////////////////////////////////////////
// 002 按下 [start] 4秒+700ms 等待后 STOP 显示 存储一条记录 700ms
#(RDY_PERIOD*10) key[0] = 0; //按下 [clr]
#(RDY_PERIOD) key[0] = 1; //抬起 [clr]
#(RDY_PERIOD*200) key[1] = 0; //按下 [start]
#(RDY_PERIOD) key[1] = 1; //抬起 [start]
#(RDY_PERIOD*4700) key[2] = 0; //按下 [stop]
#(RDY_PERIOD) key[2] = 1; //抬起 [stop]
////////////////////////////////////////////////////////////////////////////
// 003 按下 [start] 4秒+990ms 等待后 STOP 显示 存储一条记录 990ms
#(RDY_PERIOD*10) key[0] = 0; //按下 [clr]
#(RDY_PERIOD) key[0] = 1; //抬起 [clr]
#(RDY_PERIOD*200) key[1] = 0; //按下 [start]
#(RDY_PERIOD) key[1] = 1; //抬起 [start]
#(RDY_PERIOD*4990) key[2] = 0; //按下 [stop]
#(RDY_PERIOD) key[2] = 1; //抬起 [stop]
////////////////////////////////////////////////////////////////////////////
// 004 按下 [start] 4秒+910ms 等待后 STOP 显示 存储一条记录 910ms
#(RDY_PERIOD*10) key[0] = 0; //按下 [clr]
#(RDY_PERIOD) key[0] = 1; //抬起 [clr]
#(RDY_PERIOD*200) key[1] = 0; //按下 [start]
#(RDY_PERIOD) key[1] = 1; //抬起 [start]
#(RDY_PERIOD*4910) key[2] = 0; //按下 [stop]
#(RDY_PERIOD) key[2] = 1; //抬起 [stop]
////////////////////////////////////////////////////////////////////////////
// 005 按下 [start] 4秒+90ms 等待后 STOP 显示 存储一条记录 110ms
#(RDY_PERIOD*10) key[0] = 0; //按下 [clr]
#(RDY_PERIOD) key[0] = 1; //抬起 [clr]
#(RDY_PERIOD*200) key[1] = 0; //按下 [start]
#(RDY_PERIOD) key[1] = 1; //抬起 [start]
#(RDY_PERIOD*4110) key[2] = 0; //按下 [stop]
#(RDY_PERIOD) key[2] = 1; //抬起 [stop]
////////////////////////////////////////////////////////////////////////////
// 006 按下 [start] 4秒+90ms 等待后 STOP 显示 存储一条记录 123ms
#(RDY_PERIOD*10) key[0] = 0; //按下 [clr]
#(RDY_PERIOD) key[0] = 1; //抬起 [clr]
#(RDY_PERIOD*200) key[1] = 0; //按下 [start]
#(RDY_PERIOD) key[1] = 1; //抬起 [start]
#(RDY_PERIOD*4123) key[2] = 0; //按下 [stop]
#(RDY_PERIOD) key[2] = 1; //抬起 [stop]
////////////////////////////////////////////////////////////////////////////
// 007 按下 [start] 4秒+222ms 等待后 STOP 显示 存储一条记录 222ms
#(RDY_PERIOD*10) key[0] = 0; //按下 [clr]
#(RDY_PERIOD) key[0] = 1; //抬起 [clr]
#(RDY_PERIOD*200) key[1] = 0; //按下 [start]
#(RDY_PERIOD) key[1] = 1; //抬起 [start]
#(RDY_PERIOD*4222) key[2] = 0; //按下 [stop]
#(RDY_PERIOD) key[2] = 1; //抬起 [stop]
////////////////////////////////////////////////////////////////////////////
// 008 按下 [start] 4秒+90ms 等待后 STOP 显示 存储一条记录 333ms
#(RDY_PERIOD*10) key[0] = 0; //按下 [clr]
#(RDY_PERIOD) key[0] = 1; //抬起 [clr]
#(RDY_PERIOD*200) key[1] = 0; //按下 [start]
#(RDY_PERIOD) key[1] = 1; //抬起 [start]
#(RDY_PERIOD*4333) key[2] = 0; //按下 [stop]
#(RDY_PERIOD) key[2] = 1; //抬起 [stop]
////////////////////////////////////////////////////////////////////////////
// 009 按下 [start] 4秒+90ms 等待后 STOP 显示 存储一条记录 444ms
#(RDY_PERIOD*10) key[0] = 0; //按下 [clr]
#(RDY_PERIOD) key[0] = 1; //抬起 [clr]
#(RDY_PERIOD*200) key[1] = 0; //按下 [start]
#(RDY_PERIOD) key[1] = 1; //抬起 [start]
#(RDY_PERIOD*4444) key[2] = 0; //按下 [stop]
#(RDY_PERIOD) key[2] = 1; //抬起 [stop]
////////////////////////////////////////////////////////////////////////////
// 010 按下 [start] 4秒+90ms 等待后 STOP 显示 存储一条记录 555ms
#(RDY_PERIOD*10) key[0] = 0; //按下 [clr]
#(RDY_PERIOD) key[0] = 1; //抬起 [clr]
#(RDY_PERIOD*200) key[1] = 0; //按下 [start]
#(RDY_PERIOD) key[1] = 1; //抬起 [start]
#(RDY_PERIOD*4555) key[2] = 0; //按下 [stop]
#(RDY_PERIOD) key[2] = 1; //抬起 [stop]
////////////////////////////////////////////////////////////////////////////
// 011 按下 [start] 4秒+90ms 等待后 STOP 显示 存储一条记录 11ms
#(RDY_PERIOD*10) key[0] = 0; //按下 [clr]
#(RDY_PERIOD) key[0] = 1; //抬起 [clr]
#(RDY_PERIOD*200) key[1] = 0; //按下 [start]
#(RDY_PERIOD) key[1] = 1; //抬起 [start]
#(RDY_PERIOD*4011) key[2] = 0; //按下 [stop]
#(RDY_PERIOD) key[2] = 1; //抬起 [stop]
////////////////////////////////////////////////////////////////////////////
// 012 按下 [start] 4秒+90ms 等待后 STOP 显示 存储一条记录 998ms
#(RDY_PERIOD*10) key[0] = 0; //按下 [clr]
#(RDY_PERIOD) key[0] = 1; //抬起 [clr]
#(RDY_PERIOD*200) key[1] = 0; //按下 [start]
#(RDY_PERIOD) key[1] = 1; //抬起 [start]
#(RDY_PERIOD*4998) key[2] = 0; //按下 [stop]
#(RDY_PERIOD) key[2] = 1; //抬起 [stop]
////////////////////////////////////////////////////////////////////////////
// 010 按下 [min]
#(RDY_PERIOD*10) key[0] = 0; //按下 [clr]
#(RDY_PERIOD) key[0] = 1; //抬起 [clr]
#(RDY_PERIOD*200) key[3] = 0; //按下 [min]
#(RDY_PERIOD) key[3] = 1; //抬起 [min]
#(RDY_PERIOD*200) key[4] = 0; //按下 [max]
#(RDY_PERIOD) key[4] = 1; //抬起 [max]
repeat(15)
begin
#(RDY_PERIOD*200) key[5] = 0; //按下 [brw]
#(RDY_PERIOD) key[5] = 1; //抬起 [brw]
end
#(RDY_PERIOD*1000)
$stop;
end
always #(CLK_PERIOD/2) clk = ~clk; //100Hz
ts_speed ts_u1
(
.clk (clk), //50MHz,
.rst_n (rst_n), //复位,低有效
.key (key), //6 个按键
.led_dat (led_dat), //{g,f,e,d,c,b,a} //7段LED 排列
.led_dp (led_dp), //dp 小数点
.led_seg (led_seg), //数码管段位,最左是7,最右是 0
.led (led)
);
endmodule