跳转到内容

可编程逻辑/VHDL 通用语法

来自维基教科书,开放的书籍,开放的世界

维基教科书《可编程逻辑》这本书的这个页面是一个存根。您可以通过扩展它来帮助我们。


VHDL 的语法源自 ADA。它是强类型和不区分大小写的。

标识符

[编辑 | 编辑源代码]

VHDL 中的标识符必须以字母开头,可以是字母、数字和下划线 (_) 的任何组合。

VHDL 中的注释用 "--" 表示。

-- Assign the current value to the next state value
sQ_next <= sQ;

"--" 之后到行尾的所有内容都被视为注释。

-- This is a valid comment
sQ_next <= sQ; -- This is also a valid comment


关键字

[编辑 | 编辑源代码]

以下词语是 VHDL 关键字,不能用作标识符(信号名、进程名、实体名等)

顶部

VHDL 1987

[编辑 | 编辑源代码]

这是一个不完整的列表...

and, or, nor, xor, not, architecture, entity, is, process, procedure,
function, type, subtype, array, begin, end, if, elsif, end, case, when,
others, configuration, package, constant, signal, variable, component,
label, port, generic, all, nand, nor, abs, generate, in, out, inout,
buffer, linkage, bus, library, null, loop, for, body, to, downto

顶部

VHDL 1993

[编辑 | 编辑源代码]

VHDL 1987 关键字和

group, impure, inertial, literal, postponed, pure, reject, rol, ror,
shared, sla, sll, sra, srl, unaffected, xnor

顶部

VHDL 2000

[编辑 | 编辑源代码]

VHDL 1993 和 1987 关键字,此外

generate map, access, mod, severity, units, after, until, alias, guarded,
use, new, disconnect, next, protected, attribute, record, of, register, on,
block, exit, open, rem, transport, report, file, return

顶部

VHDL 2002

[编辑 | 编辑源代码]

VHDL 1993、1987 和 2000 关键字,此外

顶部

VHDL 2008

[编辑 | 编辑源代码]

VHDL 1993、1987、2000 和 2002 关键字,此外

顶部

VHDL 2019

[编辑 | 编辑源代码]

VHDL 1993、1987、2000、2002 和 2008 关键字,此外



字母顺序参考

[编辑 | 编辑源代码]
[编辑 | 编辑源代码]

https://peterfab.com/ref/vhdl/vhdl_renerta/source/vhd00001.htm



简介

VHDL 中的 abs 命令是一个预定义函数,它返回数字参数的 绝对值

例如,abs(-3) 返回 3,而 abs(4.5) 返回 4.5

abs 命令可以与任何数字类型一起使用,例如整数、实数或定点类型。

备注

1987 年版本的 VHDL 引入了 abs。

abs 命令是可综合的。

可综合的,规则,技巧,常见错误,相关关键字等

语法
实现
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity abs_module is
  port (
    clk : in std_logic;
    reset : in std_logic;
    x : in signed(7 downto 0);
    y : out signed(7 downto 0)
  );
end entity;

architecture rtl of abs_module is
begin
  process (clk, reset)
  begin
    if rising_edge(clk) then -- clock condition
      if reset = '1' then -- synchronous reset condition
        y <= (others => '0'); -- initial value for output signal
      else
        y <= abs(x); -- assign output to absolute value of input
      end if;
    end if;
  end process;
end architecture;
测试平台
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity abs_testbench is
end entity;

architecture sim of abs_testbench is

  -- declare signals for DUT ports
  signal clk : std_logic := '0';
  signal reset : std_logic := '0'; -- added reset signal
  signal x : signed(7 downto 0);
  signal y : signed(7 downto 0);

  -- declare component for DUT
  component abs_module
    port (
      clk : in std_logic;
      reset : in std_logic; -- added reset signal as input port
      x : in signed(7 downto 0);
      y : out signed(7 downto 0)
    );
  end component;

