我想写一个if的替代方法,我有if语句。
if val1(1)&val1(0) < val2(1)&val2(0) then
r:="10";
else
if val1(1)&val1(0) = val2(1)&val2(0) then
r:="00";
else
r:="01";
end if;
end if;
我希望它改为以下。
s:=((data1(9)&data1(8)) < (data2(9)&data2(8)))?"01":(((data1(9)&data1(8)) = (data2(9)&data2(8)))?"00":"01");
但是编译器给了我以下错误。
&#34;#错误:COMP96_0015:min:(111,49):&#39 ;;&#39; 。预期&#34;
我该如何解决这个问题?感谢。
答案 0 :(得分:2)
问题:val1和val2的类型是什么?
以下是一些改进:
val1 < val2
val1(1 downto 0) < val2(1 downto 0)
y <= a when (condition) else b;
声明y = cond ? val1 : val2;
你可以定义一个if-then-else函数,让我们称之为ite
:
function ite(cond : boolean; val1 : std_logic_vector; val2 : std_logic_vector)
return std_logic_vector is
begin
if cond then
return val1;
else
return val2;
end if;
end function;
用法:
s := ite((val1(1 downto 0) < val2(1 downto 0)), "10", -- less
ite((val1(1 downto 0) = val2(1 downto 0)), "00", -- equal
"01")); -- greater
您可以定义比较功能,让我们称之为comp
:
function comp(val1 : std_logic_vector; val2 : std_logic_vector)
return std_logic_vector is
begin
if (val1 < val2) then
return "10";
elsif (val1 = val2) then
return "00";
else
return "01";
end if;
end function
用法:
s := comp(val1(1 downto 0), val2(1 downto 0));