FPGA开发全攻略——概念篇

原文链接:

FPGA开发全攻略连载之一:FPGA为什么这么热?

FPGA开发全攻略连载之二:为什么工程师要掌握FPGA开发知识?

FPGA开发全攻略连载之三:FPGA基本知识与发展趋势(part1)

FPGA开发全攻略连载之四:FPGA基本知识与发展趋势(part2)

写在前面

2008年,我参加了几次可编程器件供应商举办的技术研讨会,让我留下深刻印象的是参加这些研讨会的工程师人数之多,简直可以用爆满来形容,很多工程师聚精会神地全天听讲,很少出现吃完午饭就闪人的现象,而且工程师们对研讨会上展出的基于可编程器件的通信、消费电子、医疗电子、工业等解决方案也有浓厚的兴趣,这和其他器件研讨会形成了鲜明的对比。

Garnter和iSuppli公布的数据显示:2008年,全球半导体整体销售出现25年以来首次萎缩现象,但是,可编程器件却还在保持了增长,预计2008年可编程逻辑器件(PLD)市场销售额增长7.6%,可编程器件的领头羊美国供应商赛灵思公司2008年营业收入预计升6.5%!现在2009年即将过去,我们看到可编程器件的应用呈现加速势态,尤其是在赛灵思等公司目标设计平台理念的引领下,FPGA开发的门槛正在不断降低,未来,我相信FPGA的开发可能和开发单片机、DSP一样简单!

在与工程师的交流中,我发现,很多工程师非常需要普及以FPGA为代表的可编程器件的应用开发知识,也有很多工程师苦于进阶无门,缺乏专业、权威性的指导,在Google上搜索后,我发现很少有帮助工程师设计的FPGA系统设计资料,即使有也只是介绍一些概念性的基础知识,缺乏实用性和系统性,于是,我萌生了出版一本指导工程师FPGA应用开发电子书的想法,而且这个电子书要突出实用性,让大家都可以免费下载,并提供许多技巧和资源信息,很高兴美国赛灵思公司对这个想法给予了大力支持,赛灵思公司亚太区市场经理张俊伟小姐和高级产品经理梁晓明先生对电子书提出了宝贵的意见,并提供了大量FPGA设计资源,也介绍了一些FPGA设计高手参与了电子书的编撰。

很短的时间内,一个电子书项目团队组建起来,北京邮电大学的研究生田耘先生和赛灵思公司上海办事处的苏同麒先生等人都参与了电子书的编写,他们是有丰富设计经验的高手,在大家的共同努力下,这本凝结着智慧的FPGA电子书终于和大家见面了!我希望这本电子书可以成为对FPGA有兴趣或正在使用FPGA进行开发的工程师的手头设计宝典之一,也希望这个电子书可以对工程师们学习FPGA开发和进阶有实用的帮助!如果可能,未来我们还将出版后续版本!

第一章、为什么工程师要掌握FPGA开发知识?

作者:张国斌、田耘

2008 年年初,某著名嵌入式系统IT 公司为了帮助其产品售后工程师和在线技术支持工程师更好的理解其产品,举行了ASIC/FPGA 基础专场培训.由于后者因为保密制度而只能接触到板级电路图和LAYOUT,同时因ASIC/FPGA 都是典型的SoC 应用,通常只是将ASIC/FPGA 当作黑盒来理解,其猜测性读图造成公司与外部及公司内部大量的无效沟通.培训结束后, 参与者纷纷表示ASIC/FPGA 的白盒式剖析极大提高了对产品的理解,有效解决了合作伙伴和客户端理解偏异性问题,参加培训的工程师小L 表示:“FPGA 同时拥有强大的处理功能和完全的设计自由度,以致于它的行业对手ASIC 的设计者在做wafer fabrication 之前, 也大量使用FPGA 来做整个系统的板级仿真,学习FPGA 开发知识不但提升了我们的服务质量从个人角度讲也提升了自己的价值。”

