VHDL硬件描述语言

合集下载

VHDL硬件描述语言

VHDL硬件描述语言
9
b. 类型参数说明 必须放在端口说明前面,用于指定参数。 c. 端口说明格式 PORT( 端口名{,端口名}: 方向 端口名{,端口名}: 方向 数据类型名; 数据类型名);
其中, 方向—— IN OUT INOUT BUFFER LINKAGE 输入 输出 双向 输出 不指定方向
注意: * OUT 结构选体中不能再用; * BUFFER 结构选体中能再用。
5
二、VHDL程序的基本结构
* 一个完整的VHDL语言程序通常包含: 实体、 结构体、库、包集合和配置五个部分 a. 实体(Entity) ——用于描述所设计系统或单元的外部接口信号; b. 结构体(Architecture) —— 用于描述所设计系统或单元内部的结构和行为。
6
c. 库(Librrary) —— 用于存放已经编译的实体、结构体、包集合和配置。 库可由用户生成或由ASIC芯片制造商提供,以便于 在设计中为大家所共享; d. 包集合(Package) —— 用于存放各设计模块都能共享的数据类型、常数和子 程序等; e. 配置(Configuration) —— 用于从库中选取所需单元来组成系统设计的不同版本; 这个部分有时可以没有。
实体
结构体
a b
&
y
16
3.库
—— 库(Library)是经编译后的数据的集合,它存放包 集合定义、实体定义、结构体定义和配置定义。 a. 在VHDL语言中,库的说明总是放在设计单元的最前面, 书写格式为: LIBRARY 库名 ; 注意:
- 在设计时可以直接使用库中的数据。 - 设计者可以共享已经编译过的设计结果。 - 库和库之间是独立的,不能互相嵌套。
12
i 结构描述: 描述该设计单元的硬件结构。主要用配置指定语句及元 件例化语句描述元件的类型及元件的互连关系。 ii 行为描述: 描述该设计单元的功能,主要用函数,过程和进程语句, 以算法形式描述数据的变换和传送。 iii 数据流方式/RTL描述: 以类似于寄存器传输级(RTL)的方式描述数据的传输 和变换,主要用并行信号赋值语句,显式表示该设计单 元的行为, 隐式表示了该设计单元的结构。

VHDL语言介绍

VHDL语言介绍

VHDL语言介绍VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,用于描述数字电路的结构和行为。

它是一种高级编程语言,用于描述数字系统中的硬件功能。

VHDL是一种被广泛应用于数字系统设计的硬件描述语言,它可以用于描述数字系统的结构和功能,并且允许进行仿真、综合和验证。

VHDL最初是由美国国防部(DoD)为了应对不同供应商生产的不同硬件之间互通性的问题而开发的。

它提供了一种用于描述数字电路的方法,可以在不同供应商的工具之间进行交换。

VHDL已成为一种行业标准,在数字系统设计领域被广泛应用。

VHDL的语法类似于Ada编程语言,它使用关键字、运算符和数据类型来描述数字系统中的硬件元素。

VHDL中的关键概念包括实体(entity)、架构(architecture)和过程(process)。

实体描述了数字系统的接口和功能,架构描述了数字系统的内部结构和行为,而过程描述了数字系统中的操作和控制。

VHDL主要有两种用途,一是用于模拟和验证数字系统的功能,二是用于综合数字系统的设计,生成实际的硬件电路。

在模拟和验证阶段,设计师可以使用VHDL描述数字系统的功能,并通过仿真工具对其进行验证。

在综合阶段,设计师可以使用VHDL描述数字系统的结构,并通过综合工具生成对应的硬件电路。

VHDL的优点在于其强大的表达能力和灵活性。

设计师可以使用VHDL描述各种复杂的数字系统,包括处理器、通信接口、存储器等。

VHDL还提供了丰富的数据类型和运算符,使设计师可以轻松地描述数字系统中的各种操作。

除了描述数字系统的结构和行为,VHDL还提供了丰富的标准库和模块化编程的方法。

设计师可以使用标准库中提供的各种功能模块来加速开发过程,并且可以将自己设计的模块封装成库以便重复使用。

VHDL还支持面向对象的设计方法,设计师可以使用面向对象的技术来组织和管理复杂的数字系统。

