IT技术互动交流平台

VHDL语言中信号的不同形式设置

来源:IT165收集  发布日期:2011-10-14 10:54:04

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年出生,本科,研究方向为硬件描述语言设计,嵌入式系统开发。

延伸阅读:

Tag标签: VHDL语言  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规