VHDL学习笔记_第1页
VHDL学习笔记_第2页
VHDL学习笔记_第3页
VHDL学习笔记_第4页
VHDL学习笔记_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章 语法基础1、基本标识符不区分大小写2、扩展标识符与基本标识符不同,例如:COMPUTER与Computer和computer都不相同。3、VHDL语言中的对象有4类:常量(Constant)、信号(Signal)、变量(Variable)和文件(File)。4、VHDL语言中的数据类型有5类:标量类型(Scalar Types)、复合类型(Composite Types)、存取类型(Access Types)、文件类型(File Types)和隐含类型(Protected Types)。5、package封装库的时候可以将所有的程序包封装放在单独的一个.vhd文件内。(而不是直接单独编

2、译这个.vhd文件)这样操作也是可以调用封装库的。6、在信号赋值中,当在同一个进程中同一个信号赋值目标有多个赋值源时,信号赋值目标获得的是最后一个赋值源的赋值,其前面相同的赋值目标不作任何变化; 特别注意:信号赋值发生在一个进程结束时。7、VGA使用时要把不用的 Blank_n 和 sync_n 都默认接地,不然会出现 叠影。8、时钟PLL的不合理使用会影响到其他区域功能块的数据。9、网口经88e1111在未接收到数据的时候,在RGMII模式下默认为”1101”输出,即xD;复位的状态下是x5;10、VGA显示时,要严格按照VGA的显示标准要求;例如:640*48060Hz 的输入频率必须为2

3、5Mhz左右,以满足显示要求, 频率过低VGA将没有响应,频率过高将显示 输入信号超过范围。11、vhdl中信号和变量在描述和使用时有哪些主要区别:符号不同:变量:= 信号 <=延时:变量无延时 信号有延时位置:娈量在PROCESS 信号ARCHITECTUUE SIGNAL BEGIN 信号可以是全局量,只要在构造体中已定义,那么构造体内的所有地方都可以使用;变量是局部量,只能在进程、子程序中定义和使用。如果将结果带出外部,则必须将变量付给一个信号量才行。12、处理不同位数的std_logic_vector类型数据相加,使用conv_integer(变量)转换成整型,再进行相加, 再用

4、conv_std_logic_vector(变量,位数) 来转换成更多位数的;如:library ieee; - 可以实现两个16位数相加,输出带进位的32位use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity vector_add_test isport(ivector1, ivector2 : in std_logic_vector(15 downto 0);ovector : out std_logic_vector(31 downto 0);end

5、vector_add_test;architecture one of vector_add_test isshared variable outv : integer;beginprocess(ivector1, ivector2)beginoutv := conv_integer(ivector1) + conv_integer(ivector2);end process;ovector <= conv_std_logic_vector(outv, 32);end one; 13、signal tap 使用时注意 下图的打钩都需要:14、 VHDL设计中如果使用elsif count

6、 > Mactype_offset then 。 则编译出来的结果会有错误产生,其中是由于 综合成电路的时候 判断条件不够明确, 因此需要进行如下的设计:elsif count < Mactype_offset and count >= (Mactype_offset - 2) then ;15、16、 第三章 VHDL语言的程序结构1、实体 一般格式:ENTITY 实体名 IS GENERIC语句; - 类型说明(可选项) PORT语句; - 端口说明(必需项) 实体说明部分; (可选项) BEGIN 实体语句部分;END ENTITY 实体名;(1) 端口说明部分PORT

7、(端口名, 端口名: 模式 数据类型。 端口名, 端口名: 模式 数据类型);端口名是赋予每个引脚的名字,其含义要明确,如D开头的端口名表示数据,A开头的端口名表示地址等。端口的模式有:In 、Out 、 Buffer 、 Inout 、 Linkage ;2、 结构体 一般格式:ARCHITECTURE 结构体名 OF 实体名 IS 结构体说明部分BEGIN 结构体语句END ARCHITECTURE结构体名;注:模块中所描述的各个语句是可以并发执行的,与模块中的语句书写顺序无关;在模块之外,结构体内直接书写的语句也是并发执行的。(1) 用VHDL语言描述结构体有以下4种方法: 1)、行为描

8、述法: 采用进程语句,顺序执行;2)、数据流描述法:采用进程语句,顺序执行;3)、结构描述法:采用并行处理语句;4)、采用多个进程、多个模块、多个子程序的方法;(2)进程语句 一般书写形式进程名:PROCESS敏感信号表变量声明语句。BEGIN。顺序语句。END PROCESS 进程名;注:1)进程内部的所有语句都是顺序执行的;2) 多个进程之间是并行执行的,并可通过敏感信号访问结构体或实体中定义的信号。3) 进程依靠敏感信号表中指定的信号来触发启动,也可以用WAIT语句描述触发条件。(但是敏感信号表和WAIT语句不能共存)4) 进程之间的通信是由信号来传递的。(3) WAIT语句的书写格式为

