当前位置:首页 > 嵌入式 > 嵌入式教程
[导读] VHDL设计中信号与变量问题的研究

  在VHDL程序设计中,可以充分利用信号或变量的系统默认值,来灵活实现设计目标。本文从应用的角度举例说明了VHDL设计中信号与变量的区别,以及正确的使用方法,并介绍了为信号或变量赋予初始值的技巧。

  概述

  随着集成电路技术的发展,用传统的方法进行芯片或系统设计已不能满足要求,迫切需要提高设计效率,因此能大大降低设计难度的VHDL设计方法被越来越广泛地采用。用VHDL语言设计系统的主要方法是:设计者根据VHDL的语法规则,对系统目标的逻辑行为进行描述,然后通过综合工具进行电路结构的综合、编译、优化,通过仿真工具进行逻辑功能仿真和系统时延的仿真,最后把设计的程序下载到芯片中,成功地实现系统功能。

  在VHDL设计中,最常用的数据对象主要有三种:信号(signal)、变量(variable)和常数(constant)。信号是电子电路内部硬件连接的抽象。它除了没有数据流动方向说明以外,其他性质几乎和“端口”一样;信号是一个全局量,它可以用来进行进程之间的通信。变量只能在进程语句、函数语句和过程语句结构中使用,是一个局部量。

  在VHDL语言中,对信号赋值是按仿真时间进行的,到了规定的仿真时间才进行赋值,而变量的赋值是立即发生的。下面的例子是从赋初值的角度说明信号与变量的这种区别的。

  例如用VHDL语言实现初值为A的十六进制的16个数的循环显示。

  对于如此的设计要求,如果用变量实现,则VHDL程序如下。

  library ieee;

  use ieee.std_logic_1164.all;

  use ieee.std_logic_unsigned.all;

  entity sevenauto is

  port(clk:in std_logic;

  y:out std_logic_vector(6 downto 0));

  end sevenauto;

  architecture behave of sevenauto is

  begin

  process(clk)

  variable count:std_logic_vector(3 downto 0);

  variable init:std_logic;

  begin

  if (clk‘‘event) and (clk=‘‘1‘‘) then

  if (init = ‘‘0‘‘) then

  count:= "1001";

  init:=‘‘1‘

  end if;

  count:=count+1;

  case count is

  when "0000"=>y<="1111110";

  when "0001"=>y<="0110000";

  when X"2"=>y<="1101101";

  when X"3"=>y<="1111001";

  when X"4"=>y<="0110011";

  when X"5"=>y<="1011011";

  when X"6"=>y<="1011111";

  when X"7"=>y<="1110000";

  when X"8"=>y<="1111111";

  when X"9"=>y<="1111011";

  when X"A"=>y<="1110111";

  when X"B"=>y<="0011111";

  when X"C"=>y<="1001110";

  when "1101"=>y<="0111101";

  when "1110"=>y<="1001111";

  when "1111"=>y<="1000111";

  when thers=>y<="XXXXXXX";

  end case;

  end if;

  end process;

  end behave;[!--empirenews.page--]

  在程序中,定义了变量count,希望初始值为“1010”。通过实验发现,在定义变量或信号时直接赋予初始值不能生效(如variable count:std_logic_vector(3 downto 0) :=“1010”),它的初始值仍然是系统默认值(如count为“0000”)。正是利用这一点,通过init(初始值为‘‘0‘‘)来给count赋初值 A即“1010”,具体方法见程序中斜体部分。这样,在第一个脉冲来时执行斜体部分if语句,而第二个脉冲来时由于init不为‘‘0‘‘而是 ‘‘1‘‘,因此不执行该部分语句,从而实现为count赋初值的功能,这样程序从A开始进行数字的循环显示。

  如果把count类型改为signal,则结果将大不一样。

  signal count: std_logic_vector(3 downto 0);

  process(clk)

  variable init :std_logic;

  begin

  if (clk‘‘event) and (clk=‘‘1‘‘) then

  if (init = ‘‘0‘‘) then

  count<= "1001"; --(1)

  init := ‘‘1‘

  end if;

  count<=count+1; --(2)

  由于信号的赋值不是立即发生的,在语句(1)后面还存在对信号count的赋值操作(2),因此,语句(1)在此不起作用,count的最后值是语句 (2)的值。因此如果将count设为signal的话,程序实现的是从0开始的16个十六进制数的循环。在这里,对信号赋初值的语句是不可行的。

  仿真结果

  将设计好的VHDL程序在Altera公司提供的软件maxplusⅡ10.1环境下进行编译仿真,得到的仿真结果如图1、图2所示,其中图1是 count为变量的结果,图2是count为信号的结果,其中输出y[6...0]分别与七段数码管的abcdefg七段相连。

  从图1可以看出,在第一个时钟脉冲上升沿,结果是“1110111”,数码管显示即为A,然后依次为b,C,d, E,F,0,1...9,A...循环下去,此处用小写的b和d,主要是与数字8进行区别。

  从图中可以看出,在第一个时钟脉冲上升沿,结果是“1111110”,数码管显示即为0,然后依次示1...9,A, b,C,d,E,F,0,...循环下去。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

