基于sparant6系列FPGA的小项目设计(1)

(1)基于FPGA的沿检测设计实例

#######
说明:本次设计时基于按键的沿检测,这是一个很实用的FPGA设计技巧,在很多实用的工程中,我们可以通过检测其特定的上升沿或下降沿触发,来进行设计,本篇文章即是已按键为背景,来进行电平的沿检测,根据其原理可以应用到其他项目设计实例中去。
举例:在红外信号检测解码中,首先要检测前导码,此时就可以用沿检测去记录接收到的信号是否为真实红外信息的前导码,只有前导码检测成功之后,才继续进行下一步检测,直到最后32位数据全部检测结束。

代码实例

module edge_T(
	input sys_clk50,
	input rst_n,
	input key,
	
	output pos_flag,  //上升沿
	output neg_flag	  //下降沿

);

reg key_R;  //缓存key的值
always@(posedge sys_clk50 or negedge rst_n)begin
	if(!rst_n)begin
		key_R <= 1;
	end
	else begin
		key_R <= key;
	end
end

reg key_edge;
always@(posedge sys_clk50 or negedge rst_n)begin
	if(!rst_n)begin
		key_edge <= 1;
	end
	else begin
		key_edge <= key_R;
	end

end

assign pos_flag = (~key_edge)&key_R;
assign neg_flag = key_edge&(~key_R);

endmodule

tb文件

module tb;

	// Inputs
	reg sys_clk50;
	reg rst_n;
	reg key;

	// Outputs
	wire pos_flag;
	wire neg_flag;

	// Instantiate the Unit Under Test (UUT)
	edge_T uut (
		.sys_clk50(sys_clk50), 
		.rst_n(rst_n), 
		.key(key), 
		.pos_flag(pos_flag), 
		.neg_flag(neg_flag)
	);

	initial begin
		// Initialize Inputs
		sys_clk50 = 0;
		rst_n = 0;
		key = 1;

		// Wait 100 ns for global reset to finish
		#100 rst_n = 1;
        
		// Add stimulus here
		#100 key = 1;
		#1000 key = 0;
		
		#1000 key = 1;
		#2000 key = 0;
		#2000 key = 1;
	end
	
	always #10 sys_clk50 = ~sys_clk50;
      
endmodule

#######
这是基于沿检测的一个小的设计实例,合理的应用于项目中会大大简化设计流程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值