CH9_VHDL基本语句.ppt_第1页
CH9_VHDL基本语句.ppt_第2页
CH9_VHDL基本语句.ppt_第3页
CH9_VHDL基本语句.ppt_第4页
CH9_VHDL基本语句.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、2020/8/6,1,9章VHDL基本语句,主要内容顺序语句变量说明语句变量赋值语句变量赋值语句IF语句CASE语句LOOP语句NEXT语句WAIT语句NULL语句RETURN语句过程调用语句,2020/8/6,2并行语句并行信号赋值语句BLOCK(顺序语句CASE语句语法:WHEN选择值=顺序语句;END CASE示例91:entity casee xapis port(a : in STD _ logic _ vector(4 down to 0);q : out STD _ logic _ vector(2 down to 0);END CaseExap,2020/8/6,4,archi

2、tecture arch _ casee xap of casee xap is begin process(a)begin CASE a is when 0000 END CCHEND PROCESSEND arch _ CaseExap在上例中,矢量没有范围,程序为矢量指定了范围,因此会出错。通过首先将矢量转换为整数,可以获得诸如92:2020/8/6,5,示例92:architecture arch _ casee xap of casee xap is Begin process(a)等想法END CASEEND PROCESSEND arch _ CaseExap,2020/8/6,

3、6,LOOP语句LOOP语句使程序执行规则循环,循环数由迭代算法控制。LOOP语句通常以两种茄子格式提供:单个LOOP语句语法:标签: LOOP序列语句。END LOOP标签;上面的语句需要添加其他控制语句(如EXIT语句)以形成循环。2020/8/6,7,FOR-LOOP语句语法:标签: FOR IN LOOP序列语句;END LOOP标签;例如:asum : for I in 1 to 9 loop-9次sum :=I sumEND LOOP asumLOOP循环的范围最好显示为常量。否则,LOOP体内的逻辑可以重复所有可能的范围。这将导致硬件资源太大,合成器不支持不受约束的循环。2020

4、/8/6,8,NEXT语句语法:NEXT标签WHEN条件;在LOOP语句中,NEXT语句用于脱离牙齿循环。NEXT语句后面的标签表示下一次迭代的开始位置,WHEN条件表示NEXT语句的执行条件。如果NEXT语句后面既没有标签也没有WHEN条件,则运行牙齿语句会立即无条件地退出循环,并从LOOP语句的开始位置进入下一个循环。EXIT语句语法:EXIT标签WHEN条件;EXIT语句类似于NEXT语句,是用于LOOP语句的循环控制语句。与NEXT语句不同,执行EXIT会终止循环状态,结束LOOP语句会终止结束LOOP语句的正常执行。2020/8/6,9,WAIT语句WAIT语句可以设置无限大气、时间

5、、条件满足和敏感信号量变化的四个茄子条件。WAIT - WAIT ON -变更敏感讯号量waituntil-符合条件WAIT FOR-time vs WAIT ON语法:WAIT ON讯号、讯号;只要WAIT ON后面列出的信号之一发生更改,该进程就会结束暂停状态,继续执行WAIT ON语句中的后续语句。2020/8/6,10,WAIT UNTIL语法:WAIT UNTIL布尔表达式;WAIT UNTIL后面是布尔表达式。进程在运行牙齿语句时暂停,因此直到表达式为true时,进程才会重新启动。WAIT FOR语法:WAIT FOR time expressionWAIT FOR后面是进程运行牙

6、齿语句时暂停的时间表达式,达到指定的等待时间后,进程开始执行后续语句的时间表达式。2020/8/6,11,多条件WAIT语句之前的3个WAIT语句中,等待条件全部为单个。信号量,布尔或时间。实际上,WAIT语句可以同时使用多个等待条件,如wait on a,b until (a=1) or (b=1) for 5ns。上面的门等着三个茄子条件:1)信号量A和B中的任何一个都有新的变化。2)信号标a或b的值为1。3)牙齿门已经在等5ns了。如果满足上述一个或多个条件,则进程将重新启动,继续执行WAIT语句后面的语句。,2020/8/6,12,子节目调用语句子程序中,从包含过程和函数的硬件的角度来

7、看,可以在结构和程序包中的任何位置调用子程序的调用类似于组件模块的实例化。也就是说,VHDL合成器为子程序的每次调用生成电路逻辑块。过程调用调用过程的语句格式:过程名(形参数名=实际参数表达式,形参数名=实际参数表达式,);2020/8/6,13,示例9-3: packagedata _ types is-定义软件包subtype data _ element is integer range 0 to 3;-定义type data _ array is array (1到3) of data _ element数据类型。END data _ typesUSE WORK.data_types。

