EDN首页   博客首页 用户登陆  |  注册
aaa
发表于 2008/5/12 14:24:50

2

关于投票

任意整数的分频器VHDL代码

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;


ENTITY vhdl2 IS
generic(n:integer:=2000);
PORT(
CLK: IN STD_LOGIC;
CLKOUT_3:BUFFER STD_LOGIC
);
END vhdl2;
ARCHITECTURE A OF vhdl2 IS
SIGNAL CNT1,CNT2:integer:=0;
SIGNAL OUTTEMP:STD_LOGIC;
SIGNAL LOUT:STD_LOGIC;
SIGNAL OUT3:STD_LOGIC:='0';
BEGIN

pROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1'THEN
IF CNT1=n-1 THEN
CNT1<=0;
ELSe
CNT1<=CNT1+1;
END IF;
END IF;
END PROCESS;

pROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='0'THEN
IF CNT2=n-1 THEN
CNT2<=0;
ELSE
CNT2<=CNT2+1;
END IF;
END IF;
END PROCESS;

pROCESS(CNT1,CNT2 )
BEGIN
if ((n mod 2)=1) then
IF CNT1=1 THEN
IF CNT2=0 THEN
OUTTEMP<='1';
ELSE OUTTEMP<='0';
END IF;

ELSIF CNT1=(n+1)/2 THEN
IF CNT2=(n+1)/2 THEN
OUTTEMP<='1';
ELSE OUTTEMP<='0';
END IF;

ELSE
OUTTEMP<='0';
END IF;
else
if cnt1=1 then
outtemp<='1';
elsif (cnt1=(n/2+1)) then
outtemp<='1';
else
outtemp<='0';
end if;
end if;
END PROCESS;

