一个简单的VHDL程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Type fsmst is(s0,s1,s2,s3);
Signal present_state,next_state:fsmst;
综合器在编码过程中自动将枚举元素转换成位矢量,位矢量的长度取决于枚举元素 的数量。如上述语句4个枚举元素,位矢量的长度为2,每个枚举元素默认的编码: s0=“00”;s1=“01”;s2=“10”;s3=“11”
temp:=x“5c”; 逐位赋值:
temp(6):=‘1’; 多位赋值:
temp(6 downto 3):=“1011”; (3)信号 是描述硬件系统的基本数据对象,与硬件中的”连线“相对应,一般而 言,信号是全局变量,使用范围是实体、结构体和程序包。 信号的定义: Signal 信号名:数据类型:=初始值; 信号可以多次赋值,赋值表达式: 目标信号名<=表达式;这种方式允许产生延时
只描述电路的功能或称为行为,即电路输入与输出间的转换的行为,而不包含实现 这些功能的硬件结构信息。称为行为描述。
举例:采用行为描述方式的2选1多路选择器
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21 IS
PORT( a,b : IN STD_LOGIC; s : IN STD_LOGIC; y : OUT STD_LOGIC );
q : OUT STD_LOGIC); END COMPONENT;
COMPONENT or21 PORT (i0,i1 : IN STD_LOGIC;
q: OUT STD_LOGIC); END COMPONENT;
COMPONENT inv21 PORT (i0 : IN STD_LOGIC;
q : OUT STD_LOGIC); END COMPONENT; SIGNAL tmp1,tmp2,tmp3:STD_LOGIC; BEGIN
VHDL的语言的要素
VHDL的语言要素,作为硬件描述语言的基本元素,主要有标识符、数据对 象、数据类型和运算操作符等 1、标识符 VHDL标识符的命名规则 (1)有效字符是26个英文字母(不区分大小写)、10个数字符号0-9、下 划线(不能用到开头) (2)每个标识符用英文字母开头,字符串中不能有空格。 2、数据对象 凡是可以赋予一个值的客体叫对象,包括常量、信号与变量 (1)常量 在设计中不会变的值。主要是为了程序更容易阅读和修改。它 必须在程序包、实体、构造体或进程的说明区域加以说明。一般要赋予初 始值,且只能被赋值一次。 常量定义的一般表达式:constant 常量名:数据类型:=表达式; 例:constant width:integer:=8;
(7)标准逻辑矢量(std_logic_vector)数据类型
是std_logic数据类型的组合。
注意:VHDL语言是一种强类型语言,对数据类型要求非常严格,不同数据类型的 数据不能进行直接运算或代入赋值;即使类型相同,长度不同也不能代入。可以用 类型转换函数来实现类型转换。
4、运算操作符
(1)逻辑运算符 对具有相同数据类型的运算对象进行逻辑运算
3 结构体 用来描述前面定义的实体内部结构和逻辑功能。结构体必须和实体相联系,一个 实体可以有多个结构体。他的运行是并行的。 格式: Architecture 结构体名 of 实体名 is [说明语句] Begin [功能描述语句] End 结构体名;
VHDL结构体的三种描述方法
(1)行为描述方法
标准库里主要包括std_logic_1164、numeric_bit和numberic_std.
2 实体 实体有点类似原理图中的一个器件符号,用来描述该器件的输入输出 端口特征,但不涉及器件的具体逻辑功能和内部电路结构 格式:entity 实体名 is
【generic(类属表)】 【port (端口说明;】 end 实体名;
与变量不同的是,信号的赋值要经过延时后才能成为当前值。 信号的作用:在进程间传递信息,完成进程间通信;二是在结构设计中用来连 接元件,实现元件间的通信。 例:library ieee; Use ieee.std_logic_1164.all; Entity zuhe is Port(a,b,c,d:in std_logic;
程序中要用到的2输入与门、或门非门,必须预先设计好,通过编译 后放入用户工作库里。
(3)数据流程描述法 也称为RTL(寄存器传输级)描述方式,类似于布尔方程 这种描述主要是反映数据经过一定的逻辑运算后在输入和输出间的传 递。 举例:采用数据流描述方式2选1多路选择器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
END ENTITY mux21; ARCHITECTURE behav OF mux21 IS
BEGIN PROCESS(a,b,s) BEGIN IF s='0' THEN y<=a; ELSE y<=b; END IF; END PROCESS;
END ARCHITECTURE behav;
(2)结构体描述方法 从实体的硬件结构方面描述,包含元件的说明。元件之间的互连说明。采用 的基本语句是元件例化语句或生成语句。这要求设计者具有较好的硬件基础 例:用VHDL语言的结构描述法描述2选1数据选择器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY and21 IS
(4)移位运算符
逻辑左移(SLL)、逻辑右移(SRL)、算术左移(SLA)、算术右移(SRA)、逻 辑循环左移(ROL)、逻辑循环右移(ROR)
(5)并置运算符“&”
用于位的连接,将几个位用并置运算符连接起来,可以构成一个具有4位长度的位矢 量
使用运算符时注意: (1)操作符之间的优先级 (2)运算重载 如两信号数据类型不同,不能将一个信号的值赋给另一个信号。数据类型 的转换必须要用运算重载。一般用ieee 1164中的标准重载函数实现。 Library ieee; Use ieee_std_logic_1164.all; Use ieee_std_logic_arith.all Use ieee_std_logic_unsigned.all Use ieee_std_logic_signed.all 程序包里有转换函数
(6)标准逻辑位(std_logic)数据类型
Std_logic数据类型是ieee 1164中定义的一种工业标准的逻辑类型,它包含9种取值, 分别为:
在程序中使用std_logic数据类型前,必须在程序中申明库和程序包说明语句:
Library ieee;
Use ieee.std_logic_1164.all;
G:out std_logic); End zuhe; Architechure one of zuhe is Signal e,f : std_logic; Begin E<=a or b; F<=not(c or d); G<=e and f; end;
3、数据类型 常用的数据类型 (1)整形(integer)数据类型 正整数、负整数和零。范围-214783647~214783647(231-1) (2)布尔(boolean)数据类型 取值”ture”或”false” (3)位(bit)数据类型 取值’1’或’0‘;要用单引号 (4)位矢量(bit_vector) 位矢量数据类型是基于位数据类型的数组 例:signal dd:bit_vector(7 downto 0) 信号dd被定义位一个8位宽的矢量,最左位为dd(7),最右位为dd(0) (5)枚举类型 用文字符号来表示一组实际的二进制类型,在状态机设计中,通常将二进制数表 示的状态用文字符号代替
PORT(i0 :பைடு நூலகம்IN STD_LOGIC; q: OUT STD_LOGIC );
END ENTITY inv21; ARCHITECTURE one OF inv21 IS BEGIN
q<= (NOT i0); END ARCHITECTURE one;
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21 IS
Architecture one of mux21 is Begin Z<=A when S=‘0’ else B; End;
VHDL程序的基本结构
VHDL的设计描述包括库(library)、实体(entity)和结构体architecture)
1、库 库已经存储和放置了可被其他VHDL程序调用的数据定义。器 件说明、程序包等资源。库的种类很多,常见的库有IEEE标准库、 work库。
(2) 变量 是一个局部量,只能在进程和子程序中使用。作用是在进程中作为临时 的数据存储单元。变量的赋值是立即发生的,而不存在任何延时。 变量的定义:variable 变量名:数据类型:=初始值; 例:variable temp:bit; 与常量不同,它可以多次赋值。赋值的表达式表述: 目标变量名:=表达式; 变量的赋值语句有几种: 整体赋值:temp:=“01011100”;
PORT( a,b : IN STD_LOGIC; s: IN STD_LOGIC; y: OUT STD_LOGIC );
END ENTITY mux21;
ARCHITECTURE struct OF mux21 IS COMPONENT and21 --元件调用语句 PORT (i0,i1 : IN STD_LOGIC;
PORT(i0,i1 : IN STD_LOGIC; q: OUT STD_LOGIC );
END ENTITY and21; ARCHITECTURE one OF and21 IS
BEGIN q<=i0 AND i1; END ARCHITECTURE one;
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY or21 IS
u1: and21 PORT MAP (b, s,tmp1);--端口映射语句,标号名不省略 u2: inv21 PORT MAP(s,tmp2); u3: and21 PORT MAP (a,tmp2,tmp3); u4: or21 PORT MAP(tmp1,tmp3,y); END ARCHITECTURE struct;
AND、or(或)、 NAND(与非)、NOR(或非)、XOR(异或)、XNOR(同或)、 NOT(非)。
(2)关系运算符 对具有相同数据类型的运算对象进行比较运算 ,运算结果的数据 类型为布尔类型
等于(=)、不等于(/=)、大于、小于、大于等于(>=)、小于等于(<=);
(3)算术运算符
加、减、乘(*)、除(/)、MOD(取模)、REM(取余)、ABS(绝对值)、乘方 (**)
VHDL程序结构和要素
VHDL程序基本结构 VHDL语言的结构体描述方法 VHDL语言要素 VHDL基本描述语句
一个简单的VHDL程序
Library ieee; Use ieee.std_logic_1164.all;
Entity mux21 is Port(A,B,S:in std_logic; Z:out std_logic); End mus21;
ENTITY mux21 IS PORT( a,b : IN STD_LOGIC; s : IN STD_LOGIC; y : OUT STD_LOGIC );
END ENTITY mux21; ARCHITECTURE dataflow OF mux21 IS BEGIN y<=(a AND (NOT s)) OR (b AND s); END ARCHITECTURE dataflow;
PORT(i0,i1 : IN STD_LOGIC; q: OUT STD_LOGIC );
END ENTITY or21; ARCHITECTURE one OF or21 IS
BEGIN
q<=i0 OR i1; END ARCHITECTURE one;
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY inv21 IS