1.基本概念
EDA:Electronic design automation,电子设计自动化。是指利用计算机辅助设计(CAD)软件,来完成超大规模集成电路(VLSI)芯片的功能设计、综合、验证、物理设计(包括布局、布线、版图、设计规则检查等)等流程的设计方式。(节省人力与时间,提高效率)
CPLD:Complex Programmable logic device,复杂可编程逻辑器件。采用CMOS EPROM、EEPROM、快闪存储器和SRAM等编程技术,从而构成了高密度、高速度和低功耗的可编程逻辑器件。主要由逻辑块、可编程互连通道和I/O块三部分构成。(其中集成了很多可编程的数字逻辑单元,最后实现什么样的功能就是靠烧进去的是是么样的程序,比如烧进去的是计数器,那么实现的就是计数器的功能)
FPGA:Field Programmable Gate Array,现场可编程逻辑门阵列。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
VHDL:Very-High-Speed Integrated Circuit Hardware Description Language,超高速集成电路硬件描述语言。是一种用于电路设计的高级语言,与其他硬件描述语言相比,其具有语言简洁、灵活性强、不依赖于器件设计等特点。
2.VHDL语言的理解与解读(if语句)
#十一进制加法计数器
LIBRARY ieee;--打开ieee库
USE ieee.std_logic_1164.all;--使用ieee库中std_logic_1164程序包中的所有项目
use ieee.std_logic_unsigned.all;--使用ieee库中std_logic_unsigned程序包中的所有项目
(非符号数)
use ieee.std_logic_arith.all;--使用ieee库中std_logic_arith程序包中的所有项目
(算数运算)
ENTITY counter IS--实体counter开始
generic(number:integer:=10);--定义静态参数number为10的整数
PORT--端口
( inputdata : IN INTEGER RANGE 0 TO 15;--inputdata为输入整数范围0-15
inclk : IN STD_LOGIC;--inclk为输入的标准逻辑数据(数字时钟)
clear : IN STD_LOGIC;--clear为输入的标准逻辑数据(清除信号)
enable : IN STD_LOGIC;--enable为输入的标准逻辑数据(使能信号)
load : IN STD_LOGIC;--load为输入的标准逻辑数据(装载信号)
countoutput : OUT INTEGER RANGE 0 TO 15 );--countoutput为输出范围为0-15的整数
END counter;--counter的实体结束
ARCHITECTURE a OF counter IS--定义实体counter对应的结构体a开始
SIGNAL countbuffer : INTEGER RANGE 0 to 15;--定义信号countbuffer整数范围为0-15
signal countlogic: std_logic_vector(3 downto 0);--定义信号countlogic为4位的标准逻辑向量
BEGIN--结构体开始
PROCESS (inclk, clear)--进程,其中inclk和clear为本进程的敏感信号(当敏感信号发生变化时,进程才会开始)
BEGIN--进程开始
IF clear = '0' THEN --若clear=0,那么执行下一条语句
countbuffer<= 0; --countbuffer清零
ELSIF (inclk'EVENT AND inclk= '1') THEN --若clear不为0,且inclk上升沿到达,那么执行下一条语句
IF load = '1' THEN --若load=1,则执行下一条语句
countbuffer <= inputdata; --将inputdata的值赋值给countbuffer
ELSE --否则
IF (enable = '1') and (countbuffer<number) THEN--如果clear不为0,load不为1,enable为1,那么执行下一条语句
countbuffer<=countbuffer+1; --countbuffer加1
ELSif (enable = '1') and (countbuffer>=number) then --否则如果enable为1,且countbuffer大于等于number定义的值,执行下一条语句
countbuffer<=0;--countbuffer清零
else--否则
countbuffer <=countbuffer; --countbuffer的值不变
END IF; --结束if语句
END IF; --结束if语句
END IF; --结束if语句
END PROCESS;--结束进程
countoutput<= countbuffer;--countbuffer赋值给countoutput输出
END a;--结束结构体a
同步加法计数器
clear清零信号,异步控制
load装置数据信号,同步控制
enable 使能信号,同步控制
countbuffer就是一个数据缓冲器,相当于一个中间变量,因为输出countoutput不能再次作为输入,所以引入一个中间变量。
过程依次为:库--程序包--实体(定义系统的输入与输出)--结构体(关键所在,定义系统的行为、元件及内部的连接关系,即描述其逻辑功能。)