我是靠谱客的博主 自觉白昼,最近开发中收集的这篇文章主要介绍EDA笔记(1)--VHDL语言,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目的:摘录点自己容易忘的知识点,也可以供读者参考学习

EDA技术的概念

工作平台–计算机
开发环境–EDA软件
设计语言–硬件描述语言(HDL)
试验载体–可编程逻辑器件(PLD)
目标器件–ASIC芯片
应用方向–电子系统设计

EDA应用领域

印刷电路板(PCB)设计
集成电路(IC或ASIC)设计
可编程逻辑器件(FPGA/CPLD)设计
混合电路设计

PLD概述

基本的门电路包括组合电路时序电路
任何的时序电路都可由组合电路加上存储元件(锁存器,触发器)构成
可编程逻辑器件(PLD)的分类
简单PLD: PROM,PLA,PAL,GAL
复杂PLD: CPLD,FPGA

基本语法组成

结构体

结构体功能:用于描述逻辑功能和电路结构。分为顺序语句(执行方式按照语句的前后排列顺序)和并行语句(同时执行,与语句的前后次序无关)

数据类型

常用的数据类型包括位类型BIT整数类型INTEGER布尔类型BOOLEAN标准逻辑类型STD_LOGIC
BIT数据类型的信号规定的取值范围是逻辑位’1’或’0’。逻辑位‘1’或‘0’必须加单引号。
process(a,b,s)–敏感信号列表

端口语句和端口信号名

用PORT( )来引导,并在语句结尾处加" ;
VHDL要求只有相同数据类型的端口信号和操作数才能相互作用,系统不分大小写
端口模式:
IN输入端口,定义的通道为单向只读模式
OUT输出端口,定义的通道为单向输出模式
INOUT定义的通道确定为输入输出双向端口
BUFFER 缓冲端口,功能与INOUT类似,区别在于当需要输入数据时,只允许内部回读输出的信号,即允许反馈
与INOUT模式相比,BUFFER回读的信号不是由外部输入的,而是由内部产生,向外输出的信号

标识符

关键字是指VHDL中预定义的有特殊含义的英文词语,关键字对大小写不敏感
标识符是用于标识不同名称的词语,比如用于实体名,结构体名,端口名或信号名等
标识符必须以字母开头,不能以下划线结尾,不能出现连续的两个或多个下划线。
标识符不应用数字,数字起头的文字或中文来表述

赋值符号和逻辑操作符

赋值符“<=”两边的信号的数据类型必须一致
VHDL逻辑操作符
AND --> 逻辑与 NAND -->逻辑与非
OR --> 逻辑或 NOR --> 逻辑或非
XOR --> 逻辑异或 XNOR --> 逻辑同或
NOT --> 逻辑取非
NULL在程序中代表不执行任何操作
STD_LOGIC_VECTOR定义为标准一维数组,数组中的每个元素都是标准逻辑位STD_LOGIC。
在使用STD_LOGIC_VECTOR中,必须注明其数组宽度,即位宽。
VHDL规定:多余一位的二进制数必须加双引号,而单一的二进制数则用单引号。

无符号型和有符号型数据

能直接进行各种算术运算,但不能进行逻辑运算。
UNSIGNED数据类型代表一个无符号的数值,在综合器中,这个数值被解释为一个二进制数,这个二进制数的最左位是其最高位。
SIGNED数据类型表示一个有符号的数值,补码表示;正数的补码是原码,负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。

数据对象

类似于一种容器,接受不同数据类型的赋值
常量(Constant) 变量(Variable) 信号(Signal)
常量(CONSTANT): 固定值,不能在程序中被改变
常数的定义格式为:Constant 常数名:数据类型:=表达式;
变量(VARIABLE)只适用于进程或子程序中。
变量定义:VARIABLE <变量名>:<数据类型> [:=初始值]可省略;
变量赋值语法:目标变量名:= 表达式;
表达式指具体数值/运算表达式
信号(SIGNAL)代表连线,Port也是一种信号。
没有方向性,可给它赋值,也可当作输入。
信号定义:SIGNAL <信号名> :<数据类型> [:初值];
信号和变量的赋值形式和执行过程不同:变量是立即赋值(:=),没有延迟,而信号赋值要有一定的延迟(<=)。
并置操作符 &
利用并置符可以用多种方式来建立新的数组

