cpld 计数器 从0开始计数记到16停止, 上电之后计数器不工作。
if(!rst)
cont1<=4'b0000;
else if (cont1==16)
cont1<=16;
else
cont1<=cont1+1;
时钟复位信号都正常,上电之后计数器马上变为16.没有中间计数的过程。哪位知道是什么问题?
那是因为你没有抓到中间计数过程,而且你的计数器为什么计数到16就不动了,有实际意义吗?
而且4位计数器怎么会计数到16呢?
记到16是有意义的。设计需要。我写错了。计数器是5bit的。实际测量的也是5bit的计数器。但是实际测量中,计数器在复位的时候是零,复位信号去掉后直接变为16了。cont[0],cont[1],cont[2].这3个脚我都测量了。没有电平的高低变化。
记到16是有意义的。设计需要。我写错了。计数器是5bit的。实际测量的也是5bit的计数器。但是实际测量中,计数器在复位的时候是零,复位信号去掉后直接变为16了。cont[0],cont[1],cont[2].这3个脚我都测量了。没有电平的高低变化。
改下代码:
if(!reset)
cont1 <= 5'b00;
else if(reset && cont1==5'd16)
cont1 <= 4'b0;
else if (reset && cont1< 5'd16)
cont1 <= cont1 + 1'b1;
end
你这个代码是计数器记到16时计数器清零。如果这样编写,我试过计数器是可以工作的。但是我要的是计数器记到16就停止了。不在计数了。
因为不是循环计数,计数器时钟频率高,上电后计数器很快就计满16了
所以此时再去测量,是不能观察到计数器各比特位有变化的
没有计数过程是不太可能的,除非是你没有抓到,如果DUMP FSDB就可以看到了。另外建议将else if(cnt1 == 16)改为 else if(cnt1 >= 5'd16)增强电路的健壮性
用综合软件看下你代码最终实现的硬件是什么样子的,这样就可以分析为什么没实现预期的功能了。
有时候这是最方便的方法。
我感觉他是FPGA里面 的计数clock频率太高了。他的示波器可分辨的频率又太低。其实rst解除后是从
0到16计数的,只是他看不出来
我感觉他是FPGA里面 的计数clock频率太高了。他的示波器可分辨的频率又太低。其实rst解除后是从
0到16计数的,只是他看不出来
直接先仿真就知道有没有问题了。 估计是有,你没有抓到而已