begin

  -- generate clock signal with period of 10 ns
  clk_gen: process
  begin
    clk <= '0';
    wait for 5 ns;
    clk <= '1';
    wait for 5 ns;
  end process;

  -- generate input values for x from -128 to 127
  stim_gen: process
    variable i : integer := -128; -- loop variable
  begin
    wait until rising_edge(clk); -- synchronize with clock
    
    if i = -128 then -- generate a pulse for reset at the beginning of simulation 
      reset <= '1';
      wait for 10 ns;
      reset <= '0';
    end if;

    x <= to_signed(i,8); -- assign input value
    
    i := i + 1; -- increment loop variable
    
    if i = 128 then -- stop when loop variable reaches limit
      wait; -- suspend process
    end if;
    
  end process;

  -- instantiate DUT and connect ports
  dut: abs_module port map (
    clk => clk,
    x => x,
    y => y,
    reset => reset -- added reset signal to port map
  );

  -- observe output values and print messages
  out_obs: process (clk)
    variable exp_y : signed(7 downto 0); -- expected output value
  begin
    if rising_edge(clk) then -- synchronize with clock
      exp_y := abs(x); -- calculate expected output value
      if y = exp_y then -- compare output with expected value
        report "Test passed for x = " & integer'image(to_integer(x)) & ", y = " & integer'image(to_integer(y)); -- print message if match
      else
        report "Test failed for x = " & integer'image(to_integer(x)) & ", y = " & integer'image(to_integer(y)) severity error; -- print message and raise error if mismatch
      end if;
    end if;
  end process;

end architecture;


顶部

access

[edit | edit source]

简介

在 VHDL 中,访问类型类似于其他编程语言中的指针。它允许您创建和操作在模拟期间动态创建的数据。这意味着您可以动态地创建新数据,并且数据的大小不必事先知道。

例如,假设您想创建一个数字列表,但您不知道将有多少个数字。您可以使用访问类型来创建一个链表,其中列表中的每个项目都指向下一个项目。这样,您可以根据需要向列表添加任意多个项目,而无需事先知道列表的大小。

访问类型对于建模潜在的大型结构(如存储器或 FIFO)非常有用,但它们不受综合工具的支持。

备注

1987 年版本的 VHDL 引入了访问。

不可综合

参见 https://peterfab.com/ref/vhdl/vhdl_renerta/source/vhd00001.htm

语法
用法
-- Incomplete type declaration
type Item;

-- Access type declaration
type Link is access Item;

-- Record type declaration
type Item is record
    Data: string (1 to 6);
    NextItem: Link;
end record;

-- Variable declarations
variable StartOfList, Ptr: Link;
variable Line: LINE;

-- Allocating storage
StartOfList := new Item;
StartOfList.all.Data := "First";
StartOfList.all.NextItem := new Item;
StartOfList.all.NextItem.all.Data := "Second";


顶部

after

[edit | edit source]

简介

VHDL 命令 “after” 用于在信号分配中引入延迟。它用于指定信号应分配新值的时间。例如,x <= '1' after 10 ns; 表示信号 x 将在经过 10 纳秒后分配值 '1'。

备注

1987 年版本的 VHDL 引入了 after。

不可综合。

函数不支持延迟。

重要的是要注意,“after” 命令与延迟模型有关。在默认的 VHDL 惯性延迟中,您的第二个“较慢”信号赋值语句会取消第一个的未来更新。您可以安排在一个语句中的多次更新以纠正此问题,例如:x <= '1' after 10 ns, '0' after 20 ns;

参见 http://gmvhdl.com/delay.htm

语法


用法
x <= '1' after 10 ns;


顶部

alias

[edit | edit source]

简介

别名是现有对象(如信号、变量、常量、类型等)的替代名称。别名对于使代码更具可读性、避免名称冲突或访问数组或记录的各个部分很有用。

您还可以使用特殊的语法 << ... >> 创建外部名称,它们是可以通过别名访问其他设计单元或层次结构级别的对象的别名

备注

1987 年版本的 VHDL 引入了别名。

别名是其定义的声明区域的局部变量,它们不能被重新定义或覆盖。

别名不能用作赋值的目标。

