vhdl笔记.docx

上传人:b****2 文档编号:2579373 上传时间:2023-05-04 格式:DOCX 页数:10 大小:435.66KB
下载 相关 举报
vhdl笔记.docx_第1页
第1页 / 共10页
vhdl笔记.docx_第2页
第2页 / 共10页
vhdl笔记.docx_第3页
第3页 / 共10页
vhdl笔记.docx_第4页
第4页 / 共10页
vhdl笔记.docx_第5页
第5页 / 共10页
vhdl笔记.docx_第6页
第6页 / 共10页
vhdl笔记.docx_第7页
第7页 / 共10页
vhdl笔记.docx_第8页
第8页 / 共10页
vhdl笔记.docx_第9页
第9页 / 共10页
vhdl笔记.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

vhdl笔记.docx

《vhdl笔记.docx》由会员分享,可在线阅读,更多相关《vhdl笔记.docx(10页珍藏版)》请在冰点文库上搜索。

vhdl笔记.docx

vhdl笔记

1std_logic拥有九种逻辑:

U(未设置)、X(浮接不定)、1(高电平)、0(低电平)、Z(高阻态)、W(弱浮接)、L(弱低电平)、H(弱高电平)、—(随意)而bit只有0、1两种逻辑,一般都用std_logic来代替bit因为它包含的逻辑更多,更符合硬件电路的特性

2变量只能在进程语句中说明和使用(是一个局部变量,该变量若要从进程内输出就必须将其代入信号量,信号量是全局变量,通过输出信号带出进程);信号、常量可以在结构体和进程语句中使用。

信号通常在实体、结构体和程序包中说明,但不能在进程中说明,只能在进程中使用。

3当时钟信号作为进程的敏感信号时,在敏感信号表中不能出现一个以上的时钟信号,除时钟信号以外,复位信号等是可以与时钟信号一起出现在敏感信号表中的。

4所谓同步复位,就是当复位信号有效且在给定的时钟边沿到来时,触发器才被复位;而非同步复位则是,一旦复位信号有效,触发器就被复位。

非同步触发器也称为异步复位。

5同步复位:

process(clk)

异步复位:

process(clk,clr)

6算术运算符+-<><=>=仅对integer类型有效。

逻辑运算符andornot仅对bit类型有效。

7U+=u-虚短

I+=i-虚断

8如果没有others分支条件存在,则分支条件必须覆盖表达式所有可能的值。

对std_logic,std_logic_vector数据类型要特别注意使用others分支。

9begin

Tmp:

=’1’;--jixiaoyantmp:

=’0’;--oujiaoyan

Foriin0to7loop

Tmp:

=tmpxora(i);

Endloop;

Y=tmp;

For循环变量是loop内部自动声明的局部变量,仅在loop内部可见;不需要指定其变化方式。

离散范围必须是可计算的整数范围:

整数表达式to/downto整数表达式。

一般综合工具不支持while…..loop语句。

在loop语句中next语句用来跳出本次循环。

格式:

next【标号】【when条件表达式】;

分三种情况:

(1)next;无条件终止当前的循环,跳回到本次循环loop语句开始处,开始下次循环。

(2)next【标号】;无条件终止当前的循环,跳转到指定标号的loop语句开始处,重新开始执行循环操作。

(3)next【标号】【when条件表达式】;当条件表达式的值为true,则执行next语句,进入跳转操作,否则继续向下执行。

10copmponent元件名【is】--is可以缺省

【generic(类属声明);】

【port(端口声明);】

Endcomponent【元件名】;元件声明类似实体声明(entity)

11componentadd

Generic(n:

positive);参数声明

Port(x,y:

inbit_vector(n-1downto0);

Z:

outbit_vector(n-1downto0);

Carry:

outbit);

Endcomponent;

12元件的例化

例化名称:

元件名称

【genericmap(类属名称=>表达式,类属名称=>表达式)

Portmap(端口名称=>表达式,端口名称=>表达式);】

端口映射方式:

名称关联方式:

低层次端口名(原来的端口名)=>当前层次端口名、信号名例:

or2portmap(i1=>n3,i2=>n1,o=>n6)

位置关联方式:

(当前端口名,当前端口名,……..)

例:

or2portmap(n3,n1,n6)

注:

位置关联方式中,例化的端口表达式(信号)必须与元件声明语句中的端口顺序一致。

13可以在结构体(architecture),程序包(package),块(block)中声明元件(component)。

14q:

outstd_logic_vector(3downto0)我们不能把输出的进行放在赋值的右边,也就是说如果去q<=1,合法;如果q<=q+1,q在右边了,不合法。

15for循环变量in范围generate

{并行语句}

Endgenerate;

范围:

整数表达式to/downto整数表达式

不需要设计者对变量干预。

16用生成语句创建多个备份

Componentcomp

Port(x:

inbit;

Y:

outbit);

Endcomponent;

…………………..

Signala,b:

bit_vector(0to7);

Gen:

forIina’rangegenerate

U:

compportmap(x=>a(I),y=>b(I));

Endgenerategen;

17子程序可以在package,architecture,process中定义。

子程序与进程语句的区别:

子程序不能从结构体的其余部分直接读写信号。

所有通信都是通过子程序的接口来完成的。

进程可以直接读出结构体内的其它信号。

子程序和进程内部都是顺序结构,但子程序不具有并发性,而进程具有并发性。

17子程序的类型:

过程(procedure):