实际上,小L 只是中国数万FPGA 开发工程师中一个缩影,目前,随着FPGA 从可编程逻辑芯片升级为可编程系统级芯片,其在电路中的角色已经从最初的逻辑胶合延伸到数字信号处理、接口、高密度运算等更广阔的范围,应用领域也从通信延伸到消费电子、汽车电子、工业控制、医疗电子等更多领域,现在,大批其他领域的工程师也像小L 一样加入到FPGA 学习应用大军中。未来,随着FPGA 把更多的硬核如PowerPC™ 处理器等集成进来,以及采用新的工艺将存储单元集成,FPGA 越来越成为一种融合处理、存储、接口于一体的超级芯片,“FPGA 会成为一种板级芯片,未来的电子产品可以通过配置FPGA 来实现功能的升级,实际上,某些通信设备厂商已经在尝试这样做了。”赛灵思公司全球资深副总裁汤立人这样指出。

可以想象,未来,FPGA开发能力对工程师而言将成为类似C 语言的基础能力之一,面对这样的发展趋势,你还能简单地将FPGA 当成一种逻辑器件吗?还能对FPGA 的发展无动于衷吗?

电子产品设计趋势的变化
自电子产品诞生之日起,电子产品开发流程和方法就随着电子元器件的不断演进而变化,从最早的电子管器件到晶体管再到集成电路,工程师在设计产品时,所采用的工具和方法都有所不同,但是总的来说贯穿电子设计的统一思路是:使用印刷电路板上的分立、现成元件、连接器或IC 创建物理平台实现所需要的功能。例如,在60 年代,如果要设计一个收音机,工程师必须通过在PCB 板上通过晶体管、电阻、电容、电感、电线、滤波器、二极管等电路搭建出一个物理平台,实现对RF 信号的调谐、滤波、放大等,最后实现收音机的功能。

集成电路出现以后,一些分立器件被集成到一颗芯片上,但是总的设计思路没有变化,还是要在一个PCB 板上通过无源器件和IC 搭建出一个物理平台,实现信号的接收、处理和输出。但是,随着FPGA 等可编程器件的诞生,设计思路正发生着微妙的变化——随着更多功能从分立器件移到可编程领域,各种不同的设计流程交汇到了一起。现在,有效的电子设计是将板卡设计、可编程逻辑设计和软件开发融合在一起,未来,随着FPGA 融合处理、存储于一体,板卡设计将融合进可编程逻辑设计中,电子产品设计将演变为可编程逻辑设计和嵌入式软件设计,那时,电子设计将更体现一种“软”设计,一种通过开发语言和工具实现的设计,而FPGA 将成为这种

“软”设计的载体,以 FPGA 形式存在的低成本、大规模可编程器件可以随时随地获得,这使设计者有可能将所有系统核心功能都转移到软设计中,并利用这种设计的优势。这些“软”设计优势包括:更容易保护系统功能使其不被仿制或逆向工程,编程到设计中的“软”元素容易更新,使设计过程更具连续性。好的工具所设计的软设计不依赖于事先指定的硬件平台。而且,设计可以在最终硬件平台内继续进行,即使产品已经移交客户也仍然可行。即“软”设计将成为电子设计的发展方向。

另一点,现今及未来的电子产品都在追求智能化和个性化,智能化只能通过软件来实现,个性化呢,需要工程师简单地修改就可体现不同的特色,另外也需要保护自己的设计不被仿制,要做到这点,也需要可编程器件。每个工程师都希望自的产品永远与众不同。与众不同就是要让产品与竞争产品不一样,让购买者选择你的产品而不选择竞争对手的产品。但是,怎么样才能在日益全球化的市场中保持与众不同呢?不要再指望在硬件上能达到目的,因为现在几乎每个人都能获得同样的芯片。当现有物理硬件中实现的任何功能受到市场的欢迎的同时,大量的仿制就出现了。

