关于quartus ii报错Error (10818):because it does not hold its value outside the clock edge

报错如下:(想看解决方法直接划到最下面,后面带有我个人的一点理解,提供给大家交流)

 我原本的代码是:

想要实现的是对Q1的异步清零,不清零的情况出现上升沿就给Q1赋值。(后来发现这样逻辑是不对的就再后面加个end if;但是还是报错)单只从我以前学过的C语言逻辑来看,先判断完RST的IF,再去判断上升沿的IF这是没问题的。但实际上问题就出在这里,如果按这样做的话会把清零的语句当成并行赋值语句,这里我也不太明白为什么,只是当我删除掉IF RST='0' then这句话时报错也是一样的才有这个推论。

(说明一下,这个结论我已经排除了挺多情况,比如then后面是可以跟不止一句的赋值语句的,也确实是可以跟IF语句的,也就是IF 引导IF是可以的)下面这样的更改就可以编译通过:

接下来就是我的猜想了,望大佬指正:鉴于和并行语句报错一样,故我认为这是因为发生了线与,即进程结束后Q1有两个赋值源。猜测是每一个带时钟的边沿检测IF语句一定会产生一个赋值源,所以不能对带时钟的边缘检测IF里的数据放到另外的IF中

因此我这次debug最终得到的结论是:一旦出现时钟边沿检测,边沿检测里进行的对信号赋值操作,在时钟检测外面”不能”再操作。如果要操作有以下方法可以解决:(1)改为if elsif结构(我最终的解决方法)(2)或者放弃异步改为同步清零(3)避免对同一信号操作。


又琢磨了一下,发现其实我找到的只是表层的解决方法。这个方法对不同的代码可能起不到效果。因此这里给个通解,同时也算是对我前面分析的纠正(对的,前面分析确实不太对)

核心的思想应该是尝试将你的代码用自己的话描述一下,从中发现bug。

一是要明确好组合电路和时序电路的概念,时钟边沿检测是时序电路的(也就是同步操作),而异步操作是组合电路的。这里就出现了一个要明确的点:一旦出现了时钟检测,里面的信号就会变成一个寄存器。

二是就是对于这样的一个寄存器,从我们学到的数电知识可知,当输入时钟有效时输出值只能有一个。

三则是这个输出值得到的过程是一个黑盒子,可以在同步的情况下进行异步操作是因为这个异步操作最终也是输出一个同步值不影响时钟的同步赋值。但是如果在同步时钟操作外再进行异步操作就不行了--形象的理解是时钟检测里的信号随便你怎么操作,但是时钟检测里有的信号外面不能操作。

自此得到的通解与网络上能查询到的所有错误例子均能适用。一般解决方法就是删掉else,或者把逻辑并入elsif。希望对你能有所帮助。

### Quartus IIError 3 的报错原因及解决方案 Quartus II 是一款广泛应用于 FPGA 设计开发的工具,但在实际使用过程中可能会遇到各种错误提示。针对 **Error 3** 这一特定问题,以下是其可能的原因以及对应的解决办法。 #### 可能原因分析 1. **硬件设备未正确连接或驱动程序缺失** 如果目标硬件(如 FPGA 开发板)未能被计算机识别,则可能导致此错误。这通常发生在首次配置开发环境时[^1]。 2. **许可证文件损坏或过期** 当使用的许可证文件存在异常或者已到期时,也可能触发类似的错误码。尤其是当尝试访问受许可保护的功能时更为常见[^3]。 3. **软件版本兼容性问题** 不同版本之间可能存在一定的不兼容情况,特别是旧版 Quartus II 配合新版 ModelSim 或其他第三方插件时更容易出现问题[^5]。 4. **项目设置不当** 错误的编译选项、路径定义等问题同样会引发此类错误消息显示出来[^4]。 #### 解决方案建议 - **确认物理链接状态**: 确保所有的电缆都牢固地插入到了相应的端口中,并且重启电脑让系统重新检测外设是否存在可以有效缓解部分由于接触不良引起的故障现象; - **验证License有效性**: 登录至官方账户下载最新有效的授权证书并替换掉原有的那个;另外还可以考虑采用试用模式来临时规避这一障碍直到正式获取为止。 - **调整应用组合形式**: 尝试降低整个设计流程所依赖的技术栈层次比如选用更早一些发行日期的产品组合来进行测试看是否还能重现上述状况发生几率减少则说明可能是相互作用关系方面存在问题需要进一步深入研究具体细节差异之处所在。 - **仔细检查工程参数配置准确性**: 对照文档指南逐项核对自己创建的新工程项目里各项属性值设定是否完全遵循标准要求特别注意大小写敏感度较高的字段名称匹配程度等方面的内容核查工作不可马虎大意以免遗漏任何细微环节而导致最终失败的结果出现。 ```python def check_quartus_error(error_code): if error_code == 3: print("Please verify hardware connection, license status, software compatibility, and project settings.") else: print(f"Handling other errors with code {error_code}") check_quartus_error(3) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值