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
相关产品推荐
相关产品推荐