8、ALL-在当前作业库中打开entity sort is port包(in _ array 3360 in data _ arrayOUT _ array : OUT data _ array);END sort,2020/8/6,14,architecture arch _ sort of sort is begin process(in _ array)流程图(data 33666 Low)begin if(data(low)data(high)then temp :=data(low);Data(low) :=数据(high);数据(高度):=tempEND IFEND swapvaria

9、ble my _ array 3360 data _ array;Begin my _ array3360=in _ array-将输入值读取为变量swap(my_array,1,2)。-比较my_array1和my_array2,定义过程,2020/8/6,15,swap(my_array,2,3)-my-再次比较my_array1和- my_array2,确定最小值为my_array1 out_array=my_array。-结果输出END PROCESSEND arch _ sort在上述程序中,swap过程提供了在数组中指定的两个元素之间执行大小比较和调整其大小顺序的功能。整个程序的功

10、能是in_array11.0,in _ array21.0 in _ array31.0中的三个茄子元素比较大小,比较结果为out_array11.0,out输出为小尺寸,示例93的模拟结果如图91所示。2020/8/6,16,图91示例93的模拟结果,2020/8/6,17,函数调用与过程调用非常相似,只是函数调用返回指定数据类型的值。RETURN(返回)语句有两种茄子语句格式:RETURN。-仅限过程,过程结束RETURN表达式;-仅限函数,退出后返回值NULL语句格式:NULL;为了提高可读性,未完成任何操作,CASE语句中用于排除其他未使用的条件的空工作语句。2020/8/6,18,并

11、行语句并行信号赋值语句并行信号赋值语句三种茄子格式:简单信号赋值语句条件信号赋值语句条件信号赋值语句语法:信号对象=表达式1 WHEN条件1 ELSE表达式2 WHEN条件2 ELSE表达式N;在结构中使用,与进程中的IF语句功能一样,语句中的条件可以重叠。条件测试有顺序,第一节优先,第二节其次。2020/8/6,19,可选信号赋值语句语法:WITH选择表达式SELECT信号对象=表达式1 WHEN选择值1,表达式2 WHEN选择值2,表达式n WHEN选择值n;用于核心,类似于流程中的CASE语句功能。门的每个条件不能重叠,必须包容所有条件。条件测试具有并发性。2020/8/6,20,BLO

12、CK(块)语句BLOCK语句用于VHDL的模块化设计,在所述电路比较复杂的情况下,可分别划分为一个块,这样有助于编程和错误检查。结构体可以有多个布洛克。BLOCK语句是平行的,包含在BLOCK中的语句也是平行的。语法:标签:块way表达式块头;块描述语句BEGIN块并行语句;END BLOCK标签;卫生表示式用于实施卫生型式图块,仅在卫生型式表示式为true时执行。2020/8/6,21,块标头用于信号映射和参数定义,通常由GENERIC语句、GENERIC MAP语句、PORT语句和PORT MAP语句实现。块描述语句与结构中的描述语句相同。主要说明要用于块的对象。可解释的项目:USE语句;

13、子程序说明和子程序主体;类型说明信号说明组件说明。2020/8/6,22,并行过程调用语句过程调用语句可以作为并行语句直接出现在结构或块语句中。并行过程调用语句的格式与顺序过程调用语句的格式相同。GENERATE语句实体内部的规则,如果存在重复结构,则可以用GENERATE语句描述。2020/8/6,23,预定义的信号属性在创建VHDL模型时很有用。属性是可以从块、阵列、信号和类型中获取的信息。语法: (信号、类型等)名称属性标识符常规信号属性是返回真或假的信号属性,用于指示是否发生信号事件。信标ACTIVE返回TRUE或FALSE,以指示表信号是否处于活动状态。信号RANGE返回信号范围。2

14、020/8/6,24,常规类型特性:类型名称LEFT返回类型定义的左端号。类型名称RIGHT返回类型定义右端的数字。类型名称HIGH返回类型定义的最大数目。类型名称LOW返回类型定义的最小数目。类型名称LENGTH返回数据类型的长度。2020/8/6,25,实验4循环冗余校验(CRC)模块设计,实验1循环冗余校验(CRC)模块设计(1)实验目的:数字传输中常用的验证,纠错模块设计:循环冗余校验CRC模块,学习使用FPGA(以CRC方式编码的串行传输序列代码称为CRC代码,它由两部分组成:K位有效信息数据和R位CRC检查代码。其中,R位CRC检查代码是通过K位有效信息序列预先选择的r 1位“多项

15、式生成”相“除”后得到的(R位剩余是CRC检查代码)。其中除法是“模块2运算”。CRC检查代码通常在发送有效信息时生成,连接在有效信息后发送。在接收端,CRC代码使用相同的生成多项式,丢弃R位CRC检查代码而不出错,并接收有效信息。相反,它表示发送错误、错误更正或重新发送请求。2020/8/6,26,循环冗余校验(CRC)模块设计,SDATA:要发送的消息Datald:sdata安装信号;错误:错误警告信号;Datafini:数据接收验证已完成。Rdata:接收模块(错误检测模块)接收的12位有效信息数据Clk:时钟信号;数据CRC:附加了5位数CRC检查代码的17位CRC代码,从生成模块发送并接收。Hsend,hrecv:生成并检查错误模块的握手信号以协调相互关系。CRC生成的多项式为X5 X4 X2 1,检查代码为5位,有效信息数据为12位。2020/8/6,27,图9-2 CRC模块,2020/8/6,28,示例9-4库IEEEUSE ieee.std_logic_1164。ALLUSE ieee.std_logic_unsigned。ALLUSE ieee.std

温馨提示

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

评论

0/150

提交评论