VHDL编写DMUx进程时出现期望end关键字等错误如何排查
VHDL DMux实现编译报错排查
核心错误原因
- 第一,
when-else条件赋值的语法使用错误:VHDL中连续的when-else属于单条赋值语句,不允许在when分支的末尾随意加分号;同时你给S1(x)单比特信号赋值时,使用else others => '0'是非法的,others语法仅适用于数组聚合赋值场景,无法直接跟在else后作为赋值项。 - 第二,非法的语句分割导致编译器解析失败:你在每个
when行末尾添加了分号,编译器会判定单条赋值语句提前结束,下一行的else不属于任何合法的VHDL语句开头,逻辑解析混乱后就抛出Keyword 'end' expected、Design unit declaration expected类的语法错误。
修正后的进程代码
DMux: process(Din, A) begin S1(0) <= Din when A(1 downto 0) = "00" else '0'; S1(1) <= Din when A(1 downto 0) = "01" else '0'; S1(2) <= Din when A(1 downto 0) = "10" else '0'; S1(3) <= Din when A(1 downto 0) = "11" else '0'; end process;
额外优化建议
如果S1是4位的std_logic_vector类型,还可以直接用数组赋值+case语句简化写法,可读性和可维护性更高:
DMux: process(Din, A) begin S1 <= (others => '0'); case A(1 downto 0) is when "00" => S1(0) <= Din; when "01" => S1(1) <= Din; when "10" => S1(2) <= Din; when "11" => S1(3) <= Din; when others => null; end case; end process;
内容的提问来源于stack exchange,提问作者RADU-IOAN NICA
相关产品推荐
相关产品推荐