别名可以在任何可以使用原始名称的地方使用,例如表达式、语句或子程序调用。

参见 https://peterfab.com/ref/vhdl/vhdl_renerta/mobile/source/vhd00003.htm

语法
用法
alias alias_name : alias_type is object_name;


alias duv_data_bus is <<signal .tb.duv_rtl.data_bus : std_ulogic_vector (0 to 15)>>; -- create an alias duv_data_bus for the signal data_bus in the component duv_rtl in the entity tb


顶部


简介

上下文声明中的关键字 “all” 是一种指定设计单元中使用的库、程序包和实体集的方法。

例如,您可以编写

  library ieee;
  use ieee.std_logic_1164.all;
  use ieee.numeric_std.all;

这意味着引用此上下文的任何设计单元都将能够访问 ieee 库以及 std_logic_1164 和 numeric_std 程序包。在这种情况下,关键字 “all” 表示当前工作库中的所有设计单元都可以使用此上下文。

替代

从 VHDL-2008 开始,关键字 “all” 用于指示应该由工具推断出过程的敏感度列表,而不是由设计者显式指定。

敏感度列表是信号列表,当这些信号更改其值时,将触发过程的执行。

例如,考虑以下实现具有异步复位的 D 触发器的过程

process (i_clk, i_rst)
begin
 if i_rst = '1' then
  q <= '0';
 elsif rising_edge(i_clk) then
  q <= d;
 end if;
end process;

此过程的敏感度列表为 (i_clk, i_rst),这意味着只要 i_clk 或 i_rst 发生变化,该过程就会运行。但是,我们也可以使用关键字 “all” 来让我们自己推断敏感度列表

process (all)
begin
 if i_rst = '1' then
  q <= '0';
 elsif rising_edge(i_clk) then
  q <= d;
 end if;
end process;

这等效于前面的过程,因为工具将自动确定 i_clk 和 i_rst 是影响过程行为的唯一信号。

使用关键字 “all” 可能会更方便且更不容易出错,因为它避免了在向过程添加或删除信号时手动更新敏感度列表的需要。

某些工具可能不支持此功能,或者可能根据敏感度列表推断算法生成不同的结果,因此在时钟过程中使用关键字 “all” 之前,请检查工具文档并验证综合和仿真结果。

备注

1987 年版本的 VHDL 引入了 all。


顶部


简介

此关键字用于表示逻辑 AND 操作,它是数字逻辑电路中的基本构建块。

如果操作数是向量(位数组,如 std_logic_vector),则 `AND` 运算符执行按位 AND 操作,如果操作数是 bit 或 boolean 类型,则执行逻辑 AND 操作。

如果所有输入都是 ‘1’,则结果为 ‘1’。否则,结果为 ‘0’。

此行为模拟了数字电子学中 AND 门的功能。


备注

1987 年版本的 VHDL 引入了 and。

参见

https://fpgatutorial.com/vhdl-logical-operators-and-signal-assignments-for-combinatorial-logic/

语法
用法
signal A, B, C : std_logic; 
...
C <= A AND B;

在此示例中,如果 AB 均为 ‘1’,则信号 C 将为 ‘1’。否则,C 将为 ‘0’。

顶部

architecture

[edit | edit source]

简介

术语“体系结构”起着至关重要的作用。它充当与实体声明相关联的正式蓝图,负责阐明设计实体的内部组织和操作。本质上,体系结构以精确和严格的方式描述了设计实体的行为、数据流或结构组成。这种技术结构在描述设计中输入和输出端口之间错综复杂的关联方面具有实用性,它包含两个主要组件:声明和并发语句。声明包含各种元素,包括类型、信号、常量、子程序、组件和组,而并发语句则明确说明输入如何与输出交互,各种语句类型允许以灵活的方式表达设计功能。在 VHDL 的背景下,体系结构体现了一种系统且明确的方法来定义数字系统的基本特征,为其随后的实现和分析奠定了基础。

体系结构用于详细说明设计实体的行为、数据流或结构。


