vhdl语言十篇-尊龙凯时最新

时间:2023-04-05 09:52:02 尊龙凯时最新地址的版权声明

vhdl语言

vhdl语言篇1

【关键词】数字电路;传统方式;vhdl

1.引言

随着计算机以及大规模集成电路应用的普及,电子行业正在迅速的发展。目前采用小中规模的数字电路逻辑设计已经不能满足数字电子技术发展的需要。例如传统的ttl电路或者coms电路设计任务繁琐,设计效率低,所以迫切的需要我们做出调整,适应社会对数字电子技术发展的要求。伴随着集成电子工艺的发展,新型的逻辑器件也应运而生,到目前为止,市场上的逻辑器件大致可分为三类:第一是标准的逻辑芯片如coms/ttl等系列芯片;第二是微型计算机芯片和各种微处理器;第三种就是应用规格芯片asic,其中asic芯片中就有我们接下来介绍的可编程逻辑器件(pld)[1]。而使用可编程逻辑芯片就必须要求我们掌握编写vhdl语言的技术。这种设计数字电路实验的方法大大克服了传统数字电路设计出现的缺点,更加适应现在社会的发展。

2.传统数字电路设计优缺点

传统的数字电路设计过程大致经过以下几个步骤:一是分析问题画出状态转换图以及状态转换表,二是进行状态化简,三是状态编码,四是写出输入方程、驱动方程以及输出方程,五是画出逻辑电路图,经过这一系列步骤之后,还要在电路板上焊接电路,或者在面包板上拼接电路。传统的设计方法是数字电路设计的基础,它的优点是能够反映了数字电路的基本工作原理,系统内部构成的各个细节也能够很直观的反映出来,各部分之间的联系显而易见。因此,通过对设计的原理图的观察我们可以验证系统的合理性,同时也奠定了数字电路设计的基础。它的缺点是设计步骤复杂,在整个过程中需要用到大量的芯片和连线。而且传统的方法出错率高而且不易修复,在焊接电路板的时候如果不注意就会导致接触不良或者出现某个芯片损坏的情况,这就导致整个电路板都不起作用。

3.pld器件芯片的出现

pld又称可编程逻辑器件,pld芯片上的金属引线和电路都是厂家做好的,但是器件的逻辑功能在出厂时是没有确定的,用户可以根据自己的需要合理的编程设计确定想要的功能。而编程用到的语言就是我们接下来要介绍的vhdl语言。目前pld器件芯片具有微处理器灵活等优点,芯片的引脚也从一开始的20多个引脚发展到现在的200引脚[2]。可编程逻辑器件的出现从很大程度上使得数字电路设计发生了根本性变革。采用pld设计电路不再是对电路板设计,而是对芯片设计,使之实现我们预想的功能。一般的pld的集成度很高,可以满足一般的数字系统的需要。设计人员只需要自己编程到一块pld上,而不用去供应商那儿买特定功能的芯片。我们可以对芯片内部的逻辑和外部的引脚进行设计。这样就克服了传统方式中对电路板进行焊接所花费的大量时间,克服了工作量大,难以调试等缺点,用户只需要编写适当合理的程序就可以实现预想的功能。如此大大简化了设计步骤,更加适应社会发展的需要。

4.vhdl简介

vhdl语言是一种应用于描述数字系统的功能、结构和接口的语言。vhdl含有许多具有硬件特征的语句而且语言的描述也更类似于一般计算机的高级语言。在编程上简单可行性高。vhdl的程序结构特点是将一项工程设计,或称设计实体。分成外部和内部,在对一个设计实体定义了外部界面后,当其内部开发完成后,其他的设计也能够直接调用这个实体。vhdl系统设计的基本点是将设计实体分成内外部分。vhdl语言之所以能够成为标准化的硬件描述语言并且获得广泛应用,正是因为它本身具有其他硬件描述语言不具有的优点。归纳起来,vhdl语言主要具有以下优点:

(1)vhdl语言设计多样:vhdl语言结构很强大,而且设计方法多样,既支持层次化设计也支持模块化设计,既可以采用自顶向下设计方式,也可以采用自底向上的设计方法。

(2)vhdl语言的设计是针对于芯片而并非器件,传统的硬件拼接的方法针对的是器件,但是vhdl语言是直接对芯片而言的,在设计电路时,用户可以不必考虑所选用的器件。设计者也可以不必考虑系统硬件结构,而进行独立的设计。

(3)vhdl语言可移植性强,对于同一个硬件的vhdl语言来说,它可以从一个工作平台移植到另一个工作平台上。

(4)vhdl语言有非常丰富的库函数和仿真语句,用户可以随时对系统进行仿真。

由此可见传统方式与应用vhdl的区别有以下几点:第一,传统的方法采用自上至下的设计方式,而应用vhdl语言则采用自下至上的设计方法;第二,传统方式采用的是通用的逻辑元器件,系统硬件的后期进行调试和仿真,而应用vhdl语言采用的芯片则是pld(可编程逻辑器件),系统的设计早期进行调试与仿真;第三,传统的设计方式主要采用电路原理图的方式设计,而本文提出的设计方式主要则以vhdl语言描述为主,从而降低了硬件设计电路的难度。

5.vhdl语言结构及语言设计步骤

vhdl语言结构由library(库)定义区,entity(实体)定义区,architecture(构造体)定义区package(包集合)configuration(配置)组成,其中library,entity和architecture也是一个vhdl语言所必有的。

vhdl语言设计步骤大致可以分为以下三步:第一,分析系统结构并划分模块;第二,输入vhdl语言的代码,编写程序,并且将其编译,在此过程中如果有错误要及时修正;第三,对编译的后的vhdl文件进行仿真。

6.vhdl举例

下面介绍一个简单分频器的例子:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity fenpin is

port(clk,clear:in std_logic;

q:out_std_logic);

end fenpin;

architecture behave of fenpin is

signal m:interge range 0 to11

begin

p1:process(clear,clk)

begin

if clear =’0’then m<=’0’;

elsif “clk event and clk=’1’”then

if m=11 then m<=’0’;

else m<=m 1;

end if;

end if;

end process p1;

p2:process(m)

begin

if temp<6 then q<=’0’;

else q<=’1’;

end if;

end process p2;

end behave;

由例题可以看出,在设计分频器是可以不用硬件搭连的方式,用vhdl语言进行编程更简单易行。

7.小结

本文针对目前传统数字电路设计中存在的若干弊端,提出用vhdl语言编写适当合理程序来设计数字电路实验的方法,避免了硬件电路中若干繁琐的问题,使得系统简单明了,可维护性强,芯片也可以反复使用。传统的硬件设计方法已不能满足现代电子工业的发展,在数字电路的应用中,vhdl语言必将会被广泛的使用。

参考文献

[1]张有志.可编程逻辑器件pld原理与应用[m].北京:中国铁道出版社,1996:1-3,91

vhdl语言篇2

关键词:vhdl;fpga;数字抢答器

引言

vhdl的英文全名very-high-speed integrated circuit hardware description language,被ieee和美国国防部确认为标准硬件描述语言 。它被公认有众多优点,如设计灵活、支持广泛、易于修改,独立于器件设计。

vhdl主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,vhdl的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言

抢答器在各种知识竞赛和娱乐活动有着非常广泛的应用,实用功能强大的vhdl语言来发开抢答器具有方便快捷,稳定可靠的特点,非常适合。

1、设计要求

1.1四人参加智力竞赛;

1.2当按下选手面前的抢答按钮时,相应的灯亮,且主持人处的指示灯亮,指示已有人申请回答问题;

1.3显示屏上出现选手的号码, 并且开始100s倒计时,若选手在100s内还没有给出答案,喇叭声将响起,提示该选手回答失败;

1.4一轮抢答完成后,主持人按动复位键,开始下一轮回答

2、系统的vhdl设计

本文采用最大的pld生产厂商altera公司的可编程逻辑器件,芯片型号为flex 84-4。

本文开发软件为max plusii,总的电路系统图如下:

  下文是该数字电路系统的关键子模块及vhdl代码:

模块一:实现选手按键信号的或操作c1

模块二:在每次电路时钟信号clk的上升沿实现“q1

  模块三:当cp信号上升沿时,q端置高电平,代表其中有选手了回答。当主持人按下clr按钮将其置零时,q端置低电平,系统复位。部分代码如下:

  if clr='0' then --清零

  q

  elsif cp'event and cp='1' then 

    q

模块四:实现从选手按键号码到对应二进制数的转换,运用vhdl的”case”语句编程,部分代码如下:

  tmp:=d1&d2&d3&d4;    case tmp is

  when""0111""=>qq

  when""1101""=>qq

  模块五:实现接收到抢答信号后的99s倒计时,倒计时时间到则发出一个发声命令。 主要运用了循环思想编程,部分代码如下:

  if clk'event and clk='1'then

  if en='1'then    --开始计数

    if ll=0 and hh=0 then

    sound

      elsif ll=0 then

    ll:=""1001"";

    hh:=hh-1;

  else

    ll:=ll-1;

  end if;

  else        --en=0,主持人按下按钮后

            sound

  hh:=""1001"";

  ll:=""1001"";

  end if; end if;

  h

模块六(连接模块):此模块实现以上各模块的引脚通讯,使它们配合工作,达到预期的电路功能。编程使用了vhdl的”component “功能,简便易懂,稳定可靠,部分代码如下:

signal one,two,three,four,five,six,seven,eight:std_logic;

begin

u1:a port map(d1,d2,d3,d4,one);

u2:feng port map(one,host,two);

u3:lockb port map(d1,d2,d3,d4,two,host,three,four,five,six,seven);

u4:change port map(three,four,five,six,dis);

u5:count port map(clk,seven,t1,t2,eight);

u6:b port map(seven,eight,sound);

  f1

f2

f3

f4

end lianjie_arc;

3、结论以及结果说明

仿真图(总系统):

说明:1:四人(d1,d2,d3,d4)参加智力竞赛;

