FPGA学习笔记--时序逻辑的设计

时序逻辑可以极大避免竞争冒险带来的危害

时序逻辑的开始--寄存器

寄存器的设计一般由D触发器组成

使用按键点亮LED灯        

        

        图为同步复位和异步复位分别对应的波形图:注意异步复位是指异步复位,同步释放

同步复位中若时钟上升沿刚好检测到电平的上升沿变化,这里默认检测上一个时刻电平为低电平,直到下一个时钟到来改变,即时序逻辑的延迟效果。

 

module flip_flop
(
	input wire clk,
	input wire res_n,
	input wire key_in,
	
	output reg led_out //后边使用always语句进行赋值所以使用reg类型(也可以理解为灯的亮灭为高低电平的变换所以使用reg型	
);

always@(posedge clk or negedge res_n) //设置为时钟上升沿到来时发生变化,当检测到复位下降沿时即复位有效时立即复位,实现异步复位功能
	if(res_n == 1'b0) //复位信号设置为低电平有效
		led_out <= 1'b0; //注意使用非阻塞赋值
	else
		led_out <= key_in;

endmodule

 

`timescale 1ns/1ns

module tb_flip_flop();

reg clk;
reg res_n;
reg key_in;

wire led_out;

initial
	begin 
		clk = 1'b1;
		res_n <= 1'b0;
		key_in <= 1'b0;
		#20
		res_n <= 1'b1; //观察复位信号的影响
		#200
		res_n <= 1'b0;
		#50
		res_n <= 1'b1;
	end
	
always #10 clk <= ~clk; //生成时钟周期,每10ns反转一次

always #30 key_in <= {$random} % 2; //使用随机数对2取余来模拟随机的按键情况

initial
	begin
		$timeformat(19,0,"ns",6); //时间格式的设置
		$monitor("@time %t:key_in=%b led_out=%b",$time,key_in,led_out);
	end

flip_flop flip_flop_1 //实例化
(
	.clk(clk),
	.res_n(res_n),
	.key_in(key_in),
	
	.led_out(led_out)
);

endmodule

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值