9、:WAITON 敏感信号列表 UNTIL 表达式FOR 时间表达式;(4) 模块语句 一般格式如下块名:BLOCK 控制条件的布尔表达式 ISGENERIC 子句 GENERTIC映射; 端口子句 端口映射; 块说明部分BEGIN并行语句A ; 并行语句B ;.END BLOCK块名;结构体可以看做两部分:第一部分:结构体说明语句可以包含有以下几种说明语句:常数说明(constant)数据类型说明信号说明(signal)例化元件说明(component)子程序说明(subprogram)第二部分:结构体功能描述语句可以包含有以下几种说明语句:块语句(block)进程语句(process)信号赋

10、值语句子程序调用语句元件例化语句(port map)生成语句(generate)第四章 VHDL的语法基础1、 并行语句与顺序语句(1) 能够进行并行处理的语句有:process -进程语句Concurrent signal assignment-并发信号代入语句 Concurrent procedure call-并发过程调用语句Block-模块语句Assert-并行断言语句Generate-重复结构生成语句Generic-元件参数化语句(2) 顺序语句列述如下:Variable assignment statement -变量的赋值语句Signal assignment statement

11、 -信号的赋值语句Wait-wait语句If-Case-Loop-Next-Exit-Report-Return-Procedure call-过程调用语句Assert-断言语句注1:顺序语句只能出现在 进程、过程、函数和模块中;注2:有些既能做顺序语句又能做并发语句的, 这类语句放在进程、块、子程序之外是并发语句,放在过程、块、子程序之内的是顺序语句。(3) 1)信号(signal)可以声明在进程和子程序的外部,也可以声明在进程和子程序的内部;而 变量(variable)只能声明在进程和子程序的内部。 2) 同一个信号不能被多次赋值,只要信号的代入语句中的表达式发生变化,便执行该赋值语句;多

12、个信号代入语句是并发执行的 与其书写的顺序无关;3) 变量的赋值只能在进程和子程序内部进行,且是顺序执行;并且每个赋值语句都是立即生效的;(4) 运算符&(并置)操作例: “VH”&“DL” 的结果为“VHDL”; 0&1的结果为“01”;2、 变量赋值语句与信号代入语句 (when 条件 else)、(with 表达式 select 。 when)3、 条件分支语句与循环语句(1) if 语句 一般书写格式1) If 条件 then <顺序处理语句>; End if;2)if 条件 then<顺序处理语句甲>;Else<顺序处理语句乙&g

13、t;; End if;3) if 条件1 then<顺序语句1>;Elsif 条件2 then<顺序语句2>;。Elsif 条件n then<顺序语句n>;Else<顺序语句n+1> End if; (2)case 语句 一般格式:Case 条件表达式 isWhen 条件表达式 => 顺序处理语句;End case;注:if语句是有序的,case语句是无序的; (3)loop语句有:for-loop、while-loop、next-loop 和exit-loop等形式;其中next-loop主要用于二重循环中比较多。 (4)元件声明与调用

14、一般格式Component 元件名 -声明被调用的元件Generic 子句; -声明被调用元件的参数Port 字句; -声明被调用元件的端口End component;被声明的元件可以在结构体中通过其元件名调用,书写格式如下:实例元件标号: 元件名 generic map语句;port map语句;注:标号名加在元件名前面,在结构体描述中,标号名一定是唯一的。 (5)generic语句 参数传递字句的书写格式为:Generic (参数1: 参数类型1 :=参数初值1;参数2: 参数类型2 :=参数初值2;。;参数N: 参数类型N :=参数初值N;);注:使用generic子句声明了参数要求后,

15、要在调用元件时使用参数映射子句(generic map)传入参数值。(6)生成语句(generate)用来产生多个相同的硬件结构,如计算机存储阵列、寄存器阵列。生成语句有for-generate、if-generate和case-generate 3种形式。第五章VHDL程序设计基础1、 在元件设计中,元件内部互相连接的端口使用BUFFER类型,元件外部互相连接的端口使用IN、OUT类型。2、 加法器例程:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; - 加减乘使用需要添加的程序包ENTI

