VHDL语言中信号设置的不同方式及注意事项
时间:06-23
来源:互联网
点击:
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的过程中值得特别留意。
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的过程中值得特别留意。
- 基于FPGA的片上系统的无线保密通信终端(02-16)
- 采用EEPROM对大容量FPGA芯片数据实现串行加载(03-18)
- 初学者如何学习FPGA(08-06)
- 为何、如何学习FPGA(05-23)
- 学习FPGA绝佳网站推荐!!!(05-23)
- 我的FPGA学习历程(05-23)