所以要将产品的区别建立在编程器件智能上,保护有价值的 IP,并且使竞争对手很难对其进行逆向工程。而且,即使硬件已经制造出来,产品仍可以通过“软”设计进行创新并为产品增值,产品的成功就有了保障。而这些,都离不开可编程器件。可编程器件是实现“软”设计的保障和载体。

设计电子设计工程师设计方法和设计内容在不断变化
电子设计工程师的设计方法和内容其实也在一直变化,电子管时代,设计工程师要掌握电子管的性能和设计要点,晶体管时代,设计工程师要熟悉跟中电路的作用和搭建,集成电路诞生以后,设计工程师要熟悉IC 管脚的作用和功能,而设计工具从最早的草稿图、软件辅助设计也发展到电子设计自动化工具(EDA 软件),以FPGA 为代表的可编程器件诞生后,设计工程师不但要设计硬件电路更要熟悉HDL、Verilog 等IC 设计语言,此外,还要熟悉接口、数字信号处理、算法、EDA 设计方法学等等,电子工程师要学习的知识日益增多。

未来的硬件工程师是什么样的?
那么,未来的的硬件设计工程师是什么样的?或者说未来的硬件设计工程是怎样的?而已这样说:以VHDL 或者Verilog 语言来表达设计意图、以FPGA 做为硬件载体、以计算机为设计开发工具,以EDA 软件为开发环境、以SoC、IP 等为综合设计的方法,已经成为硬件设计工程的主要特征。可以预见,FPGA 将成为未来的硬件工程师必用的设计元素之一。

另外,FPGA 在应用中的其他显著优势是可以减少BOM 整合多个分立的数字器件( 例如一个很小很便宜的CPLD 可以替换好几个74 系列芯片)、降低PCB 布线难度(MGT/GTP 等串行收发器将原本与需要三五十条线并行数据线替换为少量的串行线路)、可定制性( 可以自己写代码来支持非标准的接口),可扩展性( 可编程易修改方便升级)、加速面市时间( 只需关心功能实现,不需要再花时间制成专用IC) 等,这样FPGA 带给设计的公司的好处已经不是从成本体现了,它可以大幅度提升开发的效率!

最重要的是生态系统
我想大家可以注意到最近几个有意思的事件:
1、赛灵思宣布和ARM战略合作,未来FPGA中嵌入ARM硬内核并采用ARM的AMBA总线,虽然目前嵌入的是M1内核,但是未来会有更多内核嵌入,这就意味着FPGA把强大的处理功能和实时控制功能结合起来了,这样催生的器件适用性会更广了。
2、一些模拟巨头如TI、ADI、LTC等开始提供针对FPGA的电源管理方案,可见它们看好FPGA的未来。
3、赛灵思CTO最近在采访中透露FPGA的应用已经拓展到云计算、绿色IT、智能电网、智能马达、安全架构等等,未来的FPGA可能会成为应用最广的半导体器件了。

综上所述,我们就明白为什么工程师要掌握FPGA 开发知识了,希望本书有助于大家了解和掌握FPGA 开发。

第二章、FPGA基本知识与发展趋势

FPGA 是英文Field Programmable Gate Array 的缩写,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC) 领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。它是当今数字系统设计的主要硬件平台,其主要特点就是完全由用户通过软件进行配置和编程,从而完成某种特定的功能,且可以反复擦写。在修改和升级时,不需额外地改变PCB 电路板,只是在计算机上修改和更新程序,使硬件设计工作成为软件开发工作,缩短了系统设计的周期,提高了实现的灵活性并降低了成本,因此获得了广大硬件工程师的青睐。

2.1 FPGA 结构和工作原理
2.1.1 梦想成就伟业

1984 年,在硅谷工作的Bernie Vonderschmitt、Ross Freeman 和 Jim Barnett 共同构建了一个设想,他们梦想创立一家不同于一般的公司。他们希望创建一家在整个新领域内开发和推出先进技术的公司。并且,他们还希望以这种方式领导它:在这里工作的人们热爱他们的工作、享受工作的乐趣,并对他们所从事的工作着迷。

 

