打印

中断握手似乎实现,但频繁死机!

[复制链接]
1136|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我想用FPGA定时往计算机发送中断信号(lint,低电平有效),而计算机在进入中断后发送握手信号(userO),FPGA在收到userO的上跳沿后立刻把lint置高。
附图是我的思路。首先从 8M 的主频(llclk)分出一个1K方波 level_1K。同时还定时地把lcx2清零。lcx2变成0之后,lint就完全取决于level_1K了。当level_1K变成低电平时,触发了中断。随后,当userO上跳的时候,lcx2变成1,于是lint立刻无效了。这样一直等到lcx2再次被清0……。
实际运行中,PC端容易死掉。最长的一次运行了800多秒后死掉的。短的只有10秒就死。一般现象是PC上的进程死掉(用任务管理器杀不掉),也有一次是整个机器死掉。

下面是代码:
p11: PROCESS(clr, userO)
BEGIN
  IF (clr = '1') THEN
   lcx2 <= '0';
  ELSIF (RISING_EDGE(userO)) THEN
   lcx2 <= '1';
  END IF;
END PROCESS P11;
lint <= lcx2 OR level_1K;
  
P10:PROCESS (llclk)
BEGIN
  IF (RISING_EDGE(llclk)) THEN
   scalar_8M_1K <= scalar_8M_1K + 1;
   IF (level_1K = '1') THEN
    IF (scalar_8M_1K = 3989) THEN
     clr <= '1';
    ELSIF (scalar_8M_1K = 3994) THEN
     clr <= '0';
    END IF;
   END IF;
   IF (scalar_8M_1K = 3999) THEN
    scalar_8M_1K <= 0;
    IF (level_1K = '0') THEN
     level_1K <= '1';
    ELSE
     level_1K <= '0';
     END IF;   
   END IF;
  END IF;
END PROCESS P10;

下面是RTL图,注意为了简洁,该图中是当 level_1K='1' AND scalar_8M_1K =1时置clr,当 level_1K='1' AND scalar_8M_1K =2时清clr,当 scalar_8M_1K =3时翻转level_1K

我实际测过一次,发现死机后userO停留在高电平,lcx2停留在低电平,level_1K和lint都是正常的1K方波。
另外,clr应该是1K。但是多次实测都表明是2K。原因不明。
恳请大侠指点,谢谢!

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

441

主题

1186

帖子

6

粉丝