16、TY adder IS PORT ( A : IN STD_LOGIC_VECTOR(7 DOWNTO 0); B : IN STD_LOGIC_VECTOR(7 DOWNTO 0); clk : in std_logic; S : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END adder; ARCHITECTURE behav OF adder IS Signal C : std_logic_vector(7 downto 0) ; BEGIN process(A,B,clk,c) begin IF clk'EVENT AND clk = '1&

17、#39; THEN C <= A + B; if(C < 255) then S <= C; end if; if(C > 255) then S <= C - 255; end if; end if; end process; END behav;3、VHDL中BUFFER与INOUT有什么区别呢?首先INOUT完全是双向的,也就是INOUT:=IN+OUT,对INOUT属性的PIN既可以写出也可以读入,他有2个寄存器,如.port(a:inout std_logic);.signal ccc,ddd:bitprocess(clk)begin.a<=ccc

18、;此时端口a为CCC的值.ddd<=a;读入端口a此时的信号BUFFER: 一般比较少用,它实际上输出的功能与out一样,他只有1个寄存器,而此时读入的却是上次从该口输出的值,比如:port(a:buffer std_logic);.signal ccc,ddd:bitprocess(clk)begin.a<=ccc;此时端口a为CCC的值.ddd<=a;读入到ddd的值其实等于ccc的值。(如果中间没有给a赋新值的话)。4、 配置语句可以用于描述层与层之间的连接关系,如实体与结构体之间的连接关系。 注:配置一般写在结构体之后配置的一般书写格式为:Configuration

19、配置名 of 实体名 isFor 选配结构体名use entity 实体名(结构体名);generic map 语句;port map 语句;块配置End for;End configuration 配置名;(1) 默认连接和默认配置的书写格式:Configuration 配置名 of 实体名 isFor 选配结构体名End for;End 配置名;(2)块配置语句的书写格式为:Configuration 配置名 of 实体名 isFor 选配结构体名For 块名use 语句;元件配置;。End for;End for;End 配置名;例:Configuration cpu_con of cp

20、u isFor fragmentFor reg_arrayFor all : int_regUse configuration _reg_con;End for; End for;End for;End cpu_con ;(3) 元件的配置 书写格式:For 元件例化标号: 元件名 generic map 语句;port map 语句;End for;注:一个元件实例只能有一个元件配置,如果需要例化的元件有很多,可以用保留字other、all来指定这些文件。5、 可见性(1) 在结构体、进程和子程序中,声明的有效区域是自声明语句起,到其所在的结构体、进程或子程序的结尾处。 在实

21、体中声明的对象对整个实体可见,称作全局声明。在结构体中声明的对象仅对该结构体可见,在块、进程中声明的对象仅对该块或进程可见,称为局部声明。6、 别名声明的书写格式:Alias 替换名 :子类型标识符 is 目标名识别标志;7、程序包声明和程序包体的 一般格式Package 程序包名 is-程序包声明 说明区-声明数据类型、元件、函数等End package 程序包名;-Package body 程序包名 is-程序包体 设计单元End package body 程序包名;注: 程序包声明可以含有下列说明:Generic语句属性声明Generic 映射属性说明子程序声明断开声明(disconne

22、ction_declaration)子程序实例化声明USE语句程序包声明组模板声明(group_template_declaration)程序包实例化声明组声明(group_declaration)类型、子类型说明PSL性质声明(PSL_property_declaration)常量、延时常量、信号、变量、文件声明PSL序列声明(PSL_sequence_declaration)别名声明连接体元件声明程序包体中可以含有下列说明:子程序声明别名声明子程序体属性声明子程序实例化声明属性说明程序包声明USE语句程序包体 组模板声明程序包实例化声明组声明类型说明、子类型声明函数声明常量、变量、文件声明

23、函数体2. 属性(ATTRIBUTE)l 数值类属性数值类属性用来得到数组、块或一般数据的相关信息,例如可用来获取数组的长度和数值范围等。以下是VHDL中预定义的可综合的数值类属性:dLOW 返回数组索引的下限值dHIGH 返回数组索引的上限值dLEFT 返回数组索引的左边界值dRIGHT 返回数组索引的右边界值dLENGTH 返回矢量的长度值dRANGE 返回矢量的位宽范围dREVERSE_RANGE 按相反的次序返回矢量的位宽范围例:定义信号 SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0);则有:dLOW = 0, dHIGH = 7, dLEFT = 7,

24、dRIGHT = 0, dLENGTH = 8, dRANGE = (7 DOWNTO 0), dREVERSE_RANGE = (0 TO 7).l 信号类属性对于信号s,有以下预定义的属性(可综合的):sEVENT 若s的值发生变化,则返回布尔量TRUE,否则返回FALSEsSTABLE 若s保持稳定,则返回TRUE,否则返回FALSE例:clk的上升沿判断IF (clkEVENT AND clk = 1)IF (NOT clkSTABLE AND clk = 1)WAIT UNTIL (clkEVENT AND clk = 1)2、 rising_edge(clk) 上升沿3、 fall

