常量表达式在VHDL案例语句中是否有效?

Wes*_*ter 3 verilog vhdl system-verilog

我记得在Verilog中,在case语句的表达式中使用常量是有效的,但它在VHDL中是否也有效?

// Verilog example
case(1'b1)                                
  A[2]:   Y<=2'b11;  
  A[1]:   Y<=2'b10;  
  A[0]:   Y<=2'b01;  
  default:Y<=2'b00;
endcase
Run Code Online (Sandbox Code Playgroud)

fru*_*bat 6

以下代码与您的示例并不完全平行,但它可能很有用:

这编译:

process
  constant S : std_logic := '1';
begin
  case S is
    when '0' =>
    when '1' =>
    when others =>
  end case;
end process;
Run Code Online (Sandbox Code Playgroud)

这样做:

process
begin
  case std_logic'('1') is
    when '0' =>
    when '1' =>
    when others =>
  end case;
end process;
Run Code Online (Sandbox Code Playgroud)

不是:

process
begin
  case '1' is
    when '0' =>
    when '1' =>
    when others =>
  end case;
end process;
Run Code Online (Sandbox Code Playgroud)

'1'是不明确的(std_logic/ character).

现在,你实际做的是有点不同,我不确定你的意图是什么.您似乎想要确定设置的最高位.在VHDL中,你的构造只有在语法上才有效,如果A它也是常量的(大小写选择需要是局部静态的),在这种情况下有更简单的方法来实现它(例如for循环).但是存在相互排斥的问题 - 一般来说,案例选择必然会重叠,我认为这应该是非法的(尽管ModelSim在我尝试时没有抱怨 - 综合工具可能是另一个故事).我想说这两种方式绝对不是一个好主意.