当前位置:首页 > 工业控制 > 电子设计自动化
[导读]摘要:通过一个偶同位产生器逻辑功能的实现过程,介绍了VHDL语言中信号设置的不同方 式及注意事项,并给出了完整的程序代码。关键词:VHDL;程序中图分类号:TP312 文献标识码:A 文章编号:1003-353X(2002)03-0045-

摘要:通过一个偶同位产生器逻辑功能的实现过程,介绍了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;Program1概述 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偶同位器的 真值表功能:

输入输出S2S1S0Z00000011010101101011101111001110分析:由真值表可以看出,所要实现的是一个由三个数据位、一个同位位组成的偶同位产生器功 能。不难得出各位之间的简单逻辑关系: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 ISBegin --以上是本例题解答过程中的公共部分,其后分别接各解法语句。--******************************

--解法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 Selectz<=‘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”配合使用;Begincase s iswhen "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 isBeginz<=0; --就算z的初、终值通过两个常量信号(如c=‘0’,d=‘1 ’)传递Process --也不行,因为z不能规定两个状态。否则编译时出错;Beginwait 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年出生,本科,研究方向为硬件描述语言设计,嵌入式系统开发。



来源:零八我的爱0次

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

VGA接口主要用于将计算机的数字图像信号转换成模拟信号,从而可以在显示器上显示。这种接口通常包含15个针脚,分成3排,每排5个孔,可以传输红、绿、蓝三种基本颜色的信号以及水平和垂直同步信号。

关键字: vga接口 信号 电压

上海2023年9月4日 /美通社/ -- 2023年8月8日,成都大运会正式落幕。来自113个国家和地区的6500名大学生运动员,在12个比赛日里同台竞技,展现青春与体育的力量。与此同时,在大运会的各个赛场、运动员村以及...

关键字: 信号 TV PS CE

瓦努阿图维拉港2023年8月28日 /美通社/ -- Vantage(或"Vantage Markets")欣然宣布在Vantage应用程序上推...

关键字: GE AN 信号 应用程序

(全球TMT2023年7月19日讯)三星电子宣布已完成其业内首款GDDR7的研发工作,年内将首先搭载于主要客户的下一代系统上验证。继2022年三星开发出速度为每秒24千兆比特(Gbps)的GDDR6 16Gb之后,GD...

关键字: DDR 三星电子 信号 GBPS

频谱分析仪是用于分析信号频谱结构的设备,可以用于测量信号的频率、幅度、功率、谱线宽度等参数,是现代电子测量和通信领域中不可或缺的工具。

关键字: 频谱分析仪 信号

频谱分析仪是用于分析信号的频率成分和功率的电子设备。分辨率是频谱分析仪的一个重要指标,它决定了频谱分析仪能够分辨的信号细节和频谱特征。在频谱分析仪的使用过程中,分辨率受到多种因素的影响,这些因素包括信号频率、信号强度、分...

关键字: 频谱分析仪 信号 分辨率

频谱分析仪是用于测量信号频率、幅度和功率谱等特性的重要工具,广泛应用于电子工程、通信、生物医学等领域。本文将介绍频谱分析仪的基本原理、使用方法和技巧,帮助读者更好地理解和使用频谱分析仪。

关键字: 频谱分析仪 信号

频谱分析仪是一种用于分析信号频率成分的重要仪器,能够在复杂信号中识别出各个频率成分,以及它们在不同时间段的强度和带宽。在科学研究、工业生产、通信网络、电子对抗等领域,频谱分析仪发挥着重要作用。

关键字: 频谱分析仪 信号

脉冲变压器是一种用于将电源信号转换为所需电压和电流的特殊变压器。它通常被用于直流电源或高频交流电源中,可用于稳压、反接保护、防过载等应用。当我们需要选型脉冲变压器时,需考虑以下几个方面:输出电压、最大输出电流、工作频率、...

关键字: 脉冲变压器 信号 电源

集成运算放大器是一种常见的电子元器件,它广泛应用于模拟电路、信号处理、控制系统等领域。集成运算放大器主要的功能是放大电压信号。它可以将微弱的输入信号放大成为符合实际需要的信号大小,同时也可以对信号进行滤波、积分、微分等操...

关键字: 运算放大器 电路 信号
关闭
关闭