25、ing_edge(clk) 下降沿3. 通用属性语句GENERIC语句提供了一种指定常规参数的方法,所指定的参数是静态的,增加了代码的可重用性,类似于Verilog中的parameter与defparam。GENERIC语句必须在ENTITY中进行声明,由GENERIC语句指定的参数是全局的,不仅可在ENTITY内部使用,也可在后面的整个设计中使用。语法结构如下:GENERIC (parameter_name: parameter_type := parameter_value);用GENERIC语句指定多个参数:GENERIC (n: INTEGER := 8; vector: BIT_VE

26、CTOR := “0000_1111”);Wait语句WAIT; - 第一种语句格式(永远挂起)WAIT ON 信号表; - 第二种语句格式 (信号发生变化将结束挂起)WAIT UNTIL 条件表达式; - 第三种语句格式(条件表达式中的信号发生变化切满足条件是结束挂起)WAIT FOR 时间表达式; - 第四种语句格式, 超时等待语句(时间到结束挂起)一般地,只有WAIT_UNTIL格式的等待语句可以被综合器接受(其余语句格式只能在VHDL仿真器中使用)敏感信号表所谓敏感信号表:就是用来存放敏感信号的列表。在进程语句中,敏感信号指那些发生改变后能引起进程语句执行的信号。敏感信号表中可以使用一

27、个或多个信号,当其中一个或多个信号值改变时,就在进程内部引起语句执行。敏感信号表也可忽略,但程序中必须有其他形式的敏感信号激励。例如wait、waitfor、wait until和wait on。-定义matrix_index 为数组TYPE matrix_index is array (3 downto 0) of std_logic_vector(7 downto 0);SIGNAL a: matrix_index;-定义了数组a4,即数组元素为a0,a1,a2,a3constant R : matrix_index:=( x"15", x"0F",

28、 x"0A", x"06");-定义了常数数组R4-使用时跟C语言中一样,加下标就可以了,上面是用downto定义了方向,故R0是最后一项,如在R数组中R0=X"06",R3=X"15"以上不知道说清楚了没,满意请及时采纳 我看还是补充一段参考程序吧-library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;ENTITY shift_row_inv ISPORT( shi

29、ftrow_in : IN STD_LOGIC_VECTOR(127 DOWNTO 0); shiftrow_out : OUT STD_LOGIC_VECTOR(127 DOWNTO 0) );END shift_row_inv;ARCHITECTURE beh OF shift_row_inv IS- type describing the byte array consisting of 16 byte matrix arrayTYPE matrix_index is array (15 downto 0) of std_logic_vector(7 downto 0);SIGNAL b

30、, c : matrix_index;BEGIN-initial mapping of input into a byte matrix array named bmatrix_mapping:PROCESS(shiftrow_in)BEGIN FOR i IN 15 DOWNTO 0 LOOPb(15-i) <= shiftrow_in(8*i+7 DOWNTO 8*i); END LOOP;END PROCESS matrix_mapping;-shift row transformation- b(i) ->c(i)- | 0 4 8 12 | | 0 4 8 12 | (n

31、o shift) - | 1 5 9 13 | => | 13 1 5 9 | ( 1 right shift) - | 2 6 10 14 | | 10 14 2 6 | ( 2 right shift) - | 3 7 11 15 | | 7 11 15 3 | ( 3 right shift) -shifted first columnc(0) <= b(0);c(1) <= b(13);c(2) <= b(10);c(3) <= b(7);-shifted second columnc(4) <= b(4);c(5) <= b(1);c(6)

32、<= b(14);c(7) <= b(11);-shfited third columnc(8) <= b(8);c(9) <= b(5);c(10) <= b(2);c(11) <= b(15);-shifted forth columnc(12) <= b(12);c(13) <= b(9);c(14) <= b(6);c(15) <= b(3);-mapping temporary c vector into shiftedrow outputmatrix_mapping_back:PROCESS(c)BEGIN FOR i I

33、N 15 DOWNTO 0 LOOPshiftrow_out(8*i+7 DOWNTO 8*i) <= c(15-i); END LOOP;END PROCESS matrix_mapping_back;END beh;VGA时钟/*-VGA Timing-Horizontal :- _ _- | | |-_| VIDEO |_| VIDEO (next line)-_ _ _- |_| |_|- B <-C-><-D-><-E->- <-A->-The Unit used below are pixels; - B->Sync_cycle :H_sync_cycle- C->Back_porch :hori_back- D->Visable Area- E->Front porch :hori_front- A->horizontal line total length :hori_line-Vertical :- _ _-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论