Ross Freeman(左)是FPGA的发明人,Bernie Vonderschmitt(右)是赛灵思公司的创始人
图2-1 Ross Freeman(左)是FPGA的发明人,Bernie Vonderschmitt(右)是赛灵思公司的创始人
创造性地推出了“无晶圆半导体”公司的概念。
2009 年2 月18 日,Ross Freeman 因他的这项发明——现场可编程门阵列 (FPGA) 而荣登2009 美国发明家名人堂。

 

Freeman 先生的发明是一块全部由“开放式门”组成的计算机芯片,其专利号为4,870,302。采用这种芯片,工程师可以根据需要进行编程,添加新的功能,满足不断发展的标准或规范要求,并可在设计的最后阶段进行修改。

2.1.2 FPGA结构
对PROM、EPROM、E2PROM 熟悉的人都知道这些可编程器件的可编程原理是通过加高压或紫外线导致三极管或MOS 管内部的载流子密度发生变化,实现所谓的可编程,但是这些器件或只能实现单次可编程或编程状态难以稳定。FPGA 则不同,它采用了逻辑单元阵列LCA(Logic Cell Array) 这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block) 和内部连线(Interconnect)三个部分。

FPGA 的可编程实际上是改变了CLB 和IOB 的触发器状态,这样,可以实现多次重复的编程由于FPGA 需要被反复烧写,它实现组合逻辑的基本结构不可能像ASIC 那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求,目前主流FPGA 都采用了基于SRAM 工艺的查找表结构,也有一些军品和宇航级FPGA 采用Flash 或者熔丝与反熔丝工艺的查找表结构。通过烧写文件改变查找表内容的方法来实现对FPGA 的重复配置。

根据数字电路的基本知识可以知道,对于一个n 输入的逻辑运算,不管是与或非运算还是异或运算等等,最多只可能存在2n 种结果。所以如果事先将相应的结果存放于一个存贮单元,就相当于实现了与非门电路的功能。FPGA 的原理也是如此,它通过烧写文件去配置查找表的内容,从而在相同的电路情况下实现了不同的逻辑功能。

查找表(Look-Up-Table) 简称为LUT,LUT 本质上就是一个RAM。目前FPGA 中多使用4 输入的LUT,所以每一个LUT 可以看成一个有4 位地址线的 的RAM。 当用户通过原理图或HDL 语言描述了一个逻辑电路以后,PLD/FPGA 开发软件会自动计算逻辑电路的所有可能结果,并把真值表( 即结果) 事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。

输入与门的真值表
表2-1 输入与门的真值表
从表中可以看到,LUT 具有和逻辑电路相同的功能。实际上,LUT 具有更快的执行速度和更大的规模。

 

由于基于LUT 的FPGA 具有很高的集成度,其器件密度从数万门到数千万门不等,可以完成极其复杂的时序与逻辑组合逻辑电路功能,所以适用于高速、高密度的高端数字逻辑电路设计领域。其组成部分主要有可编程输入/ 输出单元、基本可编程逻辑单元、内嵌SRAM、丰富的布线资源、底层嵌入功能单元、内嵌专用单元等,主要设计和生产厂家有赛灵思、Altera、Lattice、Actel、Atmel 和QuickLogic 等公司,其中最大的是美国赛灵思公司,占有可编程市场50% 以上的市场份额,比其他所有竞争对手市场份额的总和还多。

FPGA 是由存放在片内RAM 中的程序来设置其工作状态的,因此,工作时需要对片内的RAM 进行编程。用户可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA 芯片将EPROM 中数据读入片内编程RAM 中,配置完成后,FPGA 进入工作状态。掉电后,FPGA 恢复成白片,内部逻辑关系消失,因此,FPGA 能够反复使用。FPGA 的编程无须专用的FPGA 编程器,只须用通用的EPROM、PROM 编程器即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA 的使用非常灵活。

 

