倍数以及计数器
时间:10-02
整理:3721RD
点击:
有两个计数器,cnt1和cnt2,cnt1从0一直到很大很大,cnt2在cnt1为500倍数的时候依次加一,这个该怎么实现,请大家帮忙、、、
一,首先这个很大很大,一定要确定是多大,对资源有影响,不可能给你做到无穷大;
二,500的倍数用一个条件判断就可以吧,用求余数的%操作试试。
谢谢了,那我这样写可以吗?
always()
if (~(cnt1 % 500))
cnt2 <= cnt + 1'b1;
谢谢了,那我这样写可以吗?
always()
begin
if (~(cnt1 % 500))
cnt2 <= cnt2 + 1'b1;
end
貌似算术运算符两边的操作数都要是确定的数,如果有一个不确定的话,好像结果是不确定的。
没用过,但应该不需要都是确定的,你的cnt1本来就是不确定的,得到不确定的结果,是可想而知的呀,按照你的描述。主要500不是2的n次方,所以部分比特位判断不好实现,只能用求余数的方式了。要不然就cnt1单独累加计数,因为你说是一直加下去(但这个终究要有一个尽头,资源不会无限大),然后在cnt1清零的时刻触发一个模为500的计数器cnt3,当cnt3到500时,让cnt2加一,cnt3清零重新计数,下一次500时再加一次cnt2,就和cnt1无关,因为只要cnt1和cnt3都从0开始,那么cnt2就是500的倍数时加一。可能算法说的复杂了点,你可以仔细考虑看看。