语句概述

IF语句

格式一:
IF 条件 THEN
顺序执行语句;
End IF
说明:非完整的条件句,通常用于产生时序电路。

格式二:
IF 条件 THEN
顺序执行语句1;
Else
顺序执行语句2;
End IF
完整的条件语句,通常用于产生组合电路。

格式三:
IF 条件1 THEN
顺序执行语句1;
Elsif 条件2 then
顺序执行语句2;

Elsif 条件n then
顺序执行语句n;
Else 顺序语句;
End if;

格式四:
IF 条件句 THEN
IF 条件句 THEN

End if;
End if;
格式三、格式四:即可以产生时序电路,也可以产生组合电路,或是两者的组合。

WHEN_ELSE条件信号赋值语句

属于并行语句,它不需要进程语句引导。在结构体中条件信号赋值语句的功能与IF语句相同。
格式:
赋值目标 <= 表达式1 WHEN 赋值条件1 ELSE
表达式2 WHEN赋值条件2 ELSE

表达式n;

选择信号赋值语句

属于并行语句,不能在进程中使用,功能与进程中的CASE语句比较相似

With 选择表达式 SELECT
赋值目标信号 <= 表达式1 WHEN选择值1
表达式2 WHEN选择值2,

表达式n WHEN选择值n;

元件例化语句

元件例化:就是引入一种连接关系,将预先设计好的实体定义为一个元件,然后利用特定语句将此元件与当前设计实体中的指定端口相连接,从而为当前设计实体引进一个低一级的设计层次。

第一部分,先将一个现成的设计实体定义为一个元件。即对要调用的元件做调用说明:
COMPONENT 元件名 IS
PORT (端口名表);
END COMPONENT 文件名;
注意: 端口信号的数据类型及信号的排列方式都要与原文件一致

第二部分,此元件与当前设计实体(顶层文件)中元件间连接端口的连接说明。
端口映射语句格式如下:
例化名:元件名PORT MAP( [端口名=>]连接端口名,…);
PORT MAP为关键词。“=>”代表连接关系。
端口名为待调用的元件本身的端口名。
连接端口名为顶层文件中准备与调用元件的端口相连的端口名

LOOP语句

两种循环控制语句:
FOR LOOP循环 和 WHILE LOOP循环。
FOR LOOP循环主要用在规定数目的重复情况;
WHILE LOOP则根据控制条件执行循环直到条件为FALSE。

(1)FOR LOOP语句
FOR LOOP格式:
[标号:]FOR 循环变量 IN 循环次数范围 LOOP
顺序处理语句;
END LOOP[标号];
(2)WHILE LOOP语句
WHILE LOOP格式:
[ LOOP标号:] WHILE 条件 LOOP
顺序处理语句;
END LOOP[标号];
如果条件为真,则进行循环,否则结束循环。

操作符

省略赋值操作符
R1:=(others=>’0’);等效于R1:=“00000000”
为简化表达和位数不定情况下的赋值,可使用短语(others=>x)
移位操作符
移位运算符包括:
SLL(逻辑左移)、SRL(逻辑右移);(补0)
1010 <= 1101 => 0110 跟进的位补零
SLA(算术左移)、SRA(算术右移);(不变)
1011 <= 1101 => 1110 移出的位用最初的首位填补
ROL(逻辑循环左移)、ROR(逻辑循环右移);
1011 <= 1101 => 1110 移出的位用于依次填补移空的位,自循环

VHDL是一种强类型语言,其运算操作符对操作数的数据类型有严格要求。对于乘法操作,当操作数是std_logic_vector类型时,必须指定操作数是无符号还是有符号类型,即调用程序包std_logic_unsigned std_logic_signed来区别;
对于加法操作,无须区分,VHDL综合器总是认定加法操作数是无符号数。

结尾

如有错误,请批评指正

最后

以上就是自觉白昼为你收集整理的EDA笔记(1)--VHDL语言的全部内容,希望文章能够帮你解决EDA笔记(1)--VHDL语言所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部