- 1、本文档共83页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三部分4:VHDL语言-语句
可编程逻辑器件与VHDL设计技术
第三部分:VHDL语言(4 )
北京理工大学雷达技术研究所 陈禾
可编程逻辑器件与VHDL设计技术
本节内容
VHDL语言的主要描述语句
顺序描述语句
并发描述语句
其他
可编程逻辑器件与VHDL设计技术
VHDL最基本的表示方法
顺序语句:主要目的是用来实现模型的算
法部分
并行语句:表示黑盒的连接关系,所谓黑
盒是指算法描述或一些相互连接的黑盒
VHDL最基本的表示方法是并行执行的进
行(进程内部是顺序执行的)的网络,进
程之间通过信号或共享变量进行通信
可编程逻辑器件与VHDL设计技术
顺序语句
用于定义进程、过程或子程序的行为
顺序语句包括:wait,变量赋值:=,信号
赋值=,if,case,loop,next,
exit,return,null,report,过程调
用,断言语句
“顺序” 的意义
完全按照程序中出现的顺序执行各条语句
在结构层次中前面语句的执行结果可能直接影
响后面语句的结果
与并行语句不同,并行语句作为一个整体运行
可编程逻辑器件与VHDL设计技术
变量赋值语句
VHDL中,变量的说明和赋值限定在顺序
区域内,即过程、函数和进程中
变量赋值符号 :=
变量的取值无时间特性,只存放一个值
全程变量:‘93标准添加的内容,’87标准
中不允许,由于各个进程并行执行,可能
导致系统行为的不确定
可编程逻辑器件与VHDL设计技术
变量赋值语句
signal sig : bit := ‘0’;
process
variable events_on_sig : integer := 0;
begin
wait on sig;
events_on_sig := events_on_sig + 1;
end process;
可编程逻辑器件与VHDL设计技术
信号赋值语句
语法形式:
信号名 = [transport][inertial]波形
所谓“波形”是指对信号的一组赋值
举例
sig_a = sig_b after 5 ns;
sig_a = transport sig_b after 5 ns;
data = inertial 2 after 3ns, 4 after 8 ns;
可编程逻辑器件与VHDL设计技术
信号与变量的区别
信号表示把元件的输入输出端口连接在一
起的互连线
变量用于对中间数据的临时存储
信号赋值有延迟,而变量赋值没有延迟,
立即生效
信号除当前值以外有许多相关的信息,如
历史信息和波形值,而变量只有当前值
进程对信号敏感而对变量不敏感
可编程逻辑器件与VHDL设计技术
信号与变量的区别
信号可以是多个进程的全局信号,而变量
只在定义它的顺序域中可见
信号是硬件中连线的抽象描述,其功能是
保存变化的数据值和连接子元件,信号在
元件的端口连接元件。
变量在硬件中没有类似的对应关系,而是
用于硬件特性的高层次建模所需要的计算
中。
可编程逻辑器件与VHDL设计技术
IF语句
与高级语言中的IF语句类似
语法形式:
[ IF 标号:] IF 布尔表达式THEN
顺序语句;
[ ELSIF 布尔表达式 THEN
顺序语句];
[ ELSE 顺序语句];
END IF [ IF 标号 ];
可编程逻辑器件与VHDL设计技术
IF语句
举例
cnt : if (a = ‘1’) then
ones_cnt := ones_cnt + 1;
elsif (a = ‘0’) then
zeros_cnt := zeros_cnt + 1;
else
others_cnt := others_cnt + 1;
文档评论(0)