首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
VHDL设计中信号与变量问题的研究
来源:本站整理  作者:佚名  2010-04-19 17:06:55



  在程序中,定义了变量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,...循环下去。

上一页  [1] [2] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:13,687.50000 毫秒