第3章 VHDL语言基础
4位计数器
module count4(out,reset,clk);
output[3:0] out;
input reset,clk; reg[3:0] out; always @(posedge clk) begin if(reset) out<=0; //同步复位 else end endmodule out<=out+1; //计数
第三章 硬件描述语言HDL Hardware Description Language
第一节
概述
常用的硬件描述语言有: VHDL:Very High Speed Integrated Circuit Hardware Description Language
超高速集成电路硬件描述语言
Verilog:Cadence公司开发
还需要注意的是,LIBRARY语句和USE语句的作 用范围只限于紧跟其后的实体及其结构体。因此,如 果一个程序中有一个以上的实体,则必须在每个实体
的前面分别加上LIBRARY语句和USE语句,说明各实
体及其结构体需要使用的库和程序包。
2.实体说明 ENTITY nand_2 IS PORT ( a,b:IN STD_LOGIC; y:OUT STD_LOGIC); END nand_2; 语法: ENTITY 实体名 IS PORT[端口说明]; END 实体名;
ABEL(Advanced Boolean Hardware Description, 高级布尔方程语言) :Lattice公司 AHDL(Analog模拟硬件描述语言): Altera公司
第二节
VHDL的基本结构
通过与非门的逻辑描述,阐述VHDL的基本结构
y a b
nand_2 a b y
端口说明语句描述实体的外部接口情况,不管内部功
能如何只描述它的输入和输出接口信号。一般格式为:
PORT(端口信号名,端口信号名… : 端口模式 数据类型; 端口信号名,端口信号名… : 端口模式 数据类型);
端口信号名:赋给每个输入输出接口的名称
端口模式:说明信号的输入和输出方式,IN,OUT
INOUT,buffer, INOUT:在输出的同时可以自己读取,同时也可以
IS
BEGIN
q<= ( d0 AND sel ) OR ( NOT sel AND d1 ); END dataflow; “<=”表示赋值关系。 逻 辑 运 算 符 包 括 : AND( 与 ) , OR( 或 ) , NAND( 与非 ) , NOR( 或非 ) , XOR( 异或 ) , NOT(非)。
目前在VHDL语言中,常用的主要有以下几种库: IEEE库、 STD库、 WORK库、用户库 最常用的资源库是IEEE库,常用的程序包 STD_LOGIC_1164:常用的数据类型(std_logic,std_logic_vector),各
种类型转换函数及逻辑运算。
STD_LOGIC_ARITH:定义了无符号unsigned、有符号数signed数
第三节 VHDL结构体的子结构
(2) STD库
是VHDL的标准库,含有称为 (3)WORK库 STANDARD的标准程序包, 其中定义了多种常用的数据类
型,均不加说明便可直接引用。
(4)自定义库 另一个程序包TEXTIO(文本文 件输入/输出),则需经说明后 方可使用。
WORK库和STD库
(2) STD库
(3)WORK库
总会被自动打开。
1 RS触发器
端口数据类型:
(1)标准数据类型,如:整数、实数,位,位矢量等。
(2)IEEE标准数据类型,标准逻辑位STD_LOGIC、标 准逻辑矢量STD_LOGIC _VECTOR。 (3)用户自定义的数据类型,如枚举型、数组类型、文 件(FILE)类型、记录(RECORD)类型等。
据类型,相应的算术运算; unsigned, signed和integer之间的转换函数。
STD_LOGIC_UNSIGNED, STD_LOGIC_SIGNED:
定义了可用于integer和std_logic,std_logic_vector数据类型混合运算的运算符,
由std_logic_vector型到integer型的转换函数。
Nand_2实体说明
结构体
BEGIN y <= NOT (a AND b);
END rtl;
1. 库说明
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
语法: library 库名
use 库名.程序包名.项目名:
库是用VHDL语言编写的源程序及其通过编译 的数据集合,它由各种程序包组成,程序包提供了 各种数据类型、函数的定义以及各种类型转换函数 及运算等,以供给设计者使用。
是当前作业库,设计人员设计的
(4)自定义库 VHDL语言程序的编译结果不需 要任何说明,都将要存放在work 库中。Work库可以是设计者个人 使用,也可提供给设计组多人使
用
(2) STD库
由用户自己创建。设 (3)WORK库 计者可以把一些自己 需要经常使用的非标
准(一般是自己开发
(4)自定义库 的)包集合和实体等 汇集成库,作为对 VHDL标准库的补充。
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;----由std_logic_vector转换成integer; entity countA is port(clk,clr,en: in std_logic; QA,QB,QC,QD:out std_logic); end countA; architecture exampleA of countA is signal count_4:std_logic_vector(3 downto 0); begin QA<=count_4(0); QB<=count_4(1); QC<=count_4(2); QD<=count_4(3); process(clk,clr) begin if(clr='1')then count_4<="0000"; elsif (clk'event and clk='1')then if (en='1')then if(count_4="1111")then count_4<="0000"; else count_4 <=count_4+1; end if; end if; end if; end process; end exampleA;
作为其它端口的输入。 如RAM的数据口、单片机的I/O口。
Buffer:缓冲端口,其功能与inout类似, 但是当作为输入用时,输入的信号不是从外部输 入,而是由内部产生向外输出的信号。即内部回 读自身向外产生的信号,即允许反馈。 如将计数器输出的计数信号回读,作为下一 个计数值的初值。
【例1】 以如图1所示的RS触发器为例,定义如下: ENTITY rsff IS PORT ( set, reset: IN BIT; q, qb: BUFFER BIT ); END rsff ;
类属参数说明 类属参数说明必须放在端口说明前面,用于 指定参数。类属参数说明的一般格式为: GENERIC (常数名:数据类型 [:设定值]);
在门级模型中,可以使用类属参数指定延迟时间 参数。 例如在结构体内出现语句:
GENERIC ( m: TIME : = 1ns)
Temp1:= do AND sel AFTER m; 表示do和sel相与后,经过1 ns延迟才送到Temp1。 ( 当 然 , 时 间 单 位 可 以 取 fs(1 ps=1000 fs , 1 ns=1000 ps)、(s、ms、sec、min、hr等)。
If 条件 then 顺序语句1; Else 顺序语句2; End if;
注意在VHDL语言中不区分大小写
时钟信号上升沿和下降沿的表示 (1) 表示一个上升沿时钟clk: clk ′EVENT AND clk ='1';
rising_edge(clk)
(2) 表示一个下降沿时钟clk: clk ′EVENT AND clk ='0';
inst
在程序设计中,要求实体名与存储的文件名一致
IEEE库使用说明
USE IEEE.STD_LOGIC_1164.ALL;
LIBRARY IEEE; ENTITY nand_2 IS PORT ( a,b:IN STD_LOGIC; 端口说明,用以 描述器件的接口 y: OUT STD_LOGIC); END nand_2; ARCHITECTURE rtl OF nand_2 IS
CLR
CLR
QA
d0
CLK
QB CLK QC
d1 d2 d3
EN
EN QD countA
IF语句的格式:
IF <条件1> THEN 顺序处理语句1; ELSIF <条件2> THEN 顺序处理语句2; …… ……. ELSE 顺序处理语句3; END IF;
If 条件 then 顺序处理语句; end if;
d0
q
d1 sel
图 二选一器件的电路原理图 【例】 编写描述一个二选一器件(如图所示)的程 序。 ENTITY mux IS PORT ( d0, d1: IN BIT; sel: IN BIT; q: OUT BIT ); END mux ;
ARCHITECTURE
dataflow OF mux