通过使用面向对象的方法,设计师可以将数字系统分解成多个模块,每个模块都有自己的接口和功能,并且可以通过继承和复用来简化设计过程。

vhdl硬件描述语言与数字逻辑电路设计

vhdl硬件描述语言与数字逻辑电路设计

vhdl硬件描述语言与数字逻辑电路设计数字逻辑电路设计是一种将数字信号进行处理和控制的技术。

数字电路由元器件(比如集合在一起的门、触发器、逻辑块、寄存器等)构成,这些元件的行为由原理图和逻辑方程式表示。

数字电路的设计主要是为了控制、处理和传输数字信号,具有可控制性、自动化程度较高和灵活性强的特点。

VHDL与数字逻辑电路设计是密切相关的,VHDL既可以用来描述数字电路的结构,也可以用来推导数字电路的行为。

在数字逻辑电路设计中,VHDL语言可以帮助工程师实现电路的功能和特性,简化设计过程,并提高设计的灵活性和可靠性。

VHDL是一种硬件描述语言,可以用来描述数字逻辑电路中的各种元件、信号和功能。

VHDL主要包括以下几个方面的内容:1. 实体(entity):实体用来描述数字电路的外部结构和功能,类似于模块的概念。

一个实体声明了电路的输入输出端口,并定义了电路的功能和行为。

2. 体系结构(architecture):体系结构用来描述实体的内部结构和功能,包括内部信号、寄存器、逻辑块等。

一个体系结构定义了实体的具体实现方式,包括各个元件之间的连接和控制。

3. 信号(signal):信号用来表示数字电路中的各种输入输出信号,包括时钟信号、数据信号、控制信号、状态信号等。

VHDL语言中的信号可以用来描述电路中的各种逻辑关系和行为。

4. 过程(process):过程用来描述电路中的各种行为和动作,比如数据传输、逻辑运算、状态转换等。

VHDL中的过程可以用来描述数字电路中的各种逻辑操作和控制。

5. 组合逻辑(combinational logic):组合逻辑用来描述电路中的各种逻辑运算和逻辑关系,包括与门、或门、非门、异或门等。

组合逻辑表示了电路中的直接逻辑关系和信号转换。

6. 时序逻辑(sequential logic):时序逻辑用来描述电路中的各种时钟触发、状态转换、寄存器等。

时序逻辑表示了电路中的时钟控制、状态转换和时序问题。

4 硬件描述语言VHDL

4 硬件描述语言VHDL

下表给出VHDL的常用保留字(又称关键字)。
4.3.2 VHDL语言操作符
VHDL为构造计算数值的表达式提供了许多预定义算符。 预定义算符可分为四种类型:算术运算符、关系运算符、 逻辑运算符和连接运算符。分别叙述如下:
4.3.3 数据对象
在逻辑综合中,VHDL语言常用的数 据对象为:
■ 信号 ■ 变量 ■ 常量
4.1.6 本节主要内容
本节仅对用于CPLD/FPGA设计描述的 VHDL语言作一简单说明。
其设计过程一般如下: ——代码编写; ——由综合器综合成门级网表; ——前仿真/功能仿真; ——布局/布线至某一类CPLD/FPGA中; ——后仿真/时序仿真。
4.2 VHDL语言程序 的基本结构
引言 4.2.1 实体(Entity) 4.2.2 构造体( ARCHITECTURE ) 4.2.3 库(LIBRARY) 4.2.4 程序包 4.2.5 配置语句( CONFIGURATION )
——通用性好,支持面广。VHDL语言是工业 标准,凡大型CAD软件都支持VHDL语言的设计 环境,因此用VHDL编程的设计文件可通行于多 种不同的设计工具。
——重复使用性好。VHDL语言的描述与具体 生产工艺无关,变换不同的工作库便可适应不同 的生产工艺。只要设计正确,生产工艺进步了, 采用新的工作库,重新布版布图,便可继续使用。
——可读性好。VHDL语言用一种高级语言描 述电子实体,容易理解。VHDL语言被认为既是 设计实现,又是技术说明,设计与说明集于一体。
4.1.3 Verilog HDL语言
——Verilog HDL是在1983年,由GDA(GateWay Design Automation)公司的Phil Moorby首创的。 ——1986年,他对Verilog HDL的发展又作出了另一个巨大 的贡献:提出了用于快速门级仿真的XL算法。 ——1989年,Cadence公司收购了GDA公司,Verilog HDL 语言成为Cadence公司的私有财产。 ——1990年,Cadence公司决定公开Verilog HDL语言,于 是成立了OVI(Open Verilog International)组织,负责促进 Verilog HDL语言的发展。 ——基于Verilog HDL的优越性,IEEE于1995年制定了 Verilog HDL的IEEE标准,即Verilog HDL 1364-1995; ——2001年发布了Verilog HDL 1364-2001标准。在这个标 准中,加入了Verilog HDL-A标准,使Verilog有了模拟设计描 述的能力。

