VHDL中信号赋值语句的讨论.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE PAGE 8 VHDL中信号与变量赋值语句的讨论 一 信号与变量赋值语句的理论基础 信号声明在子程序、进程等外部,并可以在几个不同的进程里作用;而变量声明在子程序、进程等内部。 信号与变量的赋值不同:在进程中,信号赋值在进程结束时起作用,而变量赋值是立即起作用的。如果在一个进程中多次为一个信号赋值时,只由最后一个值会起作用;而当为变量赋值时,变量值的改变是立即发生的。即变量将保持着当前值,直到被赋予新的值。 顺序语句只存在于进程和子程序内部。 二 信号的赋值 (一) 进程外部信号的赋值 (1)进程外部不能为同一信号多次赋值 在进程的外部,我们不能够为同一信号多次赋值。 例1: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity test is port(a,b:in std_logic_vector(3 downto 0); s:buffer std_logic_vector(3 downto 0); y:out std_logic_vector(3 downto 0)); end entity test; architecture one of test is begin s=a; y=s+1; s=a+b; end architecture one; 在例1程序中,我们对信号s进行了多次赋值,经过仿真,系统报如下错误:ERROR: Signal “s” has multiple sources。 (2)进程外部对信号的赋值 在进程外部几个信号的赋值语句是并行执行的。即信号赋值语句中的信号发生变化,便执行该条赋值语句。 例2: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity test is port(a,b:in std_logic_vector(3 downto 0); s:buffer std_logic_vector(3 downto 0); y:out std_logic_vector(3 downto 0)); end entity test; architecture one of test is begin y=s+1; s=a+b; end architecture one; 在例2的程序中,如果a或b发生变化,则执行语句s=a+b;因为a或b变化,影响使得s变化,则执行语句y=s+1。仿真结果如图1所示。 图1信号在进程外部的赋值 在例2中y=s+1; s=a+b;这两句的先后顺序不影响结果。这一点也能体现并行语句的特点。 (二) 进程内部信号的普通赋值 这里所说的进程内部信号的普通赋值,是指信号赋值不需要通过时钟边沿来驱动。由于进程中的语句都是顺序语句,所以进程中的普通信号赋值都是顺序执行的,但有一点需要注意,就是如果在一个进程中多次为一个信号赋值时,只有最后一个值会起作用。什么意思呢?也就是说在进程内部多次为一个信号赋值时,只有最后一次赋值会起作用;如果还将此信号赋给其他信号,一律都按此信号的最后一次所赋的值赋给其它信号,而为此信号多次赋值的语句的位置可以任意(在顺序一定的前提下),对结果没有任何影响。 例3: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity test is port(clk:in std_logic; a,b:in std_logic_vector(3 downto 0); s:buffer std_logic_vector(3 downto 0); y:out std_logic_vector(3 downto 0)); end entity test; architecture one of test is begin process(a,b,s) begin y=s+1; s=a; s=a+b; end process; end architectur

文档评论(0)

我思故我在 + 关注
实名认证
内容提供者

部分用户下载打不开,可能是因为word版本过低,用wps打开,然后另存为一个新的,就可以用word打开了

1亿VIP精品文档

相关文档