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)
以下代码与您的示例并不完全平行,但它可能很有用:
这编译:
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在我尝试时没有抱怨 - 综合工具可能是另一个故事).我想说这两种方式绝对不是一个好主意.
| 归档时间: |
|
| 查看次数: |
1652 次 |
| 最近记录: |