2:当按下选手面前的抢答按钮时(输入高电平),相应的灯亮(f1,f2,f3,f4输出高电平),且主持人处的指示灯亮,指示已有人申请回答问题;

3:显示屏上出现选手的号码(dis输出对应数字), 并且开始100s倒计时,若选手在100s内还没有给出答案,喇叭声将响起(sound输出高电平),提示该选手回答失败;

4:一轮抢答完成后,主持人按动复位键(host输入低电平),所有数都清零,开始下一轮回答

符合设计要求。

参考文献:

[1]罗苑棠.cpld/fpga常用模块与综合系统设计实例精讲[m].北京:电子工业出版社,2007.

vhdl语言篇3

关键字:vhdl;ram存储器;分布式ram;块状ram;ip核;fpga

1引言

随着现代eda技术的发展,可编程逻辑器件已广泛应用于数字信号处理、网络通信、工业控制、计算机相关产品中;存储器是数字应用系统中必不可少的模块。在现代可编程逻辑器件的设计中,为了缩短设计周期,减少开发、调试的时间,通常利用芯片厂家提供的专用ip (intellectual property)核完成常见模块的设计。这种调用现有ip核的方法被广泛应用于存储器模块设计中。但是由于ip核的商业性、闭源性[1],使其在使用中,缺乏灵活性和可移植性。

本文重点讨论了用vhdl硬件描述语言,直接调用可编程逻辑器件底层的硬件资源完成可移植通用存储器ip核的设计思路、方法与实例,并给出了一种可在ise和quartusii 等设计平台编译下载的ram随机访问存储器的vhdl语言源程序。

2可编程逻辑器件的

存储器结构与实现

2.1 fpga芯片的存储器结构

随着通用存储器在应用系统中普遍的使用,各大可编程器件的厂商均在自己的fpga芯片内嵌入了专用的ram结构,按照在芯片内的分布情况可以分为分布式(distribute) ram和块状(block)ram。本文主要讨论xilinx公司的fpga结构,其思路、方法对其他公司的fpga结构也适用。 2.1.1 块状ram

块状ram是分布fpga芯片内部的嵌入式专用同步双口ram存储单元,通常沿芯片的边缘垂直边排列如图1、图2所示,是fpga的一个重要资源。高端fpga的片内ram规模越来越大,应用也越来越广泛,是sopc(可编程片上系统)的有力硬件支持。使用片内块状 ram可以实现单口ram、双口ram、同步/异步fifo、rom、cam、大型查找表、数据宽度转换器、循环缓冲器和移位寄存器等常用单元模块,每种应用都支持不同的数据宽度和深度。块状ram的性能比其他形式的ram性能优越。又由于是专用的ram,写入读出通路没有其他逻辑电路,而且嵌入在fpga内部,与外挂的ram相比,读写到片内逻辑的延时是相当小的,再加上专用ram的双读/写同步方式,很容易达到设计的要求。块状ram之间有专用的布线资源,当ram容量很大时,也不会影响速度。使用块状ram与使用外部ram相比,可以简化印制版(pcb)的设计与制作,提高系统的稳定性[2]。

2.1.2分布式ram

分布式ram是利用可配置逻辑模块(clb)中的查找表(lut)设计实现的存储器资源。可编程逻辑器件底层单元一般由触发器(ff)和查找表(lut)组成,xilinx的底层可编程硬件资源叫slice,由2个ff和2个lut组成,每个clb模块中有两个slice单元,而altera的底层可编程硬件资源叫le,由1个ff和1个lut组成。分布式ram分布在每个lc中,可以将一个lc作为16×1的同步ram使用,也可以将两个lc联合起来作为16×2、32×1的同步ram或者16×1的双口ram使用,如图3所示。通过级连分布式ram也可以实现更大容量的存储器[3]。

这种结构的存储器完全由可编程逻辑器件片内资源来实现,结构比较灵活,具有高速的特点,但存储宽度和深度受片内资源限制比较有限,存储容量较小,通常应用于小数据缓冲器、fifo或寄存器文件,在dsp系统设计中较为常见。

2.1.3 块状ram与分布式ram的使用

在一般情况下,系统需要存储一定的数据时,最好使用块状ram。无论是在资源的合理利用方面,还是稳定性方面,块状ram都是最好的选择。在要求高速且存储容量较小的情况下也可以使用分布式ram。但其要占用fpga芯片内数量有限的触发器资源,所以一般建议当所设计的ram容量超过1kb时就使用块状ram。另外由于fpga芯片内部嵌入的是同步ram存储单元,在某些设计中如需要使用异步存储器,就必须使用分布式ram,从而实现异步存储。

3通用存储器的实现

为了调用fpga芯片内的存储器资源,通常利用芯片厂商提供的工程软件直接调用所提供的通用存储器ip核,按要求设定参数后,直接生成可以在工程中调用的存储器模块。这种方法的优点是方便、快捷,可以缩短设计周期。但是由于ip核本质是具有知识产权的商业软件,其商业性及源代码的封闭性,决定了ip核在使用过程中不可能像开源vhdl代码一样,具有极高的灵活性、扩展性与可移植性;以下就结合代码分析一种基于vhdl语言实现通用存储器描述的思路及方法。

3.1 vhdl语言设计思路

用vhdl实现ram存储器时,ram进程的触发信号有时钟信号、片选信号和写信号。时钟信号的上升沿到来时,若片选信号和写信号均为1,这时从数据总线输入的数据被写入地址总线上地址制定的存储单元中,完成ram的写操作。当时钟信号的上升沿到来时,若片选信号为1、写信号为0,则数据将从相应的存储单元通过数据总线读出,完成ram的读操作。

为了使代码使用灵活、方便,且具有良好的通用性、可重构性及可移植性,在存储宽度和深度的定义及同步、异步读模式、块状ram与分布式ram使用选择定义的过程中,必须利用在vhdl语言中的类属性定义来实现。使用时根据设计需要更改类属性定义参数,即可完成所需类型ram的设计。

在进程设计过程中,为了使程序能根据设计要求生成不同类型的ram,整个程序包括了三个子进程,同时利用vhdl语言中的配置语句,根据类属性的定义完成对不同类型ram生成子进程的选择,生成设计需要的ram模块。程序流程如图4所示。

根据以上设计思路,实现具有3种模式选择、任意大小与数据宽度的ram模型,这三种模式分别为:(1)调用分布式ram资源实现的单口异步读ram;(2)调用分布式 ram资源实现的单口同步读带同步清零信号的ram;(3)调用块状ram资源实现的单口同步读的ram。例化后ram模型的引脚图如图5所示。

3.2 仿真测试

为了仿真需要,假定需要设计一个1024*8位的单口同步读带同步清零信号分布式ram,对类属性进行按要求设定后,综合报告如下:

macro statistics--宏模块数据报告

# lut rams: 1---调用lut单元

1024x8-bit single-port distributed ram: 1---创建了1024*8b的单口分布式ram

# registers : 1---调用寄存器

8-bit register: 1---创建了8位同步寄存器模块

可以看出通过调用可编程芯片内底层的ram资源,生成了所要求的1024*8位的单口同步读带同步清零信号分布式ram。在modelsim仿真软件输入波形图,仿真结果入图6所示,从时序仿真结果图可以看出设计的正确性。

下载到altera公司提供的acex1k系列的芯片ep1k30qc208-2和xilinx公司的spantan ii系列芯片 xc2s50-pq208 的实验平台上验证,结果均正确,达到了预期的设计目标[4] [5]。

3.3 基于硬件描述语言的可移植存储器ip核的优势

基于vhdl语言实现的通用存储器ip核经过实验验证,可以在ise和quartusii 等设计平台上通过综合、编译,直接调用可编程逻辑芯片的底层资源完成设计。同时使用者可以根据设计需要修改参数,灵活的生成各种模式不同大小的通用存储器。根据不同的设计要求,还可以对代码进行优化、修改,使之增加额外的功能,如自校检、自初始化等等。因此与传统软件化的ip核相比,此方法具备很高的可移植性,及可重构性,同时也具备了良好的灵活性与可扩展性。

4结束语

本文以硬件描述语言作为手段,介绍了基于vhdl语言的一种可移植通用存储器ip核的实现思路和方法及其应用扩展,并举出了基于vhdl语言实现的一种可移植ram存储器实验模型。由于vhdl的使用很灵活,我们只给出程序的主框架及参考算法,具体细节及功能扩展,使用者可根据要求对代码进行完善,通过各种仿真及测试,达到最优编译效果,完成设计。以上实验研究表明,采用基于vhdl语言实现的可移植通用存储器ip核能很好地解决在数字系统设计中重构性、移植性、灵活性及扩展性的要求,提高了系统设计的效率,其思想方法,具有一定的应用价值和应用前景。

参考文献

[1] 曾繁泰,陈美金.vhdl程序设计.清华大学出版社.2000,8.

[2] 黄智伟,王彦.fpga系统设计与实践.电子工业出版社.2005,1.

[3] 孙航.xilinx可编程逻辑器件高级应用与设计技巧.电子工业出版社.2004,8.

[4] quartus ii help version 6.0.尊龙凯时最新地址 copyright? 1995-2006 altera corporation.

[5] xilinx corporation xapp464 (v2.0)尊龙凯时最新地址 copyright?march 1. 2005.

作者简介

vhdl语言篇4

目前国内数字逻辑课程的教学内容多是基于ssi、msi等器件进行分析和设计,采用的是经典的数字逻辑设计方法,即用真值表、卡诺图、状态转换图、状态转换表、状态方程、时序图、逻辑图和逻辑函数表达式等方法,来分析和设计数字逻辑系统。显然,对于较复杂的数字系统,因其输入变量数、输出函数变量数和状态数的急剧增加,再使用上述这种传统方法进行分析和设计难以适用,甚至根本无法进行。数字逻辑课程的实验环节也是基于标准ssi,msi芯片的所谓硬实验台实验室(hardware-based laboratory),这种实现台不易做成开放性,实验准备,实验内容和实验课安排都不灵活,实验内容和效果也受到所供ssi,msi芯片的限制。如今,数字化的概念已深入到各个领域,几乎绝大多数系统已不是简单几个逻辑变量就能完全描述的。然而目前在专门讲授数字系统设计基础理论和方法的数字逻辑课程中,绝大多数高校仍然是沿用了几十年不变的老方法,显然已远远落后于时代的要求,必须加以改革创新。

2 引进vhdl语言的方法

vhdl的方法克服了传统方法的弱点,与传统方法相比有几处根本优点,设计者可以在vhdl描述模型建立之后马上用仿真手段来验证系统功能是否满足要求。这种方法还可以免去传统方法的许多繁杂的试凑等耗时劳动(设计瓶颈),因而减少设计时间,降低设计难度,避免了由于人工试凑设计常容易发生的错误。利用各种eda工具,可自动的将一个可综合的设计在给定的具体器件上进行门级实现。而且,用这种方法系统整体指标往往容易实现,而传统的方法则不然。这种方法其主要设计文件是用vhdl语言编写的源程序,而不是电路原理图,显然传统硬件电路设计最后形成的主要文件是电路原理图,它与设计的器件和技术有关,不易设计文档的复用。用vhdl语言设计系统硬件电路,主要设计文件是用vhdl语言编写的源程序,以此作为归纳文件有很多好处:首先,资料量小,便于保存;其次是可继承性好,即设计其它硬件电路时可以调用文件中的某些库、进程和过程等描述某些局部硬件电路的程序;第三是阅读方便,很容易在程序中看出某一硬件电路的工作原理和逻辑关系,而阅读电路原理图,推知其工作原理都需要较多的硬件知识和经验,而且看起来也不够一目了然。vhdl还有一个重要的特点就是设计描述与器件无关(without referenec to specific hardware),显然这是基于ssi、msi等器件进行分析和设计无法做到的,设计者能专注其设计,而且在eda综合工具的配合下支持自顶向下的设计。

采用vhdl的方法,在实验环境上也把基于硬件的实验室改变成基于软件的实验室(software-based laboratory)即软实验台,直接在vhdl仿真器中验证实验结果的正确性,根本克服了硬实验台的不足,易于实现实验的开放性和网络教学模式。

vhdl的方法是顺应迅速发展的通讯技术、电子测量技术、自动化控制等技术的需要而发展起来的,它使硬件软件化变为现实,使大规模和超大规模集成电路的设计向标准化、自动化的方向迈进了一大步。无疑,传统的设计方法已经远远落后,国内电子行业已逐渐将vhdl硬件描述语言应用于电子系统设计中。为了避免我们的教学内容与电子技术发展脱节,增强人才的竞争能力,适应市场需要,将vhdl硬件描述语言引入数字逻辑的教学和实验中,逐步对旧的教学模式和教学内容加以改革,势在必行,也是时代的要求和科技发展的必然结果。

3 举例说明采用vhdl方法的风格和特点

vhdl语言是目前广泛流行的硬件描述语言之一,它起源于美国国防部超高速集成电路计划,计划公布后受到业界的普遍欢迎。1987年12月被ieee正式批准为标准的硬件描述语言,并于1993年公布了修改后的ieee最新标准。vhdl支持结构化的开发设计,因此一个大型的数字系统可以分成较小的子系统,许多人可在不同的子系统中同时进行开发工作。vhdl是通过元件例化语句来实现这一功能的。和其它高级语言一样,vhdl是一种强类型语言,这使设计中的许多错误易于发现。vhdl允许设计者在不同的抽象层次里对系统进行行为描述及结构描述。vhdl有三种主要的建模描述风格:

算法描述(algorithmic):即用顺序语句来描述输入输出对应关系的算法,这种描述方式最初往往与实现硬件无关。

数据流描述(dataflow):即用一组并行语句来描述数据在寄存器之间流动的建模方式。这种方式与实际硬件实际存在某种对应关系。

结构描述风格(structural):这是一种与硬件结构最近的描述方式,它通过文件的例化语句来实现。

下面用一个实例来说明采用vhdl语言设计一个四位可控的johnson计数器,从中可以领略一下采用vhdl方法的风格和特点,此例所反映的设计过程也是笔者所指的软实验台所包含的具体内容。设计模块端口信号有:lept,左移控制;right,右移控制;stop,停止计数控制;clk,时钟输入端,q3-q0,计数器输出端。设计采用vhdl输入方式。该设计的vhdl代码如下:

library ieee;

use ieee.std_logic_1164.all;

entity johnson is

port ( left : in std_logic;

right : in std_logic;

stop : in std_logic;

clk : in std_logic;

q : buffer std_logic_vector (3 downto 0));

end johnson;

architecture johnson_arch of johnson is

signal dir: std_logic;

signal run: std_logic;

begin

process (clk)

begin

if (clk'event and clk='1') then

if (right='0') then

dir

elsif (left='0') then

dir

end if;

if (stop='0') then

run

elsif (left='0' or right='0') then

run

end if;

if (run='1') then

if (dir='1') then

q(3 downto 1)

q(0)

else

q(2 downto 0)

q(3)

end if;

end if;

end if;

end process;

end johnson_arch;

从上面的vhdl的设计代码可见:vhdl的设计文档由三大部分组成,即库的声明,端口说明和结构体设计描述。其中端口说明清晰的反映了所设计器件的输入输出性质,在结构体设计描述中也清楚的描述了器件所完成的逻辑功能。这是传统的采用ssi,msi等标准规格器件设计所没有的优点。

图1 设计实例功能仿真图

用vhdl仿真器验证设计的正确性。参见图1:设计实例功能仿真图。

vhdl语言篇5

1.1设计背景

随着出租车行业的发展,对出租车计费器的要求也越来越高。二十世纪后半期,随着集成电路和计算机技术的飞速发展,数字系统也得到了飞速发展,其实现方法经历了由分立元件、ssi、msi到lsi、vlsi以及uvlsi的过程。同时为了提高系统的可靠性与通用性,微处理器和专业集成电路(asic)逐渐取代了通用全硬件lsi电路,而asic以其体积小、重量轻、功耗低、速度快、成本低、保密性好而脱颖而出。目前,业界大量可编程逻辑器件(pld),尤其是现场可编程逻辑器件(fpld)被大量地应用在asic的制作当中。在可编程集成电路的开发过程中,以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术最新成果的电子设计自动化(eda)技术主要能辅助进行三方面的设计工作:ic设计,电子电路设计以及pcb设计

理想的可编程逻辑开发系统能符合大量的设计要求:它能够支持不同结构的器件,在多种平台运行,提供易于使用的界面,并且有广泛的特征。此外,一个设计系统应该能给设计师提供充分自由的设计输入方法和设计工具选择。altered公司开发的max plusⅱ开发系统能充分满足可编程逻辑设计所有要求。

max plusⅱ设计环境所提供的灵活性和高效性是无可比拟的。其丰富的图形界面,辅之以完整的、可及时访问的在线文档,使设计人员能够轻松、愉快地掌握和使用max plusⅱ软件。

编程器是一种专门用于对可编程器(如eprom,eeprom,gal,cpld,pal等)进行编程的专业设备

pld器件的逻辑功能描述一般分为原理图描述和硬件描述语言描述,原理图描述是一种直观简便的方法,它可以将现有的小规模集成电路实现的功能直接用pld器件来实现,而不必去将现有的电路用语言来描述,但电路图描述方法无法做到简练;硬件描述语言描述是可编程器件设计的另一种描述方法,语言描述可能精确和简练地表示电路的逻辑功能,现在pld的设计过程中广泛使用。常用的硬件描述语言有abel,vhdl语言等,其中abel是一种简单的硬件描述语言,其支持布尔方程、真值表、状态机等逻辑描述,适用于计数器、译码器、运算电路、比较器等逻辑功能的描述;vhdl语言是一种行为描述语言,其编程结构类似于计算机中的c语言,在描述复杂逻辑设计时,非常简洁,具有很强的逻辑描述和仿真能力,是未来硬件设计语言的主流。

vhdl就是超高速集成电路硬件描述语言。覆盖面广,描述能力强,是一个多层次的硬件描述语言。在vhdl语言中,设计的原始描述可以非常简练,经过层层加强后,最终可成为直接付诸生产的电路或版图参数描述。具有良好的可读性,即容易被计算机接受,也容易被读者理解。使用期长,不会因工艺变化而使描述过时。因为vhdl的硬件描述与工艺无关,当工艺改变时,只需修改相应程序中的属性参数即可。支持大规模设计的分解和已有设计的再利用。一个大规模的设计不可能由一个人独立完成,必须由多人共同承担,vhdl为设计的分解和设计的再利用提供了有力的支持。

1.2eda发展概况

电子设计技术的核心就是eda技术,eda是指以计算机为工作台,融合应用电子技术、计算机技术、智能化技术最新成果而研制成的电子cad通用软件包,主要能辅助进行三方面的设计工作,即ic设计、电子电路设计和pcb设计。eda技术已有30年的发展历程,大致可分为三个阶段。70年代为计算机辅助设计(cad)阶段,人们开始用计算机辅助进行ic版图编辑、pcb布局布线,取代了手工操作。80年代为计算机辅助工程(cae)阶段。与cad相比,cae除了有纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。cae的主要功能是:原理图输入,逻辑仿真,电路分析,自动布局布线,pcb后分析。90年代为电子系统设计自动化(eda)阶段。

中国eda市场已渐趋成熟,不过大部分设计工程师面向的是pc主板和小型asic领域,仅有小部分(约11%)的设计人员开发复杂的片上系统器件。为了与台湾和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要购入一些最新的eda技术。

在信息通信领域,要优先发展高速宽带信息网、深亚微米集成电路、新型元器件、计算机及软件技术、第三代移动通信技术、信息管理、信息安全技术,积极开拓以数字技术、网络技术为基础的新一代信息产品,发展新兴产业,培育新的经济增长点。要大力推进制造业信息化,积极开展计算机辅助设计(cad)、计算机辅助工程(cae)、计算机辅助工艺(capp)、计算机机辅助制造(cam)、产品数据管理(pdm)、制造资源计划(mrpii)及企业资源管理(erp)等。有条件的企业可开展“网络制造”,便于合作设计、合作制造,参与国内和国际竞争。开展“数控化”工程和“数字化”工程。自动化仪表的技术发展趋势的测试技术、控制技术与计算机技术、通信技术进一步融合,形成测量、控制、通信与计算机(m3c)结构。在asic和pld设计方面,向超高速、高密度、低功耗、低电压方向发展。外设技术与eda工程相结合的市场前景看好,如组合超大屏幕的相关连接,多屏幕技术也有所发展。

中国自1995年以来加速开发半导体产业,先后建立了几所设计中心,推动系列设计活动以应对亚太地区其它eda市场的竞争。

在eda软件开发方面,目前主要集中在美国。但各国也正在努力开发相应的工具。日本、韩国都有asic设计工具,但不对外开放。中国华大集成电路设计中心,也提供ic设计软件,但性能不是很强。相信在不久的将来会有更多更好的设计工具有各地开花并结果。据最新统计显示,中国和印度正在成为电子设计自动化领域发展最快的两个市场,年复合增长率分别达到了50%和30%。

eda技术发展迅猛,完全可以用日新月异来描述。eda技术的应用广泛,现在已涉及到各行各业。eda水平不断提高,设计工具趋于完美的地步。eda市场日趋成熟,但我国的研发水平还很有限,需迎头赶上。

可编程逻辑器件自70年代以来,经历了pal、galgpld、fpga几个发展阶段,其中cpld/fpga高密度可编程逻辑器件,目前集成度已高达200万门/片,它将各模块asc集成度高的优点和可编程逻辑器件设计生产方便的特点结合在一起,特别适合于样品研制或小批量产品开发,使产品能以最快的速度上市,而当市场扩大时,它可以很容易地转换掩模asic实现,因此开发风险也大为降低。

硬件描述语言(hdl)是一种用于设计硬件电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式,与传统的门级描述方式相比,它更适合大规模系统的设计。例如一个32位的加法器,利用图形输入软件需要输人500至1000个门,而利用vhdl语言只需要书写一行“a=b+c”即可。而且vhdl语言可读性强,易于修改和发现错误。早期的硬件描述语言,如abel、hdl、ahdl,由不同的eda厂商开发,互不兼容,而且不支持多层次设计,层次间翻译工作要由人工完成。为了克服以上不足,1985年美国国防部正式推出了高速集成电路硬件描述语言vhdl,1987年ieee采纳vhdl为硬件描述语言标准(ieeestd-1076)。

vhdl是一种全方位的硬件描述语言,包括系统行为级。寄存器传输级和逻辑门多个设计层次,支持结构、数据流和行为三种描述形式的混合描述,因此vhdl几乎覆盖了以往各种硬件俄语言的功能,整个自顶向下或由下向上的电路设计过程都可以用vhdl来完成。vhdl还具有以下优点:(1)vhdl的宽范围描述能力使它成为高层进设计的核心,将设计人员的工作重心提高到了系统功能的实现与调试,而花较少的精力于物理实现。vhdl可以用简洁明确的代码描述来进行复杂控制逻辑设计,灵活且方便,而且也便于设计结果的交流、保存和重用。(3)vhdl的设计不依赖于特定的器件,方便了工艺的转换。(4)vhdl是一个标准语言,为众多的eda厂商支持,因此移植性好。传统的硬件电路设计方法是采用自下而上的设计方法,即根据系统对硬件的要求,详细编制技术规格书,并画出系统控制流图;然后根据技术规格书和系统控制流图,对系统的功能进行细化,合理地划分功能模块,并画出系统的功能框图;接着就进行各功能模块的细化和电路设计;各功能模块电路设计、调试完成后,将各功能模块的硬件电路连接起来再进行系统的调试,最后完成整个系统的硬件设计。采用传统方法设计数字系统,特别是当电路系统非常庞大时,设计者必须具备较好的设计经验,而且繁杂多样的原理图的阅读和修改也给设计者带来诸多的不便。为了提高开发的效率,增加已有开发成果的可继承性以及缩短开发周期,各asic研制和生产厂家相继开发了具有自己特色的电路硬件描述语言(hardwaredescriptionlanguage,简称hdl)。但这些硬件描述语言差异很大,各自只能在自己的特定设计环境中使用,这给设计者之间的相互交流带来了极大的困难。因此,开发一种强大的、标准化的硬件描述语言作为可相互交流的设计环境已势在必行。于是,美国于1981年提出了一种新的、标准化的hdl,称之为vhsic(veryhighspeedintegratedcircuit)hardwaredescriptionlanguage,简称vhdl。这是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言。设计者可以利用这种语言来描述自己的设计思想,然后利用电子设计自动化工具进行仿真,再自动综合到门电路,最后用pld实现其功能。

覆盖面广,描述能力强,是一个多层次的硬件描述语言。在vhdl语言中,设计的原始描述可以非常简练,经过层层加强后,最终可成为直接付诸生产的电路或版图参数描述。

具有良好的可读性,即容易被计算机接受,也容易被读者理解。

使用期长,不会因工艺变化而使描述过时。因为vhdl的硬件描述与工艺无关,当工艺改变时,只需修改相应程序中的属性参数即可。

支持大规模设计的分解和已有设计的再利用。一个大规模的设计不可能由一个人独立完成,必须由多人共同承担,vhdl为设计的分解和设计的再利用提供了有力的支持。

当电路系统采用vhdl语言设计其硬件时,与传统的电路设计方法相比较,具有如下的特点:

即从系统总体要求出发,自上而下地逐步将设计的内容细化,最后完成系统硬件的整体设计。在设计的过程中,对系统自上而下分成三个层次进行设计:

第一层次是行为描述。所谓行为描述,实质上就是对整个系统的数学模型的描述。一般来说,对系统进行行为描述的目的是试图在系统设计的初始阶段,通过对系统行为描述的仿真来发现设计中存在的问题。在行为描述阶段,并不真正考虑其实际的操作和算法用何种方法来实现,而是考虑系统的结构及其工作的过程是否能到达系统设计的要求。

第二层次是rtl方式描述。这一层次称为寄存器传输描述(又称数据流描述)。如前所述,用行为方式描述的系统结构的程序,其抽象程度高,是很难直接映射到具体逻辑元件结构的。要想得到硬件的具体实现,必须将行为方式描述的vhdl语言程序改写为rtl方式描述的vhdl语言程序。也就是说,系统采用rtl方式描述,才能导出系统的逻辑表达式,才能进行逻辑综合。

第三层次是逻辑综合。即利用逻辑综合工具,将rtl方式描述的程序转换成用基本逻辑元件表示的文件(门级网络表)。此时,如果需要,可将逻辑综合的结果以逻辑原理图的方式输出。此后可对综合的结果在门电路级上进行仿真,并检查其时序关系。

应用逻辑综合工具产生的门网络表,将其转换成pld的编程码,即可利用pld实现硬件电路的设计。

由自上而下的设计过程可知,从总体行为设计开始到最终的逻辑综合,每一步都要进行仿真检查,这样有利于尽早发现设计中存在的问题,从而可以大大缩短系统的设计周期。

系统可大量采用pld芯片。

由于目前众多制造pld芯片的厂家,其工具软件均支持vhdl语言的编程。所以利用vhdl语言设计数字系统时,可以根据硬件电路的设计需要,自行利用pld设计自用的asic芯片,而无须受通用元器件的限制。

eda系统框架结构eda系统框架结构(framework)是一套配置和使用eda软件包的规范。目前主要的eda系统都建立了框架结构,如cadence公司的designframework,mentor公司的falconframework,而且这些框架结构都遵守国际cfi组织制定的统一技术标准。框架结构能将来自不同eda厂商的工具软件进行优化组合,集成在一个易于管理的统一的环境之下,而且还支持任务之间、设计师之间以及整个产品开发过程中的信息传输与共享,是并行工程和自顶向下设计施的实现基础。

eda技术的每一次进步,都引起了设计层次上的一次飞跃,从设计层次上分,70年代为物理级设计(cad),80年代为电路级设计(cae),90年代进入到系统级设计(eda)。物理级设计主要指ic版图设计,一般由半导体厂家完成,对电子工程师没有太大的意义,因此本文重点介绍电路级设计和系统级设计。

仿真通过后,根据原理图产生的电气连接网络表进行pcb板的自动布局布线。在制作pcb板之前还可以进行pcb后分析,其中包括热分析、噪声及窜扰分析、电磁兼容分析、可靠性分析等,并可将分析后的结果参数反标回电路图,进行第二次仿真,也称为后仿真。后仿真主要是检验pcb板在实际工作环境中的可行性。

由此可见,电路级的eda技术使电子工程师在实际的电子系统产生前,就可以全面地了解系统的功能特性和物理特性,从而将开发风险消灭在设计阶段,缩短了开发时间,降低了开发成本。

vhdl语言篇6

petri网是异步并发系统,没有人为的控制流,直观地表示了非确定性;且可以图形化的方式描述复杂的系统,并可运用数学工具进行分析。因此,其在软件系统的建模与仿真中得到广泛应用。petri网自身具备的可运行性方便了系统形式化描述级的模拟,可以用于表达不同抽象级上的系统概念并清楚地描述整个系统的运作过程。笔者发现petri网的应用目前仅局限于软件系统的设计,例如网络协议、物流管理等,而在硬件系统中却很少涉足。硬件系统随着功能的日益增强,其功能描述也越来越复杂。基于硬件系统描述的vhdl语言以其强大的硬件描述能力,已被广大科研工作者所采用。vhdl语言也适用于描述异步并发系统,因此可与petri网建立的模型联系起来。

本文采用自顶向下与层次分析相结合的设计方法?用petri网的一个子类c/e系统(条件/事件系统)对视频输入卡的逻辑控制器建立模型。针对控制器c/e模型中关心和需要观察的变量,确定vhdl描述的实体和端口,由c/e系统网的拓扑结构确定条件和事件间的逻辑关系,构造vhdl语言中的结构体。采用eda开发工具max+plus ii进行代码设计,逻辑综合,并对设计进行仿真,最后下载到cpld,验证了逻辑控制器设计的正确性。

图1 视频输入卡结构框图

1 应用背景及控制器功能要求

图1为某一视频输入卡结构框图。前端视频信号经过解码、缓冲后,将数据送入dsp处理。其中由逻辑控制器协调各部分之间的运作。从图1中可以看出,逻辑控制器与视频切换、视频解码、视频数据缓存以及dsp等部分存在联系,归纳起来需要完成五个基本功能:视频通道切换控制;插入行标志信息;fifo的初始化操作;写fifo;读fifo。

要完成上述五个基本功能,必须保证每个功能与另一功能之间不存在冲突,但允许存在并发行为,同时它们之间的逻辑顺序应保持一致。因此需要一个主控模块协调各部分的操作。各功能部分之间的逻辑关系比较复杂,涉及到图像数据的行同步以及场同步等问题,一旦出错,则接收的就不是有效的图像数据,后续工作也不能正常进行。为此,首先建立petri网模型,并运用数学工具进行分析,最后采用vhdl语言实现。

2 控制器petri网模型

应用petri网的一个子类c/e建立视频输入卡的逻辑控制器模型。控制器实现的五大功能,在满足各自条件的情况下,能够正确地完成相关操作。如果将每个功能展开进行petri网模型设计,将会使整个c/e系统的节点过多。节点一多,则不易分析其性质和计算它的可达树、不变量等参数。petri网特有的直观易懂、适于交流的图形表示也就失去了意义。采用层次分析的方法,首先在顶层根据各功能要求建立一个petri网模型,然后在各个模块内部建立更详细的子模型。鉴于顶层和底层的分析方法类似,只将顶层模型展开讨论。网络的一些动态特性,如库所与变迁的含义如表1所示。

表1 库所和变迁的含义

库  所含  义变  迁含  义p1初始化fifo有效t0系统开始(sysstart)p2初始化fifo结束t1通道切换p3插入行属性结束t2初始化fifop4读fifo有效t3插入行属性标志p5通道切换有能t4写fifop6vref=0t5读fifo奇场数据p7插入行属性标志有效t6场开始p8写fifo有效t7场同步p9rst0=0t8行开始p10href=0t9行同步p11vref=1t0行有效p12href=1t11读取fifo偶场数据p13rst0=1

p14偶场结束

逻辑控制器顶层petri网模型如图2所示。该模型是一个基本网系统,其状态元素称为条件,变迁元素称为事件。事件的发生改变条件的状态(成真与否),引起信息在网上的流动?1?。由条件和事件组成的有向网通常表现为三元组(b,e;f),其中b为条件集,e为事件集。同时该模型还满足如下条件:

·(b,e;f)为简单网;

·b中每个条件都有机会成真,也有机会成假;

·e中每个事件都有机会发生;

·由初始情态ci导出的可达情态集是完全可到达关系r下的等价类。

因此,该模型还是一个c/e系统。在petri网仿真软件visual object net++中进行仿真测试,结果表明该模型能很好地描述控制器各部分之间的逻辑关系。

3 vhdl程序的基本单元设计

cpld(复杂可编程逻辑器件)是处于并行工作方式的基本电路单元构成的高速、大规模集成器件,可作为一种并发系统模型与petri网建立联系。vhdl作为一种硬件描述语言,支持行为描述、数据流描述和结构化描述等多种描述方法,可以用并行和顺序多种语句方式描述实际的系统,并可采用vhdl的并行语句描述c/e系统中条件/事件间的并发关系,用vhdl的顺序语句描述条件/事件间的顺序约束机制,为解决c/e系统中的有效冲突提供了可行的方法。

vhdl语言程序设计的基本单元称为一个基本设计实体,其主要由实体说明(entity declaration)和构造体(architecture body)两部分构成。实体说明部分规定了设计单元的输入输出接口信号或引脚。根据该控制器的c/e系统中关心和需观察的变量选择系统的输入和输出信号,以确定基本设计单元的实体及其端口。在控制器的c/e系统模型中,因为事件驱动条件是变化的,所以将发生的事件作为设计实体的输入信号,系统条件作为实体的输出信号。同时,为实体设计一个输入端口sysstart,使系统上电复位。当sysstart触发时赋予系统初始标识,系统资源(token)流动使能。下面是具体的vhdl实体描述。

library ieee?

use ieee.std_logic_1164.all?

……?其它库?

entity mainctrl is

port?sysstart: in 数据类型?

事件:in数据类型?

条件:out数据类型??

end mainctrl is?

构造体部分定义了设计单元的具体构造和操作(行为)。c/e系统模型的拓扑结构直观地表达了条件和事件间的约束机制。这种约束机制映射为控制器内部各模块之间的逻辑关系。根据控制器c/e系统模型的特点,可采用多进程结构描述c/e系统。进程内部顺序执行,进程之间并发执行。多进程结构是并行执行进程的网络,多个进程并发执行。因此从c/e系统的拓扑结构,可将各进程映射为c/e系统的各库所状态,从而能够描述出各条件库所间的异步并发关系。各进程之间通过接口信号进行通信。接口信号是由新变化的参量引导进程产生的输出结果。设计进程的程序,使之产生的输出结果成为新的库所状态,从而影响变迁触发(fire)条件,以各进程的输出结果作为进程间的通信接口信号。具体描述如下:

architecture behav of mainctrl is

begin

进程ri:process(事件集) i∈?1,14?

begin

pi<= 进程ri的输出;

……

end process ri?

......

end behav?

冲突是由系统资源的共享产生的,与并发是一对对偶的概念?1?。在实际的petri网模型中可能存在冲突k=<pi,?t1?t2?……?,m>,网系统自身并不提供解决冲突的方法。避免冲突的方法或措施有:

(1)由用户选择,有冲突的地方通常是需要作出选择和决策的地方。

(2)设置合适的触发规则:确定性产生规则,如优先级;不确定性产生规则,如发生概率。

(3)改变系统结构,即改写petri网的关联矩阵,增加共享资源回收。

vhdl语言中的并行语句同样不能解决冲突问题。使用vhdl并行语句描述冲突时将导致资源的丢失。而使用vhdl语言中的顺序语句,如进程内部的语句,采用设定不同优先级的方法,可以解决petri网中存在的冲突。本控制器c/e系统也存在冲突现象,如图3所示。

对每个库所pi进程的变化(token的有无),使用电平的高低来表征。事件发生与否,用脉冲出现与否表征。该c/e系统的结构体共有14个并行处理的进程。根据对控制器进行形式描述的思想,在进程内部采用下列结构:

进程ri:process(事件参数表)? i∈?1,14?

……

if?<条件表达式>? then

<行为表达式>?

end if;

end process 进程ri;

事件参数表(也称敏感量)中事件触发进程的执行过程是:在判断事件的<条件表达式>为真后,顺序执行其后的<行为表达式>,由新变化的参量引导进程产生输出结果;执行完进程语句后,返回进程的事件参数,等待事件集新的变化,引发进程的再一次进行,往复循环。

图4 顶层模块时序仿真

4 基于vhdl的仿真与cpld实现

vhdl语言篇7

【关键词】电子设计自动化;电子信息专业;实验教学;本科教学

1.引言

电子设计自动化(eda)软件工具的出现为电子设计工作者提供了一种全新的设计方法。开展eda教学可使学生开阔眼界,从中小规模的分离器件上升到可编程逻辑器件,从传统的低效、低可靠、费时费力、且成本高昂的自底向上的设计方法,上升到适应现代电子设计需要的自顶向下的设计方法。这种思想上的改革不仅仅是知识的更新,更是培养未来高水平的国际化高科技人才的需要。

计算机与微电子技术的发展,电子设计自动化eda(electronic design automation)和可编程逻辑器件pld(programmable logic device)的发展都非常迅速,熟练地利用eda软件进行pld器件开发已成为电子工程师必须掌握的基本技能。

2.电类本科专业eda教学内容

eda技术作为电子信息类本科专业一门重要的专业基础课,在大多数高校的相关学科中已成为共识,但就其教学内容和实验安排上,当今尚有诸多不同看法,这里列出几点,以供探讨:

a)课程应分三个层次来教学,即将诸如ewb、pspice和protel的学习作为eda的最初级内容;vhdl和fpga开发等作为中级;asic设计为最高级;

