大家好,
我用的软件是ISE13.1.芯片是spartan3a。
请教一个非常蹊跷的问题。
代码如下:
reg flag;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
flag <= 0;
else if(full_pulse)
flag <= 1;
else if(color == 2'd3)
flag <= 0;
else
;
end
full_pulse是一个脉冲,color是一个颜色计数。
问题是,有的情况下,当full_pulse使flag = 1之后,flag又立刻变成0,而此时rst_n一直是1的,color也没有加到3,就是说让flag变成0的条件并没有满足。
为什么flag会自动拉低呢?
非常感谢!
共10条
1/1 1 跳转至页
是的,您的想法有些问题。因为数字设计应该坚持同步设计原则,以保证电路的可靠性。目前full_pulse 来自另外一个clock domain, 而且是一个脉冲,而不是电平。这种情况下,你可以采用toggle synchronizer [Ref 1] 来处理,以在新的clock domain 中能产生一个完整的脉冲。 目前你所遇到这种情况,可能是因为你在cross clock domain 后,又经过一系列组合逻辑,会产生毛刺。在同步设计的情况下,毛刺不是问题,但是在异步cross clock domain 情况下,就会引起误触发 Ref: [1] Practical design for transferring signals between clock domains, By Michael Crews and Yong Yuenyongsgool, Philips Semiconductors, EDN Magazine, Feb, 2003
共10条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? |
打赏帖 | |
---|---|
老胖子聊电路--分析一个反馈电路被打赏50分 | |
放大↔震荡被打赏50分 | |
【换取手持数字示波器】RTduino驱动ssd1306+sht31温湿度计被打赏40分 | |
【换取手持数字示波器】称植国产开源TobudOS到雅特力AT32F425被打赏40分 | |
【分享评测,赢取加热台】+Telink-泰凌微电子B91点灯篇被打赏20分 | |
【换取手持数字示波器】+精英板驱动LCD屏被打赏50分 | |
【换取手持数字示波器】+DFR0216全彩灯带WS2812示例分享被打赏50分 | |
【换取手持数字示波器】安装雅特力国产IDE-AT32IDE被打赏30分 | |
【换取手持数字示波器】+DFR0654板卡驱动数码管和串口功能分享被打赏50分 | |
【换取手持数字示波器】+DFPlayerMini模块推喇叭示例分享被打赏50分 |