Xilinx Spartan-3系列FPGA
图2-2 被广泛应用的Xilinx Spartan-3系列FPGA
如前所述,FPGA 是由存放在片内的RAM 来设置其工作状态的,因此工作时需要对片内RAM 进行编程。用户可根据不同的配置模式,采用不同的编程方式。Xilinx FPGA 的常用配置模式有5 类:主串模式、从串模式、Select MAP 模式、Desktop 配置和直接SPI 配置。

 

目前,FPGA 市场占有率最高的两大公司赛灵思公司和Altera 生产的FPGA 都是基于SRAM 工艺的,需要在使用时外接一个片外存储器以保存程序。上电时,FPGA 将外部存储器中的数据读入片内RAM,完成配置后,进入工作状态;掉电后FPGA 恢复为白片,内部逻辑消失。这样FPGA 不仅能反复使用,还无需专门的FPGA编程器,只需通用的PROM、PROM 编程器即可。Actel、QuickLogic 等公司还提供反熔丝技术的FPGA,具有抗辐射、耐高低温、低功耗和速度快等优点,在军品和航空航天领域中应用较多,但这种FPGA 不能重复擦写,开发初期比较麻烦,费用也比较昂贵。Lattice 是ISP 技术的发明者,在小规模PLD 应用上有一定的特色。早期的赛灵思公司产品一般不涉及军品和宇航级市场,但目前已经有多款产品进入该类领域。

FPGA芯片内部结构
图2-3 FPGA芯片内部结构
FPGA 芯片结构目前主流的FPGA 仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能( 如RAM、时钟管理和DSP) 的硬核(ASIC 型) 模块。如图2-3 所示( 注:图2-3 只是一个示意图,实际上每一个系列的FPGA 都有其相应的内部结构),FPGA 芯片主要由6 部分完成,分别为:可编程输入输出单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。

转载于:https://www.cnblogs.com/synow/p/5498526.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue @input带参数_Vue 全家桶开发的一些小技巧和注意事项

前言用 vue 全家桶开发一年多了,踩过不少坑,也解决了很多的问题,把其中的一些点记录下来,希望能帮到大家。以下内容基于最新版的 vue vuex vue-router axios less elementUI,vue 脚手架是 vue-cli3。css 的 scope…

Chapter2-2_Voice Conversion(CycleGAN and StarGAN)

文章目录1 内容简述2 CycleGAN3 StarGAN本文为李弘毅老师【Voice Conversion - CycleGAN and StarGAN】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删…

cookie与session原理详解

一、 Cookie cookie:浏览器在电脑硬盘中开辟的一块空间,主要供服务器端存储数据。 cookie中的数据是以域名的形式进行区分的。cookie中的数据是有过期时间的,超过时间数据会被浏览器自动删除。cookie中的数据会随着请求被自动发送到服务器端。…

eclipse的servlet默认不执行index_MySQL之索引及执行计划分析

mysql官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构。索引的本质:索引是数据结构。索引就是排好序的快速查找数据结构一般来说索引本身也很大不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上平时所说的…

Chapter3-1_Speech Separation(Deep Clustering, PIT)

文章目录1 内容简述2 评价指标2.1 Signal-to-noise ratio (SNR)2.2 Scale invariant signal-to-distortion ratio (SI-SDR)2.3 其他的评价指标3 Permutation Issue4 Deep Clustering5 PIT本文为李弘毅老师【Speech Separation - Deep Clustering, PIT】的课程笔记,课…

Joi验证模块的使用

1. 安装 官网中文文档:https://joi.dev/api/?v12.1.0#validatevalue-schema-options-callback //下载14.3.1 npm install 14.3.1注意:下载14.3.1,在npm install joi的时候默认下载的是最新版本 joi17.1.1,对于一些API高版本会舍弃从而出现…

Chapter3-2_Speech Separation(TasNet)

文章目录1 TasNet总体架构2 Encoder和Decoder3 Separator4 TasNet回顾5 More5.1 Unknown number of speakers5.2 Multiple microphones5.3 Visual information本文为李弘毅老师【Speech Separation - TasNet】的课程笔记,课程视频youtube地址,点这里&…

