Ubuntu 17.10下使用GHDL编译组件时遇标识符非法字符问题
解决GHDL编译VHDL时“标识符存在非法字符”的错误
嘿,我看你在Ubuntu 17.10上用GHDL编译VHDL组件时碰到了标识符非法字符的问题,咱们来一步步搞定它。
首先看你提供的代码片段,最明显的问题出在循环的结束语句上:end loop clklo...这里的clklo...是个不完整的标签,而且里面的省略号...属于VHDL标识符不允许的非法字符。VHDL里的循环标签必须是有效的标识符,而且要和你开头定义的clkloop : loop对应起来,所以这里应该改成end loop clkloop;。
顺便给你梳理下VHDL标识符的核心规则,避免以后踩同样的坑:
- 只能包含英文字母(a-z/A-Z)、数字(0-9)和下划线
_ - 必须以英文字母开头
- 不能和VHDL的关键字重名(比如
loop、process、entity这些) - 下划线不能连续出现,也不能放在标识符的开头或结尾
下面是修正后的完整代码,你可以直接用:
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; -- Unsigned entity entity simple is end simple; architecture behaviour of simple is signal clk : std_logic := '0'; signal sigterm : std_logic := '0'; signal counter : unsigned(7 downto 0) := x"00"; begin process begin wait for 5 us; clkloop : loop wait for 1 us; clk <= not clk; if sigterm = '1' then exit; end if; end loop clkloop; -- 修正标签名,移除非法省略号 end process; end behaviour;
编译的时候,你可以用这些GHDL命令:
ghdl -a simple.vhdl # 分析并编译源文件 ghdl -e simple # 生成仿真可执行文件 ghdl -r simple # 运行仿真
如果还是报错,记得检查所有的标识符(信号名、实体名、架构名、标签名等),看看有没有不小心用了中文、特殊符号或者违反规则的命名方式。
内容的提问来源于stack exchange,提问作者pitazzo
相关产品推荐
相关产品推荐