pROCESS(OUTTEMP,clk)
BEGIN
if ((n/=2) and (n/=1)) then
IF OUTTEMP'EVENT AND OUTTEMP='1' THEN
CLKOUT_3<=NOT CLKOUT_3;
END IF;
elsif (n=2) then
if(clk'event and clk='1')then
clkout_3<=not clkout_3;
end if;
else
clkout_3<=clk;
end if;
END PROCESS;
END A;

系统分类: CPLD/FPGA  |  用户分类: CPLD/FPGA  |  标签: 无标签  |  来源: 整理  | 

点击查看原文

发表评论 阅读全文(792) | 回复(0)

发表于 2007/12/27 16:31:31

1

关于投票

【转载】关于时钟的讨论

转自


无沦是用离散逻辑、可编程逻辑,还是用全定制硅器件实现的任何数字设计,为了成功地操作,可靠的时钟是非常关键的。设计不良的时钟在极限的温度、电压或制造工艺的偏差情况下将导致错误的行为,并且调试困难、花销很大。 在设计PLD/FPGA时通常采用几种时钟类型。时钟可分为如下四种类型:全局时钟、门控时钟、多级逻辑时钟和波动式时钟。多时钟系统能够包括上述四种时钟类型的任意组合。


1.全局时钟

对于一个设计项目来说,全局时钟(或同步时钟)是最简单和最可预测的时钟。在PLD/FPGA设计中最好的时钟方案是:由专用的全局时钟输入引脚驱动的单个主时钟去钟控设计项目中的每一个触发器。只要可能就应尽量在设计项目中采用全局时钟。PLD/FPGA都具有专门的全局时钟引脚,它直接连到器件中的每一个寄存器。这种全局时钟提供器件中最短的时钟到输出的延时。

图1 示出全局时钟的实例。图1 定时波形示出触发器的数据输入D[1..3]应遵守建立时间和保持时间的约束条件。建立和保持时间的数值在PLD数据手册中给出,也可用软件的定时分析器计算出来。如果在应用中不能满足建立和保持时间的要求,则必须用时钟同步输入信号(参看下一章“异步输入”)。

这是一张缩略图,点击可放大。
按住CTRL,滚动鼠标滚轮可自由缩放

这是一张缩略图,点击可放大。
按住CTRL,滚动鼠标滚轮可自由缩放

这是一张缩略图,点击可放大。
按住CTRL,滚动鼠标滚轮可自由缩放

这是一张缩略图,点击可放大。
按住CTRL,滚动鼠标滚轮可自由缩放

这是一张缩略图,点击可放大。
按住CTRL,滚动鼠标滚轮可自由缩放

这是一张缩略图,点击可放大。
按住CTRL,滚动鼠标滚轮可自由缩放
图6 不可靠的门控时钟转换为全局时钟

(这个电路等效于图5电路,但却可靠的多)


3.多级逻辑时钟

当产生门控时钟的组合逻辑超过一级(即超过单个的“与”门或“或”门)时,证设计项目的可靠性变得很困难。即使样机或仿真结果没有显示出静态险象,但实际上仍然可能存在着危险。通常,我们不应该用多级组合逻辑去钟控PLD设计中的触发器。

图7 给出一个含有险象的多级时钟的例子。时钟是由SEL引脚控制的多路选择器输出的。多路选择器的输入是时钟(CLK)和该时钟的2分频(DIV2)。由图7 的定时波形图看出,在两个时钟均为逻辑1的情况下,当SEL线的状态改变时,存在静态险象。险象的程度取决于工作的条件。 多级逻辑的险象是可以去除的。例如,你可以插入“冗余逻辑”到设计项目中。然而,PLD/FPGA编译器在逻辑综合时会去掉这些冗余逻辑,使得验证险象是否真正被去除变得困难了。为此,必须应寻求其它方法来实现电路的功能。
 
这是一张缩略图,点击可放大。
按住CTRL,滚动鼠标滚轮可自由缩放

这是一张缩略图,点击可放大。
按住CTRL,滚动鼠标滚轮可自由缩放
图7 有静态险象的多级时钟

图8 给出 图7 电路的一种单级时钟的替代方案。图中SEL引脚和DIV2信号用于使能D触发器的使能输入端,而不是用于该触发器的时钟引脚。采用这个电路并不需要附加PLD的逻辑单元,工作却可靠多了。 不同的系统需要采用不同的方法去除多级时钟,并没有固定的模式。
 
这是一张缩略图,点击可放大。
按住CTRL,滚动鼠标滚轮可自由缩放
图8 无静态险象的多级时钟
(这个电路逻辑上等效于图7,但却可靠的多)


4.行波时钟

另一种流行的时钟电路是采用行波时钟,即一个触发器的输出用作另一个触发器的时钟输入。如果仔细地设计,行波时钟可以象全局时钟一样地可靠工作。然而,行波时钟使得与电路有关的定时计算变得很复杂。行波时钟在行波链上各触发器的时钟之间产生较大的时间偏移,并且会超出最坏情况下的建立时间、保持时间和电路中时钟到输出的延时,使系统的实际速度下降。
用计数翻转型触发器构成异步计数器时常采用行波时钟,一个触发器的输出钟控下一个触发器的输入,参看图9 同步计数器通常是代替异步计数器的更好方案,这是因为两者需要同样多的宏单元而同步计数器有较快的时钟到输出的时间。图10 给出具有全局时钟的同步计数器,它和 图9 功能相同,用了同样多的逻辑单元实现,却有较快的时钟到输出的时间。几乎所有PLD开发软件都提供多种多样的同步计数器。
 
这是一张缩略图,点击可放大。
按住CTRL,滚动鼠标滚轮可自由缩放
图9 行波时钟
 
这是一张缩略图,点击可放大。
按住CTRL,滚动鼠标滚轮可自由缩放
图12 具有同步寄存器输出的多时钟系统

(如果CLK_A和CLK_B是相互独立的,则REG—A的输出必须在它馈送到1REG_B之前,用REG_C同步化)
 
在许多应用中只将异步信号同步化还是不够的,当系统中有两个或两个以上非同源时钟的时候,数据的建立和保持时间很难得到保证,我们将面临复杂的时间问题。最好的方法是将所有非同源时钟同步化。使用PLD内部的锁项环(PLL或DLL)是一个效果很好的方法,但不是所有PLD都带有PLL、DLL,而且带有PLL功能的芯片大多价格昂贵,所以除非有特殊要求,一般场合可以不使用带PLL的PLD。 这时我们需要使用带使能端的D触发器,并引入一个高频时钟。

这是一张缩略图,点击可放大。
按住CTRL,滚动鼠标滚轮可自由缩放
图13 同步化任意非同源时钟

(一个DFF和后面非门,与门构成时钟上升沿检测电路)

另外,异步信号输入总是无法满足数据的建立保持时间,容易使系统进入亚稳态,所以也建议设计者把所有异步输入都先经过双触发器进行同步化,详情可参阅这篇文章::Are Your PLD Metastable。
 
小结:稳定可靠的时钟是系统稳定可靠的重要条件,我们不能够将任何可能含有毛刺的输出作为时钟信号,并且尽可能只使用一个全局时钟,对多时钟系统要注意同步异步信号和非同源时钟

系统分类: CPLD/FPGA  |  用户分类: CPLD/FPGA  |  标签: cpld/fpga  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(651) | 回复(0)

发表于 2007/12/21 11:40:04

1

关于投票

在系统编程能力(ISP)标准和规范简介

IEEE 1149.1 标准背景

边界扫描/JTAG,即 IEEE/ANSI 标准1149.1_1190,是一套设计规则,可以在芯片级、板级和系统级简化测试、器件编程和调试。该标准是联合测试行动小组(JTAG)(由北美和欧洲的几家公司组成)开发的。IEEE 1149.1标准最初是做为一种能够延长现有自动测试设备(ATE)寿命的片上测试基础结构而开发的。可以从Texas Instruments 边界扫描页面获得更多信息。利用该标准整合测试设计,允许完全控制和接入器件的边界引脚,而无需不易操作的或其它测试设备。每个符合JTAG要求的器件的输入/输出引脚上都包括一个边界单元(如图1所示)。正常情况下,它是透明的和停止运行的,允许信号正常通过。借助于测试模式下的器件,您可以采集输入信号,以备后期分析之用;输出信号可以影响板上的其它器件。

边界扫描单元框图

简而言之,IEEE 1449.1 标准定义了一个串行协议。无论封装约束怎样,该协议都要求每个符合标准的器件上要有4个(也可以是5个)引脚。这些引脚定义了测试接入端口(TAP),以便实现片上测试基础设施的操作,从而确保:

  • 印刷电路板上的所有器件安装正确并处于正确的位置。
  • 器件间的所有互连都与设计所描述的一致。

引脚是:

  • TCK - 这是一个时钟信号,用于同步1149.1内部状态机操作。
  • TMS - 1149.1内部状态机模式选择信号。该信号在TCK的上升沿被采样,用来决定状态机的下一个状态。
  • TDI - 1149.1数据输入引脚。当内部状态机处于正确状态时,信号在TCK的上升沿被采样,并被移入器件的测试或编程逻辑
  • TDO - 1149.1数据输出引脚。当内部状态机处于正确状态时,该信号代表从器件测试或编程逻辑移出的数据位。 输出数据在TCK的下降沿有效。
  • TRST(可选) - 1149.1异步复位引脚。当置低时,内部状态机立即进入复位状态。 由于该引脚是可选的,而通常为器件增加引脚会带来额外的成本,因此很少使用。 此外,内部状态机(如标准所定义的)已经明确定义有同步复位机制。

TAP引脚驱动一个16-状态控制器(状态机)。该状态机的状态根据TCK上升沿时TMS信号的值进行状态转换。 查看问答数据库内的状态机图解。

图中位于弧线旁边的'0'和'1'表示TCK上升沿时TMS信号的逻辑状态。

1149.1标准规定仅在Shift-DR或Shift-IR状态时TDI有效并被移入(TDO有效并被移出)。 Shift-IR状态选择TDI和TDO之间的器件指令寄存器。 根据选择的指令,不同的数据寄存器被激活。 在Shift-DR状态时,TDI和TDO之间与先前输入的指令相对应的数据寄存器被选中。 缺省数据寄存器是强制性的1位旁路寄存器。

外部边界扫描描述语言(BSDL)文件规定了任何器件的边界扫描逻辑的特性和特征。这些文件由IC制造商提供,并被用来生成符合IEEE 1149.1标准的器件操作的算法描述。

多个边界扫描器件以菊花链形式串接起来。 每个器件共享同样的TCK和TMS信号。 一个器件的TDO连接到下一个器件的TDI。 由于所有的器件采用同样的TCK和TMS,因此所有器件同时且同步地顺序转换TAP控制器状态。因此,所有的器件都处于同一个TAP控制器状态下。当将数据(在 Shift-IR 或 Shift-DR 状态)移到边界扫描链中时,所有器件都有寄存器在内部连接在其 TDI 和 TDO 引脚之间。 结果很明显,就是单个固定长度移位寄存器从系统 TDI 引脚转到系统 TDO。

 

IEEE 1532配置和编程标准

利用先进PLD和配置PROM设计的新系统需要最好的编程和配置技术。IEEE 1532标准所制定的技术规范使设计人员可同时编程多片器件,利用增强的芯片功能最小化编程时间,同时生产出更容易维护的、功能强大的系统。通过提供一个功能强大的和可靠的编程环境,这一新标准为更方便的硬件升级铺平了道路。

IEEE 1532标准简化了任何合格的PLD的配置,即使是在远程环境下也是如此。其统一的编程方法几乎消除了任何器件编程不确定性,并可保证正确的系统启动顺序(包括在掉电故障后)。 它允许用户容易地实现现场诊断和新功能,从而延长产品生命周期并降低现场维护成本。

IEEE 1532

编程和算法数据分开保存。可以在不影响另一个的情况下改变另一个,这样就消除了每次设计变更之后进行重新编译的必要。边界扫描工具和自动测试设备可以将编程效率最大化,还能将编程时间降至最短,从而降低了生产成本。

IEEE 1532标准具有明确定义的可提供增强功能的系统级指令,如有些指令可支持简单地实现同时编程,从而可进一步缩短编程时间。 通过利用这些简单的指令,设计人员可以缩短产品上市时间并集中精力进行系统特性和设计优化,而不是花费大量时间纠缠配置问题。

 

器件和软件支持

下列器件和产品系列可充分支持和利用IEEE 1532标准(参考IEEE Std 1532 BSDL文件):

  • CoolRunner™-II
  • Spartan™ 系列 FPGA
  • Virtex™ 系列 FPGA
  • System ACE™

Xilinx还提供了可以免费下载的、世界首款IEEE 1532标准编程引擎J Drive

自动测试设备(ATE)、第三方工具和在线编程器参与者

主要的电信和消费类电子公司合作制定了能够在各种不同的可编程器件上满足他们的需要的标准。主要的自动测试设备制造商(Agilent和Teradyne)、边界扫描工具供应商(ASSET Intertech、Corelis、Intellitech和JTAG Technologies)和在线编程器供应商(Data I/O和BP Microsystems)参与了IEEE-STD-1532的开发。

为了方便您的使用,我们提供了ATE和边界扫描(JTAG)工具及合作伙伴列表。

 

串行矢量格式(SVF)

串行矢量格式(SVF)规范是基于边界扫描的刺激信息交换的标准。虽然它可以自由分配,但它不是开放的标准。目前,Asset Intertech拥有该标准的版权。

JEDEC

  • JEDEC编程文件 - 更正式的名称是用于在数据准备系统和可编程逻辑器件编程器间进行数据传输的JESD3-C标准数据传输格式。可从JEDEC网站下载该文件。
  • JEDEC链描述文件 - 更正式的名称是用于链描述文件的JESD32 标准。 这一文件格式描述串行链中任意的可编程器件连接。 它试图用同一种语言均衡非1149.1类和1149.1类串行链的描述。但是,它不能描述复杂的边界扫描连配置,如分层或多支路架构。

BSDL

边界扫描描述语言(BSDL)标准1149.1b 用来描述 JTAG 1149.1 边界扫描兼容器件中的 1149.1 TAP 控制器和边界扫描寄存器。 BSDL还做为VHDL标准的子集实现。Xilinx 广泛地测试和验证了每个BSDL文件

系统分类: CPLD/FPGA  |  用户分类: CPLD/FPGA  |  标签: jtag  |  来源: 整理  | 

点击查看原文

发表评论 阅读全文(731) | 回复(0)

发表于 2007/12/4 12:01:36

2

关于投票

FPGA开发工程师路在何方?

FPGA开发工程师路在何方?

FPGA作为一个比较新的领域,在最近几年中有很大的发展和进步。各个厂家的FPGA不断推陈
出新,工艺越来越高、速度越来越快、功能越来越多,价格却越来越便宜了。随着FPGA成本
的进一步降低和规模的增加,在未来几年中FPGA应该有更加宽广的应用领域。这样看来
FPGA的开发人员似乎有一个不错的将来。但是就我看来,FPGA开发人员在中国发展前景并不
是很好。
  FPGA的开发一般归属于硬件开发的范畴。说起硬件开发,大部分人想到的是画PCB和原
理图。在IC厂家的参考设计和公板横行的现实情况下,FPGA设计含有较高的创造性和技术含
量。当然PCB设计也有很多技术含量高的部分,比如信号完整性和模拟信号处理等。但是,
在中国IT发展的环境中,有技术含量并不等于有发展前途。中国的IT公司绝大部分还是以采
用IC厂家的套片来生产产品为主。因此,公司关心的是如何将厂家的IC、自己设计的单板、
软件、结构件拼装为一个系统。而FPGA在这个系统当中只是充当很小的一个配角。比如在总
线不能直接连接、没有满足需求的现成的IC、IC停产等情况下,才会考虑使用FPGA。所以,
国内FPGA的从业人员不多,需求也不大。另外,FPGA开发人员的工作过于”底层”,接触的
是寄存器和与非门和接口信号的时序。这样就导致FPGA开发人员对硬件、软件系统和用户需
求的不了解。对系统和用户需求的不了解,在主要做系统的公司中是很难有大的发展的。试
问现在IT公司中的产品经理、项目经理有几个是从做FPGA的人中提拔的呢?中国这个轻技术
、重管理的环境注定了FPGA行业的从业人员只能限于底层开发人员的职业,从前途和“钱途
”来讲都逊色与做PCB单板设计和做软件设计行业。至于转行,由于FPGA设计和ASIC设计前
端的相似性,FPGA开发人员可以考虑转向ASIC设计,或者直接转到ASIC的FPGA验证方向。
  FPGA的开发人员好比练了葵花宝典,空有一身武功却无法开枝散叶。写到这里心里不禁
凄凉,问问各位看客:FPGA开发工程师路在何方?


另外RoHS补充几句,FPGA的优势在总线的IP整合,感觉没这么多实际需要.
--

发信人: dancingblood (做优秀硬件工程师), 信区: FPGATech
标  题: Re: 好像大家都比较看好FPGA,我来泼点冷水。(zz)
发信站: 水木社区 (Thu Oct 12 17:58:48 2006), 站内

我抛个砖。。。

硬件搭台子,算法唱戏。
单片机,嵌入式,DSP,FPGA,PCB,说小了是工具,是技能,说大了是解决方案,单片机从
CISC到RISC,裸奔的程序到小巧的OS,ARM能架Linux,WinCE到VxWorks,DSP的VLIW体系结
构,FPGA的RTL(除非做IC,否则到不了晶体管建模)建模,PCB的模拟,射频以及SI,PI,
这些东西单拿出来,还真未必说能有前途,一个啥都不会的,培训3个月,就能做RTL的逻辑
设计了,我个人认为还是要上升到系统,我要做一个H.264的MP的D1编码器,怎么做?用什
么做?这是一个系统设计的问题,更是一个解决方案的问题,建立时间-成本-功耗-风险
约束条件,你还得选是用多DSP做,还是ASIC+Host Processor做,还是DSP+FPGA做?存储器
配什么样子的,DDR还是DDR2还是ZBT?然后SI和PI问题怎么解决,电源问题怎么解决?多处
理器互连问题怎么解决,算法如何调度?这些东西的一个Traceoff做好了就不容易了。

在说说算法,懂硬件懂算法才是真正的出路,做FPGA的,一定要做算法分解,算法映射,刚
开始可能是拿到一个分解好的模块去做RTL或者Testing,以后一定要Update到System设计,
无论是通信还是视频亦或是原型,总而言之,你要说只作模块的RTL设计和TestBench,好点
的结构上出个专利,差点的就是高级小民工。

一家之言,欢迎拍砖~~

【 在 RoHS (1149.6) 的大作中提到: 】
: FPGA开发工程师路在何方?
: FPGA作为一个比较新的领域,在最近几年中有很大的发展和进步。各个厂家的FPGA不断推
陈出新,工艺越来越高、速度越来越快、功能越来越多,价格却越来越便宜了。随着FPGA成
本的进一步降低和规模的增加,在未来几年中FPGA应该有更加宽广的应用领域。这样看来
FPGA的开发人员
:   FPGA的开发一般归属于硬件开发的范畴。说起硬件开发,大部分人想到的是画PCB和
原理图。在IC厂家的参考设计和公板横行的现实情况下,FPGA设计含有较高的创造性和技术
含量。当然PCB设计也有很多技术含量高的部分,比如信号完整性和模拟信号处理等。但是
,在中国IT发展
: ...................

--

※ 来源:·水木社区 newsmth.net·[FROM: 221.219.117.*]
发信人: frankrick (garfield), 信区: FPGATech
标  题: Re: 好像大家都比较看好FPGA,我来泼点冷水。(zz)
发信站: 水木社区 (Thu Oct 12 18:26:15 2006), 站内

不太同意....
1. FPGA开发当然属于硬件范畴,但注意是芯片级,不是电路板级。两者相似但是有区别:
前者强调逻辑功能的实现,复杂度主要在于前期的需求分析和后期的时序验证上;后者则偏
重于实践经验,复杂度主要在于信号完整性及其处理方法等。

2. FPGA一方面可以用来验证ASIC设计,另一方面,更最主要的,是用来实现新标准/新规范
及其不同标准/规范之间的互联。通常来讲,普通规模的ASIC研发周期都在一年以上,这还
是在流片基本成功的前提之上;而FPGA则多在一年以内,况且FPGA开发可以实现“边做边改
”从而压缩前期开发周期。此外,ASIC立项的基础之一是量产数目,如果实际市场容量不足
几万片,那么做ASIC的成本就要大于采用FPGA的成本,除非是为了追求绝对性能,否则芯片
公司会选择FPGA IP核方案。

3. 板级设计人员更底层,照你的理论他们更没什么前途。实际上恰恰相反的是,合格的
FPGA开发人员一般都是上对高层协议、下对信号和电路都有很好的理解,甚至在SOPC的环境
下对软件开发都有一定了解,可以说起到了承上启下的角色。至于说到系统和用户需求,那
是Architect需要考虑的事情,从某种角度上来讲,纯粹的软件人员和硬件人员都不能很好
的胜任这个角色。现在管理层中缺少搞FPGA出身的,那是因为“FPGA作为一个比较新的领域
”还没多少时间造就出一批经验丰富的可晋升为经理的技术人员,而这种情况肯定会随着时
间的推移而有所变化。

FPGA开发人员的出路:一方面强化自身的技术素质——由于工作性质所带来的便利,FPGA工
程师往往能够接触到最新的技术标准和规范,而且技术接触面更广阔;另一方面则可以向软
件方面拓展一些知识背景,例如辅助实现驱动程序甚至移植嵌入式操作系统。至于管理方面
,我倒觉得这与是否FPGA出身没有本质关系,如果有先天素质并且感兴趣,干什么都可以向
管理方面发展。

系统分类: CPLD/FPGA  |  用户分类: CPLD/FPGA  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(7517) | 回复(2)

发表于 2007/12/4 11:51:44

0

关于投票

VHDL实现VGA接口设计

1、    输入信号

   clk : 时钟(每个象素点的显示时钟)

   reset : 复位信号

2、    输出信号

    vga_hs_control                   :      行同步  

        vga_vs_control                   :      场同步 ;

        vga_read_dispaly               :     

        vga_green_dispaly              :      绿

        vga_blue_dispaly       :  

3、    技术参数

clk : 24M   hs : 30KHZ   vs : 57.14HZ

 

   设计原理

VGA( 视频图形阵列 ) 作为一种标准的显示接口得到广泛的应用 , 一般有专用芯片,本实验采用 FPGA( 现场可编程门阵列 ) 设计 VGA 接口可以将要显示的数据直接送到显示器,节省了计算机的处理过程,加快了数据的处理速度,节约了硬件成本。

显示适配器有多种形式,它可按照所符合的视频显示标准来分类,业界制定了多种显示标准,从最初的 MDA 经历了 CGA EGA VGA XGA,SVGA 等的发展过程。与相应的显示适配器标准相配的显示器也称之为 EGA VGA XGA 显示器等。实际上显示器的标准主要反映在它们的接口,显示功能和行,场工作频率上。

 

CRT 显示器的扫描方式

(1)    当栅扫描方式 从上向下依次顺序扫描

完一场称逐行扫描。一行用行频控制( hs ,

一场用场频控制( vs )。扫完一行回来叫行消

隐,扫完一场回来叫场消隐

(2)    随机扫描方式

 

VGA 接口标准

时钟频率: 25 175 MHz( 像素输出的频率 ) ;行频: 31. 469 Hz ;场频: 59 94 Hz  

 

设计 VGA

设计 VGA 图像显示控制需要注意两个问题 L2] :一个是时序的驱动,这是完成设计的关键,时序稍有偏差,显示必然不正常,甚至会损坏彩色显示器;另一个是 VGA 信号的电平驱动。显示控制器设计提示:显示器技术规格提供的行频一般在 30 kHz 45 kHz( 保守数据 ) ,场频一般在 50 Hz 75 Hz( 保守数据 ) 。针对以上保守数据,设计分辨率为 640x480 的显示接口(如图 4 所示),以 30 kHz 的行频进行扫描时所需时钟频率为: 30 kHz × 800( 行周期 )=24 MHz ,则场频为: 30 kHz ÷ 525( 场周期 )=5.14 Hz 。本实验实现在显示器上显示彩条的设计,初始时时 GRB= 000 ”,用一记数器过一段时间使 R 取反,即变为红色。这样就有黑、红彩条了。
点击看大图

 

 

 

 

 

             绿                         

R

G

B

 0   0   0     0    1    1   1   1

 0   0   1     1    0    0   1   1

 0   1   0     1    0    1   0   1              

 

实验验证

1、 仿真时序图

点击看大图

 

2、 验证平台及芯片

Xilinx 公司的 Xilinx Project Navigate

下载芯片为: Xilinx Sparan2/xsc200

  小结

1、  技术难点

显示器显示原理、 VGA 接口原理的理解

       2 、设计技巧

3 、不足或改进措施

不足:功能单一(彩条显示)

改进:添加字符显示、图象显示、图形显示模块

   参考资料

1 蒋本珊. 计算机组成原理与系统结构 北京航空航天大学出版社 p192-p198

2 陈姚节 卢建华. 基于FPGA的VGA显示接口的研究与设计

   源程序


 

library ieee;

use ieee.std_logic_1164.all;

USE ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity vga is

       port(

              reset                                   :      in     std_logic;

              clk                              :      in  std_logic;

              vga_hs_control                    :      out std_logic;

              vga_vs_control                    :      out std_logic;

              vga_read_dispaly          :      out std_logic;

              vga_green_dispaly         :      out std_logic;

              vga_blue_dispaly           :      out std_logic         

       );

end vga; 

ARCHITECTURE a OF vga IS

       SIGNAL hs: STD_LOGIC;

       SIGNAL vs: STD_LOGIC:='1';

    SIGNAL GRB: STD_LOGIC_VECTOR(2 DOWNTO 0);

BEGIN

PROCESS (clk) --clk = 24MHZ  hs = 30 Khz vs = 57hz

       VARIABLE i    :      integer range 0 to 799:=0;

       VARIABLE j    :      integer range 0 to 79:=0;

BEGIN

 if reset = '1' then

   GRB <= "000"; i:=96; j:=0;  hs <= '1';

       elsif clk'event and clk = '1'  then

         if i < 96 then

            hs <= '0';

         elsif i = 799 then

            i:=0;

         else

            hs <= '1';

         end if;

         if j = 79 then

            GRB(1) <= not GRB(1);

            j:=0;

         end if;

         i:=i+1;

         j:=j+1;              

       end if;

       vga_hs_control <= hs; 

END PROCESS ;

PROCESS (hs)

VARIABLE k   :      integer range 0 to 524:=0;

BEGIN

if reset = '1' then

   k:=2; vs <= '1';

       elsif hs'event and hs = '1' then

           if k < 2 then

              vs <= '0';

           elsif k = 524 then

              k:=0;

           else

              vs <= '1';

           end if;

           k:=k+1;

         end if;

  vga_vs_control <= vs; 

END PROCESS ;

 

PROCESS (clk)

BEGIN

       if clk'event and clk = '1' and vs = '1' and hs ='1' then

              vga_green_dispaly <= GRB(2);

           vga_read_dispaly  <= GRB(1);

              vga_blue_dispaly  <= GRB(0);                
         
end if;

END PROCESS ;

       END a;

系统分类: CPLD/FPGA  |  用户分类: CPLD/FPGA  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(2202) | 回复(1)

发表于 2007/12/4 11:43:22

0

关于投票

fpga驱动vga接口的vhdl语言实现

[转载]来自于《基于FPGA的嵌入式系统设计》
我使用ep2c5的实验板作过了实验,没有问题的,可惜只能显示彩条,方格。
McMaster University有一篇介绍vga接口协议的vhdl实现介绍,可以自己下载参考。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity vgacore is
    Port ( clk : in std_logic;
       reset : in std_logic;
           md : in std_logic_vector(1 downto 0);
           hs : out std_logic;
           vs : out std_logic;
           r : out std_logic_vector(1 downto 0);
           g : out std_logic_vector(2 downto 0);
           b : out std_logic_vector(2 downto 0)
 );
end vgacore;

architecture Behavioral of vgacore is
signal sysclk : std_logic;
signal hsyncb : std_logic;
signal vsyncb : std_logic;
signal enable : std_logic;
signal hloc : std_logic_vector(9 downto 0);
signal vloc : std_logic_vector(9 downto 0);
signal rgbx,rgby,rgbp,rgb: std_logic_vector(7 downto 0);

--定义VGASIG元件,产生同步信号进行行、场扫描,即显示驱动
component vgasig    
   Port (
       clock : in std_logic;
       reset : in std_logic;
       hsyncb : buffer std_logic;
       vsyncb : out std_logic;
       enable : out std_logic;
       Xaddr : out std_logic_vector(9 downto 0);
       Yaddr : out std_logic_vector(9 downto 0)
  );
end component;

--定义colormap元件,确定颜色及位置信息
component colormap
   Port (
       hloc : in std_logic_vector(9 downto 0);
       vloc : in std_logic_vector(9 downto 0);
       rgbx : out std_logic_vector(7 downto 0);
       rgby : out std_logic_vector(7 downto 0)
  );
end component;

begin
  rgb(7) <= rgbp(7) and enable;
  rgb(6) <= rgbp(6) and enable;
  rgb(5) <= rgbp(5) and enable;
  rgb(4) <= rgbp(4) and enable;
  rgb(3) <= rgbp(3) and enable;
  rgb(2) <= rgbp(2) and enable;
  rgb(1) <= rgbp(1) and enable;
  rgb(0) <= rgbp(0) and enable;

--产生25Mhz的像素输出频率
  divclk: process(clk,reset)
  begin
    if reset='0' then
     sysclk <= '0';
  elsif clk'event and clk='1' then
    sysclk <= not sysclk;
  end if;
  end process;
 
--模式选择单元:本测试程序我们使用了4种模式,由KEY_B2,KEY_B3控制,当选择模式"11"时,即不按下B2,B3,VGA显示竖彩条;当选择模式"00"时,即同时按下B2,B3时,VGA显示全黑;当选择模式"01"时,即只按下B2时,VGA显示横彩条;当选择模式"10"时,即只按下B3时,VGA时显示横竖彩条。
  modchoice: process(md,rgbx,rgby)
  begin
    if md="11" then rgbp <= rgbx;
  elsif md="01" then rgbp <= rgby;
  elsif md="10" then rgbp <= rgbx xor rgby;
    else rgbp <= "00000000";
  end if;
  end process;

  makesig: vgasig Port map(
       clock => sysclk,
       reset => reset,
       hsyncb => hsyncb,
       vsyncb => vsyncb,
       enable => enable,
       Xaddr => hloc,
       Yaddr => vloc
  );

  makergb: colormap Port map(
       hloc => hloc,
       vloc => vloc,
       rgbx => rgbx,
       rgby => rgby
  );

  hs <= hsyncb;
  vs <= vsyncb;
  r <= rgb(7 downto 6);
  g <= rgb(5 downto 3);
  b <= rgb(2 downto 0);
  
end Behavioral;


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity vgasig is
    Port ( clock : in std_logic;
           reset : in std_logic;
           hsyncb: buffer std_logic;
           vsyncb: out std_logic;
           enable: out std_logic;
           Xaddr : out std_logic_vector(9 downto 0);
           Yaddr : out std_logic_vector(9 downto 0));
end vgasig;

architecture Behavioral of vgasig is
--定义相关常量,可参考VGA相关工业标准
constant H_PIXELS: INTEGER:=640;
constant H_FRONT:  INTEGER:=16;
constant H_BACK:   INTEGER:=48;
constant H_SYNCTIME:INTEGER:=96;
constant H_PERIOD: INTEGER:= H_SYNCTIME + H_PIXELS + H_FRONT + H_BACK;
constant V_LINES: INTEGER:=480;
constant V_FRONT: INTEGER:=11;
constant V_BACK: INTEGER:=32;
constant V_SYNCTIME: INTEGER:=2;
constant V_PERIOD: INTEGER:= V_SYNCTIME + V_LINES + V_FRONT + V_BACK;

signal hcnt: std_logic_vector(9 downto 0); -- 行计数器
signal vcnt: std_logic_vector(9 downto 0); -- 场计数器

begin

--产生行计数(记录每行的点数),H_PERIOD 为行周期计数值。
A: process(clock, reset)
begin
 --复位时行计数器清零
 if reset = '0' then
  hcnt <= (others => '0');
 elsif (clock'event and clock = '1') then
  --当行计数到达计数周期时将重置
  if hcnt < H_PERIOD then
   hcnt <= hcnt + 1;
  else
   hcnt <= (others => '0');
  end if;
 end if;
end process;

--产生场记数(记录每帧中的行数),V_PERIOD为场周期计数值
B: process(hsyncb, reset)
begin
 -- 复位场计数器清零
 if reset='0' then
  vcnt <= (others => '0');
 elsif (hsyncb'event and hsyncb = '1') then
   if vcnt < V_PERIOD then
   vcnt <= vcnt + 1;
  else
   vcnt <= (others => '0');
  end if;
 end if;
end process;

--产生行同步信号,H_PIXELS为行显示点数,H_FRONT为前消隐点数,H_SYNCTIME为行同步点数
C: process(clock, reset)
begin
  if reset = '0' then
  hsyncb <= '1';
 elsif (clock'event and clock = '1') then
  if (hcnt >= (H_PIXELS + H_FRONT) and hcnt < (H_PIXELS + H_SYNCTIME + H_FRONT)) then
  hsyncb <= '0';
  else
   hsyncb <= '1';
  end if;
 end if;
end process;

--产生场同步信号,V_LINES为场显示点数,V_FRONT为前消隐点数,V_SYNCTIME场同步点数
D: process(hsyncb, reset)
begin
  if reset = '0' then
  vsyncb <= '1';
  elsif (hsyncb'event and hsyncb = '1') then
  if (vcnt >= (V_LINES + V_FRONT) and vcnt < (V_LINES + V_SYNCTIME + V_FRONT)) then
   vsyncb <= '0';
  else
   vsyncb <= '1';
  end if;
 end if;
end process;

E: process (clock)
begin
 if clock'EVENT and clock = '1' then
  -- 此处enable为低
  if hcnt >= H_PIXELS or vcnt >= V_LINES then
   enable <= '0';
   else
    enable <= '1';
   end if;
 end if;
end process;

H:
Xaddr <= hcnt;
Yaddr <= vcnt;

end Behavioral;

 

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity colormap is
    Port ( hloc : in std_logic_vector(9 downto 0);
           vloc : in std_logic_vector(9 downto 0);
           rgbx : out std_logic_vector(7 downto 0);
           rgby : out std_logic_vector(7 downto 0));
end colormap;

architecture Behavioral of colormap is

begin
--然后产生彩条信号,下面是竖彩条的产生,横彩条、方格等信号产生类似。

  process(hloc,vloc)
  begin
     case hloc(7 downto 5) is
       when "000" => rgbx <=  "11111111";
       when "001" => rgbx <=  "00000000";
   when "010" => rgbx <=  "11000000";
   when "011" => rgbx <=  "00000111";
           when "100" => rgbx <=  "00111000";
   when "101" => rgbx <=  "11000111";
   when "110" => rgbx <=  "11111000";
   when "111" => rgbx <=  "11111111";
   when others => rgbx <= "00000000";
 end case;
 case vloc(7 downto 5) is
       when "000" => rgby <= "10101010";
   when "001" => rgby <= "01010101";
   when "010" => rgby <= "11001110";
   when "011" => rgby <= "00110001";
   when "100" => rgby <= "00101110";
   when "101" => rgby <= "01100110";
   when "110" => rgby <= "11111100";
   when "111" => rgby <= "00011110";
   when others => rgby <= "00000000";
  end case;
     end process;
end Behavioral;

系统分类: CPLD/FPGA  |  用户分类: CPLD/FPGA  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(1715) | 回复(1)

发表于 2007/11/8 12:03:14

0

关于投票

Altera FPGA/CPLD 学习笔记

Altera FPGA/CPLD 学习笔记

    Xilinx,Altera,Lattice是可编程器件的主要三个生产厂家。最近领导安排叫我学习AlteraFPGA,以前主要接触的Xilinx的东西多一些。所以一上手感觉生疏,特别是QuartusII软件。

Quartus IIAltera公司新一代的FPGA/CPLD开发环境。前一代Max+plusII开发环境Altera公司已经不再提供新的版本。所以今后学习还是应用尽可能使用Quartus II。以前Max+plusII的工程文件也可以导入QuartusII中。熟悉MaxplusII的也可以将QuartusII的界面转换成MaxplusII

一.     基础知识

1.          FPGA/CPLD的区别与联系

项目

FPGA

CPLD

备注

结构工艺

多为LUT加寄存器结构,实现工艺多为SRAM,也包含Flash,Anti-Fuse等工艺

多为乘积项,工艺多为E2CMOS,也包含EEPROM,Flash,Anti-Fuse等不同工艺

 

触发器数量

FPGA更适合实现时序逻辑,CPLD多用于组合逻辑

Pin to pin延时

不可预测

固定

FPGA而言,时序约束和仿真非常重要

规模与逻辑复杂度

规模大,逻辑复杂度高,新型器件高达千万门级

规模小,逻辑复杂度低

 

成本与价格

成本高,价格高

成本低,价格低

 

编程与配置

一般包含2种,外挂BootRom和通过MCUDSP等在线编程。多数基本属于RAM型。掉电后程序丢失

有两种编程方式,一种是通过编程器烧写ROM,另一种较方便的方式是通过ISP模式。一般为ROM型,掉电后程序不丢失。

FPGA掉电后一般将丢失原有逻辑配置,而反熔丝工艺的FPGA,如Actel的某些器件族和目前内嵌FlashEECMOSFPGA,LatticeXP器件族,可以实现非易失配置方式

保密性

一般保密性较差

一般的fpga不容易实现加密,但是目前的一些采用flashsram工艺的新型器件(litticexp系列等)在内部嵌入了加载flash,能提供更高的保密性

互联结构,连线资源

分布式,丰富的布线资源

集总式,相对布线资源有限

Fpga布线灵活,但是时序更难规划,一般需要通过时序约束,静态时序分析,时序仿真等手段提高并验证时序性能

适用的设计类型

复杂的时序功能

简单的逻辑功能

 

                    1-1

2.          逻辑电路概念

   组合逻辑

  电路的输出信号只与该时刻的输入信号有关,而与电路原来所处的状态无关。

   时序逻辑

          任何一个时刻的输出状态不仅取决于当时的输入信号,还与电路的原状态有关。

          时序电路的特点是具有记忆元件(最常见的是触发器),具有反馈通道。包括各类触发器、寄存器、各类计数器和顺序脉冲发生器,各类存储器。

二.     Quartus II安装破解

   这里以Quartus II 5.1为例。Quartus IIPC机硬件要求较高,尽可能采用高配置的PC机。安装一路next就可以了。主要是破解,一般的配套光盘都有license文件,但需要自己修改HOSTID,也就是你的网卡的物理地址,介绍一下流程。

1.安装完毕Quartus II后,将sys_cpy.dll文件复制copyC:\altera\quartus50\bin,将原来的文件覆盖。

2.C盘新建文件夹flexlm,将光盘中的license.dat 拷贝到c:\flexlm中。同时将只读属性去掉。

3.打开“开始”->运行  输入cmd  进入dos模式。然后输入ipconfig /all  然后记下physical address,也就是hostid

4.c:\flexlm\license.dat打开 HOSTID=后面的id改为你的physical address(去掉中间的-)保存即可。

5.打开Quartus II,选择最下面的选项,进入注册界面,选择c:\flexlm\license.dat就可以。

三.     maxplusII工程转换

打开file->Convert Max+plus II Project 命令将MaxplusII配置文件(.acf)转换为QuartusII工程,并自动为新转化的工程建立配置文件和相关的一些设置。

四.     QuartusII文件后缀名及一些时序参数

  1Quartus II有很多文件,涉及到很多后缀名。这个表格只列举部分,以及文件代表的含义。见表3-1

文件后缀名

描述

*.vhd

vhdl语言文件

*.v

verilog hdl语言文件

*.pof

编程对象文件

*.sof

SRAM对象文件

*.vwf

波形仿真文件

*.bdf

原理图文件

                   3-1

   2FPGA/CPLD设计涉及几个时序参数。可以在Quartus的时序分析器(timer analyzer)功能里看到这些参数,时序分析器可以帮助用户分析设计中所有的逻辑性能,并协助引导fitter满足设计中的时序分析要求。参数见表3-2

时序设置参数

描述

Fmax(最大时钟频率)

在不违反内部建立时间(tsu)时间(th)要求下可以达到的最大时钟频率

Tsu(时钟建立时间)

在触发寄存器计时的时钟信号已经在时钟引脚建立之前,通过数据输入或使能输入进入寄存器的数据必须在输入引脚处出现的时间长度

Th(时钟保持时间)

在触发寄存器计时的时钟信号已经在时钟引脚建立之后,通过数据输入或使能输入进入寄存器的数据必须在输入引脚处出现的时间长度

Tco(时钟到输出延时)

时钟信号在触发寄存器的输入引脚上发生转换后,再由寄存器馈送信号的输出引脚上获得有效输出所需的时间

Tpd(引脚到引脚延时)

输入引脚处的信号经过组合逻辑进行传输,出现在外部输出引脚上时所需的时间

最小tco

 

最小tpd

 

                3-2

 

五.     硬件描述语言的学习与比较

项目

VHDL

Verilog HDL

 

VHDL

Verilog

开发者

美国军方

 

 

 

标准

Ieee 1076(1987,1993)

Ieee 1364(1995)

 

 

语言基础

Pascal,ada

C语言

 

 

功能

门级需要VITAL模型,更适合抽象建模

抽象硬件建模可能需要使用PLI,有内建的门级建模

=

=

编译

每个文件只能有一个实体(entity)

编译依赖代码的顺序

+

 

数据类型

许多自带和用户定义的数据类型,严格类型检查(导致硬件建模比较麻烦),易于查出错误

数据类型简单,便于硬件建模;弱类型检查;用户无法定义数据类型

 

+

设计重用

 Package来共享函数、过程、类型和组件

函数和过程必须在同一module,可使用include

 

 

易学性

不易学,同一电路有多种建模方式

很容易掌握,编译器的directivePLI会增加复杂性

 

+

返标

在很多商用工具中都可以使用SDF

本身就支持SDF

=

=

与其他语言的接口

使用属性foreign

Verilog hdlVerilog hdl软件工具之间使用PLI

 

 

存储编译过的entityarchitecturepackageconfiguration

没有库的概念

 

 

底层结构

没有门级原型(primitive);vital语言来定义原型

门级原型、采用udpspecify对原型道建模

 

+

大型设计能力

Packageconfigurationgenerategeneric

+

 

操作符

没有缩减运算符

有缩减运算符

 

+

参数化模型

宽度,延迟等

宽度,延迟等

=

=

过程与任务

允许并发过程调用

+

 

可读性

繁琐。更像句子

简练,熟悉C的人喜欢

 

+

结构重复

使用generate

+

 

测试平台

类属(generic)很有用,configuration语句很有用

文件访问类似硬件操作

+

 

                        6-1

   选择VHDL还是Verilog HDL?这是一个初学者最常见的问题。其实两种语言的差别并不大,它们的描述能力也类似。掌握其中一种语言以后,可以通过短期的学习,较快的学会另外一种语言。选择何种语言主要还是看周围的人群的使用习惯,这样便于日后的学习和交流。当然,如果是集成电路(ASIC)设计人员,则必须首先掌握Verilog HDL,因为在IC设计领域,90%以上的公司都是采用Verilog HDL进行IC设计的。对于FPGA/CPLD设计者而言,两种语言可以自由选择。

  学习HDL语言的时候有以下几点提示

1.          了解HDL的可综合性问题。HDL有两种用途:系统仿真和硬件实现。如果程序只用于仿真,那么几乎所有的语法和编程方法都可以使用。但如果我们的程序是用于硬件实现,那么我们就必须保证程序的可综合(程序的功能可以用硬件电路实现)。我们应该牢记一点:所有的HDL描述都可以用于仿真,但不是所有的HDL描述都能用硬件实现。

2.          用硬件电路设计的思想来编写HDL。学好HDL的关键是充分理解HDL语句和硬件电路的关系。编写HDL,就是在描述一个电路,不能用纯软件的设计思路来编写硬件描述语言。

3.          语法掌握贵在精,不在多。30%的基本HDL语句就可以完成95%以上的电路设计,很多生僻的语句并不能被所有的综合软件所支持,程序移植或者更换平台的时,容易产生兼容性问题,也不利于他人阅读和修改。

4.          HDL语言与原理图输入法的关系。HDL和传统原理图输入法的关系就好比高级语言与汇编语言的关系。HDL语言可移植性好,使用方便,但效率不如原理图;原理图输入的可控性好、效率高、比较直观,但设计大规模CPLD/FPGA时显得繁琐,移植性差,在真正CPLD/FPGA设计中,通常建议采用原理图和HDL相结合的方法来设计。

六.     程序下载与配置

1.          Quartus II支持ByteBlaster MV,ByteBlaster II 两种常见的并口JTAG电缆。也支持USB接口的USB BlasterByteBlaser IIUSB Blaster可以对串行配置器件编程。这几种下载线在Win2000下都需要安装驱动。驱动程序在Quartus安装目录下的drivers下。

2.          FPGA的配置和编程方式

   配置,又称加载或下载,是对FPGA的内容进行编程的一个过程。每次上电后需要进行配置是基于SRAM工艺FPGA的一个特点,也可以说是一个缺点。

   FPGA 主动(Active)方式

FPGA主动方式下,有目标FPGA来主动输出控制和同步信号(包括配置时钟)Altera专用的配置芯片(EPCS1EPCS4)在配置芯片收到命令后,就把配置数据发给FPGA,完成配置过程。

AlteraFPGA所支持的主动方式,只能够与Altera公司提供的主动串行配置芯片(EPCS系列)配合使用,因此Altera公司将这种方式称为主动串行AS(Active Serial)模式。AS模式只有在Stratix II系列和Cyclone系列的器件中支持。

   FPGA 被动(Passive)方式

在被动模式下,由系统中的其他设备发起并控制配置过程,这些设备可以是Altera的配置芯片(EPC系列),或者是单板上的微处理器、CPLD等设备。FPGA在配置过程中完全处于被动地位,只是输出一些状态信号来配合配置过程。

被动模式具体细分下来,有许多种模式,包括被动串行PS(Passive Serial),快速被动并行FPP(Fast Passive Parallel) 、被动并行同步PPS(Passive Parallel Synchronous)、被动并行异步PPA(Passive Parallel Asynchronous)、已经被动串行异步PSA(Passive Serial Asynchronous)

  PS(被动串行):所有的AlteraFPGA都支持这种配置方式。可以由Altera的下载电缆、Altera的增强型配置器件(EPC4,EPC8EPC16)和配置器件(EPC1441,EPC1,EPC2)或者智能主机来配置。在做PS配置时,FPGA配置数据从存储器中读出,写入到FPGADATAa0接口上。这些存储器可以是Altera配置器件或者单板机上的其他flash器件。

被动方式的其他几种模式的介绍参考《Altera FPGA/CPLD设计 基础篇》的第6章。

   JTAG方式

Altera FPGA基本都可以支持由JTAG命令来配置FPGA的方式,而且FPGA配置方式比其他任何一种配置方式的优先级都高。JTAG配置方式支持菊花链方式,级联多片FPGA

3.          配置芯片

Altera FPGA的配置芯片可以分为3

   增强型配置器件:EPC16EPC8EPC4;

可以支持对大容量FPGA的单片配置,可以由JTAG接口进行在系统编程(ISP,而且支持FPP快速配置方式。

   AS串行配置器件:EPCS64EPCS16EPCS4EPCS1

专门为Stratix IICyclone IICyclone器件设计的单片、低成本的配置芯片。AS芯片可以由下载电缆或其他设备进行重复编程。

   普通配置器件:EPC2EPC1EPC1441

容量相对较小,其中只有EPC2可以重复编程。要支持大容量FPGA的配置,可以将多片级联起来。

 

七.     参考书籍及开发试验工具

1.          《基于Quartus IIFPGA/CPLD设计》 

2.          Altera FPGA/CPLD设计(基础篇)》

3.          FPGA/CPLD最新实用技术指南》

4.          Altera公司MaxII,Cyclone系列数据手册

5.          某公司试验箱

八.     归纳总结

   AlteraQuartus II开发环境感觉比XILINXISE开发环境要复杂一些,功能方面要多一下。学习起来不是很轻松。要全面掌握其功能需要花费不少时间,也需要在实战中不断摸索学习。

 

 

系统分类: CPLD/FPGA  |  用户分类: CPLD/FPGA  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(1950) | 回复(2)

Total , Page /