- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
奋斗的小孩之altera系列第二十一篇边沿检测
FPGA 培训专家
奋斗的小孩之altera 系列
第二十一篇 边沿检测
对于每一个的小实验,我们都可以把它看作是一个小项目,逐步
的去分析,设计,调试,最后完成功能。下面我们就开始我们的“小
项目”。
项目名称:边沿检测
具体要求:检测输入信号,或者FPGA 内部逻辑信号的跳变,即上
升沿或者下降沿的检测,当检测到边沿后,发出高脉冲。
通过分析上述的“项目名称”和“具体要求”,我们可以设计出如
下的电路:
由于寄存器可以使信号延时一个时钟周期,我们可以利用这点,
至芯科技论坛
FPGA 培训专家
来完成信号的边沿检测。假设 signal 一直为高电平,则buffer1 和
buffer2 的输出都是高电平,当signal 变成低电平时,buffer1 的输
出先变成低电平,我们将buffer1 的输出值取反(高电平)和buffer2
的输出(高电平)相与得到neg_flag(高电平),下一个周期时,buffer2
的输出也变成了低电平,buffer1 的输出值取反(高电平)和buffer2
的输出 (低电平)相与得到低电平。故而neg_flag 只是输出了一个
时钟周期的高脉冲。pos_flag 可以同理分析。
架构图如下:
signal:被检测信号
pos_flag:检测出上升沿后发出的高脉冲
neg_flag:检测出下降沿后发出的高脉冲
系统设计:
1. 工程的名称:ckeck_edge。
设计代码如下:
至芯科技论坛
FPGA 培训专家
/*
模块名称:ckeck_edge
模块功能:检测上升沿或者下降沿,检测到边沿后,发出高脉冲。
编写时间:2016-08-16
作者:至芯科技奋斗的小孩
邮箱:zxopenhxs@126.com
*/
module check_edge (clk, rst_n, signal, neg_flag, pos_flag);
input clk;
input rst_n;
input signal;
output neg_flag;
output pos_flag;
reg buffer1;
reg buffer2;
always @ (posedge clk or negedge rst_n)
begin
至芯科技论坛
FPGA 培训专家
if (!rst_n)
begin
buffer1 = signal;
buffer2 = signal;
end
else
begin
buffer1 = signal;
buffer2 = buffer1;
end
end
assign neg_flag = buffer2(~buffer1);
assign pos_flag = (~buffer2)buffer1;
endmodule
解析:
在模块复位时,笔者将buffer1 和buffer2 的输出设置成和输入
信号相同的电平值,原因如下:
如果设置成高电平,而输入信号在复位器件为低电平,那么在复
位结束后就会产生一个我们不想要的 neg_flag (分析方法同设计方
至芯科技论坛
FPGA 培训专家
法)。另一种情况读者可以自己分析,方法是相同的。
激励代码如下:
/*
模块名称:c
文档评论(0)