这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » QQ群关于"差不多了"心态要不得的问题的总结

共8条 1/1 1 跳转至

QQ群关于"差不多了"心态要不得的问题的总结

高工
2012-10-06 17:55:29     打赏

 

今天在玩数码管&数字钟的时候出了点小插曲。 晶振频率为50M,经过50M分频后,理论上应该输出1HZ的,可实际输出的有4HZ左右(粗略估计),而用50K*1K分频后结果却是1HZ,想来想去,这50K*1K应该是50M,什么原因呢?你猜,什么原因? 软件不支持这么大的数?24999999。 硬件不支持这么大的数?那这芯片岂不弱爆了。 晶振误差?都差4倍了还叫误差,这种错误在伊拉克战场上就该枪毙5分钟了。 RP问题?这个绝对没有问题! 后来经多方会诊,诊断结果如下:(对关键部位进行了注释) ARCHITECTURE ONE OF CLKDIV IS SIGNAL COUNT:STD_LOGIC_VECTOR(22 DOWNTO 0); --设置一个位宽为23的信号  COUNT SIGNAL CLK_DIV_TEMP:STD_LOGIC; BEGIN PROCESS(CLK) BEGIN IF(CLK'EVENT AND CLK='1') THEN IF(COUNT= 24999999) --count计数到24999999后CLK_DIV_TEMP反转一次,计数50000000后是一个周期 THEN COUNT<=(OTHERS =>'0'); CLK_DIV_TEMP<=NOT CLK_DIV_TEMP; ELSE COUNT <= COUNT + 1; END IF; END IF; END PROCESS; CLK_DIV<=CLK_DIV_TEMP; END ONE; 下面通过一系列的计算来说明问题 2^23=8388608, 24999999转换为二进制是1011111010111100000111111,位宽为25, 2^25=33554432, 也就是说count最大只能加到8388608,而不是所想要的24999999, 这一句SIGNAL COUNT:STD_LOGIC_VECTOR(22 DOWNTO 0); 要改成SIGNAL COUNT:STD_LOGIC_VECTOR(24 DOWNTO 0); 之后就正常了 想想开始做的时候没有计算,觉得23的位宽已经够大了,事实证明,万事要脚踏实地啊,会经常吃“差不多了”的亏。

欢迎参观我的FPGADIY

http://forum.eepw.com.cn/thread/220306/1



关键词: 关于     差不     多了     心态     要不     得的     题的     总结    

高工
2012-10-06 19:25:25     打赏
2楼
呵呵~~顶,差不多要不得,大意了

高工
2012-10-06 20:16:42     打赏
3楼

我刚开始学的时候也遇到过类似的问题,现在工作中稍不注意也会出现类似问题,而且查问题的时候还不容易发现。


专家
2012-10-06 20:31:02     打赏
4楼
呵呵,多谢分享

助工
2012-10-06 21:37:18     打赏
5楼

这种问题不能大意。


高工
2012-10-07 01:37:51     打赏
6楼
分享得很好!

专家
2012-10-07 17:21:29     打赏
7楼
感谢分享!!

专家
2012-10-08 11:51:29     打赏
8楼
看应用的场合,有的是需要差不多!!有的得必须是精确!

共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]