【作业要求】
1、简述时序逻辑的基本概念和电路特点。
2、简述同步复位和异步复位各自的优缺点?
3、请使用Verilog设计一个2s计时器,写出详细的代码?
【我的做法】1、电路的输出取决于当前输入与原来状态,电路由组合逻辑电路和存储电路构成。
2、同步复位能有效滤除复位信号上的毛刺、有利于时序收敛和静态时序分析,但需要时钟参与且必须保持复位信号脉宽足够、会额外增加组合逻辑延迟;异步复位则响应速度快、无需时钟就能立即生效,但复位信号上的毛刺极易直接触发错误状态,且复位释放时刻若与时钟沿冲突容易产生亚稳态和时序违例。
3、`timescale 1ns / 1ps
module D_reg(
input sysclk ,
input rst_n ,
input D ,
output reg Q
);
always@(posedge sysclk) /////边沿触发
if(!rst_n) ////rst_n == 0 复位
Q <= 0;
else /////不复位
Q <= D;
/////计时器的设计
/*
设计一个2s计时器
频率为50MHZ
f=50_000_000HZ 单位时间(1s)内晶振的次数为50_000_000
晶振1次的时间为: t=1s/f=1_000_000_000ns/50_000_000=20ns
如果要记录1s,则需要FPGA晶振多少次?
1s/20ns=50_000_000
20ms/20ns=1_000_000
*/
//////1s计时器
parameter TIME_2s = 28'd100_000_000 ;
reg [27:0] count ;
always@(posedge sysclk)
if(!rst_n)
count <= 0; /////分支1:复位,赋初值
else ////不复位
if(count < TIME_2s) /////分支2:自加
count <= count + 1; /////count++
else ////count >= TIME_2s
count <= 0; /////分支3:记到最大值,清零
endmodule【结果/截图说明】
评论 0