【问题标题】:If Statement VHDLIf 语句 VHDL
【发布时间】:2012-09-17 02:58:02
【问题描述】:

有人可以解释为什么编写 VHDL 时的黄金法则是 if-then-else 语句必须在一个进程中。是不是因为在进程内部,语句是按顺序执行的,而在外部则不是。

【问题讨论】:

    标签: hardware vhdl if-statement


    【解决方案1】:

    简单的答案是“因为这就是语言的语法”!

    如果您想在流程中选择代码的某些选项,您可以这样做:

    sig <= a when sel = 1 else
           b when sel = 2 else 
           default_value;
    

    with sel select
       sig <= a when 1,
              b when 2,
              default_value when others;
    

    See here for many examples of a mux

    【讨论】:

    • 作者是对的,之所以是这样,是因为本来就是这样。如果在流程之外是简单的决策树(和/或选择逻辑)。但是为了完整起见,我要补充一点,在进程之外存在一种 IF 形式,它被称为 GENERATE,它的工作方式有点像 #ifdef .... #endif in C.
    • 起初我以为我受到了严重阻碍,因为我想制作一个小块来关闭进程外部的多个信号,但我了解到你可以使用when - else 并且在 when 之后仍然使用多个信号。如sig &lt;= a when (OPCODE = "000" and EN = "1"
    【解决方案2】:

    我可能是错的,但我认为 if 语句需要在进程中的主要原因是 if 语句可能分配给多个信号,如果你想在进程之外做同样的事情,你将需要使用多个条件信号分配。

    例如:

    process(C0, C1, A, B, C) is
    begin
      if C0 = '1' then
        F <= A;
        G <= C;
      elsif C1 = '1' then
        F <= B;
        G <= B;
      else
        F <= C;
        G <= A;
      end if;
    end process;
    

    进程外的等效条件信号分配是:

    F <= A when C0 = '1' else B when C1 = '1' else C;
    G <= C when C0 = '1' else B when C1 = '1' else A;
    

    【讨论】:

      【解决方案3】:

      if else 语句:-

      Syntax:
      if then
      statements
      ...
      [
      elsif then
      statements
      ...
      else
      statements
      ...
      ]
      endif;
      

      更多信息请查看this

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多