在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5521|回复: 10

[求助] 分频时钟出现不定态的问题?

[复制链接]
发表于 2017-5-8 21:21:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
各位晚上好,我在ModelSim仿真中遇到了下图1所示的问题:

图2

图2


就是说我的一个时钟分频模块A,将CLK分频后得到分频时钟clk1和clk2,将clk1给模块B,将clk2给模块C,如下图2所示:

图1

图1


仿真时,clk1的结果如上图1所示,其在由低电平跳到高电平的时候出现了不定态X,但是如果将A与B的连线去掉,得到clk1分频时钟就不存在这个问题,出来的分频时钟clk1正常。
我的clk1逻辑是如下面这样描述的:
always@(posedge CLK or negedge rst)
   begin
       if(!rst)
             begin
                   count <= 3'b0;
                   clk1    <= 1'b0;
             end
       else if(count == 3'b011)
             begin
                   clk1 <= ~clk1;
                   count <= 3'b0;
             end
              else
                   count <= count + 1'b1;
   end


请问有人知道出现这个问题的原因吗?
发表于 2017-5-8 22:22:25 | 显示全部楼层
問題應該是在module B
我猜module B 的clk_in 應該有宣告錯誤或是 tie low 的情形
发表于 2017-5-9 08:46:47 | 显示全部楼层
明显是模块B有问题,可能clk_in定义错了
 楼主| 发表于 2017-5-9 11:02:45 | 显示全部楼层
回复 2# wythelin


   非常抱歉,请问“宣告错误”是什么呀?“tie low”又是什么?这两个不懂,还请大神再解释一下,谢谢!
 楼主| 发表于 2017-5-9 11:08:27 | 显示全部楼层
本帖最后由 艾克0928 于 2017-5-9 11:14 编辑

回复 3# sme-ic

我检查了一下,然后进行分区域排除,发现问题确实出现在模块B,但是我检查了一下模块B的clk_in,发现没有定义错误啊,定义的是input类型。(模块B由模块d和e组成,送给模块B的时钟实质上是送给了d和e),还是没有检查出问题所在。我实际的设计如下图所示: Image 4.png
上述将的模块B就相当于这里的整个Digital模块,模块d和e就相当于这里的filter3_v7和spi_slave模块,前面两个D触发器是用作异步复位同步释放逻辑的。
 楼主| 发表于 2017-5-9 11:31:39 | 显示全部楼层
非常感谢各位的帮助,问题已经找到了。原因是将A,B,C三个模块例化得到顶层的一个模块时(假设命名为U0),其主时钟定义为clk,然后内部模块B的时钟名称也是定义为clk,在编写整个顶层(针对U0)的Testbench时,输入reg clk应该是指U0的主时钟,但是后面又通过语句assign uut.uut_B.clk = 0将模块B的clk给引出来了,导致两个clk发生冲突,所以才产生了这个问题。
 楼主| 发表于 2017-5-9 11:38:51 | 显示全部楼层
非常感谢各位的帮助,问题已经找到了。其原因是在将A,B,C三个模块例化封装成一个顶层模块(假设命名为U0)时,U0的时钟的名称被定义为clk,而此前Digital的时钟也被定义为clk,在编写Testbench的过程中,其内部本应该主时钟为U0的主时钟clk(定义为reg clk),这个没有问题,但是在内部却又通过语句assign
uut.uut_B.clk = 0 将模块B的时钟clk给印出来了,而且还是wire型,并赋了初始值0,这样就造成了U0和B的时钟clk定义冲突,所以才出现了上述问题。
发表于 2017-5-9 12:26:52 | 显示全部楼层



B这一级没问题,可能是下面的D/E的问题。
前面的宣告,指的是定义,台湾那边的讲法。

tie low,是指固定接0。
发表于 2017-5-9 15:51:05 | 显示全部楼层
assign uut.uut_B.clk = 0
這個描述就是tie low
 楼主| 发表于 2017-5-9 17:31:02 | 显示全部楼层
回复 8# sme-ic

恩恩,学习了,非常感谢,问题已经解决了,是Testbench中出现了整个系统的主时钟clk,又出现了模块B的主时钟clk,由于这两个时钟同名,且类型不同,所以就造成了冲突,导致出现了上述问题,非常感谢您!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-7-5 23:19 , Processed in 0.025168 second(s), 8 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表