免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: cjaizss

[数字设计]抓外部信号的沿 [复制链接]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2010-10-21 12:35 |显示全部楼层
本帖最后由 cjaizss 于 2010-10-21 13:16 编辑
解决这个问题似乎就有点麻烦了,这是信号干扰很大的情况了。
  但方法还是一样存在:我们只辨别 ...
cjaizss 发表于 2010-10-21 12:29



    那么基于以上的方法采上沿:

  1. module catch_posedge(rst,clk,sig_posedge,sig);
  2. input rst,clk,sig;
  3. output  sig_posedge;

  4. reg sig_posedge;
  5. reg [2:0]sig_reg;
  6. always@(posedge rst or posedge clk)
  7. if(rst)
  8.        sig_reg[2:0]<=3'b111;
  9. else
  10.        sig_reg[2:0]<={sig_reg[1:0],sig};

  11. always@(posedge rst or posedge clk)
  12. if(rst)
  13.         sig_posedge <= 1'b0;
  14. else if(!sig_posedge & &sig_reg)
  15.          sig_posedge <= 1'b1;
  16. else
  17.         sig_posedge <= 1'b0;         
  18. endmodule

复制代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2010-10-21 12:40 |显示全部楼层
本帖最后由 cjaizss 于 2010-10-21 13:15 编辑
那么基于以上的方法采上沿:
cjaizss 发表于 2010-10-21 12:35

分段编写

  1. module catch_posedge(rst,clk,sig_posedge,sig);

  2. input rst,clk,sig;

  3. output  sig_posedge;



  4. reg sig_posedge;
  5. reg sig_posedge_next;
  6. reg [2:0]sig_reg;

  7. always@(posedge rst or posedge clk)
  8. if(rst)
  9.        sig_reg[2:0]<=3'b111;
  10. else
  11.        sig_reg[2:0]<={sig_reg[1:0],sig};



  12. always@(posedge rst or sig_reg)
  13. if(rst)
  14.         sig_posedge_next <= 1'b0;
  15. else if(!sig_posedge & &sig_reg)
  16.          sig_posedge_next <= 1'b1;
  17. else
  18.         sig_posedge_next <= 1'b0;         

  19. always@(posedge rst or posedge clk)
  20. if(rst)
  21.         sig_posedge <= 1'b0;
  22. else      
  23.        sig_posedge <= sig_posedge_next;
  24. endmodule
复制代码

论坛徽章:
0
发表于 2010-10-21 12:45 |显示全部楼层
很实际的经验.真不错
借问斑竹现在在设计哪方面的产品?

论坛徽章:
0
发表于 2010-10-21 12:50 |显示全部楼层
这个问题应该是针对细致的情况 并不是任何产品都要考虑用逻辑电路防止毛刺的.
比如处理器内部,不能轻易就加上一个时钟延迟.

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2010-10-21 12:53 |显示全部楼层
这个问题应该是针对细致的情况 并不是任何产品都要考虑用逻辑电路防止毛刺的.
比如处理器内部,不能轻易就加 ...
epegasus 发表于 2010-10-21 12:50



    呵呵,这个自然的.并且同步设计上,从编译到综合布线上会考虑到这些的优化的.所以我的题目上写的是抓外部信号的沿,我本来是做网络设备的

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2010-10-21 13:34 |显示全部楼层
我们再假设信号极其恶劣的情况下,怎么办?
人的想象力是无穷的,我们可以想到占空比的手段,这个多少有点搞笑,但它真的很安全!!!

  1. module catch_posedge(rst,clk,sig_posedge,sig);
  2. input rst,clk,sig;
  3. output  sig_posedge;

  4. reg sig_posedge;
  5. parameter COUNT_WILDTH=5;
  6. parameter REG_WILDTH=2**(COUNT_WILDTH-1);
  7. reg [REG_WILDTH-1:0]sig_reg;
  8. reg [COUNT_WILDTH-1:0]count;
  9. reg [COUNT_WILDTH-1:0]count2;
  10. always@(posedge rst or posedge clk)
  11. if(rst)
  12.        sig_reg<=-1;
  13. else
  14.        sig_reg<={sig_reg[REG_WILDTH-2:0],sig};

  15. always@(posedge rst or posedge clk)
  16. if(rst)
  17.       begin
  18.       count <= REG_WILDTH;
  19.       count2 <= REG_WILDTH;
  20.       end
  21. else
  22.      begin
  23.      count2 <= count;
  24.      count <= count +sig-sig_reg[REG_WILDTH-1];
  25.      end
  26. always@(posedge rst or posedge clk)
  27. if(rst)
  28.     sig_posedge <= 1'b0;         
  29. else if(count2<= 3*(2**(COUNT_WILDTH-3))&& count > 3*(2**(COUNT_WILDTH-3)))
  30.         sig_posedge <= 1'b1;         
  31. else
  32.        sig_posedge <= 1'b0;
  33. endmodule

复制代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2010-10-21 13:39 |显示全部楼层
我们再假设信号极其恶劣的情况下,怎么办?
人的想象力是无穷的,我们可以想到占空比的手段,这个多少有点 ...
cjaizss 发表于 2010-10-21 13:34


   这有一个问题,
    count <= count +sig-sig_reg[REG_WILDTH-1];
   如此累和有些危险,当然,解决的手段也是有的,可是经常清一下初始状态,然后重新开始。
  
  呵呵,看,最基本的抓沿可以写上很多东西,数字设计中,姑且我们就先不说架构,细节问题就很多了。平时真的很烦那些说数字设计比模拟电路设计简单的人,说数字设计简单的人,我真的不是很相信他们真的做过相关的工作。要学的人还是塌实的走好每一步。
  本文到此为止,自己给自己骗一个精,以鼓励一下自己吧。

论坛徽章:
0
发表于 2010-10-21 15:07 |显示全部楼层
在pcb设计考虑不周或不合理的情况下,信号在输送过程中毛刺和畸变是有可能发生的.

论坛徽章:
0
发表于 2010-10-21 15:09 |显示全部楼层
lz 涉及到的clk是周期性的时钟,那rst 复位信号是按什么规律输入的? 或设计意图是?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2010-10-21 15:52 |显示全部楼层
在pcb设计考虑不周或不合理的情况下,信号在输送过程中毛刺和畸变是有可能发生的.
system888net 发表于 2010-10-21 15:07



    毛刺是不可完全避免的,rst信号一般来说不同于I/O,不像IO那样会有太多的毛刺
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP