论文部分内容阅读
摘要 结合多轮的课程教学实践,主要介绍VHDL语言中变量和信号的区别以及IF语句使用时应注意的问题,提出的方法对VHDL语言教学以及VHDL设计都具有一定的指导意义。
关键词 VHDL;信号;变量;IF
中图分类号:G434 文献标识码:A 文章编号:1671-489X(2008)20-0039-03
1 引言
VHDL语言是一种用于电路设计的高级语言,它的英文全写是VHSIC(Very High Speed Integrated Circuit) Hardware Description Language,即超高速集成电路硬件描述语言。VHDL语言最初是由美国国防部开发出来,供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言,后来成为IEEE工业标准的硬件描述语言。它具有很强的行为描述能力,与原理图输入方式相比较,用语言的方式描述硬件电路更容易修改和保存。因此,目前VHDL在电路设计中得到广泛应用。我国高等学校电子信息类专业把VHDL语言列为主干课程,作为电子专业学生必须掌握的专业知识。笔者在教学过程中常发现大部分学生无法分清变量与信号的区别以及IF语句常误用等问题,通常虽然程序编译可以通过,但结果却和预期相差甚远,且学生很难发现其中的错误[1]。本文主要介绍VHDL语言的信号与变量和IF语句应用的教学经验。
2 变量与信号的区别
信号和变量是VHDL语言中的数据对象,是存放数据的容器[2]。两者的区别:1)声明的形式和位置不同。信号声明为signal,常在结构体中声明;变量声明为variable,常在进程中声明。2)赋值符号不同。信号赋值为“<=”;变量赋值为“∶=”。3)赋值生效的时间不同。信号赋值是进程结束时生效;变量赋值是立即生效。4)使用范围不同。信号是一个全局量,使用范围是实体、结构体和程序包;变量是一个局部量,常在进程语句、函数语句和过程结构中使用。下面以一个异或程序为例,说明信号和变量的区别以及对系统设计的影响。
程序一:
library ieee;
use ieee.std_logic_1164.all;
entity xor_sig is
port(a, b,c:in std_logic;
x,y:out std_logic);
end xor_sig;
architecture behav of xor_sig is
signal d:std_logic; ①
begin
process(a,b,c)
(*)
begin
d<=a;②
x<=c xor d; ③
d<=b;④
y<=c xor d; ⑤
end process;
end behav;
程序一中d定义为信号,使用MAX PLUS II软件对程序进行编译和仿真,编译可以通过,没有语法错误,但出现两个警告:1)Found multiple assignments to the same signal-only the last assignment will take effect;2)Ignored unnecessary input signal pin ‘a’。警告内容是程序对信号d多次赋值,但只有最近的一次会生效,忽略输入信号a的赋值。仿真结果如图1所示。图1中输入信号是b和c,输出信号是x和y。b和c异或的结果给x和y,即x=y=/bc /cb=b c,程序中②没有起作用,信号d的值是b。
图中输入信号是c,b,a;输出信号是x和y,x=/ac /ca=a c,y=/bc /cb=b c,即a和c异或的结果给x,b和c异或的结果给y。
通过程序里把信号修改为变量,学生可以直观看出信号与变量声明位置和赋值符号的不同;对比两个程序x和y的运行结果,学生可以理解信号和变量的赋值生效时间不同。
3 慎用IF语句
IF语句作为一种条件判断语句,在VHDL程序设计中有着广泛的应用。IF语句有3种结构,一种是门闩控制,语句形式为:
IF 条件 THEN
顺序执行语句
END IF;
另一种是选择控制,语句有两种形式。形式一:
IF 条件 THEN
顺序执行语句
ELSE
顺序执行语
END IF;
形式二:
IF 条件 THEN
顺序执行语句
:
ELSIF 条件 THEN
顺序执行语句
ELSE
顺序执行语句
END IF;
在用IF语句设计程序时,要注意2个问题:1)在多个条件判断选择时用选择控制中的形式二语句,条件的判断有优先,写在前面的优先判断;2)在设计组合逻辑电路时,尽量不引入不必要的寄存器,则应选择带有ELSE结构的语句。
程序二:
library ieee;
use ieee.std_logic_1164.all;
entity and22 is
port(a, b:in std_logic;
q:out std_logic);
end and22;
architecture behav of and22 is
begin
process(a ,b)
begin
if(a=’1’ and b=’1’) then
q<=’1’;
else ①
q<=’0’; ②
end if;
end process;
end behav;
程序二是用VHDL语言实现一个二输入的与非门,使用MAX PLUSⅡ软件编译和仿真,仿真结果如图3所示。a,b是输入信号,q是输出信号,当a和b同时为1(高电平)时,q输出1,即高电平;a和b为其他值时,q为0。
4 总结
通过对信号与变量以及IF语句的讲解,配合实例的分析,使得学生对信号与变量以及IF语句有了更清楚的认识,减少了不必要的错误。通过多年VHDL的教学,笔者深深地体会到:
1)VHDL语言是一种硬件描述语言,不能简单地认为是一种高级语言,进行程序设计时要与硬件对应,要考虑程序综合后电路的形式。
2)教师不仅要精通理论知识,还要有丰富的程序设计经验,能够熟练地指导实验。对学生提出的任何问题要能够结合课堂知识和编程经验加以解决。
3)任课教师要不断学习,不断实践,不断总结,将最新的技术成果引入教学实践中,及时更新教学内容,使学生能够掌握最新知识和技术。
参考文献
[1]杨丹,张树林.VHDL中信号与变量的教学体会[J].电气电子教学学报,2006(6):30-33
[2]黄正谨,徐坚,等.CPLD系统设计入门与应用[M].北京:电子工业出版社,2002
[3]戴慧.VHDL设计技巧探讨[J].正德学院学报,2006(4)
关键词 VHDL;信号;变量;IF
中图分类号:G434 文献标识码:A 文章编号:1671-489X(2008)20-0039-03
1 引言
VHDL语言是一种用于电路设计的高级语言,它的英文全写是VHSIC(Very High Speed Integrated Circuit) Hardware Description Language,即超高速集成电路硬件描述语言。VHDL语言最初是由美国国防部开发出来,供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言,后来成为IEEE工业标准的硬件描述语言。它具有很强的行为描述能力,与原理图输入方式相比较,用语言的方式描述硬件电路更容易修改和保存。因此,目前VHDL在电路设计中得到广泛应用。我国高等学校电子信息类专业把VHDL语言列为主干课程,作为电子专业学生必须掌握的专业知识。笔者在教学过程中常发现大部分学生无法分清变量与信号的区别以及IF语句常误用等问题,通常虽然程序编译可以通过,但结果却和预期相差甚远,且学生很难发现其中的错误[1]。本文主要介绍VHDL语言的信号与变量和IF语句应用的教学经验。
2 变量与信号的区别
信号和变量是VHDL语言中的数据对象,是存放数据的容器[2]。两者的区别:1)声明的形式和位置不同。信号声明为signal,常在结构体中声明;变量声明为variable,常在进程中声明。2)赋值符号不同。信号赋值为“<=”;变量赋值为“∶=”。3)赋值生效的时间不同。信号赋值是进程结束时生效;变量赋值是立即生效。4)使用范围不同。信号是一个全局量,使用范围是实体、结构体和程序包;变量是一个局部量,常在进程语句、函数语句和过程结构中使用。下面以一个异或程序为例,说明信号和变量的区别以及对系统设计的影响。
程序一:
library ieee;
use ieee.std_logic_1164.all;
entity xor_sig is
port(a, b,c:in std_logic;
x,y:out std_logic);
end xor_sig;
architecture behav of xor_sig is
signal d:std_logic; ①
begin
process(a,b,c)
(*)
begin
d<=a;②
x<=c xor d; ③
d<=b;④
y<=c xor d; ⑤
end process;
end behav;
程序一中d定义为信号,使用MAX PLUS II软件对程序进行编译和仿真,编译可以通过,没有语法错误,但出现两个警告:1)Found multiple assignments to the same signal-only the last assignment will take effect;2)Ignored unnecessary input signal pin ‘a’。警告内容是程序对信号d多次赋值,但只有最近的一次会生效,忽略输入信号a的赋值。仿真结果如图1所示。图1中输入信号是b和c,输出信号是x和y。b和c异或的结果给x和y,即x=y=/bc /cb=b c,程序中②没有起作用,信号d的值是b。
图中输入信号是c,b,a;输出信号是x和y,x=/ac /ca=a c,y=/bc /cb=b c,即a和c异或的结果给x,b和c异或的结果给y。
通过程序里把信号修改为变量,学生可以直观看出信号与变量声明位置和赋值符号的不同;对比两个程序x和y的运行结果,学生可以理解信号和变量的赋值生效时间不同。
3 慎用IF语句
IF语句作为一种条件判断语句,在VHDL程序设计中有着广泛的应用。IF语句有3种结构,一种是门闩控制,语句形式为:
IF 条件 THEN
顺序执行语句
END IF;
另一种是选择控制,语句有两种形式。形式一:
IF 条件 THEN
顺序执行语句
ELSE
顺序执行语
END IF;
形式二:
IF 条件 THEN
顺序执行语句
:
ELSIF 条件 THEN
顺序执行语句
ELSE
顺序执行语句
END IF;
在用IF语句设计程序时,要注意2个问题:1)在多个条件判断选择时用选择控制中的形式二语句,条件的判断有优先,写在前面的优先判断;2)在设计组合逻辑电路时,尽量不引入不必要的寄存器,则应选择带有ELSE结构的语句。
程序二:
library ieee;
use ieee.std_logic_1164.all;
entity and22 is
port(a, b:in std_logic;
q:out std_logic);
end and22;
architecture behav of and22 is
begin
process(a ,b)
begin
if(a=’1’ and b=’1’) then
q<=’1’;
else ①
q<=’0’; ②
end if;
end process;
end behav;
程序二是用VHDL语言实现一个二输入的与非门,使用MAX PLUSⅡ软件编译和仿真,仿真结果如图3所示。a,b是输入信号,q是输出信号,当a和b同时为1(高电平)时,q输出1,即高电平;a和b为其他值时,q为0。
4 总结
通过对信号与变量以及IF语句的讲解,配合实例的分析,使得学生对信号与变量以及IF语句有了更清楚的认识,减少了不必要的错误。通过多年VHDL的教学,笔者深深地体会到:
1)VHDL语言是一种硬件描述语言,不能简单地认为是一种高级语言,进行程序设计时要与硬件对应,要考虑程序综合后电路的形式。
2)教师不仅要精通理论知识,还要有丰富的程序设计经验,能够熟练地指导实验。对学生提出的任何问题要能够结合课堂知识和编程经验加以解决。
3)任课教师要不断学习,不断实践,不断总结,将最新的技术成果引入教学实践中,及时更新教学内容,使学生能够掌握最新知识和技术。
参考文献
[1]杨丹,张树林.VHDL中信号与变量的教学体会[J].电气电子教学学报,2006(6):30-33
[2]黄正谨,徐坚,等.CPLD系统设计入门与应用[M].北京:电子工业出版社,2002
[3]戴慧.VHDL设计技巧探讨[J].正德学院学报,2006(4)