VHDL硬件描述语言.

VHDL硬件描述语言.

非法的名称
ill__egle、_illegle、illegle_、2bad、ill
egle、ill/egle
特殊的名称
\74LS04\、\vhdl\、\VHDL\
信号模式 每个端口信号都必须规定信号模式; 信号模式规定信号流动的方向; in out 输入端口 输出端口
inout
buffer
双向端口
VHDL硬件描述语言 Very high speed integration circuits HDL
起源: 1985年,美国国防部提出计划; 1987年成为IEEE1076标准; 1993年进一步修订完善; 是目前标准化程度最高,适应性最广的 HDL语言;
VHDL硬件描述语言 Very high speed integration circuits HDL
简单的实体 entity entity-name is port (signal-name : mode signal-type; …… signal-name : mode signal-type); end entity-name;
比较复杂的实体
ENTITY 实体名 IS
GENERIC语句;
PORT语句;
(BEGIN
决断语句、过程调用、进程说明等)
END 实体名;
VHDL的实体: entity 要点:
实体以 entity
实体名
is
开始;
以end 实体名; 结束; 实体的主要内容为端口(port)说明, 其中主要包括: 实体名、信号名、信号模式、信号类型
实体名称和信号名称 每个实体在设计中对应一个电路模块,
s : in std_logic;
y : out std_logic);

vhdl语言

vhdl语言

VHDL语言VHDL(VHSIC Hardware Description Language)是用于描述数字电路和系统的硬件描述语言,是一种标准化的硬件描述语言,广泛应用于数字电路设计和电子系统设计领域。

VHDL语言是一种强大的工具,可以帮助工程师描述复杂的数字电路,并进行仿真和综合。

它可以描述电路的结构、功能和时序行为,是一种形式化的语言,能够准确地描述电路的行为特性,有助于工程师在设计阶段发现和解决问题。

VHDL语言的基本概念实体(Entity)•实体描述了电路的接口和功能,可以看作是一种抽象的模块。

•实体中定义了输入输出端口,以及对应的信号类型和位宽。

•实体可以包含多个体系结构(Architecture)。

体系结构(Architecture)•体系结构描述了实体的具体实现,定义了实体的行为。

•体系结构中包含了处理逻辑、时序行为以及信号的赋值。

•体系结构可以描述电路的功能和行为。

信号(Signal)•信号是VHDL语言中的基本数据类型,用于在电路中传递信息。

•信号可以是标量(Scalar)或矢量(Vector),可以是时序或组合。

•信号的赋值可以是同步的或异步的。

过程(Process)•过程描述了VHDL中的行为,通常用于描述组合逻辑或时序逻辑。

•过程中可以包含逻辑运算、条件语句、循环语句等。

•过程中的代码在仿真或综合时会被执行。

VHDL语言的应用VHDL语言主要用于数字电路设计、电子系统设计、FPGA设计等领域。

工程师可以使用VHDL语言描述数字电路的结构和行为,进行仿真和综合,快速验证设计的正确性。

VHDL语言的应用领域包括但不限于:•数字电路设计•通信系统设计•控制系统设计•图像处理系统设计•嵌入式系统设计VHDL语言在电子设计领域具有广泛的应用前景,可以帮助工程师快速高效地设计数字电路系统,并满足不同应用场景的需求。

总结VHDL语言是一种强大的硬件描述语言,可以帮助工程师描述数字电路的结构和行为,进行仿真和综合,快速验证设计的正确性。

硬件描述语言

硬件描述语言

上一页 下一页 返回
architecture
inhabit_arch of inhibit is 一结构体定义 begin z<='1' when x='1' and y='0' else '0'; end;
下面请看演示

