350 likes | 467 Views
输入序列 X. 含 1 统计电路. 统计结果. 5-3 硬件描述语言 VHDL. 例:试设计一个逻辑电路, X=x n -1 x n -2 …x 1 x 0 是该电路得串行输入信号, Z 为它的输出,表示 X 中包含的 1 个数。. 即:. 分析:. 对于这样一个看似十分简单的逻辑电路,却难以用状态表对它进行描述,对于这样一个 n 位的串行输入序列,将有 2 n 种不同的组合,显然不能按当前已收到的序列来规定电路的状态。如果这样规定,则需要 2 n 个状态;显然也不能按当前序列中已包含 1 的个数来规定状态,如果这样,则需要 n +1 个状态,状态表也将十分庞大。.
E N D
输入序列X 含1统计电路 统计结果 5-3硬件描述语言VHDL 例:试设计一个逻辑电路,X=xn-1xn-2…x1x0是该电路得串行输入信号,Z为它的输出,表示X中包含的1个数。 即: 分析: 对于这样一个看似十分简单的逻辑电路,却难以用状态表对它进行描述,对于这样一个n位的串行输入序列,将有2n种不同的组合,显然不能按当前已收到的序列来规定电路的状态。如果这样规定,则需要2n个状态;显然也不能按当前序列中已包含1的个数来规定状态,如果这样,则需要n+1个状态,状态表也将十分庞大。
由此可见: 由电路功能直接导出状态表的方法并非对所有的电路设计都是适用的,但如果从为实现上述功能必须完成的操作出发,问题就可能很容易解决。 (1) 该电路为统计序列中含有的“1”的个数,必须包含有一个加1计数器。 (2) 仅当输入信号为1时才进行加1计数,所以必须还应有判别操作,要做的工作就是设计判别电路和计数器,并配置相应的控制电路使它们能协调地工作,以完成预定的功能。
开始 Z 0 n 0 n n+1 N x=1? Y ZZ+1 N Y n=N?
n=N? X ﹥ 计A CR C1 控制器 ﹥ CP CR 计B C2 Z ﹥ 结束 算法设计的思想:是把系统应实现的逻辑功能看作是应完成的某种运算或操作,若这一运算或操作十分复杂,则可以把它分解成若干个子运算或子操作系统的算法描述的特征。 (1) 含有若干个子运算,实现对数据或信息的存储传输或处理。 (2) 具有相应的控制程序,控制各子运算的执行顺序。 在导出算法流图后,便可将电路划分成数据处理单元和控制单元。
硬件描述语言VHDL概述: 随着超大规模集成电路工艺的发展,待设计电路的规模越来越大,传统的手工艺已无发适应设计复杂数字系统的要求。然而超大规模集成电路的发展也推动了计算机技术和数字技术的发展,使人们有可能开发出功能强大的电子设计自动化(简称EDA)软件,从而改变了人们的设计思想和设计方法,实现设计自动化。 数字系统设计历来存在两个分支,即:系统硬件设计和系统软件设计,但是随着计算机技术的发展和硬件描述语言HDL的出现,使这种情况又有新的变化,数字系统的硬件结构及其行为完全可以用HDL语言来描述和生成,这样即使是软件设计人员也同样可以方便的借助HDL语言,设计出符合要求的硬件系统。
另外也为数字系统的硬件、软件协同设计打下了良好的基础,数字系统的硬件、软件设计可以在一开始就进行通盘考虑,进行早期仿真,这就大大提高了系统设计的效率。所谓硬件描述语言:就是可以描述硬件电路的功能、信号连接关系及定时关系的语言。另外也为数字系统的硬件、软件协同设计打下了良好的基础,数字系统的硬件、软件设计可以在一开始就进行通盘考虑,进行早期仿真,这就大大提高了系统设计的效率。所谓硬件描述语言:就是可以描述硬件电路的功能、信号连接关系及定时关系的语言。
传统的系统硬件设计方法与利用硬件描述语言(HDL)的硬件电路设计方法的比较:传统的系统硬件设计方法与利用硬件描述语言(HDL)的硬件电路设计方法的比较:
/0 /0 S1 S2 S0 /0 /0 /0 /0 S3 S4 S5 例:设计六进制计数器 第一步:选择器件 第二步:电路设计 第三步:系统调试 Q3Q2 Q1Q3n+1Q2n+1Q1n+1 Z 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1 0 0 1 1 0 0 1 1 1 0 0 0 1 0 0 1 0 1 0 1 0 1 0 0 0 1 从选择具体的元器件开始,并用这些元器件进行逻辑电路设计,完成系统各独立功能模块,然后再连接。
Z & Q Q Q J 1 J 2 J 3 K K K CP
clr qa en qb clk qc 六进制计数器 cnt6 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY cnt6 IS PORT(clk,clr,en:IN STD_LOGIC; qa,qb,qc:OUT STD_LOGIC); END cnt6;
ARCHITECTURE rtl OF cnt6 IS SIGNAL q:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN PROCESS(clk) VARIABLE q6:INTEGER; BEGIN IF(clk’EVENT AND clk=‘1’) THEN IF(clr=‘0’) THEN q6:=‘0’; ELSIF(en=‘1’) THEN IF(q6=5) THEN q6:=0;
ELSE q6:=q6+1; END IF; END IF; END IF; q<=CONV_STD_LOGIC_VECTOR(q6,3) qa<=q(0); qb<=q(1); qc<=q(2); END PROCESS; END rtl;
第一层:是行为描述,(较小规模系统时常常省略)实质是对整个系统的数学模型进行描述。第一层:是行为描述,(较小规模系统时常常省略)实质是对整个系统的数学模型进行描述。 第二层:是RTL(寄存器)描述,要想得到硬件的具体实现,必须将行为方式描述的VHDL程序改写成RTL描述的VHDL程序。 第三层:是逻辑综合,将RTL描述的程序转换成用基本逻辑元件(宏单元)表示的文件,相当于在人工设计硬件电路时,根据系统要求画出了系统的电原理图。
a & c b a c b 实体: 设计实体 构造体: 一. VHDL语言描述数字系统的基本方法 在电原理图中如果要描述一个”与非”,会想到两件事: (1)确定输入输出 (2)确定功能 & 同理:在VHDL中,所有的部件(小至一个门,大至一个CPU芯片或整个系统)都是用设计实体(Design Entity)来描述,设计实体是描述电路的基本方法。 描述电路的输入、输出 具体指明了对应的行为、元件及内部的连接关系,即定义具体的功能。
1. 实体 ENTITY实体名IS [类属参数说明] [端口说明] END实体名 *大写字母表示实体描述的框架,所用的词都是VHDL语言的保留用词,是不可缺少和省略的部分(大小写视为一样,为区别,关键词用大写)。
q d0 & >1 d1 & 1 se1 例: 二选一选择器电原理图 ENTITY mux2 IS GENERIC(m:TIME:=1ns); PORT(d0,d1,se1:IN BIT; q:OUT BIT) ; END mux2
ARCHITECTURE connect OF mux2 IS SIGNAL tmp:BIT; BEGIN PROCESS(d0,d1,se1) VARIABLE tmp1,tmp2,tmp3:BIT; BEGIN tmp1:=d0 AND se1; tmp2:=d1 AND(NOT se1); tmp3:=tpm1 OR tmp2; tmp<=tmp3 Q<=tmp AFTER m END PROCESS; END connect;
(1) 类属参数说明 (必须放在端口说明之前,用于指定参数) GENERIC(m:TIME:=1ns) 该语句指定了构造体内m的值为1ns,这样语句q<=tmp AFTER m;表示tmp经1ns才送到q。即:GENERIC利用类属参数为q建立一个延迟值。 (2) 端口说明 PORT(端口名{,端口名}:方向 数据类型名 端口名{,端口名}:方向 数据类型名); a) 端口名:赋予每个外部引脚的名称,通常用一个或几个英文字母,或用英文字母加数字来命名之。
q d OUT clk & BUFFER q d clk b) 端口方向: 方向定义 含义 IN 输入 OUT 输出(内部不可使用) INOUT 双向 BUFFER 输出(内部可再使用) LINKAGE 不指定方向,无论哪 一方向都可连接
c) 数据类型: 在VHDL中有10种标准数据类型,而在逻辑电路中常用到两种:BIT或BIT-VECTOR(一组二进制数的值)。 例: POPT(d0,d1,sel:IN BIT; q:OUT BIT; bus:OUT BIT-VECTOR(T DOWNTO 0) d0,d1,sel,q都是BIT类型“0”或“1”, bus是BIT-VECTOR类型,由B7-B0 8位构成 *说明符号不同特别要注意
LIBRARY IEEE; USE IEEE.STD-LOGIC-1164.ALL; ENTITY mu IS POPT(d0,d1,sel:IN STD-LOGIC; q:OUT STD-LOGIC; bus:OUT STD-LOGIC-VECTOR(T DOWNTO 0); END mu; STD-LOGIC代替BIT,类型不一样。有9种。BIT在VHDL标准库中存在,不用说明,STD-LOGIC在IEEE库的1164集合中定义,必须加库说明和包说明语句(在实体说明前)。
2. 构造体 ARCHITECTURE构造体名 OF实体名 IS [定义语句]内部信号,常数,数据类型,函数等的定义; BEGIN [并行处理语句]; END 构造体名; (1) 构造体名称的命名 可以由设计者自由命名,但大多数以行为(behaviur)、数据流(dateflow)、寄存器传输(rtl)或者结构(structural)、方程(funct)来命名,使得阅读者能直接进入设计者所采用的描述方式。 例:ARCHITECTURE STRUC/connect OF MUX IS 表明connet是从属于MUX的结构体。
数据类型 可缺省 (2) 定义语句 位于ARCHITECTURE和BEGIN之间,用于对构造体内部所使用的数据对象进行定义。 VHDL中由四类对象: SIGNAL(信号)、VARIABLB(变量)、CONSTANT(常量)、FILE(文件)。 对象的说明格式为: 对象类别 标示符表; 子类型标示[:=初值] 例: SIGNAL clock:BIT; VARIABLE i:INTEGER:=13 CONSTANT delay:TIME:=5ns
信号类型的对象相当于元件之间的连线,端口说明中的对象均为信号类型可不作说明,但需指明流向,而在结构体中则不需说明由内部信号流向决定。信号类型的对象相当于元件之间的连线,端口说明中的对象均为信号类型可不作说明,但需指明流向,而在结构体中则不需说明由内部信号流向决定。 VHDL有很强的数据类型,但一个对象只能有一种类型,施加于该对象的操作必须与该类型匹配(类型、位长) (a) 标准的数据类型 10种 整数、实数、位、位矢量、布尔量、字符、时间、错误等级、自然数、字符串。
(b) 用户定义的数据类型 格式: TYPE 数据类型名{,数据类型名}数据类型定义, 整型、浮点型、枚举型、时间型等。 例:TYPE week IS (sun,mon,tue,wed,thu,fri,sat); 定义了一个week的数据类型,比使用代码0、1直观方便多了。 (c)用户定义的子类型 用户对已定义的数据类型,作一些范围的限制形成的一种新的数据类型.。 格式:SUBTYPE 子类型名 IS 数据类型名[范围] 例: SUBTYPE iobus IS STD-LOGIC-VECTOR(7 DOWNTO 0);
3. 运算操作符 分三类 见P278 表5-3-1 算术运算符、 关系运算符、 逻辑运算符
二. VHDL语言的基本设计单元构成 分五部分:库说明、集合说明、实体描述、构造体描述和配置描述。 例:一个完整的设计单元构成 LIBRARY IEEE; USE IEEE.STD-LOGIC-1164.ALL; ENTITY mux2 IS POPT(d0,d1,sel:IN STD-LOGIC; q:OUT STD-LOGIC); END mux2 ARCHITECTURE rtl OF mux2 IS BEGIN PROCESS(d0,d1,sel) VARIABLE tmp1,tmp2,tmp3:STD-LOGIC; 库说明(因为使用了IEEE库中定义的集合) 包集合说明STD-LOGIC数据类型在1164集合中定义 实体说明 构造体说明
BEGIN tmp1:=d0 AND sel; tmp2:=d1 AND (NOT sel); tmp3:=tmp1 OR tmp2; END PROCESS; END trl; ARCHITECTURE rtl OF mux2 IS END trl2; CONFIGURATION rtl-mux2 OF mux2 IS FOR trl1 END FOR; END rtl-mux2; ….. 构造体说明 配置说明 在本例题中包含了一个实体和两个构造体,配置说明编译时应选中rtl1构造体,如只有一个,配置说明可省。
1. 构造体的子结构描述 在规模较大的电路设计中,全部电路都用唯一的一个模块来描述是非常不方便的。为此,电路设计者总希望将整个电路分成若干个相对比较独立的模块来进行电路的描述。这样一个构造体可以用几个子结构,即:相对比较独立的模块来构成。 VHDL可以有三种形式的子结构描述语句 BLOCK 、 PROCESS 、 SUBPROGRAMS (a)进程语句 PROCESS 格式: [进程标号:] PROCESS[(敏感信号)] [IS] <说明区> :用以说明数据类型,子程序,变量 BEGIN <顺序语句> END PROCESS[进程标号]
进程语句用于描述一个操作过程,进程内部是顺序执行的。进程语句用于描述一个操作过程,进程内部是顺序执行的。 敏感信号:对相对独立执行的并行语句进行协调,实行同步和异步操作。仅当敏感信号发生变化时,才被激活。 例:P282-283 (b) 断言语句 ASSERT ASSERT语句等价于一个进程语句,它不作任何操作,仅用以判断某一条件是否成立,若不成立,则报告一串信息给设计师。故称之为断言语句。 例:P284
U3 aa d0 & >1 q d1 & ab sel & U2 nsel U1 2. 构造体的结构描述方式 所谓构造体的结构描述方式,就是在多层次的设计中,高层次的设计模块调用低层次的设计模块,或者直接用电路设计单元来构成一个复杂的逻辑电路的描述方式.。 例: ENTITY mux2 IS PORT(d0,d1,sel:IN BIN; q:OUT BIT); END mux2
SIGNAL aa,ab,nesl:BIT; BEGIN U1:inv PORT MAP (sel,nesl); U2:and2 PORT MAP(nsel,d1,ab); U3:and3 PORT MAP(d0,sel,aa); U4:or2 PORT MAP(aa,ab,q); END struct; ARCHITECTURE STRUCT OF mux2 IS COMPONENT and2 PORT(a,b:IN BIT; c:OUT BIT; END COMPONENT; COMPONENT or 2 PORT (a,b:IN BIT; c:OUT BIT); END COMPONENT; *COPONENT为实体内部元件的说明,指明了在该电路中所使用的已生成的模块,供本构造体调用。 *用PORT MAP()语句将生成的模块端口与所设计的各模块端口联系起来 *SIGNAL为信号对象说明,aa、ab、nesl为内部信号
顺序描述语句 并发描述语句 三. VHDL语言的主要描述语言 按语句执行顺序分: 顺序语句块一旦被激活,则其中的所有语句按顺序逐一被执行。 并行语句的书写次序并不代表其执行的顺序,当并行语句块被激活时,将只执行被激活的语句。 例:进程语句是一个并发语句,在一个构造体内可以有几个进程语句同时存在,各进程语句是并发执行的,但是在进程内部所有的语句应是顺序描述语句。
顺序描述语句 信号代入语句 信号名<=表达式 变量赋值语句 变量名:=表达式 IF语句 IF语句为两语分支判断语句见:P280 CASE语句 CASE语句适用于两路或多路分支判 断见:P280-P281 LOOP语句 LOOP语句实现循环(重复进行)P281 NEXT语句 在LOOP语句中NEXT语句用来 跳出本次循环,用于内部循环 EXIT语句 结束循环状态,从LOOP语中跳 出,结束LOOP的正常执行 WAIT语句 NULL语句 表示只占位置的一种空处理操作
四. 程序包 在实体说明和结构体内部定义的数据类型,常量及子程序对其他设计实体是不可见的。为使它们对其他设计实体可见,VHDL提供了程序包机制。 程序包由说明单元和包体单元构成。一般格式为: PACKAGE程序包名 IS <说明单元> END[程序包名] PACKAGE BODY 程序包名 IS <说明单元> END[程序包名] 例:P285 访问时只需加上USE .程序包名 五. 应用举例 P286-289 第15章