今天是第三天,继续学习中,
再QuartusII中和仿真工具不一样,所以就出现以下错误:
Can't resolve multiple constant drivers
“信号不能在多个并发进程中赋值”这是个代码的可综合方面的要求,也就是说一般综合工具会对此报错的,但从仿真角度上说是没有问题的,除非多个赋值造成冲突导致仿真无法继续,modelsim是纯粹的仿真工具,它不会关心代码是否可综合;据我所知,采用波形输入在quartus下进行时序仿真是需要先综合的,这样工具就会检查代码在可综合性方面的问题,因此会报你上述错误.只要将复位操作分开到每个寄存器描述进程中表达就行了.具体地说,这种错误一般是由于定义的reg寄存器在多个always中进行赋值。 always是并行执行的,在多个always中对同一个寄存器进行赋值是不允许的。此外,同一个进程也不能对时钟信号的两个边沿都敏感。(摘自网络)
那怎么解决呢,回想书上的编写,是没有直接对reg_r这个清零的,而是通过复位的信号来复位的,那也就理解了为什么里面没有我的那部分代码,所以果断将代码除去。那么还是原来的问题,到底怎样才能得到书上的仿真结果呢,作者也没留个联系方式。。。唉。。。。继续寻找网络上的答案。。。。
经过瞎蒙了一下,把25位的寄存器改成8位寄存器,呵呵,还真可以。。。。
理一下思路:
这样是让寄存器自动的清零,不是手动清零,不大方便,但是刚开始学嘛,没办法,将就着。。。。
看来书上的还是很有道理的嘛,虽然那个仿真的时间真的要很长很长。。。。