奈飞(Netflix)今年早些时候从数据中看到了一个令人担忧的信号:用户访问该流媒体服务的频率下降了。该公司对其用户在四周时间里观看其内容的天数进行了跟踪,并担心访问频率的下降会增加用户取消订阅的可能性。在发现这一问题之...

关键字: 信号 流媒体 TI ST

根据最新预测,由于明年新冠疫苗的交付量几乎减半,有史以来最赚钱的一些医药产品制造商将面临收入下滑的局面。健康数据分析集团Airfinity表示,辉瑞(Pfizer)、BioNTech和莫德纳(Moderna)已开始提高疫...

关键字: 数据分析 TE RF NI

德国车企宝马集团(BMW)已证实,将于明年停止在英国生产电动版Mini,此举将使其牛津工厂在未来10年的大部分时间里完全依赖汽油车型。这家德国汽车制造商于2019年推出了具有历史意义的第一款Mini Cooper电池版,...

关键字: 宝马 电动 NI 本田

运放在没有输入的情况下,实际中仍会输出一个小电压。而这个小电压,会根据我们设置的放大倍数同等地被放大,同时,这个被放大的信号是有正、负之分的。

关键字: 运放 放大倍数 信号

即将与Farfetch合并的奢侈时尚电商平台Yoox Net-a-Porter日前宣布Alison Loehnis为临时首席执行官,任命自10月31日起生效。Alison Loehnis于2007年首次加入Net-a-P...

关键字: NET TE ISO NI

迪士尼(Walt Disney Co.)提高了其Genie+服务的价格,该服务让佛罗里达州华特迪士尼世界度假区(Walt Disney World Resort)和加州迪士尼乐园度假区(Disneyland Resort...

关键字: GEN NI FAST LAN

三星生物制剂公司(Samsung BioLogics)斥资2万亿韩元在韩国仁川市松岛园区建设的第四工厂10月11日举行竣工仪式。从10月开始部分投产的第四工厂生产能力为24万升,是世界最大规模的生物医药产品制造工厂。投产...

关键字: 三星 LOGIC SAMSUNG IO

雷诺公司(Renault)和日产汽车(Nissan Motor)周一表示,他们正在讨论加强合作关系的方法,其中包括日产汽车投资雷诺新电动汽车子公司的可能性。日产和雷诺周一表示,他们还在讨论跨市场、产品和技术的共同举措,并...

关键字: 雷诺 MOTOR 电动汽车 NI

皮尔法伯集团和Gennisium Pharma宣布了一项协议,皮尔法伯通过其专用投资子公司Pierre Fabre Invest收购Gennisium的少数股权。Gennisum的公司使命是通过实惠的价格和全球网络为新生...

关键字: GEN NI ARMA 网络

合同研究、开发和生产(CRDMO)公司药明生物宣布子公司无锡药明生物技术股份有限公司已于10月7日正式从美国商务部的"未核实清单"(UVL)中移除。今年2月,药明生物两家子公司 -- 无锡药明生物技术股份有限公司和上海药...

关键字: 生物技术 LOGIC SHANGHAI IO

嵌入式教程

6897 篇文章

关注

发布文章

编辑精选

技术子站

关闭