0个或多个inout或inout参数,可以获得多个返回值。

函数(function):

0个或多个in参数,一个return值。

只能获得一个返回值。

过程可以作为一种独立的语句结构而单独存在,函数通常作为表达式的一部分来调用。

18子程序包含两部分:

字程序声明和子程序主体。

1,过程声明语法procedure过程名【(参数声明)】;参数声明指明输入输出端口的数目和类型。

参数的传递方向有inoutinout三种形式。

2,函数声明语法function函数名【(参数声明)】;return类型;

参数声明如:

【参数名:

方式参数类型】函数的方式只有in方式。

1)过程主体语法:

procedure过程名【(参数声明)】is{子程序声明项}

Begin{顺序语句}

End【过程名】;

19signalcount_6std_logic_vector(5downto0);在用到count_6<=count_6+1时,因为是位矢量和整数的相加需要调用library_ieee_std_logic_unsigned.all库。

20异步计数器又称为行波计数器,它的低位计数器的输出作为高位计数器的时钟信号。

21process(rst,clk)

Begin

Ifrst=’1’then

ForIin7downto0loop

IfI=4then

Next;

Else

Fifo(i)<=(others=>’0’);

Endif;

Endloop;

功能:

当rst有效时,fifo(4)之外的所有fifo寄存器都被复位。

22Next<循环标号>when<条件>;

1,循环标号和条件都是可选项。

2,执行了next语句之后,控制语句就转到由循环标识的循环体尾部(如果未给出循环标号,就转到当前循环的尾部),并且开始新的一次循环。

3,Next语句有判断条件,对条件进行测试并且测试结果为真时,就推出当前一轮循环,同时进入下一轮循环。

4,测试结果为假时,则不执行next语句。

23测试平台:

--声明本地变量用于赋值和观察

Signala_tb,b_tb,sum_tb,carry_out_tb:

std_logic;

--对被测电路进行例化

Uut:

entityhalf_adderportmap(a=>a_tb,b=>b_tb,sum=>sum_tb,carry_out=>carry_out_tb);

24to_unsigned(m,32)函数的功能是,将整数m转换为32位的unsigned类型(实际上就是一个std_logic_vector(31downto0)类型)。

Constantn:

integer:

=2;

Begin

ForIin0to2**n-1loop

(a_tb,b_tb)<=to_generate(I,n);

Waitforperiod;

Assert((sum=(a_tbxorb_tb)and(carry_out_tb=a_tbandb_tb))

Report”testfailed”severityerror;

Endloop;

25sll逻辑左移;srl逻辑右移;

Sla算术左移;sra算术右移;

Rol循环逻辑左移;ror循环逻辑右移。

26在写数据和擦除数据时,nandflah由于支持整块擦除操作,所以速度比norflash快了近千倍;读取时,由于nandflah要先向芯片发送地址信息进行寻址才能开始读写数据,而它的地址信息包括块号,块内页号和页内字节号等部分,需要顺序选择才能定位到要操作的字符,这样每进行一次数据访问要进行三次寻址,至少要三个时钟周期;而norflah操作是以字或字节为单位进行的直接读取,所以读取数据时,norflash有优势。

27NANDFLASH内部结构由粗到细依次分为器件(device),目标(target),单元(unit),块(block),分页(page)以及扇区(sector)。

器件是指NANDFLASH本身,一个器件由一个或多个目标构成。

而各个目标是否工作是由CE(chipenable)信号来控制,同一时刻只有一个目标处于工作状态。

一个目标又分为一个或多个逻辑单元。

逻辑逻辑单元是独立地执行命令和报告状态的最小单位。

原则上NANDFLASH支持多逻辑单元操作。

每个逻辑单元都包含至少一个分页寄存器和一个存储阵列。

分页寄存器用于暂存由外部读入

NANDFLASH的数据以及由NANDFLASH读出的数据。

存储阵列由许多分块组成。

一个分块是逻辑单元中进行擦除操作的最小单位。

一个分块又包含若干个分页,对于支持约束性连续分页操作的器件来说,分页是最小的可寻址操作单位。

一个分块所包含的分页数规定为32的倍数。

最后为了与其他存储器件的统一并且满足分页在字节数上的要求,引进了扇区这个单位。

一个扇区仍然是512个字节,由于NANDFLASH寻址及工作原理的特殊性,在每个512字节的扇区后会有一个16个字节的备注区域。

在这个备注区域中不存放用户数据,而是存放了与地址转换、ECC校验、坏块标记/判断等有关的信息。

可以看到只含有一个目标的NANDFLASH和含有多个目标的NANDFLASH的差别只是在CE这个控制信号上,除此之外工作原理是一样的。

28STD_ULOGIC和STD_ULOGIC_VECTOR比STD_LOGIC类型多引入了一个逻辑值’U’,代表初始不定值。

但没有指定两个STD_ULOGIC信号连接到同一个节点上发生冲突后的逻辑值,因此要避免两个输出信号直接进行连接的情况。

29信号声明语法格式如下:

Signal<信号名>:

数据类型【约束条件】【:

=表达式】;

已声明的信号用“<=”延时赋值符号为其代入新的值。

=(立即赋值符号,没有延迟)

30Buf_num*2<=buf_num(1downto0)&’0’

Buf_num*2取的num的偶数值

31infor_we_0:

out_std_logic_vector(1downto0)

Infor_we_0(0),infor_we_0

(1)代表一位(bit)值。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2