一、Design Entity写法
1.结构组成
例如:求两个输入1bit的信号的同或结果
2.entity
- 最简单的结构:
entity YourEntityName is
end YourEntityName;
- 中间可以加入port端口内容
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
c : out STD_LOGIC);
port(...);
:port中多个端口的描述间用;
分隔。
描述分为名字 : 流向类型 : 器件类型
。
流向类型 | 作用 |
---|---|
in |
输入 |
out |
输出 |
inout |
双向 |
buffer |
存储 |
器件类型一般就是std_logic
3.architecture
architecture YourBehavioralName of YourEntityName is
-- 这里声明一些变量
begin
-- 这里声明一些行为
end YourBehavioralName;
-- 最后也可以不用写YourBehavioralName,即end;
行为可以直接写,也可以写个process
- 直接写
architecture YourBehavioralName of YourEntityName is
begin
-- 就像这样直接处理就行
c <= a xnor b;
end YourBehavioralName;
- 写个process
architecture YourBehavioralName of YourEntityName is
begin
-- 就像写c函数一样,括号里面的内容是输入in类型的端口(所以不写c,写c就报错)
YourProcessName:process(a,b)
begin
c <= a xnor b;
-- 注意是end process XXX
end process YourProcessName;
end YourBehavioralName;
process的名字可以没有
process(a,b)
begin
c <= a xnor b;
end process;
process的参数没有时可以不用写括号
process
begin
end process;
二、testBench写法
testBench其实和Design Entity是同样的结构组成。
例子:
-- 包
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- 一般testBench不用写端口port
ENTITY testBench IS
END testBench;
ARCHITECTURE behavior OF testBench IS
-- component:就是将Design Entity中的port内容写一遍
COMPONENT YourComponentName
PORT();
END COMPONENT;
-- 信号signal
signal YourSignalName : YourSignalType;
BEGIN
-- Unit Under Test (UUT):将Component的端口Port映射到信号signal上
uut: YourComponentName PORT MAP (
YourPortName => YourSignalName
);
-- Stimulus process
stim_proc: process
begin
end process;
END;
例子:
- signal信号
信号类型 | 定义 |
---|---|
std_logic | 普通的信号 |
std_logic_vector(1 downto 0) | 信号向量(数组)1 downto 0 表示数组下标从0到1(包括),有两个元素 |
-
uut
多个映射描述之间用,
分隔
将Component的端口Port映射到信号signal上,用=>
-
仿真过程process
wait for 100ns
:表示信号持续100ns
ab <= "00";
信号向量数组ab的赋值