【问题标题】:VHDL - IF alternativeVHDL - IF 替代方案
【发布时间】:2014-12-10 18:23:46
【问题描述】:

我想写一个 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)&amp;data1(8)) &lt; (data2(9)&amp;data2(8)))?"01":(((data1(9)&amp;data1(8)) = (data2(9)&amp;data2(8)))?"00":"01");

但是编译器给了我以下错误。

"# 错误:COMP96_0015: min: (111, 49): ';'预计。”

我该如何解决这个问题?谢谢。

【问题讨论】:

  • 出于什么原因你想要一个替代方案?编码风格?逻辑大小?还有什么?
  • 我的回答解决了你的问题吗?
  • 是的,谢谢。另一种选择是做一个功能:)

标签: if-statement syntax vhdl hdl


【解决方案1】:

问题:val1和val2的类型是什么?

以下是一些改进:

  • 如果 val1 和 val2 只有 2 位:val1 &lt; val2
  • 使用切片而不是单个位连接:val1(1 downto 0) &lt; val2(1 downto 0)
  • 您可以使用y &lt;= a when (condition) else b;statement
    这是相当于 C 的三元运算符y = cond ? val1 : val2; 的 VHDL
  • 你可以定义一个 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));
    

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 2012-10-10
    • 2015-02-18
    相关资源
    最近更新 更多