Node 中的开发环境与生产环境 和 使用Morgan打印请求信息

一、什么是开发环境与生产环境 环境,就是指项目运行的地方,当项目处于开发阶段,项目运行在开发人员的电脑上,项目所处的环境就是开发环境。当项目开发完成以后,要将项目放到真实的网站服务器电脑中运行,项…

Chapter4-1_Speech_Synthesis(Tacotron)

文章目录1 TTS before End-to-end2 Tacotron2.1 Encoder2.2 Attention2.3 Decoder2.4 Post processing3 How good is Tacotron?本文为李弘毅老师【Speech Synthesis - Tacotron】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中…

第三方模块config的使用

作用:允许开发人员将不同运行环境下的应用配置信息抽离到单独的文件中,模块内部自动判断当前应用的运行环境, 并读取对应的配置信息,极大提供应用配置信息的维护成本,避免了当运行环境重复的多次切换时,手动…

Chapter4-2_Speech_Synthesis(More than Tacotron)

文章目录1 Mispronunciation2 More information for Encoder3 Attention4 Fast Speech and DurIAN5 Dual Learning5 Controllable TTSSpeaker EmbeddingGST-TacotronTwo-stage Training本文为李弘毅老师【Speech Synthesis - More than Tacotron】的课程笔记,课程视…

【代码笔记】iOS-清除图片缓存UIActionSheet

一,效果图。 二,代码。 RootViewController.m //点击任何处出现sheet -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {UIActionSheet * sheet [[UIActionSheet alloc] initWithTitle:"确定要清空图片缓存?" d…

Chapter5_Speaker_Verification

文章目录1 Task Introduction2 模型架构3 模型介绍3.1 i-vector3.2 d-vector3.3 x-vector3.4 more4 End to End本文为李弘毅老师【Speaker Verification】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自于李宏毅…

python如何读取字典的关键字_python提取字典key列表的方法

python提取字典key列表的方法 更新时间:2015年07月11日 12:04:48 作者:企鹅不笨 这篇文章主要介绍了python提取字典key列表的方法,涉及Python中keys方法的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了python提取字典key列表的方法…

使用express搭建服务器获取MySQL数据库数据

一、原始的mysql查询方法 先安装mysql cnpm install mysql --save 引入这个db.js之后,才能对数据库进行查询 进行查询 查询结果如下: 二、ORM 介绍 ORM 全拼Object-Relation Mapping. 中文意为 对象-关系映射. 主要实现模型对象到关系数据库…

Chapter6_Vocoder

文章目录1 Introduction2 WaveNet2.1 WaveNet的架构2.2 Softmax Distribution2.3 Causal Convolution和Dilated Convolution2.4 Gated Activation Unit2.5 小结3 FFTNet4 WaveRNN4.1 Dual Softmax Layer4.2 Model Coarse4.3 Model Fine4.4 小结5 WaveGlow本文为李弘毅老师【Voc…

show一下自己的文档编写功底

以我为例,我绝对相信,“才华”和颜值成反比。“才华”二字加了引号了,自知跟优秀有孙大圣一个筋斗云的距离,不过某些细节方面表现得被认为还不错,这里我要秀一下我的文档编写能力。在我这十年的工作生涯里,…

Chapter7-1_Overview of NLP Tasks

文章目录1 Introduction2 Part-of-Speech(POS) Tagging3 Word Segmentation4 Parsing5 Coreference Resolution6 Summarization7 Machine Translation8 Grammar Error Correction9 Sentiment classification10 Stance Detection11 Natural Language Inference(NLI)12 Search En…

python制作文本编辑器_Python小实战:制作文本编辑器

学了半年了,该施展一下了🍺 做什么呢?做一个简单的文本编辑器吧 来,开始 知识点: 1)做窗体的知识 2)文件操作 窗体用的是tkinter简单模块,系统自带模块 有人说了:“哇&am…

OGNL 详解

Struts2 OGNL详解 1.概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整…