You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VHDL 1993中if条件用:=报错,求正确写法(Intel Quartus 17.0)

解决VHDL条件判断中的语法错误

一眼就能看出问题所在:你在if条件的逻辑判断里误用了赋值运算符,这是VHDL新手很容易踩的坑!

在VHDL的语法规则里:

  • := 是赋值用的,用来给变量或者进程内的信号赋值;
  • 而判断两个值是否相等,必须用=运算符——这才是你在条件表达式里需要的。

你原来的错误代码:

if (((cur_stap2 := IDLE) or (cur_stap2 := MDLE)) AND (txe_n = '0') AND (wr_n = '1')) then

编译器报错就是因为它在条件里看到了:=(赋值操作),但这里应该是比较操作,所以它会提示你需要的是)或者,,而不是赋值符号。

正确写法

把所有的:=替换成=就行,这里给你几种可选的写法:

写法1:保留原括号结构,替换运算符

if (((cur_stap2 = IDLE) or (cur_stap2 = MDLE)) AND (txe_n = '0') AND (wr_n = '1')) then

写法2:简化冗余括号(更推荐,可读性更好)

VHDL里相等比较=的优先级比逻辑运算符AND/OR高,所以可以去掉不必要的括号:

if (cur_stap2 = IDLE or cur_stap2 = MDLE) and txe_n = '0' and wr_n = '1' then

写法3:用in运算符简化多状态判断(最优雅)

如果需要判断信号是否属于多个枚举状态中的一个,VHDL的in运算符可以让代码更简洁:

if cur_stap2 in (IDLE, MDLE) and txe_n = '0' and wr_n = '1' then

这种写法和前两种功能完全一致,而且当需要判断的状态数量变多时,优势会更明显。

这些写法都符合VHDL 1993标准,Intel Quartus 17.0可以完美编译通过。

内容的提问来源于stack exchange,提问作者hendrik2k1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:04:11