当前位置:首页 > 工业控制 > 电子设计自动化

  1概述

  VHDL是一种快速的电路设计工具,功能涵盖 了电路描述、电路合成、电路仿真等三大电路设计工作。目前广泛使用的软件有Altera公司出品的MAX+PLUSII,Xinlinx公司的Foundation等。

  VHDL语言中有两种基本的语句命令:并行同 时语句命令以及顺序语句命令。两者之间最大的不同点是,并行同时语句命令就像是电路板的动作方 式,不论几个命令,是一次且同时执行,产生结果;顺序语句命令类似一般的程序语言,如BASIC等的执行方式,是一次一个命令,且依书写方式由上而下地执行。

  并行同时语句命令主要有以下几种表达方式: 直接设置语句(使用<=运算符)、条件式信号设置语句(When-Else)与选择式信号设置语句(With-Select-When)等;

  顺序语句命令主要有以下几种表达方式:Pro cess(过程)、If-Else(判断比较)、Wait Until(等待)、Case-Is-When(描述选择)等。

  熟练而灵活地使用上述两类命令,可以节省大 量的工作量,使程序简单直观、可读性增强而且有利于提高程序的编译执行效率。

  在数据通信过程中,同位器与同位检查器常用 于数据纠错。本文就以一个简单偶同位产生器(Even Parity Bit Generator)真值表功能的实现方法来探讨上述表达方式选择问题,以及编程 过程中的注意事项。

  2编程举例

  例:试设计VHDL程序完成如表1偶同位器的 真值表功能:

  分析:由真值表可以看出,所要实现的是一个由三个数据位、一个同位位组成的偶同位产生器功 能。不难得出各位之间的简单逻辑关系:P=S0S1S2 。但是本文的主要目的在于通过此例阐述如何灵活运用不同的基本表达式设置信号,因此 某些可能更加简单的方法以及比较高级一点语句本文不予详细讨论。

  解:(注:VHDL语言中使用“--”作为注释符号)

  library ieee; ①

  use ieee.std_logic_1164.all;

  use ieee.std_logic_arith.all;

  use ieee.std_logic_unsigned.

  all;

  ENTITY hf is --假设建立的芯片电路名称以及保存后的文件名为“hf”;

  Port(

  s: in std_logic_vector(2 downto 0);

  z: out std_logic  --最后一个管脚定义命令后面,不可加分号;

  );

  end hf; --应该保证电路单元名称与存盘的文件名一致,否则编译时 出错;

  ARCHITECTURE a OF hf IS

  Begin --以上是本例题解答过程中的公共部分,其后分别接各解法语句。

  --******************************

  --解法1:使用“hen -Else”表达方式②

  z<=‘0’when (s="000") else --此语句只能将s的各个值分开写,而不能写成如下形式:

  0’ when (s="011") else -- z<=‘0’

  when (s="000" or s="011" or s="110" or s="111")

  0’ when (s="110") else -- else ‘1’;

  ‘0’ when (s="111") else

  ‘1’ when (s="001") else

  ‘1’ when (s="001") else

  ‘1’ when (s="001") else

  ‘1’;

  End a;

  --解法2:使用揥ith -Select -When表达方式:

  With s Select

  z<=‘0’ when "000", --注意:除了最后一句的语句结束标志是分号外,其余各句均是逗号;

  ‘0’ when "011",

  ‘0’ when "110",

  ‘0’ when "111", -- when后选择信号的值也只能分别列出,不可写成组合条件形式。

  ‘1’ when others;

  End a;

  --解法3:使用“If-Else”表达方式:

  Process--If-Else语句必须要与process配合使用;

  Begin --Process中此句必不可少,否则编译时出错;

  if s="000" or s="011" or s="110" or s="111" then --If后若为组合条件可用括号也可不用;

  z<=‘0’;

  else

  z<=‘1’;

  end if;

  end process;

  End a;

  --解法4:使用“Case-Is-When”表达方式:

  Process --“Case-Is-When”也只能与“Process”配合使用;

  Begin

  case s is

  when "000"|"011"|"110"|"111" =>

  --此处不能将“|”改成“or”但可以像解法1或解法1或解法2那样将不同信号值分开写;

  when others=> --When句末尾是“=>”而不是逗号或者分号。

  z<=‘1’;

  end case;

  end process;

  End a;

  备注:

  (1) VHDL语言对所有字母的大小写状态不敏感,关键在于语句要正确规范。

  (2) 在VHDL语言中,所使用的标点符号均是英文标点符号。凡是设置单个的信号值均需使用 单引号,而设置序列信号值必须使用双引号。

  (3) 请参看相关资料。

  3讨论

  3.1本例能否使用“Wait Until”表达方式

  很遗憾,类似此例的情况不能使用这个语 句。起码笔者经过多次尝试之后均没有通过编译检查。但是在使用此语句时应该注意以下事项:

  (1) Wait Until 后面紧接的语句中不能出现序列信号的值,例如不能写成如下形式:

  Wait Until s="000" 也不能写成组合条件形式(无论是否使用括号):

  Wait Until s="000" or s="011" or s="110" or s="111"

  (2) 使用此表达方式编写程序代码时,不能设定输出引脚的初始值(通过第三方信号传递也不 行,但是在进行仿真时可以设定初始输出值),不能写成如下形式:

  ……

  s: in std_logic;

  ……

  Architecture a of hf is

  Begin

  z<=0; --就算z的初、终值通过两个常量信号(如c=‘0’,d=‘1 ’)传递

  Process --也不行,因为z不能规定两个状态。否则编译时出错;

  Begin

  wait until s=‘0’; --此处也不可以写成序列信号形式,更不能使用逻辑运算符将其

  z<=1; --写成组合条件形式。Wait Until语句不支持组合条件。

  End process;

  END a;

  3.2更简单的实现方法

  顺序语句除了前文所叙的几种基本表达方式以 外,还有一种循环语句:For-Loop;而并行同时语句也还有方块语句(Block)、组件定义(Component)与组件映像(Port Map)等多个模块化语法。而使用“For-Loop”编写此类有重复动作需求的代码无疑是最简单直观的:

  ……

  Architecture a OF hf IS

  Begin

  Process(s)

  Variable Tmp: Std_Logic;

  Begin

  Tmp:=‘0’;

  For I In 0 to 2 Loop

  Tmp:=Tmp XOR s(I);

  End Loop;

  Z<=s & Tmp;

  End Process;

  End a;

  其他更加简单的方法,限于篇幅与本文主 旨,在此就不予深究了。

  4结束语

  从以上不同解法可以看出,各种基本的表达

  方式均有各自的特点:采用“When -Else”表达式(解法1)与“When -Else-When”表达式(解法2)编写编写代码的优点是直观,但是代码很多,欲实现复 杂的功能时工作量将会很大;采用“IF-Else”表达式(解法4)编写代码的优点是直观与简单并举,尤其是允许使用由逻辑运算符(And、Or等等)写成的组合条件更是精简了不少代码。

  另外,在编写VHDL程序的过程中,不同的 表达式中,表示语句结束的符号是不同的,这一点在 我们学习和使用VHDL的过程中值得特别留意。

  参考文献

  [1]卢毅、赖杰.VHDL与数字电路设计.北京:科学出版社,2001-04

  [2]李广军、孟宪元.可编程ASIC设计及应用.成都:电子科技大学出版社.2000-10

  [3]徐志军等.大规模可编程逻辑器件及其应用.成都:电子科技大学出版社.2000-11

  [4]何锋 男,1979年出生,本科,研究方向为硬件描述语言设计,嵌入式系统开发。



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

