"); //-->
在实行VHSIC计划(美国国防部于70年代末至80年代初实行的研制高速、大规模集成电路的开发计划)中,发现传统的设计方法无法满足开发这类非常复杂集成电路的要求。
81年 提出标准
87年 成为IEEE1076标准
93年 更新为IEEE1164标准
96年 IEEE1076.3成为综合标准
以一个半加器为例
a c
b s
半加器真值表
a b |
c s |
0 0 0 1 1 0 1 1 |
0 0 0 1 0 1 1 0 |
VHDL基本结构
75个关键字,(大写)
VHDL中,所有部件都用实体(Design Entity)来描述。
实体可以小至一个门,大至一个CPU芯片。
实体由两部分构成:实体说明和结构体
实体说明用来定义实体与外部连接关系以及需传给实体的参数。一般格式为
ENTITY 实体名 IS
[GENERIC(类属表);]
[PORT(端口表);]
END[ENTITY] [实体名];
例:ENTITY add IS
GENERIC(tpd:Time:=2ns);
PORT(a,b:IN Bit;s,c:OUT Bit);
END add
结构体
通过若干并行语句来描述设计实体的逻辑功能或内部结构,从而建立设计实体输入与输出之间的关系。
ARCHITECTURE 结构体名 OF 实体名 IS
[说明语句;]
[BEGIN 并行语句;]
END [ARCHITECTURE] [结构体];
(1) 算法描述
(2) 数据流描述
(3) 结构描述
ARCHITECTURE ha OF add IS
BEGIN
cl:PROCESS(a,b)
BEGIN
IF a=‘1’AND b=‘1’ THEN
c<=‘1’;
ELSE
c<=‘0’;
END IF
END PROCESS cl;
c2:PROCESS(a,b)
BEGIN
IF a=‘0’AND b=‘0’ THEN
s<=‘0’;
ELSEIF a=‘1’AND b=‘1’THEN
s<=‘0’;
ELSE
s<=‘1’;
END IF
END PROCESS c2;
END ha;
s=a XOR b c=ab 基于此布尔方程描述为:
ARCHITECTURE dataflow OF add IS
BEGIN
s<=a XOR b AFTER tpd;
c<= a AND b AFTER tpd;
END dataflow;
强调并行性
半加器可表示为如下逻辑电路
a c
s
b
ARCHITECTURE struct_ha OF add IS
COMPONENT and_gate PORT (a1, a2: in bit; a3: OUT Bit); 元件说明
END COMPONENT;
COMPONENT xor_gate PORT (x1, x2: IN Bit; x3: OUT Bit);
END COMPONENT;
BEGIN
g1: and_gate PORT MAP (a, b, c); 端口映射
g2: xor_gate PORT MAP (a, b, s);
END struct_ha;
基本知识:
四种对象:SIGNAL(信号),VARIABLE(变量),CONSTANT(常量) FILE(文件)
每一个对象只能有一种类型:
整形(Integer),实型(Real),枚举型(如Bit,Boolean等),物理型(Time等)
在此基础上可以通过TYPE语句自定义复合类型(数组、记录),子类型以及枚举类型。
例:TYPE bit3 IS (‘0’,’1’,’z’); 枚举类型
TYPE word IS ARRAY (15 DOWNTO 0) OF Bit; 一维数组
TYPE matrix IS ARRAY(1 TO8,1TO 8) OF Real; 二维数组
TYPE voltage IS RANGE 0.0 TO 5.0; 实数子类型
运算符
逻辑运算符 移位运算符 算术运算符
关系运算符 其他运算符
顺序语句
l 变量与信号赋值语句
l IF语句
l CASE语句
CASE 选择表达式 IS
WHEN选择值1=>顺序语句1;
WHEN选择值2=>顺序语句2;
……………………………………
WHEN OTHERS=>顺序语句n;
END CASE;
例:CASE cnt IS
WHEN 7=>cnt<=0;
WHEN OTHERS=>cnt<=cnt+1;
END CASE;
l LOOP语句
[LOOP标号:][重复模式] LOOP
顺序语句;
END LOOP[LOOP 标号];
例
loop1: WHILE start/=’1’ LOOP
done<=’1’;
END LOOP loop1
loop3: FOR cnt IN 1 TO 3 LOOP
NEXT WHEN cnt=2;
Var:=var+cnt;
END LOOP loop3;
并行语句
l 并行信号赋值语句
l 进程语句
l 断言语句
l 元件例化语句
l 生成语句
例3-8译码器 选择信号赋值语句
ENTITY decoder38 IS
PORT(en : IN Bit;
input : IN Bit_Vector(2 DOWNTO 0);
output : OUT Bit_Vector(7 DOWNTO 0));
END decoder38;
ARCHITECTURE assign OF decoder38 IS
BEGIN
WITH(en & input) SELECT ―――&是拼接运算符
Output<=“11111110”WHEN “0000”,
Output<=“11111101”WHEN “0001”,
Output<=“11111011”WHEN “0010”,
Output<=“11110111”WHEN “0011”,
Output<=“11101111”WHEN “0100”,
Output<=“11011111”WHEN “0101”,
Output<=“10111111”WHEN “0110”,
Output<=“01111111”WHEN “0111”,
Output<=“11111111”WHEN OTHERS;
END assign;
常用分频器的VHDL实现
entity clock_10 IS
port(main_clock : in std_logic;
clock_out : out std_logic);
end entity clock_10;
architecture behavior of clock_10 is
signal counter : integer range 0 to 4;
signal clk : std_logic;
begin
process(main_clock)
begin
if main_clock'event and main_clock = '1' then
clock_out <= clk;
if counter = 4 then
clk <= not clk ;
counter <= 0;
else
counter <= counter + 1;
end if;
end if;
end process;
END behavior;
函数的定义与引用
过程的定义与引用
程序包与设计库
练习题目
1. 用门电路搭建一个三分频器,要求占空比1:1。
2. 设计一个对串行输入序列信号中含“1”个数统计的电路,序列长度15位。
3. 用VHDL编写程序实现题目2的功能。
4. 用VHDL编写程序实现接口方式转换:
将8位SPI串行接口转并口输出。
关于软件的学习:建议使用XILINX公司的ISE
或者ATERA公司的QUARTUS2
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。