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

发布者:breakthrough3最新更新时间:2010-04-14 来源: EDN关键字:VHDL  设计  变量  初始值 手机看文章 扫描二维码
随时随地手机看文章

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

  概述

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

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

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

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

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

  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;[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,...循环下去。

关键字:VHDL  设计  变量  初始值 引用地址:VHDL设计中信号与变量问题的研究

上一篇:基于DSP与FPGA的跟踪伺服运动控制器设计
下一篇:Simulink软件平台仿真LUTs技术实现NCOs

推荐阅读最新更新时间:2024-05-02 21:02

教学楼配电设计浅析
近年来,国家对教育的投入加大,各地教学楼的建设也随之增加。根据近几年对多栋教学楼的设计经验,笔者对教学楼的配电设计加以浅析,希望对初次接触教学楼电气设计的人员能够有所帮助。 一、供配电系统 一般的教学楼建筑面积在3000㎡~10000㎡,建筑总高度不超过24米。根据《建筑设计防火规范》GB50016-2006中第11.1.1条,根据室外消防水量的大小决定消防负荷的等级。教学楼通常采用低压供电,电源取自校区内的箱式变,进线电源为~380、220V,50HZ。一般在教学楼的一层设置低压配电室,在配电室进线配电柜内动力照明分别计量(二次计量)。照明配电回路一般每层按分区设分配电箱,每区从下至上为一个回路。照明、插座、微机室、无
[电源管理]
AR1688系列VOIP话机的无线升级方案设计
 引言   VOIP(Voice Over IP,通过IP数据包发送实现的语音业务),是一种利用Internet作为传输载体来实现计算机与计算机、普通电话与普通电话、计算机与普通电话之间进行话音通信的技术。VOIP话音通信技术发展很快,很多新技术不断涌现。过去我们津津乐道的H323协议,现在已经很陈旧了,而由H323变换出来的 MGCP又是站在传统电信角度来解决问题,所以产品升级换代是跟踪VOIP发展的唯一思路。AR1688系列VOIP话机就是在低成本解决方案的基础上发展起来的,它在集成度和性能上都比PA1688系列有了很大的提高。   随着3G和WIFI网络的快速普及和发展,无线VOIP的应用也越来越受到关注,VOIP话音通
[工业控制]
AR1688系列VOIP话机的无线升级方案<font color='red'>设计</font>
汽车线束端子压接设计规范
电线和端子有焊接和压接两种方法。端子压接工艺因为加工工艺简单,设备费用低,加工工时短等优点,在过去的几年中被广泛使用,近几年因为铝导体和大截面端子的使用,端子的焊接工艺也逐渐应用增多。 端子压接定义:压接是通过施加一-定的机械外力,使两种材料(导体与端子上的导体压接片,绝缘体与湍子上的绝缘_体压接片)紧密的结合,从而达到电性导通牢固结合的目的。
[嵌入式]
汽车线束端子压接<font color='red'>设计</font>规范
基于Proteus的数字电压表仿真设计
    随着现代电子设计手段的迅速发展,EDA仿真技术也越来越多地应用于实际电路设计中。EDA技术通过先建立电路模型,然后将计算机仿真结果应用于实际电路设计中,这样既降低了成本,又缩短了研制周期。     Proteus是由英国Labcenter公司开发的一个嵌入式系统仿真与开发平台,是目前世界上最流行的EDA仿真软件之一。它具有模拟电路和数字电路仿真功能,支持主流单片机及其外围电路所组成系统的仿真;可以提供软件调试功能,支持与Keil、MPLAB等单片机开发环境的连接调试,并具有强大的原理图绘图等功能。     为了提高电压表的性价比和测量精度,本文以AT89C51单片机为控制核心,利用Proteus仿真技术实现了一种数字电压表的
[单片机]
基于Proteus的数字电压表仿真<font color='red'>设计</font>
正确的选择放大器来设计扬声器的方法
  随着时间的推移,便携式设备音频放大电路的使用模型已经得到了长足的发展。例如:在蜂窝电话的主要功能还是简单地从靠近耳朵的扬声器再现语音时,听筒仅需非常小的功率。另外,像总谐波失真(THD)、噪声和信噪比(SNR)等音频质量也很少需要考虑。   语音一般由高峰值因数、低占空比的信号组成,因此,语音需要很低的平均功率,而在效率方面则无需多加考虑。由于射频和显示功能在蜂窝电话的总功耗中占主要部分,因此大多数效率问题都涉及非音频电子元器件。   但最近,蜂窝电话和其它便携式电子产品都集成了听筒、耳机扬声器和近场扬声器(用于免提操作)。另外,再现音乐(MP3文件)和电影声道也给音频通道带来了沉重的负担。结果,音频通道的功耗不再是枝节问题,
[嵌入式]
基于μC/OS-II的数字化UPS设计与实现
1 引言 随着信息技术的发展,不间断应急电源(UPS)向着数字化、智能化、网络化、大容量多机冗余化和绿色化的方向发展。高性能专用DSP芯片为UPS的数字化提供了良好的硬件基础,而嵌入式实时软件操作系统是数字化产品的核心。 针对数字化UPS,本文给出了一种基于实时多任务操作系统μC/OS-II 的系统控制设计。设计采用μC/OS-II为内核,实现其在TMS320LF2407A上的移植,通过对UPS控制系统结构与功能的分析,各部分控制功能划分为不同优先级的任务来调度实现,给出了部分参数设定和主程序清单。实践证明,基于μC/OS-II 的数字化UPS 系统提高了控制系统的实时性以及系统运行的可靠性及稳定性。 2 数字化UPS控制系统
[单片机]
基于μC/OS-II的数字化UPS<font color='red'>设计</font>与实现
基于LM317和AT89C51的数字显示可调稳压电源设计
  1引言   直流稳压电源是能够保证在电网电压波动或负载发生变化时,输出稳定的电压的常用的电子设备。它广泛应用于仪器仪表、工业控制及测量领域中。故设计、制造一个低纹波、高精度的直流稳压电源在电源技术中占有十分重要的地位。   2设计要求   本文设计的稳压电源的要求具有输出电流大、输出电阻小、稳压系数低的特点,并将模拟电压转换为数字信号,通过LED直观的显示出来,使整个电源更加人性化。设计的具体参数要求为:输出电压在1.5伏至30伏连续可调,最大输出电流可至1.5安,稳压系数小于0.01,输出电阻小于0.1欧,显示精度达到0.2级标准。   3系统硬件设计   3.1总体设计   本设计包含主电源和辅助电源模块的设计、电
[单片机]
基于LM317和AT89C51的数字显示可调稳压电源<font color='red'>设计</font>
研华推出新款SKY-602E3 GPU服务器,紧凑的塔式设计提供更多AI可能
全球工业物联网品牌厂商研华科技近期推出了SKY-602E3 塔式机身GPU服务器 。此款产品外形设计将力量、高效、紧凑融合在一起,标志着研华在AI应用领域的一大进步,给使用者提供更多AI应用场景。 SKY-602E3 GPU服务器搭载AMD EPYC™8004系列处理器,专为满足各种AI应用的严格要求而设计。 拥有由6个DDR5 ECC/RDIMM插槽组成的内存排列,为复杂数据任务提供稳定可靠的性能。 SKY-602E3 GPU服务器具有四个PCIe 5.0 x16插槽,在AI应用程序的图形处理方面表现出色,同时它还支持四个PCIe 5.0 x8插槽用于扩展在网络和DPU安装。该服务器支持NVIDIA多系列GPU卡:用于高
[工业控制]
研华推出新款SKY-602E3 GPU服务器,紧凑的塔式<font color='red'>设计</font>提供更多AI可能
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved