目录
前言
1.时序逻辑基本按概念
2.计数器基本概念,基本的4位加法器结构
3.1s频率闪烁的LED灯(亮灭各500ms)
4.计数值与计数时间的关系
一、基本概念
1.时序逻辑电路 :
任一时刻的输出信号不仅取决于当时的输入信号,而且还取决于电路的原来状态,或者说还与以前的输入有。具有这种逻辑特点的电路称为时序逻辑电路。
2.D触发器
D 触发器的结构图:可以将其视为一个芯片,该芯片拥有 4 个管脚,其中 3 个是输入管脚:时钟 clk、复位 rst_n、信号 d;1 个是输出管脚:q。
D 触发器的波形图:
3.计数器
4.时钟
时钟信号是每隔固定时间上下变化的信号。本次上升沿和上一次上升沿之间占用的时间就是时钟
周期,其倒数为时钟频率。 频率50MHz 周期20ns
二、1s频率闪烁的LED灯(亮灭各500ms)设计实现步骤
1.设计输入
代码如下(示例):
`timescale 1ns / 1ns
module led_flash(
Clk,
Reset_n,
Led
);
input Clk;
input Reset_n;
output reg Led;
reg[24:0] counter;
always@(posedge Clk or negedge Reset_n)
if(!Reset_n)
counter <= 0;
else if(counter == 24999999)//counter=0也是一个周期
counter <= 0;
else
counter <= counter+1'd1;
always@(posedge Clk or negedge Reset_n)
if(!Reset_n)
Led <= 0; //此定义复位时led灭
else if(counter == 24999999)
Led <= !Led;//取反一次
endmodule
2.功能仿真
代码如下(示例):
`timescale 1ns / 1ns
module led_fiash_tb;
reg Clk;
reg Reset_n;
wire Led;
led_flash led_flash_1(
.Clk(Clk),
.Reset_n(Reset_n),
.Led(Led)
);
initial Clk = 1;
always#10 Clk = !Clk;//时钟信号写法
initial begin
Reset_n = 0;
#201;//观察复位信号 避免时钟上升沿重合
Reset_n = 1;
#2000000000;//持续2s钟
$stop;
end
endmodule
3.仿真结果
三、语法总结
always@(posedge Clk or negedge Reset_n)
if(!Reset_n)
counter <= 0;
else if(counter == 24999999)//counter=0也是一个周期
counter <= 0;
else
counter <= counter+1'd1;
initial Clk = 1;
always#10 Clk = !Clk;//时钟信号写法
reg[24:0] counter;