常用的头:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
顶层文件结构:
--这部分相当于verilog中的module模块端口声明---------------
ENTITY top IS
PORT(
CLKIN:
IN STD_LOGIC;
...
LED:
OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
);
END top;
--接下来是ARCHITECTURE部分,顶层模块分几个元件----
ARCHITECTURE rtl of top IS
COMPONENT a
PORT(
CLKIN:
IN STD_LOGIC;
...
);
END COMPONENT;
COMPONENT b
PORT(
...
);
END COMPONENT;
--常数说明,相当于Verilog中的parameter------------------------
CONSTANT VCC :STD_LOGIC := '1';
--信号说明,相当于verilog中的reg----------------------------------
SIGNAL VCC_CON : STD_LOGIC;
SIGNAL SL : STD_LOGIC_VECTOR(3 DOWNTO 0);
--元件例化,相当于verilog中的模块调用和端口映射-----------
BEGIN
--模块实例名 :模块名
ADJUST_CONTROL: adjuster
PORT MAP(
自身端口名 => 连接端口名,
自身端口名 => 连接端口名,
...
);
SEC_CONTROL: counter60
PORT MAP(
...
);
--最后结束结构体------------------------------------------------------
END rtl;
一般非顶层文件的结构:
--库
--ENTITY声明
--ARCHITECTUREK开始
--声明CONSTANT/SIGNAL
--开始进程
BEGIN
--多个并列的process相当于verilog中的always,是并行的--
LOW_PROC

BEGIN
IF rising_edge(CLKIN) THEN
...
END IF;
END PROCESS;
HIGH_PROC

BEGIN
...
END PROCESS;
--穿插着一些赋值语句----------------------------------------------
--这些语句相当于verilog中的assign,输出缓冲的风格-----
LOW <= LOW_REG;
HIGH <= HIGH_REG;
--最后结束结构体----------------------------------------------------
CASE结构(用于状态机,多路选择等):
sel_state

BEGIN
IF reset = ‘0’ THEN
state <= Idle;
...
ELSEIF rising_edge(clk) THEN
CASE state IS
WHEN led1
=>
q <= ..;
state <= led2;
WHEN led2
=>
q <= ..;
state <= led3;
WHEN led3
=>
q <= ..;
state <= led4;
...
END CASE;
END PROCESS;