猜测,你输出二分频的原因是这样
always@(negedge clk_in)
out = ~out;
这样clk_in每个下降沿才是out翻转一回,当然是二分频了。我初学是也犯过这样的错误。
还有,很重要一点,普通io作为时钟信号,一般需要做一个处理才可以作为时钟使用,否则受毛刺的影响太大,有条件的话用个高速时钟对这个信号作边沿检测类似处理。
我也前也遇到过这样的问题,很费解 ,最好是把时钟接到时钟管脚上,或者外部加上驱动芯片把信号整形,这是信号时钟不是很好(边沿不是很清晰)造成的。阻塞赋值q<=clk 这样写是没用的!如果要这样赋值可以直接用等号,或者直接用线连起来。如 assign q=clk; 还有 你用的哪个FPGA芯片?不同芯片驱动能力不一样
最好选择专用的时钟输入,在使用PLL和全局时钟是必须的,其它情况为了更好地SI,建议使用时钟输入pin。至于你仿真没有问题,我想问你是功能仿真,还是布线后仿真?如果方便的话,可以把源代码发给我帮你看下,这个问题应该很简单啊!邮箱:zhy56672368@126.com
q<=clk这样写不行吗?使用了锁相环了吗?输入频率对吗?