b)认为eda技术学习中,vhdl的学习需要花费半年乃至一年的时间才能完成;

c)eda技术只是数字电路课的延续和补充,因此,实验内容应该具有一致性,即只需以eda的手段完成与数字电路实验相近的实验项目即可。

以上的看法值得商榷,关键的问题在于怎样紧紧把握课程教学中最实质的东西,即必须突出要点。eda技术的教学必须围绕这样一个核心内容来展开,即学习一种通过软件的方法来高效地完成硬件设计的计算机技术,尽量略去其他没有直接联系的内容,如ewb、pspice、protel等,因为这些工具仅属cad的范畴,它们没有现代自动化设计中关于行为与结构综合的概念,没有自顶向下设计理论的内容。此外,因为无论是asic还是fpga,都只是eda最后的实现目标。eda的特性决定了其实现方式具有很大的自由度。而最实质,最能体现创造性的是利用eda技术完成某一项目的设计方案。因为基于fpga的实现几乎如同软件一样可以随心所欲,而asic的前端设计与fpga十分相近,可以利用asic设计eda软件来完成,其最终的实现通常类似于交付pcb制作文件一样,可将最终的网表文件交付专业厂家来负责。今天的eda技术已经使得“从事ip开发的无芯片eda公司”和“无生产线的ic企业”成为可能,而且将可能成为我国现代电子技术的重要产业。

