1.任务
设计以1s闪烁的LED灯,即亮灭各500ms。
2.数电基础简述
2.1 逻辑电路
逻辑电路是基于二进制的,由逻辑门电路(AND/NOT/OR)组成的,可以实现存储、控制以及传输等功能的电路。分为组合逻辑电路和时序逻辑电路两种,其中时序逻辑电路又分为同步时序逻辑电路和异步时序逻辑电路。
2.2.1 组合逻辑电路
1.特点:不含记忆元件,输出与输入间无反馈关系。任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关(入变出即变)
2.描述:逻辑函数表达式、逻辑电路图、真值表、卡诺图、波形图以及Verilog语言描述
3.应用:编码器(Encoder)、译码器(Decoder)、数据分配器(Demux)、多路选择器(MUX)、加法器(Adder)等
2.2.2 时序逻辑电路
1.结构:由组合逻辑电路和存储电路组成
2.特点:具有记忆功能,任意时刻的输出不仅取决于该时刻的输入,而且还和电路原来的状态有关。
3.同步时序逻辑电路:由统一的时钟信号控制,当时钟信号出现时,电路状态发生变化,持续到下一个时钟信号出现。
4.异步时序逻辑电路:没有统一的时钟,各级触发器的状态变化不是在统一的时钟作用下完成的,电路的状态是直接由输入信号决定,电路结构简单,但是速度慢,随着位数的增加,计数器从接受计数脉冲到稳定状态的建立,时延也大大增加。
5.应用:计数器、寄存器等
2.2 D触发器(D Flip Flop)
D触发器(DFF)是构成时序逻辑电路最基本的逻辑单元,按照时钟脉冲(Clock Pulse)信号控制方式,分为上升沿控制与下降沿控制两种。
真值表和状态方程如下,简言之DFF就是次态只与输入有关。
3.设计与验证
3.1 逻辑设计
module led_flash(
led,clk,reset_n);
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;
else
counter <= counter+1'd1;
always@(posedge clk or negedge reset_n)
if(!reset_n)
led <= 0;
else if(counter == 24999999)
led <= !led;
endmodule
3.2 TestBench
` timescale 1ns/1ns
module led_flash_tb;
reg clk;
reg reset_n;
wire led;
led_flash led_flash(
.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;
$stop;
end
endmodule