传感器是能感受规定的被测量并按照一定的规律转换成可用输出信号的器件或装置。传感器有许多种,在先进测量技术这门课中提到了许多传感器,在现代工业生产尤其是自动化生产过程中,要用各种传感器来监视和控制生产过程中的各个参数,使设...

关键字: 传感器 信号

高功率脉冲发射机作为一种能够产生高能量、短脉冲信号的设备,在众多领域发挥着关键作用。在雷达系统中,它为目标探测提供强大的发射功率,使得雷达能够在远距离精确识别和跟踪目标;在通信领域,可用于实现高速率、大容量的数据传输;在...

关键字: 高功率 脉冲发射机 信号

在当今数字化、智能化的时代,电子设备无处不在,从智能手机、智能家居到工业控制系统,它们在提升生活品质与生产效率的同时,也面临着高频干扰与兼容性问题的挑战。高频干扰会导致设备信号传输不稳定、数据丢失,甚至系统崩溃;兼容性问...

关键字: 高频干扰 兼容性 信号

在当今电子技术飞速发展的时代,随着电子产品不断向小型化、高性能化迈进,印刷电路板(PCB)的设计变得愈发复杂和精密。过孔,作为 PCB 中连接不同层线路的关键元件,其对信号完整性的影响已成为电路设计中不可忽视的重要因素。...

关键字: 印刷电路板 电路设计 信号

在当今高速发展的电子系统领域,信号完整性已然成为确保系统性能与可靠性的关键要素。从驱动到连接器的信号传输路径宛如一条信息高速公路,而接收端则如同这条公路的终点收费站,其设置的合理性直接关乎信号能否准确无误地抵达目的地。若...

关键字: 信号 连接器 驱动

在电子系统设计与信号传输过程中,工程师们常常会遇到信号波形不理想的情况。其中,信号波形下降沿出现上冲现象是较为常见的问题之一。这种异常不仅会干扰信号的正常传输,影响系统的性能和稳定性,甚至可能导致系统出现误判等严重后果。...

关键字: 信号 干扰 电子系统

在印刷电路板(PCB)设计中,过孔作为连接不同层线路的重要元件,其对信号完整性的影响不容忽视。随着电子技术的飞速发展,电路的工作频率不断提高,信号上升沿时间越来越短,这使得过孔对信号的影响愈发显著。在许多情况下,我们必须...

关键字: 印刷电路板 过孔 信号

在电子电路设计中,24 位 RGB TTL 信号的布线是一个关键环节,其布线质量直接影响到系统的性能和稳定性。特别是在涉及显示设备等对信号完整性要求较高的应用场景中,遵循正确的布线要求至关重要。下面将从多个方面详细阐述...

关键字: 信号 布线 显示设备

在现代高速电子系统中,信号完整性(Signal Integrity, SI)已成为确保系统可靠运行的关键因素。信号完整性是指信号在传输路径上保持其原始特性的能力,当信号从驱动端出发,经过传输线到达连接器,最终被接收端接收...

关键字: 信号 传输路径 质量

在当今电子设备高度集成化与智能化的时代,电磁干扰(EMI)已成为影响设备性能与可靠性的关键因素。随着电子设备数量的激增以及工作频率的不断提升,不同设备间的电磁信号相互干扰问题日益凸显,这不仅可能导致设备功能异常,还可能影...

关键字: 电磁干扰 信号 扩频
关闭