如何更紧凑编写VHDL中多值匹配的选择信号赋值语句?
VHDL with select 多值匹配的紧凑写法
直接给你正确的写法,用VHDL内置的多值匹配分隔符|:
with all_inputs select W1 <= '1' when "010001" | "100100" | "001100", '0' when others;
为什么你之前的写法不对?
你用or会触发按位或运算:VHDL会把每个字符串字面量转换成二进制数值,执行按位或后得到一个新的8位信号,再和all_inputs做相等比较——这完全不是你要的“匹配任意一个指定值”的逻辑。而|才是VHDL中专门用于离散值多匹配的语法,它会检查all_inputs是否等于竖线分隔的任意一个值。
进阶维护方案(适合大量匹配值)
如果后续要加很多匹配值,直接写|会显得冗长,可以用常量数组配合VHDL-2008的find函数来简化:
-- 先定义匹配值数组 constant W1_ACTIVE_SET : bit_vector_array := ("010001", "100100", "001100"); with all_inputs select W1 <= '1' when others => (find(W1_ACTIVE_SET, to_bitvector(all_inputs)) /= 0), '0' when others;
注意这种方式需要你的综合/仿真工具支持VHDL-2008标准。如果是旧版本工具,还是用|分隔的方式最可靠。
内容的提问来源于stack exchange,提问作者gorilla_glue
相关产品推荐
相关产品推荐

