本文主要是给出 0.2s 固定间隔时间的流水灯和测试文件
FPGA 运行文件
module flow_led(
input clk,
input rst_n,
output reg[3:0] led
);
reg [23:0] counter;
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
counter<=23'd0;
else if(counter < 23'd10) //为了仿真需要,修改了参数
counter<=counter +1'b1;
else
counter<=23'd0;
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
led<=4'b0001;
else if(counter==23'd10)
led[3:0]<={led[2:0],led[3]};
else
led<=led;
end
endmodule
测试文件:
1;表明时间尺度
2; 定义测试模块名
3; 定义输入和输出,输入用reg ,输出用wire
4;定义激励信号initial begin ......end
5; 例化测试模块和待执行的模块
`timescale 1ns/1ns
module flow_led_tb();
reg sys_clk;
reg sys_rst_n;
wire [3:0] led;
parameter T=20;
initial begin // 激励信号
sys_rst_n=1'b1;
sys_clk=1'b1;
sys_rst_n=1'b0;
sys_clk=1'b0;
#(T+1) sys_rst_n=1'b1;
$stop;
end
always #(T/2) sys_clk=~sys_clk; //保持时钟一直存在,FPGA一直工作
flow_led flow_led_u0( // 先是原来的模块 ,后面是测试模块
.clk (sys_clk),
.rst_n (sys_rst_n),
.led (led )
);
endmodule