上一页 下一页 返回
5.1 VHDL概述

(2)VHDL的并发性 计算机软件程序一般按书写的顺序依次执行, 而VHDL却具有并发性。VHDL的并发性体现在 两个方面,首先在使用VHDL进行数字电路设计 时存在并发性,即VHDL支持设计分解,可使被 分解的各个子部分的设计并行完成。一个模型 的设计主要由3部分组成:元件库部分—USE说 明区:实体部分—确立模型与环境的接口;结 构体部分—描述元件的行为或功能,为模型生 成测试向量,并捕获模型输出信号状态以供分 上一页 下一页 返回 析。
5.2 VHDL的程序结构
【例5-2】一个与门电路的VHDL程序 library ieee; use ieee.std_logic_1164.all; 一 打开需要用到的库 entity inhibit is 一实体(端口)说明 port( x,y:in std_logic; z:out std_logic); end inhibit;
上一页 下一页 返回
5.1 VHDL概述
VHDL是为数字电路的建模和模拟
(simulation)而制定的,是一种面向模拟、 针对硬件的语言。它的语法中有许多方面 均考虑到模拟与硬件的因素,包括VHDL的 硬件相关结构、并发特征和混合级描述以 及混合级模拟。
5.1 VHDL概述
(1)VHDL中的硬件相关结构 VHDL具有许多与数字电路结构直接相关的 概念,其中最主要的是元件(component), 它是数字硬件结构—"黑盒"或"模块"的抽 象。VHDL中的元件由实体和结构体两部分 共同描述完成。

硬件描述语言VHDL大总结

硬件描述语言VHDL大总结

