| 
 
| 我想用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。原因不明。
 恳请大侠指点,谢谢!
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册 
  |