集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1095|回复: 1

VHLD语言

[复制链接]
zxopenljx 发表于 2020-5-17 11:37:40 | 显示全部楼层 |阅读模式
内容:
1.        掌握VHDL语言的语法
2.        学习VHDL语言的建模(可综合部分的编写),以及测试文件(testbench)的编写


注释
语言
单行注释
多行注释
Verilog
//........
/*......*/
VHDL
--.......
--....
--...
--....

建模
Verilog将设计模块的端口和模块功能直接分装在module 和enmodule之间
VHLD是先对端口进行建模,然后通过不同结构体对端口模型进行建模,因此一个端口模型可以对应多个结构体模型

Verilog  图1

VHDL    图2

文件组织形式:

Verilog
所有的设计都是模块化,层次化,整个设计只有一个顶层。
VHLD
所有的设计包含库,包,实体,结构体,层次化,整个设计只有一个顶层。

库:是VHLD存放设计文件以及预先设定的提供给设计者一些函数或者数据类型的存放的文件夹。该文件夹是VHDL语言预先设定的,设计者不可以修改,对设计者隐藏。

1.        IEEE:美国电子工程学会制定的标准库,设计中最常用的库。只要VHDL存在的地方就有该库。
2.        STD:预定义库,预定义了一些数据类型和函数,不常用,默认打开。
3.        VITAL:对ASIC提供高精度仿真模型。
4.        Work:用户库,存放用户设计文件的库。设计者编写的所有的文件都会映射到该库。

设计者在使用库的时候如果默认没有打开,先要打开库,然后使用库里面的数据理类型或者函数

Library  IEEE  --打开IEEE库
Use  IEEE.STD--使用IEEE库里面的STD包


包:VHLD的头文件,和C语言的头文件是一回事,包分为包头和包体
包头:包头可以声明常数,函数
包体:一般描述函数的功能


Pachage  myuset   is

Type   is(s0,s1,s2);

end  myuset;

Pachage  body  myuset  is

函数描述
End  myuset;

预定的包

1.        STD_LOGIC_1164
重载了常用的数据类型,最主要的是重载了BIT和BIT_VECTOR标准数据类型。该类型是描述硬件逻辑的关键数据类型,重载后命名为STD_LOGI和STD_LOGI_VECTOR

2.        STD_LOGIC_ARITH
主要在STD_LOGIC_1164包的基础上对无符号数,有符号数,短整型三个数据类型的增强,并定义了相关的转换函数和运算符
3.        STD_LOGIC_SIGNED
Synopsys公司定义的有符号数运算相关的操作
4.        STD_LOGIC_UNSIGNED
该程序包定义了无符号数相关运算。

以上预定的包被存放在IEEE库内,设计自定义的包被存放在work库内
包的实用如下:
Library   WORK  --打开work库
Use  WORK myuset.--使用work库里面的STD包



实体
用以描述端口模型   图3

entityM2 is
Port
(
Clk:instd_logic;
rst_n:instd_logic;
Ledutstd_logic_vector
);


Generc
(
Constant  CLK_CNT_MAX:ingeter :=25000000;

);
end M2;

结构体
描述端口模型在功能
Architecture  M2_ACHR1  of    M2 is
变量或者信号在申明
元件在申明
Signnalcounter: integer  ;
Begin
Process(rst_n,clk)
If(rst_n=’0’)
Counter<=0;
elsif  clk=’1’ and clk’envet then
If  counter =CLK_CNT_MAX  then
Counter<=0;
Else
Counter<=counter+1;
    end if;


end if;

endprocess;

end M2_ACHR1;



VHDL数学表示
只能用于与数学相关在数据类型,比如integer
10#170:表示10进制数170    ‘d170
2#10100101# :表示二进制数165
16#E#:表示十六进制数E

16#E#E1:表示E*16^1

逻辑位串表示
  只用于说逻辑描述相关在数据类型std_ogic
B”1010”
O”32”
X”1ABA”

Led<=”1010”;



位在表示
Reg  [9:0]counter;
Signal  counter: std_logic_vector (9 downto0;)
Reg  [0:9]counter;
Signal  counter: std_logic_vector (0 to 9;)
Reg  [0:9]counter;


信号沿在描述

上升沿
Clk ‘envetand clk=’1’--常规描述
rising_edge(clk)--函数描述
下降沿
Clk’enventand clk=’0’
Falling_edge(clk)


数据范围表示
Signal  counter:integer range 255 downto 0;



操作符
符号运算法
+:表示正
-:表示负
数学运算
+:表示加法
-:表示减法
*:表示乘法
/:表示除法

移位运算法
SLL:逻辑左移
Srl:逻辑右移
SLA:数学左移
SRA:数学右移
ROL:循环左移
ROR:循环右移

关系运算符
=:等于
\=不等于
<:小于
<=:小于等于
>:大于
>=:大于等于

逻辑运算
and:与
or :或
Nand:与非
NOR:或非
Xor:异或
Xnor:同或

关联操作符
=>:表示操作符左边和右边有关系

数据类型
Integer:整型,默认32位
Real:实数
Bit:逻辑类型只能是0和1
Bit_vector;逻辑类型矢量,是Bit类型的多位组合
Boolen:布尔类型,取值只能是true和false
Character:字符类型
String:字符串类型
Time:时间类型
NATURAL:自然数,默认32位
Positive:正整数,默认32位

Severity level:错误等于赋值只能为NOTE WRLING ERROR  FAILURE
Signal er_data:Severity level;
er_data<=NOTE;

自定义数据类型
枚举类型
Typemystate(  IDLE ,S1,S2,S3);
数组
Type  mem is array (255downto 0) of std_logic_vector (7 downto 0);
Reg[7:0]mem [255:0];

子类型
Subtype myinteger is ingeger range 255 downt0;


常量,信号,变量

在verilog中只有常量和信号,但在VHDL中有常量,信号,变量,变量只能在PROCESS中声明和使用
所有的变量可以用信号代替,但是信号不可以用变量代替。

Constant  CNT_MAX : intger :=250;--声明常量CNT_MAX 为整数类型250
Variabe    counter:integer range255 donwto 0;--声明整数型变量,取值范围0到255
Signal    led :std_logic_vector(3 downto 0);



进程语句
描述一个功能的过程,相当于verilog中的always 和initial


进程标号:Process (敏感信号列表)
声明变量

Begin
描述语句

Endprocess  标号;

赋值
信号赋值用<=
变量的赋值:=
常量以及变量或者信号赋初值:=

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-4-20 03:36 , Processed in 0.060916 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表