与实体关联的体系结构主要描述实体的输入和输出端口之间的内部关系。它包含两个主要组件:声明和并发语句。

体系结构的声明部分包含各种类型的声明,例如类型、信号、常量、子程序(函数和过程)、组件和组。可以在各自的主题中找到有关这些内容的详细信息。

另一方面,并发语句描述了体系结构内输入如何与输出相关联。这些关系可以通过各种类型的语句来表达,包括并发信号赋值、过程语句、组件实例化、并发过程调用、生成语句、并发断言语句和块语句。这些语句可以用各种风格来编写,例如结构化、数据流、行为(功能性)或混合,具体取决于预期的设计。

结构化描述依赖于组件实例化和生成语句,从而能够创建从简单门到复杂组件(包含整个子系统)的层次项目。这些组件通过端口连接,如 BCD 解码器的示例 1 所示。

数据流描述使用并发信号赋值语句。每个语句都可以根据其任何输入信号的变化而激活,描述电路的行为和结构,如示例 2 所示。

相反,行为描述(如示例 3 所示)仅包含一个或多个过程,每个过程包含顺序语句。这种方法只关注电路的预期功能,而不指定硬件实现细节。

混合体系结构描述(如示例 4 所示)在同一个体系结构体中组合了行为和结构元素。

备注

1987 年版本的 VHDL 引入了体系结构。

实体可以有多个体系结构,但体系结构不能分配给不同的实体。

体系结构必须与实体关联。

实体内的所有声明在分配给该实体的任何体系结构内完全可见且可访问。

不同类型的语句,如过程、块、并发信号赋值、组件实例化等,可以在同一个体系结构内共存。

语法
用法

示例 1

architecture Structure of Decoder_bcd is
  signal S: Bit_Vector(0 to 1);
  component AND_Gate
    port(A,B:in Bit; D:out Bit);
  end component;
  component Inverter
    port(A:in Bit; B:out Bit);
  end component;
begin
   Inv1:Inverter port map(A=>bcd(0), B=>S(0));
   Inv2:Inverter port map(A=>bcd(1), B=>S(1));
   A1:AND_Gate port map(A=>bcd(0), B=>bcd(1), D=>led(3));
   A2:AND_Gate port map(A=>bcd(0), B=>S(1), D=>led(2));
   A3:AND_Gate port map(A=>S(0), B=>bcd(1), D=>led(1));
   A4:AND_Gate port map(A=>S(0), B=>S(1), D=>led(0));
end Structure;


示例 2

architecture Dataflow of Decoder_bcd is
begin
   led(3) <= bcd(0) and bcd(1);
   led(2) <= bcd(0) and (not bcd(1));
   led(1) <= (not bcd(0)) and bcd(1);
   led(0) <= (not bcd(0)) and (not bcd(1));
end Dataflow;


示例 3

architecture procedural of Decoder_bcd is
  signal S: bit_vector (3 downto 0);
begin
   P1: process (bcd, S)
   begin
     case bcd is
         when "00" => S <= "0001" after 5 ns;
         when "01" => S <= "0010" after 5 ns;
         when "10" => S <= "0100" after 5 ns;
         when "11" => S <= "1000" after 5 ns;
     end case;
     led <= S;
   end process;
end procedural;


示例 4

architecture Mixed of Decoder_bcd is
  signal S: Bit_Vector(0 to 2);
  component Inverter
    port(A: in Bit; B: out Bit);
  end component;
begin
  Inv1: Inverter port map (A=>bcd(0), B=>S(0));
  Inv2: Inverter port map (A=>bcd(1), B=>S(1));
  P: process (S, bcd)
  begin
    led(0) <= S(0) and S(1) after 5 ns;
    led(1) <= S(0) and bcd(1) after 5 ns;
    led(2) <= bcd(0) and S(1) after 5 ns;
    led(3) <= bcd(0) and bcd(1) after 5 ns;
  end process;
end Mixed;

顶部


简介

VHDL 中的“Array”关键字介绍