VHDL大总结一、填空题1.两种标识符短、扩展2.4种基本数据类型常量、变量、信号、文件3.常量说明格式constant 常数名: 数据类型:=表达式;4.三种数据变换方法?函数转换、常数转换、类型标记5.四种运算操作符?逻辑、关系、算术、并置6.如何启动进程?(1).必须包含一个显示的敏感信号变量(2).或者包含一个wait语句7.五种基本结构?库(library)、包集合(package)、实体(entity)、结构体(architecture)、配置(configuration) 8.信号与变量代入?(1).<=(2).:=9.列举可编程逻辑器件?PROM→PLA→PAL→CPLD→FPGA→EPROM→EEPROM→GAL10.数据类型整数、位、位矢量、符号、布尔量、时间、错误等级、标准逻辑11.四种端口模式?IN—OUT—INOUT—BUFFER12.三种子结构描述语句?BLOCK—PROCESS—SUBPROGRAMS13.结构体三种描述方式寄存器传输(RTL)--数据流、结构描述、行为描述14.标识符规则?(1).不以数字靠头(2).下划线不连续(3).不与保留字重复(4).下划线前后必须有英文字母或者数字(5).最后一个不能使用下划线(连字符)15.扩展标识符\12@+\16.赋值?(1).信号、变量可以多次赋值(2).常量只能定义时赋值(进程内部,子函数内部)17.高阻、不定态?'Z'------------'X'18.进程位置?结构体内部19.变量位置?进程内部---包内部----子程序内部20.进程执行机制?敏感信号发生跳变21.优先级?if语句之间具有不同优先级22.时序电路的去驱动信号?时钟23.时序电路在何时发生变化?时钟信号的边沿24.两种状态机?(1).moore-----f(现状)(2).mealy-----f(现状,输入)25.什么有九值逻辑标准逻辑(STD_LOGIC)26.定义信号a,4位标准逻辑向量?SIGNAL A : STD_LOGIC_VECTOR(3 DOWNTO 0);27.定义变量b,整型,范围0 到9SIGNAL B: TNTEGER RANGE 0 TO 9;28.空操作?NULL29.CPLD与FPGA?(1).基于乘积项技术—内带存储(2).基于查找表技术—需要外部扩展存储,比如扩展EEPROM30.IF语句三种类型?(1).门闩(shuan)控制(2).二选一控制(3).多选一控制31.常用库与包集合?LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;32."/="的功能?在条件判断时判断操作符两端不相等33.串行与并行?(1).赋值语句—并行(2).IF语句------串行二、判断题1.缺少库文件LIBRARY IEEE2.缺少包集合USE IEEE.STD_LOGIC_1164.ALL3.实体定义的分号问题port(aaa;bbb;ccc);或者port(aaa;bbb;ccc);4.带入语句问题(1).信号---<=(2).变量---:=5.引号问题?(1).字符----' '(2).字符串----" "6.末尾分号问题(1).END CASE;(2).END PROCESS;7.PROCESS必须赶上敏感信号?包含W AIT ON语句可以不列出8.VHDL与C语言没差别?(1).运行基础—CPU+RAM;逻辑、触发器组成的数字电路(2).执行方式---串行;并行(3).验证方式---变量值;时序逻辑关系9.进程之间传递用信号,非变量10.默认值数值型变量默认为0---------- 不要加引号(位变量)11.类型定义?type wr is (wr0, wr1, wr2);定义的是类型需要为该类型定义对象才可以赋值12.设计方法?(1).传统------------自下至上(2).VHDL----------自上至下13.层次设计?高层次可以调用低层次14.进程语句数量一个程序可以多个进程语句15.运算符优先级NOT>乘法>正负>关系>逻辑16.signalsel : integer?right17.进程内和进程外?原则上不一致,在没有敏感信号的前提下,可以认为一致18.定义实体至少包含一条port map?false19.时间效率?状态机比计数器更有效,更紧凑三、简答题1.名称映射与位置映射?(1).名称:COM1 : U1 PORT MAP (A<=N1,B<=N2,C<=N3);(2).位置:PORT(A,B:IN BIT;C:OUT BIT);引用时:U2:AND2 PORT MAP(NSEL, D1,AB);2.调用库里面包含的元件的方法?(1).COMPONENT(2).PORT MAP3.信号与变量的区别?(1).信号延时赋值,变量立即赋值(2).<=; :=(3).信号在器件内部相当于连线,变量没有(4).信号在结构体内定义,而变量在PROCESS中定义4.三种描述方式的区别?5.条件带入语句与条件语句的区别?(1).后者只能在进程内部使用(2).带入语句必须有ELSE,而条件语句可以没有(3).带入语句不能嵌套,而条件语句可以6.两种状态机的区别?7.简述CPLD与FPGA?(1).CPLD—乘积项技术—(2).FPGA—查找表技术--需要配置外部程序寄存芯片8.进程语句的特点?(1).并发执行,信号传递,可以存取结构体或实体中所定义的信号(2).内部语句都是顺序执行(3).启动进程--必须包含敏感信号或者wait语句9.简述VHDL基本结构库、包集合、实体、结构体、配置10.可编程逻辑器件的优点?(1).集成度高—可以替代几千块通用芯片(2).完善先进的开发工具(3).可以反复擦除、编程,方便设计和修改(4).可以灵活的定义管脚(5).保密性很好四、编程题1.二选一电路ENTITY MUX ISPORT(D0:IN BIT;D1:IN BIT;SEL:IN BIT;Q:OUT BIT);ARCHITECTURE CONNECT OF MUX IS SIGNAL TEMP1,TEMP2,TEMP3:BIT; BEGINCALE:BLOCKBEGINTEMP1<=D0 AND SEL;TEMP2<=D1 AND (NOT SEL);TEMP3<=TEMP1 OR TEMP2;Q<=TEMP3;END BLOCK CALE;END CONNECT;END CONNECT;2.四选一电路3.四位加法计数器4.八-三编码器5.四位逐位进位全加器6.数值比较器7.三-八译码器8.二-十(BCD)优先权编码器9.精确计时电路10.触发器11.四状态循环12.异或门设计13.二输入与非门14.三态门15.6分频器16.二-四译码器17.四-十六译码器18.8进制异步复位计数器五、附加19.I F语句门闩控制IF (A='1') THENC<=B;END IF;二选择控制IF (SEL='1') THEN***;ELSE***;END IF ;多选择控制IF ** THENXXX;ELSIF **THENXXX;ELSEXXX;END IF;20.C ASE语句CASE SEL ISWHEN 0=>Q<=I0;WHEN 1=>Q<=I1;WHEN OTHERS=>Q<="XXXXXX"; END CASE;21.并发信号带入语句实质是一个进程语句的缩写22.条件信号带入语句Q<=I0 WHEN SEL="00" ELSEI1 WHEN SEL="01" ELSE'X';23.选择信号带入语句WITH SEL SELECTQ<=I0 WHEN 0,I1 WHEN 1,I2 WHEN 2,'X' WHEN OTHERS;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Posedge 和 negedge 关键字
对于时序电路,事件通常是由时钟边沿触发的,为表 达边沿这个概念,Verilog提供了posedge和negedge关 键字来描述。比如: 【例】同步置数、同步清零的计数器
module count(out,data,load,reset,clk); output[7:0] out; input[7:0] data; input load,clk,reset; reg[7:0] out; always @(posedge clk) //clk上升沿触发 begin if(!reset) out=8'h00; //同步清0,低电平有效 else if(load) out=data; //同步预置 else out=out+1; //计数 end endmodule
b)
有符号数和无符号数在设计中,先按无符号数进行。
4.2.2关系运算符
1. 关系运算符:>、<、>=、<=、==、!= 2. 在关系运算符的使用中,还需要注意以下3个问题
a) 关系操作符的结果为真(1)或假(0)。如果操作数中有一位为x或z,那么 结果x(未知)。 例:23>45 结果为0 52<8‘hxFF 结果为x 如果操作数长度不同,则长度较短的操作数在最重要的位方向(左方)添 0补齐。 例:‘b1000>=‘b01110 等价于 ‘b01000>=‘b01110 在逻辑相等与不等的比较中,只要一个操作数含有x或z,比较结果就为 x。 其结果不定,其值 例:Data=‘b11x0; 为x Addr=‘b11x0; Data==Addr;
举例:initial语句用于为电路仿真生成激励波形
input变量的变化情况
敏感信号表达式“event-expression”
敏感信号表达式又称事件表达式或敏感信号列表,即 当该表达式中变量的值改变时,就会引发块内语句的 执行。因此敏感信号表达式中应列出影响块内取值的 所有信号。若有两个或两个以上信号时,它们之间用 “or”连接。 例如:
1)顺序语句块(begin. . .end):语句块中的语句按给定次 序顺序执行。 2)并行语句块(fork. . .join):语句块中的语句并行执行。
b)
c)
2.4.3逻辑运算符
1. 2. 3. 逻辑运算符有3种:&&(逻辑与)、||(逻辑或)、!(逻辑非) 用法为:表达式1 逻辑运算符 表述式2 逻辑运算的结果为0或1。
例:
Crd=‘b0; Dgs=‘b1;
Crd&&Dgs; 结果为0 Crd||Dgs; 结果为1 !Dgs 结果为0
4. 逻辑与(&&)的直值关系如表2-1所示
5.2.1 initaial过程语句
1. initial语句常用于仿真中的初始化,initial过程块中的 语句仅执行一次。 2. initial语句的格式:
initial begin 语句1; 语句2; …… end
3. Initial语句是面向模拟仿真的过程语句,通常不能被逻 辑综合工具所支持。Initial语句常在仿真开始时对各变 量进行初始化,或生成激励波形作为电路的测试仿真信号。
2.
例如: 4’b1001<<1=4’b0010 4’b1001>>1=4’b0100
2.4.7缩减运算符
1.
2.
a) b)
缩减运算符是单目去处,也有与、或、非运算。
缩减运算的步骤如下:
先将操作数的第1位与第2位进行或、与、非运算; 将第一步的运算结果与第三位进行或、与、非运算,依此类推,直至最 后一位。 例如: reg[3:0] A; reg B; B=&A; 相当于 B=( ( A[0] & A[1] ) & A[2] ) & A[3];
敏感信号表达式又称事件表达式或敏感信号列表,即当该表达式 中变量的值改变时,就会引发块内语句的执行。因此敏感信号表 达式中应列出影响块内取值的所有信号。若有两个或两个以上信 号时,它们之间用“or”连接。 例如: a) @(a) //当信号a的值发生改变 b) @(a or b) //当信号a或信号b的值发生改变 c) @(posedge clock) //当clock 的上升沿到来时 d) @(negedge clock) //当clock 的下降沿到来时 e) @(posedge clk or negedge reset) //当clk的上升沿到来或reset信号的下降沿到来
表达式Marks>18如果为真,则Grade_A赋值为Student;表达 式Marks>18如果为假,则Grade_C赋值为Student;
2.4.6移位运算符
1. 在VHDL中有两种移位运算符: << (左移位运算符) >>(右移位运算符) 使用方法: (a<<n 或 a>>n) a代表要进行移位的操作数,n 代表将移的位数。这两种移位运算都用0来填补移出的空位。
2.4.1 算术运算符
1. 2.
a)
算术运算符:+、-、×、/、% 在算术运算符的使用中,还需要注意以下2个问题
算术表达式结果的长度由最长的操作数决定。在赋值语句下,算术操作结 果的长度由操作符左端目标长度决定。 例: reg[3:0] Arc,Bar,Crt; 其结果长度由Bar,Crt和Arc的长度决定, // Arc,Bar,Crt为4位寄存器 其长度为4位。在这个赋值语句中,加法操 reg[5:0]; // Frx为6位寄存器 作的溢出部分被丢弃。 „„„„ Arc=Bar+Crt; 其结果长度由Frx的长度决定,其长度为 6位。在这个赋值语句中,任何溢出的位 Frx=Bar+Crt; 被存储在结果位Frx[4] 例: wire[4:1] Box,Drt; wire[5:1] Cfg; 表达式右端的操作数最长为6位, wire[6:1] Peg; 但是左端包含在内时,则最大长 wire[8:1] Adt; 度为8。所以所有的加操作使用8 assign Adt=(Box+Cfg)+(Drt+Peg) 位进行。
a) b) c) d) e) @(a) //当信号a的值发生改变 @(a or b) //当信号a或信号b的值发生改变 @(posedge clock) //当clock 的上升沿到来时 @(negedge clock) //当clock 的下降沿到来时 @(posedge clk or negedge reset) //当clk的上升沿到来或reset信号的下降沿到来
注意
在电平敏感列表中最好包括所有的输入。对 于不完整的列表,不同的综合工具处理的方 法不同:有些综合工具认为不完整列表是不 合法的,而另外一些综合工具则发出警告并 将其当作完整列表处理。因此,综合出来的 电路功能可能与程序模块的描述有所不同。
敏感信号
不完整电平敏感列表: module sens(a, q, b, sl); input a, b, sl; output q; reg q; always @(sl) begin if(!sl) q=a; else q=b; end endmodule 完整的电平敏感列表: module sens(q, a, b, sl); input a, b, sl; output q; reg q; always @(sl or a or b) begin if(!sl) q=a; else q=b; end endmodule
2.4.8拼接运算符
1. 拼接运算符:{ } 2. 作用:是将小表达式合并形成大表达式的操作。用这个 运算符可以把两个或多个运算符的某些位拼接在一起进 行算术操作。 形式:{expr1,expr2,„,exprn}
例如:wire[7:0] Dbus; assign Dbus[7:4]={Dbus[0],Dbus[1], Dbus[2], Dbus[3]}; //以反转的顺序将低端4位赋予高端4位 assign Dbus={Dbus[3:0],Dbus[7:4]}; //高4位与低4位交换
3. 由于非定长常数的长度未知,因此不允许连接非定长常 数。
{Dbus,5} //不允许连接操作非定长常数
2.5 过程块
1. 过程块的特点如下:
a) 在行为描述模块中出现的每个过程块(initial块或always块)都代 表一个独立的进程; b) 在进行仿真时,所有initial过程块和always过程块的执行都是从0 时刻开始并行的进行,initial语句只执行一次; c) always语句则是不断地重复活动,直到仿真结束;每一个过程块内 部的多条语句的执行方式可以是顺序执行的(当块定义语句为 begin-end时的情况),也可以是并行执行的(块定义语句为forkjoin时的情况); d) 在一个模块中,使用always过程块和initial过程块的次数是不受限制 的。
敏感信号分类
边沿敏感型 电平敏感型 注意:每一个always过程最好只由一种类型的敏感信 号来触发,而不要将边沿敏感型和电平敏感型信号列 在一起。
敏感信号列表举例
module mux4_1(out,in0,in1,in2,in3,sel); output out; input in0,in1,in2,in3; input[1:0] sel; reg out; always @(in0 or in1 or in2 or in3 or sel) //敏感信号列表 case(sel) 2'b00: out=in0; 2'b01: out=in1; 2'b10: out=in2; 2'b11: out=in3; default: out=2'bx; endcase endmodule
0
1
相关文档
最新文档