对于教学内容如果要分层次的话,从实现的方法和内容上去分比从实现的工具和工艺上去分更为合理。例如可以将逻辑行为的实现作为最低层,即用eda工具完成数字电路实验中的部分内容,如红绿灯控制、数码译码显示、逻辑表决等;将控制与通信的实现作为第二层次,如a/d高速采样、工业自动化控制、接口与通信模块的设计等;而将算法的实现作为最高层次,如fir、fft、cpu的设计等。因为这样能使教学效果更好地反映eda技术最本质的内容。

近年来,随着集成电路技术和eda技术的不断发展,集设计、模拟、综合和测试功能为一体的v hdl语言,已作为ieee标准化的硬件描述语言。由于其在语法和风格上类似于现代高级汇编语言,具有良好的可读性,描述能力强,设计方法灵活,易于修改,又具有可移植性,可重复利用他人的ip模块(具有知识产权的功能模块)等诸多优势而成为eda设计方法的首选。

3.eda教学的难点

eda教学语言选用vhdl(very high speed integrated circuit hardware description language甚高速集成电路硬件描述语言)语言。学习vhdl语言的学生,大多已系统学习过c或pascal等高级语言,对于语法的理解一般不存在困难。但vhdl语言作为硬件描述语言,有其自身的特点,与其它高级语言有本质的区别。其教学难点具体表现为:

a)vhdl语言与其它高级语言的区别

vhdl语言的形成与一般高级语言十分类似,具有规范的程序设计结构和灵活的语句表达式。而其每一条或每一部分设计程序都对应着相应的硬件资源的支持,而最终的设计,其硬件资源是确定的,其逻辑功能也是确定的。由于硬件资源是确定,故而不能期待特定的硬件资源去实现不同的功能。

b)数据类型、运算、运算符和程序包之间的关系

vhdl语言是一种强类型语言,不同的数据类型其运算操作符不同,不同的操作要求的运算符不同。同一运算符在不同的环境下要求的运算对象不同,而不同的运算符要求不同的程序包的支持。这就决定了在在程序设计中应针对不同的数据类型、运算、运算符,在程序设计的use区应引用不同的程序包。

c)多进程中信号的更新问题

用多个进程描述逻辑,每个进程只描述整体逻辑的一部分,进程之间通过信号相互联系,这种方法称为多进程描述。其中信号的更新问题是一个难点,也是vhdl语言与其它高级语言的区别之一。

4.电类本科专业eda教学与实验方法

首先改善教学方法。考虑到目前的本科课程门类已大为增加,任何一门非公共课的学时都不会很多。显然,突出要点才能有效控制学时。建议这门课可安排42学时左右,包括实验课学时。这就要求主要以引导性教学为主。例如对vhdl的教学就不能像c或汇编语言那样逐条语句讲授,而是应结合具体实例讲解最基本的语句现象及其使用方法。

其次是注重教学实效。数字电路与eda技术课程的侧重点不同,前者侧重于逻辑行为的认知和验证;后者则侧重于实用电子系统的设计,因此该课程具有很强的实践性。针对性强的实验应该是教学的重要环节,eda实验更应注重实验的质量,而决非仅仅使用了什么eda软件。在初级阶段,用eda工具重复一些数字电路课中的实验是必须的,但这远非eda实验的全部。因为数字电路实验的重点是逻辑行为和功能的验证,因而可用手工插线方式来完成“设计”,而不涉及任何技术指标和规模。众所周知,电子系统技术指标是十分重要的,这包括速度、面积(芯片资源)、可靠性、容错性、电磁兼容性等。有时往往指标要求决定了所使用的技术,指标要求推动技术的发展。全国大学生电子设计竞赛题中从来不提使用何种工具或技术来完成赛题,但参赛者不得不根据给出的技术指标做出选择。因此,eda课程的实验,除了必须完成的基础性项目外,引导学生完成一些传统电子设计技术(包括单片机)不能实现的内容,从而突出这一现代电子设计技术的优势。例如uart、ps/2或usb接口的设计突出自主知识产权的概念;vga显示器的控制或状态机控制a/d采样突出了高速性能指标的实现;fir设计表现了基于eda技术特有的ip应用技术;纯硬件奏乐电路的设计体现了eda工具面对复杂逻辑电路设计的突出优势等。在这些实践过程中,会使学生发现,诸如isp下载方式、fpga、asic乃至eda软件等设计手段本身都成了配角,而唯有对更高质地完成实验项目而不懈追求的设计能动性和创造性成了主角,从而有效地提高这门以培养工程实践能力为主的课程的教学效果。

再次就是注重实践与实用。教学内容上,在讲清内容的同时,对每部分内容均需安排有针对性的教学实验。对设置的大部分的实验除给出详细的实验目的、实验原理、实验思考题和实验报告要求外,还应包含2至4个实验项目(层次),即:第一实验项目(层次)是与该部分内容相关的验证性实验,对于该部分实验,学生只须将提供的设计程序输入到计算机,并按要求进行编译仿真,并在实验系统上实现即可;第二实验项目(层次)是在上一实验基础上进一步发挥性实验;第三、四实验项目(层次)属于自主设计或创新性质的实验。这样,学生就可以根据实验学时数和教学实验的要求进行不同层次的实验项目。

最后,注重速成。一般认为eda技术难点和学习费时的根源在于vhdl语言。对此,根据电子类专业的特点,教师需放弃流行的计算机语言的教学模式,放弃常规的教学思路,以电子线路设计为基点,从实例的介绍中引出vhdl语句语法内容,通过少数几个简单、直观、典型的实例,将vhdl中最核心、最基本的内容解释清楚,使学生在很短的时间内就能有效地把握vhdl的主干内容,而不必花费大量的时间去“系统地”学习语法书。要求教师从时间中抓效益,从效益中提高学生学习与研究能力的培养。

总之,高校教师需力争在不增加课时的情况下,保持eda教学内容的系统性和完整性,使学生通过学习,vhdl语言的精髓。通过验证性实验,初步掌握eda技术最基本的内容。同时通过向导性实验,通过几个典型实用示例的设计练习,使学生在只有数字电路基础知识的条件下即能迅速学会使用原理图或波形输入设计方法、文本输入法和学会利用大规模可编程逻辑器件完成较复杂的数字系统的设计实验,真正达到培养创新型人才培养的目的。

参考文献

vhdl语言篇8

abstract: as a kind of data acquisition equipment, counter is an important part of the measurement system in every field. it is used in the clock, timer, frequency division circuit, state machine and other applications. aimed at the shortcomings of traditional counter, such as the single function, complex circuit, difficult debugging, high cost of the equipment upgrades and maintenance, a kind of binary reversible synchronous counter based on vhdl is developeded. it can realize reversible counting and can flexibly adjust the counter digits. the feasibility and accuracy of the design is verified by the experimental tests. it also provides the reference and basis for the design of other device by using vhdl.

关键词: vhdl;可逆;fpga;计数器

key words: vhdl;reversible;fpga;counter

中图分类号:tn47 文献标识码:a 文章编号:1006-4311(2016)04-0093-02

0 引言

计数器电路是常见的一种数字电路,有着极为广泛的应用,可以作为电路最基本时钟的信号输入,可以以此为基础配合拓展其它的信号,也可以配合其它电路一起使用,计数器电路还可用于电路的测试等[1]。可逆计数器可以执行加法计数,也可以进行减法计数,它拓展了计数器的使用范围,可作为整机配套器件使用,用来产生更多用途的信号。

传统计数器功能单一,电路复杂、调试比较困难,一旦结构确定,就很难更改,设备升级难度大、维护成本比较高,针对这些问题本文研究开发了一种基于vhdl的同步二进制可逆计数器,可实现可逆计数,并且可以通过修改程序的方法,灵活的调整计数器的位数;并通过实验测试验证了该设计的可行性及准确性,也为使用vhdl设计其他的器件提供了参考和依据。

1 设计思路

计数器是时序应用电路中十分普遍的应用部件[3],例如,时钟、定时器、分频电路、状态机等应用设计都能看到计数器的踪迹。计数器的原理是:每次时钟脉冲信号为上升沿或下降沿时,计数器就会将计数值加1或减1。

针对计数器的原理,可以设计出可逆计数器的真值表。要实现二进制计数的可逆计数,必须设置可逆计数的信号端子,在文中设置的可逆计数端子名称为updn,当清零信号无效且置数信号无效时,时钟信号上升沿到来时,当updn=1为加法计数,当updn=0为减法计数。当时钟下降沿到来时,保持原来的状态不变。

2 基于vhdl的电路设计与实现

2.1 芯片的选择

设计选用了altera公司的cyclone ⅱ系列fpga(现场可编程门阵列)芯片ep2c20f484c7,fpga器件具有下列优点:高密度、高速率、系列化、标准化、小型化、多功能、低功耗、低成本、设计灵活方便,可无限次反复编程,并且可现场模拟调试验证。使用fpga器件,一般可在几天到几周内完成一个电子系统的设计和制作[4],可以缩短研制周期,达到快速上市和进一步降低成本的要求。

2.2 硬件描述语言的实现

芯片一旦选定,就可以使用硬件语言设计计数器了。同步可逆二进制计数器的设计思路是:每次时钟脉冲信号为上升沿时,计数器就会将计数值加1或减1。一个n位的计数器其计数范围是2n,即0~2n-1。下面是使用vhdl语言设计一个四位的二进制可逆计数器。在quantusⅱ平台中可以采用文本输入、原理图输入、波形输入等多种输入方式进行文件的输入。本文首先在软件中建立一个名为test31的工程,然后采用文本输入的方式,在quantusⅱ9.0软件中输入以下vhdl代码,进行可逆计数器的设计描述,保存为test31.vhd的形式。通过对其进行编译及仿真验证可以验证其正确性。

二进制可逆计数器的vhdl代码如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity test31 is ----建立一个实体描述可逆计数器的输入输出端子

port(clk,clr,s,en,updn:in std_logic;

d:in std_logic_vector(3 downto 0);

co:out std_logic;

q:buffer std_logic_vector(3 downto 0));

end test31;

architecture one of test31 is

begin

process(clk,clr)

begin

if clr='1' then q

elsif clk'event and clk='1' then

if s='1' then q

elsif en='1' then

