一 、怎么做的
给计数器不同的时间节点,加上执行语句。比如1s的时候led干什么;2s时刻的时候,led又要干什么。这个实验和之前那个相比,现在是在一个灯上变化量灭时间。
二 、代码
1.设计代码
module ledstate4(
input sys_clk ,
input rst_n ,
output reg led
);
parameter time0_25=12_500_000 ;
reg [26:0] cnt ;
//时钟/
always@(posedge sys_clk)
if(!rst_n)
cnt<=0;
else if(cnt==10*time0_25-1)
cnt<=0;
else
cnt<=cnt+1;
//led//
always@(posedge sys_clk)
if(!rst_n)
led<=1;
else
case(cnt)
time0_25-1: led<=0;
3*time0_25-1: led<=1;
6*time0_25-1: led<=0;
10*time0_25-1: led<=1;
default:;
endcase
endmodule
2.仿真代码
`timescale 1ns / 1ps
module tb();
reg sys_clk ;
reg rst_n ;
wire led ;
ledstate4 led1(
. sys_clk (sys_clk ) ,
. rst_n (rst_n ) ,
. led (led )
);
//时钟
initial begin
sys_clk=0;
forever #10 sys_clk=~sys_clk;
end
///复位
initial begin
rst_n=0;
#40 rst_n=1;
end
endmodule
之前我写串口接收模块的仿真,把时钟和复位写在一起了,我是这样写的:
initial begin
sys_clk=0;
rst_n=0;
#200 rst_n=1;
sys_clk=~sys_clk;
end
因为 initial 语句是顺序执行的,那么我下一次的时钟会在200ns之后变化。
之后我就会分开写。这样看起来更清楚,也不会出错。
3.仿真图

三 、希望大家可以跟我交流一下
能给我挑挑错,分享问问题的论坛,指指路,闲聊FPGA,什么都可以,我很无聊,现在日常就是跟小梅哥 写博客 看看B站别人发现了什么好玩的,希望有人可以和我说话。
5390

被折叠的 条评论
为什么被折叠?