在 VHDL 中,“Array”关键字是一种多功能数据类型,在构建和组织数据方面发挥着至关重要的作用。在 VHDL 中,数组被正式定义为一种类型,其值由相同子类型的元素组成,使其成为管理同类数据集的理想选择。数组中每个元素的区分特征是与其关联的索引(或对于多维数组而言,是索引)。这些索引必须是离散类型的值,并且必须位于指定的索引范围内。

简单来说,数组就像一个容器,它包含相同类型元素,每个元素通过其索引唯一标识。索引的数目直接对应于维数;例如,一维数组有一个索引,而二维数组有两个索引。

VHDL 中的数组有两种形式:约束数组和非约束数组。约束数组具有固定大小,由离散类型标记或指定的范围确定。相比之下,非约束数组没有预定义的大小;其大小仅在您声明该类型对象时确定。

例如,VHDL 的 Package STANDARD 包含预定义的非约束数组类型,如 STRING 和 BIT_VECTOR。这些数组被广泛使用,其中 STRING 元素由正值索引,而 BIT_VECTOR 元素由自然值索引。

VHDL 中的数组可以使用各种技术进行操作,例如索引、串联、聚合和切片。这些方法提供了访问和分配数组元素值的灵活性,使它们成为 VHDL 编程的重要组成部分。

值得注意的是,虽然数组是 VHDL 中强大的工具,但并非所有综合工具都支持多维数组。例如,二维“向量数组”,以及一些综合工具允许有限支持二维数组。

总之,VHDL 中的数组是基本数据结构,允许您有效地管理和操作数据集合,使其成为 VHDL 编程的关键要素。


备注

VHDL 的 1987 版本引入了数组。

语法
用法
type type_name is array (range) of element_type

type type_name is array (type range <>) of element_type

type Real_Matrix is array (1 to 10) of REAL;
type BYTE is array (0 to 7) of BIT;
type Log_4_Vector is array (POSITIVE range 1 to 8, POSITIVE range 1 to 2) of Log_4;
type X is (LOW, HIGH);
type DATA_BUS is array (0 to 7, X) of BIT;

顶部


简介
备注

VHDL 的 1987 版本引入了 assert。

语法
用法
-- Code

顶部

attribute

[编辑 | 编辑源代码]

简介
备注

VHDL 的 1987 版本引入了 attribute。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 begin。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 block。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 body。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 buffer。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 bus。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 case。

语法
用法
-- Code

顶部

component

[编辑 | 编辑源代码]

简介
备注

VHDL 的 1987 版本引入了 component。

语法
用法
-- Code

顶部

configuration

[编辑 | 编辑源代码]

简介
备注

VHDL 的 1987 版本引入了 configuration。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 constant。

语法
用法
-- Code

顶部

disconnect

[编辑 | 编辑源代码]

简介
备注

VHDL 的 1987 版本引入了 disconnect。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 downto。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 else。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 elsif。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 end。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 entity。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 exit。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 file。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 for。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 function。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 generate。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 generic。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 guarded。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 if。

语法
用法
-- Code

顶部


简介
备注

VHDL 的 1987 版本引入了 in。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 inout。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 is。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 label。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 library。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 linkage。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 loop。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 map。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 mod。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 nand。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 new。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 next。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 nor。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 not。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 null。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 of。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 on。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 open。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 or。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 others。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 out。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 package。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 port。

语法
用法
-- Code

顶部

procedure

[编辑 | 编辑源代码]

简介
备注

1987 年版本的 VHDL 引入了 procedure。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 process。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 range。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 record。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 register。

语法
用法
-- Code

顶部


简介
备注

1987 年版本的 VHDL 引入了 rem。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 report。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 return。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 select。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 severity。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 signal。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 subtype。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 then。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 to。

语法
用法
-- Code

顶部

transport

[编辑 | 编辑源代码]

简介
备注

1987 年的 VHDL 版本引入了 transport。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 type。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 units。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 until。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 use。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 variable。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 wait。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 when。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 while。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 with。

语法
用法
-- Code

顶部


简介
备注

1987 年的 VHDL 版本引入了 xor。

华夏公益教科书