【菜鸟FPGA学习帖】第4帖 基础实例一
(例程中dout高三位分别为D4 D3 D2)
第一章
VHDL中有四类操作符,逻辑操作符、关系操作符、算术操作符、符号操作符
逻辑操作符AND OR NAND NOR XOR XNOR NOT,
如果在一个表达式中有两个以上算符,需要使用括号把这些运算分组,如果这一串运算中的算符相同,且是AND\OR\XOR中的一种,则不需要使用括号。
/1/ AND 逻辑与
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity ledd is
port(dout:out std_logic_vector(7 downto 0));
end ledd;
architecture behave of ledd is
begin
dout <= "11100000" AND "01111111";
end behave;
/2/ NOT 非
architecture behave of ledd is
begin
--dout<="00000000" OR "01111111";
dout<= NOT"10000000" ;
end behave;
/3/ & 并置运算符
begin
dout <= "0011"&"1100"; --高三位分别为D4 D3 D2
end behave;
第2章GENERIC类属说明语句
ENTITY mcu1 IS
GENERIC (addrwidth : INTEGER := 16);
PORT(
add_bus : OUT STD_LOGIC_VECTOR(addrwidth-1 DOWNTO 0) );
...
在这里 GENERIC 语句对实体 mcu1 作为地址总线的端口 add_bus 的数据类型和宽度作了定义 即定义 add_bus 为一个 16 位的标准位矢量 定义 addrwidth 的数据类型是整数INTEGER 其中 常数名addrwidth减 1 即为 15
例程:
GENERIC ( width : INTEGER := 8);
port(dout:out std_logic_vector(width-1 downto 0));
end ledd;
第3章 BLOCK语句
BLOCK 语句的表达格式如下
块标号 BLOCK [ 块保护表达式
接口说明
类属说明
BEGIN
并行语句
END BLOCK 块标号
作为一个 BLOCK 语句结构 在关键词 BLOCK 的前面必须设置一个块标号 并在结尾语句 END BLOCK 右侧也写上此标号 此处的块标号不是必需的
块的类属说明部分和接口说明部分的适用范围仅限于当前 BLOCK 所以 所有这在 BLOCK 内部的说明对于这个块的外部来说是完全不透明的 即不能适用于外部环境或由外部环境所调用 但对于嵌套于更内层的块却是透明的 即可将信息向内部传递
例:
architecture behave of ledd is
begin
blk : BLOCK
begin
dout<="00000000";
END BLOCK blk;
end behave;