if updn='1' then

if q="1111" then q

else q

end if;

elsif updn='0' then

if q="0000" then q

else q

end if;

end if;

end if;

end if;

end process;

end architecture one ;

2.3 仿真验证

以上述的test.vhd为基础,建立波形仿真文件,就可以验证其功能是否实现。设置仿真结束时间为1μs,clk的周期为10ns,二进制可逆计数器的功能仿真输出波形如图1所示。

由图1可以看出,当clr信号有效时,输出q和co为零;当clr无效时,计数器正常工作。当置数信号s有效为1时,计数器的输入信号d有效,从d的输入数值开始计数,图中的输入数值为5,即0101,此时可以看出updn信号为1,即做加计数,每来一个时钟上升沿,加1直到15即1111为止,此时产生进位信号co=1。当updn为0时,开始减法计数直到减到0为止。从以上的分析可以看出用vhdl设计的可逆计数器很好地实现了可逆计数的功能,同时在功能扩展方面也非常的方便,把外部计数的端子接到d端子上,就可以实现任意场合的计数,把在程序中位数修改,就可以实现任意数值的计数。

3 编程与fpga下载验证

在仿真验证结束后,就可以对编写的vhdl代码进行硬件的编程及下载验证。本文采用的是altera公司的de1开发板的cycloneⅱ ep2c20f484c7 fpga芯片进行了硬件实现。de1平台上内嵌了usb blaster下载组件,可以通过一条usb连接线与电脑相连,并且通过两种模式配置fpga[5]:一种是jtag模式,通过usb blaster直接配置fpga,但掉电后fpga中的配置内容会丢失,再次上电需要用电脑对fpga重新配置;另一种模式是在as模式下,通过usb blaster对de1平台上的串行配置器件epcs16进行编程,平台上电后,epcs16自动配置fpga。

文中采用的是jtag的模式进行fpga配置。在进行器件的选择时选择cycloneⅱ系列中的芯片 ep2c20f484c7 型号;pin脚选择时,输入端口分配的是开发板上的拨码开关,以便方便设置输入的高低电位;输入端口clk分配一个时钟信后端口,由于平台自带的时钟信号频率都较高,分别为24mhz,50mhz,27mhz,所以为了方便观察输出结构,需要在原程序的基础上再加一段分频器程序,使频率降低以便观察结果;输出端口co分配一个红色led灯ledr0的pin脚;为了观测计数器输出的数值,需要再加一段数码显示的程序。在编程器中,单击start按钮,开始编程,编程结束之后,观察de1板上数码管的数据,可以看出其很好的实现了可逆计数。

4 结束语

本文利用quantusⅱ软件平台,使用vhdl硬件描述语言结合fpga芯片来设计二进制同步可逆计数器,方便快捷,简单有效,易于实现,电路扩展性强,修改方便。quantusⅱ软件交互性强,易于使用,de1平台作为一个非常完善的fpga设计平台,具有强大的功能特性,能够设计多款电路系统,拓展性强,其在电子系统的设计和实现中占据着越来越重要的地位。

参考文献:

[1]张寅,赵剡,秦超.基于fpga的通用可逆计数器的设计及实现[j].计量与测试技术,2010,37(12).

[2]王永军,李景华.数字逻辑与数字系统[m].北京:电子工业出版社,2005.

[3]李秀霞,李兴保,王心水.电子系统eda设计实训[m].北京航空航天大学出版社,2011.

[4]樊昌信,曹丽娜.通信原理[m].六版.北京:国防工业出版社,2008.

vhdl语言篇9

关键词:eda;计算机组成实验课程;实验教学;创新

实验教学是将学生的书本知识转化为动手能力,深入理解理论知识的必不可少的一环。实验教学对于培养创新性人才,激发学生学习的热情和创新能力有着极为重要的作用。特别在知识日新月异的时代,创新性人才的培养势在必行[1-2]。

计算机组成原理是电子信息类各专业的专业基础课,重点在于讲授计算机的各部件的组成原理及部件之间有何种数据流和控制流以协调工作,建立整机的概念。计算机组成实验课程是配合这门课程学习的一门单列实验课,计算机组成实验是我校的四川省精品课程――计算机组成原理系列课程体系的一个重要组成部分。如何很好地组织计算机组成实验,从实验的内容、方式、激发学生的热情上,教学工作者都进行了大量的探讨[3-4]。

随着电子技术的不断发展,计算机组成实验平台从以软件平台的仿真为主,逐步向以硬件平台为主、软件仿真为辅的方向转变。在实验中,可以选择不同厂家生产的专用的实验器件进行,也可以基于eda方式进行[5-7]。eda(electronic design automatic)是现代电子设计的核心,它以计算机为基础,在eda工具软件平台上,对以硬件描述语言hdl(hardware description language)为系统逻辑描述手段完成的设计文件,自动进行编译、优化、逻辑综合、结构综合[7],在调试编译正确后,再配置引脚下载到实验电路板上。基于eda的计算机组成实验不仅可以更好地进行计算机硬件系统的逻辑设计,同时可以提高硬件设计水平及硬件实现效率,使学生学习到eda的开发软件和开发语言,更好地适应电子设计的新技术,同时为将来就业奠定基础。在下载到实验板之前整个设计是在eda工具软件环境中进行,学生可以进行反复的调试,不必担心硬件的损坏,并且在eda环境中进行硬件设计,如同在使用真实的器件做实验,可以调用不同的器件。实验的题目从简单的验证型为主转化为综合型和设计型为主的题目。基于eda的计算机组成实验的一个重要环节是编程语言的学习和eda工具软件的使用,而这些软件和编程语言,大多数的学生在学习本门课程时还没有学习过,如何在较短的时间内迅速入门,本且为后续的进一步学习奠定基础,是教学中的难点。另外,不同的学生会对不同的eda语言感兴趣,允许学生选择不同设计语言,并讲清不同设计语言的区别和联系,有助于学生从整体上更好的掌握设计的方式和方法。

1教学指导思想

由于eda环境提供的设计具有便捷性,所以我们在计算机组成实验课程教学中有以下的教学指导思想:由浅入深,意在提高学生的积极性和主动性,排除畏难情绪;鼓励创新,鼓励学生以不同的方案解决问题,不拘泥于老师介绍的方式方法;设计不同难易程度的题目,给能力强的同学以较好的延伸空间;开发语言的介绍不拘泥于本门课程,将关键点讲到位,以便促进学习在完成该课程学习后进一步的学习,开发语言的使用允许学生在verilog hdl、vhdl两种语言中任选一种,并讲清其区别和联系。

2eda教学方式和方法

2.1开发环境和语言的选择

我们选择开发环境的是altera公司的quartus ii软件,altera公司提供有web edition版本,可免费试用,并且学生可以从altera公司的网站上下载license文件,这样学生在离开实验后可以在寝室里调试程序,更好地学习eda软件。quartus ii支持三种硬件描述语言:ahdl、verilog hdl、vhdl。其中,ahdl是altera公司开发的硬件描述语言,仅在altera公司的开发系统上支持,移植性不好。而verilog hdl和vhdl都是ieee的标准,那么这两种语言有何差异呢?在这两种语言中verilog hdl是在c语言的基础上发展起来的,比较容易学习,但它更适合于元件级的描述,可以看作是电子元件和verilog hdl语言的一一对应。而vhdl的抽象层次更高,它用实体和行为描述来抽象一个具体的逻辑电路,具有面向对象的特征。vhdl可以使我们将重点放在系统内部逻辑的实现上,而不是放在实现的细节上,其内部的实现交给eda工具去完成。因此,在这门课程的学习中允许同学按照偏好选择使用vhdl语言或verilog hdl,并鼓励他们分析两者的异同。当然,对于复杂系统的设计需要两种语言一起来完成任务。实验电路板可以选择altera公司的de2开发板或杭州康芯公司的计算机组成实验板等。

2.2教学内容和教学方式的设计

基于eda的计算机组成实验课程,非计算机专业一般设置的课时为32学时,其中包括实验学时。教师需要在有限的课时中讲授以下内容:vhdl语言;quartus ii软件的使用;de2开发板的使用;计算机组成实验内容涉及的原理;实验过程的演示。对于大多数同学而言,都是第一次接触eda的概念,并要求在较短学习vhdl语言及其开发环境,如果按部就班的学习,势必有一定的难度,而且会在一定程度上挫伤学习的积极性。相反,如何能够较快地掌握该语言的特点,则能激发学生的学习热情。根据学生都至少学习过一门编程语言,我们进行了如下的教学设计。

1) 以实例为向导,讲解重点的语法要素。

vhdl语言一门硬件描述语言,它不同于一般的软件语言,它比较规整,具有面向对象的某些特征。它把任何逻辑对象作为实体进行描述,该实体包含输入、输出接口和行为逻辑的描述。如果系统地学习该语言需要较多的时间,而在计算机组成实验这门课程中,我们仅仅将其作为进行实验的一个平台,目的是快速切入,因此在讲解过程中采用了以同学们较为熟悉、简单地实例为向导。讲解在描述某一逻辑器件的过程中介绍出现的语法现象,并进行解释。例如:我们在讲述vhdl语言时,采用了d触发器这个例子。d触发器的代码如下:

library ieee; ――定义库

use ieee.std_logic_1164.all; ――定义包

entity ddf is

port(d,clk: in std_logic;

q: out std_logic);

end entity ddf; ――定义实体和输入输出接口

architecture behave of ddf is ――定义结构体

signal sig_save: std_logic; ――定义信号量类型内部变量

begin

process(clk) ――定义过程

begin

if clk'event and clk='1' then ――上升沿工作

sig_save

end if;

q

end process;

end architecture behave;

对于d触发器,大部分同学都比较熟悉,我们以此为出发点讲述vhdl语言。通过该例子,我们讲述以下的重要语法现象:库、使用库、实体、输入输出接口定义、数据类型(包括如何定义向量数据类型)、结构、过程、敏感、上升沿的定义和使用、信号和变量、信号和变量的赋值,顺序语句与并行语句的讲解。并且,我们介绍了d触发器实现的不同方式,以促进学生进一步理解vhdl语言。在讲述完这样一个例子以后,我们要求学生完成一个简单的题目,2-4译码器的设计。因为在进行存储器的扩充实验当中要用到译码器,现在设计一方面熟悉语言的使用方式,另一方面方便以后调用进行层次化的设计。

