VHDL语言中信号设置的不同方式及注意事项

出处:dark111 发布于:2007-05-25 10:49:25

摘要:通过一个偶同位产生器逻辑功能的实现过程,介绍了VHDL语言中信号设置的不同方 式及注意事项,并给出了完整的程序代码。

关键词:VHDL;程序

中图分类号:TP312 文献标识码:A 文章编号:1003-353X(2002)03-0045-03
Different expression andsome advertences of VHDL for signals setting
He Feng
(The 34th Electronic Research Institute,Ministry of Information Industry,Guilin 541004,China)

Abstract: This paper introduces how to use different expression of VHDL to set signals based on the Even Parity Bit Generator design, and the advertences and the whole programs are given.

Key words: VHDL;Program
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偶同位器的 真值表功能:
输入
输出
S2
S1
S0
Z
0
0
0
0
0
0
1
1
0
1
0
1
0
1
1
0
1
0
1
1
1
0
1
1
1
1
0
0
1
1
1
0
分析:由真值表可以看出,所要实现的是一个由三个数据位、一个同位位组成的偶同位产生器功 能。不难得出各位之间的简单逻辑关系: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
何锋 男,1979年出生,本科,研究方向为硬件描述语言设计,嵌入式系统开发。

  
关键词:信号

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!