适合有编程基础的同学快速入门食用。

主要参考和引用了下列文章:

程序的基本结构

library ieee;
use ieee.std_logic_1164.all;

-- 实体部分
entity entityName is
port(
    -- 端口定义部分
)
end entityName;

-- 架构部分
architecture entityArch of entityName is 
    -- 信号,属性,变量定义部分
begin
-- process 或者 
end;

引入语句

use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

端口的定义

     s    : in  STD_LOGIC; -- 单个变量
     y    : out STD_LOGIC)-- 输出信号(最后一个没有分号!!!)
);

数组

    led : out STD_LOGIC_VECTOR(7 downto 0));
);

允许的端口模式

  • IN(输入):该端口是只读的。
  • OUT(输出):该端口是只写的。
  • INOUT(双向):该端口既允许数据流入,也允许数据流出。
  • BUFFER(缓冲):和 INOUT 类似,但区别在于当需要读取数据时,只能读取内部产生的反馈信号。

信号的定义

signal numH : std_logic_vector(3 downto 0) := "0000";
signal numL : std_logic_vector(3 downto 0) := "0000";
signal overflow: std_logic := '1'; -- 溢出标志,低电位有效
begin
    -- ...```
        
<p>
          变量和常量同理
        </p>
        
```vhdlconstant clkPeriod : time := 20 ns; -- 主时钟定义 50Mhz
signal cnt : integer range 0 to 255 := 0;

赋值语句

Process (进程)

括号里写入 敏感量

    begin
    -- ...
end process;

条件运算符

&lt; -- 小于
> -- 大于
not (a = b) -- 不等判定
(a = b) or (a &gt; b)-- 大于等于 ```
        
## 时钟条件
        
```vhdl--- 上升沿
clock’event and clock=&#039;1&#039;;
rising_egde(clock);

--- 下降沿
clock’event and clock=‘0’;
falling_egde(clock);

If 语句

Process 中可用。

  led &lt;= &#039;1&#039;;
end if;
    <h3 id="rtoc-11" >
      else
    </h3>
begin
    if (button = &#039;0&#039;) then -- 如果 button 被按下
        led &lt;= "11111111";
    else
        led &lt;= "00000000";
    end if;
 end process;

Case 语句

    when "0000" =&gt; segH &lt;= "1111110";
    when "0001" =&gt; segH &lt;= "0110000";
    when "0010" =&gt; segH &lt;= "1101101";
    when "0011" =&gt; segH &lt;= "1111001";
    when "0100" =&gt; segH &lt;= "0110011";
    when "0101" =&gt; segH &lt;= "1011011";
    when "0110" =&gt; segH &lt;= "1011111";
    when "0111" =&gt; segH &lt;= "1110000";
    when "1000" =&gt; segH &lt;= "1111111";
    when "1001" =&gt; segH &lt;= "1111011";
    when others =&gt; segH &lt;= "0000001";
end case;

wait for 语句

类似于 Thread.sleep