我目前在VHDL中有一个项目来制作一台简单的自动售货机。我有std_logic
信号来确定现金是否大于或等于物品的价格。成本是无符号常量,现金是无符号信号,但尽管它们都是等位长度的无符号数,但它告诉我>=
运算符未定义。我查看了多个参考指南,我所能找到的只是两个参数必须是同一类型(它们是......)所以我不确定它为什么抛出这个错误
我已经包含了正确的numeric_std
库。
type STATE_TYPE is (RDY, CLCT, VND);
signal state : STATE_TYPE;
signal next_state : STATE_TYPE;
signal cash : unsigned (7 downto 0);
signal cashnew : unsigned (7 downto 0);
signal candy : std_logic;
signal candy_vend : std_logic;
constant cost_candy : unsigned := to_unsigned(60, 8);
signal chips : std_logic;
signal chips_vend : std_logic;
constant cost_chips : unsigned := to_unsigned(50, 8);
begin
candy <= candy1 or candy2 or candy3;
chips <= chip1 or chip2;
candy_vend <= candy and (cash >= cost_candy);
chips_vend <= chips and (cash >= cost_chips);
答案 0 :(得分:1)
与其他语言一样,VHDL具有boolean
类型。它是一个完整的类型,在包std.standard
中提供。因此,此类型始终可见,因为默认情况下会引用此包。
与其他语言一样, relational 运算符会产生布尔值。整数类型bit
和数字逻辑类型std_logic
都不是布尔值。 Boolean的值为true
和false
,其中位为0
和1
。 std_logic
类型支持9个值(9值逻辑,包括例如错误值)。
大多数运算符被定义为接受相同类型的左右操作数,同时再次返回该类型。
因此,您需要在某些时候将表达式转换回std_logic
,因为candy_vend
期待该类型。
解决方案1:
candy_vend <= candy and ('1' when (cash >= cost_candy) else '0');
解决方案2:
candy_vend <= '1' when ((candy = '1') and (cash >= cost_candy)) else '0';
解决方案3:
function to_sl(value : boolean) return std_logic is
begin
if value then
return '1';
else
return '0';
end if;
end function;
用法:
candy_vend <= candy and to_sl(cash >= cost_candy);
candy_vend <= to_sl((candy = '1') and (cash >= cost_candy));