mrf245 发表于 2012-8-8 10:00:19

CPLD软件仿真有异常,求助大家

在Quartus2 8.0里写MAX2 CPLD代码,其中有一段如下图所示:

工作原理很简单:如果HW_F8K为低电平,就把New_count的值清零。如果New_count的值大于1200则New_count自动保持为1200。
现在仿真情况是:
在New_count的值没有到达1200之前,将HW_F8K设低电平,New_count就能被清零并重新计数;如果在New_count值达到1200后,不管送多少个HW_F8K负脉冲,New_count一直保持1200不变。请问这是怎么回事?

sunshinecoast 发表于 2012-8-8 10:29:26

你把if(new_count>=1200)new_ount<=1200;放到if(!..)......;前面试试!

mrf245 发表于 2012-8-8 10:37:40

谢谢楼上的提示!
这个办法确实有效!现在程序仿真正常了。
但我搞不懂,出现这样现象是什么原因?

yayakimwu 发表于 2012-8-8 10:50:31

同时符合条件时产生的竞争,你将if(new_count>=1200)改成else if(new_count>=1200)也会正常的

jlhgold 发表于 2012-8-8 10:57:28

顶LS 不过在实际硬件上会好一点 仿真是没法做到并行的 都是顺序操作的{:lol:}

mrf245 发表于 2012-8-8 10:59:25

本帖最后由 mrf245 于 2012-8-8 11:03 编辑

再次感谢大家回复。
现在情况是一个产品的CPLD工作不稳定,目前检查就发现是这个部分造成的。
由于以前没怎么接触过CPLD,所以不太明白:
1楼的代码,有两个if条件判断语句,如果发生竞争时,就只执行后面那个if判断吗?

sunshinecoast 发表于 2012-8-8 11:00:53

4楼说的对,楼主刚学吧!

mrf245 发表于 2012-8-8 11:04:55

sunshinecoast 发表于 2012-8-8 11:00 static/image/common/back.gif
4楼说的对,楼主刚学吧!

刚开始在工作中接触。
看了下教材,如果我没搞错,那两个if语句执行顺序是不可预测的?

korgo 发表于 2012-8-8 11:06:24

把<=全换成=应该也没有问题吧
lz的主要问题是阻塞和非阻塞的问题
估计是以前写C语言现在还没转过劲来

yayakimwu 发表于 2012-8-8 11:31:44

korgo 发表于 2012-8-8 11:06 static/image/common/back.gif


顶楼上。。。。。

mrf245 发表于 2012-8-9 11:38:44

小弟就来刨根问底一次。。望大侠们指教:
最开始那段语句是在always循环语句里面的一段。
请问造成一开始那个问题的根本原因是什么?两个if同时检测呢,还是两个赋值语句发生冲突?或者其他原因?

cmdrainsy 发表于 2012-8-9 12:50:57

本帖最后由 cmdrainsy 于 2012-8-9 12:53 编辑

begin
   if(!HW_F8K)
          New_count <= 0;
   else if (New_count >= 1200)
         New_count <= 1200;
   else
          New_count <= New_count + 1;
end
这样写肯定没错
你那程序是并行的满足条件的时候 New_count 到底是多少呢?

mrf245 发表于 2012-8-9 13:18:17

原始完整代码是这样:

always @(negedge BP_LRST or posedge HW_C8M )
begin
if(!BP_LRST)
begin
New_count<=0;
end
else
begin
   New_count<=New_count+1'b1;
   if(!HW_F8K)//帧同步脉冲到来,计数器强制清零
   New_count<=0;//have 2048 posedge HW_C8M
   if(New_count>=1200)//no HW_F8K(at all times the HW_F8K is low level or the HW_F8K is high level)
   New_count<=1200;

end
end

在always里面的语句的if语句也是并行执行的吗?VHDL教程里说是顺序执行。
页: [1]
查看完整版本: CPLD软件仿真有异常,求助大家