首页 » 技术文章 » VHDL设计中信号与变量问题的研究

VHDL设计中信号与变量问题的研究

作者:冯艳娜  时间:2010-04-20 08:59  来源:EDN

  概述

  随着集成电路技术的发展,用传统的方法进行芯片或系统设计已不能满足要求,迫切需要提高设计效率,因此能大大降低设计难度的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;

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

相关推荐

单片机多机冗余设计及控制模块的VHDL语言描述

单片机  VHDL  2011-05-19

嵌入式单总线控制器设计

DS1820  VHDL  总线控制器  2011-01-11

济南概伦电子盛大开业 助力中国集成电路产业

2010-09-08

2010B版MATLAB和SIMULINK产品系列发布

MATHWORKS  仿真  SIMULINK  2010-09-07

SDH中E1接口数字分接复用器VHDL设计及FPGA实现

SDH  E1  VHDL  FPGA  2010-09-01

快速响应V/I变换电路的实现

电流驱动  PSPICE  仿真  2010-08-31
在线研讨会
焦点