2) 因材施教,鼓励创新。

对于我们的实验题目,一方面我们设置了必修题目和选修题目,以体现因材施教的目的,从演示型题目到设计型,综合型的题目。另一方面,对于设计的题目,讲解多种设计方案,不限定在指定的设计方法,鼓励学生开动脑筋,积极动手动脑。

3) 从浅入手,循序渐进。

毋庸讳言,有一部分同学对于编程有一定的畏惧感和挫败感,如何鼓励学生,调动学习的兴趣,加强其信心是我们实验题目设计中所要重点考虑的问题。我们对于实验题目的设计采用了由浅入深的顺序。从简单的一位加法器开始,给学生以成功感,以促使其主动的钻研下去。

4) 事前预习。

在每次实验之前,我们都要求学生预习实验题目,预先设计方案和代码,做好充分准备。然后再实验室中调试和验证。在实验过程中,我们会给出特定的要求,以测试同学的设计能力。

2.3教学重点内容

通过这门课程的学习,我们希望学生不仅仅加深对于计算机组成原理的学习,同时学习到eda工具、语言和方法,为进一步学习奠定基础,并有助于学生将来的就业。所以,在实验课程中,我们循序渐进地安排了以下的方法和概念的学习和使用,以在最短的时间中最大化的掌握vhdl语言的精华。

1) 层次化设计方法。

对于复杂问题的设计方式有:自顶向下和自底向上两种设计方式。不论哪种设计方法都必须使用层次化的设计的概念和方法。层次化设计的实现有两种方式:原理图的方式、元件例化方式。在该课程的介绍中,我们首先介绍quartus ii软件的使用,同时介绍原理图的绘制和基于原理图方式的层次化设计方式。然后以实例为向导介绍vhdl语言,进一步介绍元件例化。

2) 状态机。

状态机是数字设计中重要的概念,是高效实现数字逻辑控制的重要途径。有一些问题的解决可以用状态机实现也可以用其它方式实现,但状态机能够更快捷、方便、概念清晰,有一些问题的解决则只能使用状态机。我们在进行时序发生器和运算器等简单题目设计时,介绍状态机的概念和典型构架,要求学生学习和使用。当然这些题目的实现也可以不用状态机实现,但是为了学生今后进一步学习,我们力求讲透状态机的概念和设计方法。同时也能为最后的综合性题目cpu的设计奠定基础。

3结语

通过计算机组成实验课程的学习,学生加强了对于计算机组成的理解,增强了动手能力和自学能力。特别是在设计同一个题目时出现多种方案,超出了教师讲解的可选范围。学习能力一般的同学,感觉自己也能完成给定的设计任务,增强了信心。能力较强的同学,一方面对于自己的设计不断精益求精,并对于eda的设计、de2开发板充满了兴趣,愿意进行进一步的深入学习。

参考文献:

[1] 蔡炳新,蔡炽,曾鸽鸣,等. 改革实验教育教学培养创新型人才[j]. 实验室研究与探索,2009,28(1):17-19.

[2] 付必谦,于志红,李春林. 开放实验,促进学生自主研究[j]. 实验技术与管理,2005,22(9):11-14.

[3] 杨学颖,苏光奎. 计算机硬件课程教学问题初探[j]. 河南教育学院学报:自然科学版,2006,15(1):86-88.

[4] 赵硕,杨欣宇. 计算机组成原理课程的设计性实验[j]. 高师理科学刊,2005,25(2):77-78.

[5] 白中英,张杰,靳秀国,等. tec-5数字逻辑与计算机组成的实验系统[j]. 实验技术与管理,2007,24(11):49-51.

[6] 薛宏熙,胡秀珠.计算机组成与设计[m].北京:清华大学出版社,2007.

[7] 刘锦萍,潘云燕,谭召军. 利用max plusii软件仿真计算机组成原理实验[j]. 嘉兴学院学报,2004,16(6):28-29.

teaching of computer organization experiment based on eda

chen hongmei, ma yongqiang, he rong

(school of information science & technology, southwest jiaotong university, chengdu 610031, china)

vhdl语言篇10

【关键词】vhdl;通用;分频器;同步

designt of even-divider with synchronous terminal which pulse width modulation in vhdl

wang liqiu1

(changchun institute of optics,fine mechanics and physics,chinese academy of science,changchun 130033)

abstract:in order to realize by top-down method as time system design of synchronous pulse signal digital logic circuits,circuit design using vhdl language design a universal divider.by setting the universal divider of the generic generic description of the parameters m1 and n1,clr input synchronous signal,you can output different pulse width and signal leading edge and clr signal forward fully synchronous synchronous pulse signal.the simulation results show that the result is correct,the engineering practice the synchronous error in the measurement of

keywords:photo-electronic measure;time system;fpga;vhdl

1.引言

时统统一终端[1]除了为测控设备[2]提供基于utc标准或gps标准的绝对时间信息外,还要对外提供各种在时间起点上与输入标准秒信号完全同步的同步脉冲信号。随着可编程逻辑器件工艺和开发工具的快速发展,可编程逻辑器件(fpga)已经逐渐成为数字电路的主流电子元件,利用eda工具实现硬件数字逻辑电路,使得硬件电路可以在不更改pcb的基础上进行修改和升级,因此成为目前硬件电路的首选。标准化硬件描述语言vhdl由于符合eda电路自动化设计的要求,使得传统人工设计方法逐渐被取代,目前已成为eda工具和集成电路厂商的普遍首先。

为了fpga芯片[3]中实现各路脉宽和频率不同的独立同步信号输出的目的,利用vhdl语言的优点,设计一个通用的带有同步端口且参数可调的分频器,通过调用和设置不同的分频器模块,按top-down设计方法实现主电路的设计。

2.带同步端可变脉宽通用偶数分频器

分频器[5]是对较高频率的时钟信号进行分频操作,从而得到较低频率的信号。带同步端可变脉宽通用偶数分频器,要求具有脉宽和频率可调,并且输出信号与输入同步信号clr同步的功能。

设计一个有三个输入信号和一个输出信号的通用分频器,clkin为输入的时钟信号,分频器对此信号进行分频,clr为输入同步信号,最为内部计数器的清零端,实现输出与输入信号同步,reset为复位信号。

3.vhdl语言设计

上述通用分频器的vhdl[4]语言实现如下:

library ieee;

use ieee.std_logic_1164.all;

entity fenpin_e_clr_h is

generic (

n1:integer:=2; --n1为分频倍数;

m1:integer:=1;--m1为脉宽计数;

);

port(

clkin:in std_logic; --时钟信号(5mhz)

reset:in std_logic; --复位信号

clkout:out std_logic; --输出信号

clr :in std_logic --清零信号

);

end fenpin_e_clr_h;

architecture rtl of fenpin_e_clr_h is

signal temp:integer range n1-1 downto 0;

signal s,clear:std_logic;设两级锁存器

begin

process(clr,clear) ;

begin

if clear='1'then

s

elsif rising_edge(clr)then

s

end if;

end process;

process(clkin)—temp对时钟clkin计数并在clr信号到来时同步清零实现同步。

begin

if(s='1')then

temp

clear

else

clear

if(clkin'event and clkin='1') then

if temp=n1-1 then

temp

else

temp

end if;

end if;

end if;

end process;

process(temp,reset)

begin

if reset='1'then

--输出信号脉宽

if temp

clkout

else

clkout

end if;

else clkout

end if;

end process;

先描述一个分频计数器电路,通过计数器对时钟进行计数,然后通过计数值来控制输出时钟高低电平的时间;用电路的并行输出信号来控制输出时钟的高低电平;输入同步信号clr做计数器的清零信号,利用时钟和clr信号对输出信号经过两次锁存器[6](s,clear)控制采样,完成数据输出的同步化,并可有效防止亚稳态。

上述电路中,参数n1用于调节分频倍数,m1用于控制输出脉宽,设置n1,m1为generic类属说明,通过从外部对类属参量的重新设定,改变元件内部结构和功能。n1/m1=占空比,选频标为5mhz,则t=1/f=200ns,则输出信号的脉宽为pulse=200ns*m1。

4.实际应用电路

采用5mhz时钟晶振,输入同步信号clr为1hz时,利用通用模块设计一个输出脉宽为5us的100hz窄脉冲和50hz方波的电路如图1所示。

采用f=5mhz=5*106hz时钟晶振,inst1对其进行n1=100000分频,对时钟clk信号进行m1=50000次计数,得到50hz的与clr同步的方波输出信号,即占空比为m1/n1=1/2。inst2对时钟clk进行n1=500000次分频,对时钟m1=25次计数,得到脉宽为25/(5*106)s=5us,频率为100hz的同步输出信号。

5.仿真结果

采用quartus ii[7]仿真,结果如图2所示。

从波形图可以看出,输出50hz信号为方波信号,输出100hz信号为窄脉冲信号,两个信号的信号前沿在清零信号clk到来时刻与clr信号同步。

6.结论

设计通用的输入端口参数可调的vhdl语言模块,在进行数字电路顶层设计时,只需要简单的参数设置就可以完成同步分频模块阵列的设计和直流码编码输出,使得顶层设计简单。该电路在工程实践中的测量结果为同步精度

参考文献

[1]本社编.时间统一技术[m].国防国内工业出版社,2004,9.

[2]何照才等.导弹航天测量控制系统光电测量[m].国防工业出版社,2002,10.

[3]刘延飞等.基于altera fpga/cpld的电子系统设计及工程实践[m].人民邮电出版社,2009,9.

[4]王金明等.数字系统设计与vhdl[m].电子工业出版社,2010,.5.

[5]李仁发等.数字逻辑设计(第四版)[m].人民邮电出版社,2006.