-
专家系统原理与编程 pdf
专家系统原理与编程 学习专家系统clips必备China pus coM第1章专家系统导论1.1概述本章是对专家系统的一个概略介纽,主要介绍专家系统的堪本原理。在本章中,将讨论专家系统的伏缺点,描述专家系统应用的适宜领域,并讨论专家系统与其他编程方法的关系。1.2专家系统的定义解决仼何冋趣的第步是先划定解决问题的范围或领域( Domai)。不论是在传统编程领域还是在人工智能领域这一点都是相同的。然而,出于以前对人工智能感到神秘的缘故,人们往往相这样一种过时的说法:“所谓人工智能问题就是该问题辶没有解决”。另外一种流行的定义则是“人工智能就是使计算机行动起来像人们在电影中所作的一样”。在20世纪70代,当人工伻能仍处在研究阶段时,这种想法就已经广为人知了。但是,今天人T智能已解决了许多现实问题,并且已应用到商业领域。尽管经典的人工智能问题,如:自然言理解、语音和祧觉识别等仍未解决,但如果限制问题的范闱则可能会找到一个有效的解决方法。例如,如果限定句子形式为主、谓、宾,那么建立简单的自然语言系统就不会很困难。目前,这类系统在为众多软件产品如数据库系统和电子表格系统竺提供友好的用户界上做得很成功。实际上,当今流行的一些电脑游戏软件在语法分析方面就显示出惊人的理解能力。人L智能有许多备受关注的领域,如图1-1所示。专家系统( Expert system)就是对传统人L智能问题口智能程序设计的一个非常成功近似解决方法。专家系统早期先导人工智能者之,斯坦福大学的 Edward Feigenbaum教授,把专家系统定义为“一种智杌器人视能的计算机程序,它运用知识和推理来解决只有专家才能解决的复杂可题”( Feigenbaum82)。也就是说,专家系统自然言是一种模拟( Emulate)专家决策能力的计算机系统,模拟词表明专家系统要在所有方面都做得象专家一样。嗅拟比模仿更进一步,模仿只要求在某些方面做理舵人工神经得像真正的事物一样。系统虽然我们仍未找到一和通压的解决专家系统问题的方法,然而专家系统在其受限制的领域里散得很成功。今人,上如所有图1-1人工智能的一些领域书籍、期刊、会议和产品所表明的那样,专家系统在商业、医学、科学以及工程等领域已得到了广泛的应用专家系统原理与编程Chinaepef-coM专家系统是人工智能的一个分支,它大量利用专业知识以解决只有专家 (Expert)才能解决的问题。专家是个在特定领域里具有专门知识( Expertise)的人。亦即,专家具有不为大多数人所知或所灲用的专门技能。专家能够解决大多数人所不能解决或是不能高效地(而不是低劣地)解决的问题。当专家系统在20世纪70年代最初发展起来时,专家系统特指包含专家知识。然而“专家系统”这一术语在今天适用于任何应用专家系统技术的系统。专家系统技术包括专的专家紊统话言、程序和为了辅助专家系统开发和执行而设计的硬件专家系统中的知识可以是专门知识或是从书籍、杂志和有学问的人中获得的知识。专家系统、基于知识的系统( Knowledge- based systen)或基于知识的专家系统( Knowledge- based expertsystem),这些术语经常同义地使用。多数人使用“专家系统”这一术语仅仅是因为它较短即使在他们的专家系统中可能仅有一般的知识而没有专门知识。图1-2描述了一个基于知识的专家系统的基本概念。用户提供事实或其他信息给专家系统,相应地收到专家建议或专门知识。专家系统内部包括两个主要部分知识库和推理机。知识库包含有为知识序事实推理札( Inference engine)所使用而得用出结论的知识。这些结论是专家系统对用户询问的响应。专门知识摊机基丁知识的系统还被设计成为专家的智能助手。由于开发上的优专家系统势,这些智能助于是用专家系统技匈1-2专家系统功能的基概念术来设计的。随着知识的越来越多,智能助于越来越像一位专家。囚此开发智能助于将会成灲改讠一个专家系统过程中的里程碑。此外,还可以通过加快解决问题的速度来空出专家的更多时间。智能家教是人T智能的另一个新烛用。与原米的计算机辅导系统不同,新的系统可提供上下文有关的指导 aratan9la)与通用问题求解技术方面的知识不同,专家知识是指特定问题域( Problem domain)方面的知识。特定问题域是专家能成功解决闻题的领域,例如医学、经济、科学或者工程学等等。正如人类专家一样,专家系统是针对某一个问题域的。比如,你通常不会期望一个棋手具有医学方面的专门知识。在一个问题域的专门知识个会自动地转向另一个可题域解决特定问题的专家知识称为专家的知识域( Knowledge domain)。例如,诊断传染疾病的内科专家系统会有许多关于传染疾病症状方面的知识在这种情沈卜,知识域是医学,包括疾病、症状和洽疗方法等方面的知识。图1-3说明了问题域和知识域之间的问题坟关系。图中知识域完全包括在问题域之内,知识域之外的部分是个对问题没有任何知识的区域。个内科专家系统一般不具有医学的其他分支的知识,例如外科或小儿科。尽管内科专家系统关于传柒病知识域的知识与·个人类专家相当,但如果没有使用其他领域的知识编程,那么专家系统就不知道其他领域的任何知识专家系统在它所具有的知识中推导或推理( Inference)图!-3问题域利知识域的的方式与人类专家推圆解决问题的方式是一样的。良个可能关系第1章专家系统导论给出一些事件,然后推理出结论。比女,如果你爱人已经一个月没有跟你说话了,你会推断他(或她)没有什么事值得说,然而,这只是几表1-1对投术的不同观点个可能推断肀的一个。虽然对专家系统我们已具备了很多新的技人术,但仍有许多东西要学。表1-1总结了在管理者我能用它做什么?项工程技术中参与者的不同观点。在表中,技技术人员我怎样才能把它做得最好研究者我如何去护展它?术人员可以是下程师或软件设计者,T程技术消费者它如何帮助我可以是硬件或是软件。无论解决什么难题,这它值得这样费神和开销吗?些问趣都得回答,否则这一技术就不能成功地它的可靠性如何?被使用。像其他任何工具一样,专家系统有其适宜或不适宜的应用领域,随着对专家系统的不断实,我们会发掘出这些应用领域1.3专家系统的优点专家系统有许多吸引人的特行:·适应性强。专家知识在任何计算机硬件上都是可利厍的,实际上,专家系统是专家知识的集成体。成本低。提供给用户的专家知识成本非常低危险性低。专家系统可用于那些可能对人有害的环璄。持久性。专家知识是持久的,不像专家那样会退休,或者死亡,专家系统的知识会无限持续。·复合专家知认。复合专家知识可以做到在白天或晩上的仁何时候同时和挟续地解决某问题。由儿个专家复合起来的知识,其水平可能会超过个单独的专家( Harmon85)可靠性强。专家系统可増强王确决策旳信心,这是通过冋专家提供一饣辅助观点而得到的;此外,专家系统还可协调多个专家的不同意见。不过,如果专家系统是由某一个专家编程设计的,那这个方法就不能奏效。如果专家没育犯错误的话,专家系统应该始终与专家意见一致。但是,如果专家很累或有压力就可能会犯错误。解释、说明。专家系统能明确、详细地解释导出结论的推理过程。一个人可能会太厌烦、不忑意或是没有能力去这样做,但明确、详细的解释有利于得出正确的决策响应快。迅速或实时的响应对某些应用来讲是必要的。依靠所使用的软件或l伫,专家系统可以比专家反应得更迅速或更有效。某些突发的情况需要响应得比专家更迅速,因此实时的专家系统是一个好的选择(Hugh88; Ennis86始终稳定、理智和完整的响应·在实时和突发情况下,专家可能由于压力或疲艻而能高效坦解决问题,这一点是至关重要的。·智能家教。专家系统可以作为一个智能家教,让学生运作实例程序,解释系统的推理。·智能效据厍。专家系统能以智能的方式来存取一个数据库( Kerschbery86;Schu88)开发专家系统的过稈也众有一个间接的益处,山于专家知识必须以精确的形式输入到计算杋中,所以知识要被明确地了解而不是被隐含于专家的脑海肀。这样,就必须对知识进行正确性、致忙和完整性检査,这就提高了知识的质量14专家系统的基本概念专家系统的知识可以用多种方式摧述——它可以表示成规则和对象形式。描述知识的一个专家系统原理与编程Chinaepuf.com常用方法是用IF.TEN型的规则(Rule),例如IF红灯亮THEN停止如果红灴亮这一事件出现,就与模式“红灯亮”相匹配,规则得到满灶,执行“停止”为。虽然这是一个非常简单的例子,仨许多重要的专家系统都是迸过规则来表达专家知识而建立的。实际上,丌发专家系统的这种基于知识的方法已经完全取代了50-~-60年代早期人L智能的方法,那时人们致力于使用高效的不依靠知识的推坦技术。某些专家系统工,如 CLIPS允许使用对象( Object,规则可以与对象及事件匹配,而对象则可以独立于规则而揀作。当今,人们已建立了各种各样基于知识的专家系统。包含成千上万规贝的大型系统如数据设各公司的 XCON/R1系统,在如何配置计算机系统方山已胜过单个人类专家( McDermott84)许多针对专门任务的小型系统也有几条规则,虽然这些小型系统的运作可能达不到专家的水平,但它们也充分利用了专家系统技术米处理那些知识密集型任务。对这些小玊系统而言,其知识主要来源于书、期刊或其他公共资料。与此相反,一个典型的专家系统主要依赖于没有写下的知识,这主要通过知识工程师( Knowledge engineer)长期地与人类专家进行接触而获得。建立一个专家系统的过程称为知识工程( Knowledge engineering),这个过程由个知识工程师来完成( Michie73)。知认工程师从专家或其他来源获取知识并把它们編码到专家系中图1-4描述了开发专家系统的一般步骤。首先知识工程师通过与专家进行对话而获取专家知识,这个阶段与传统程序设计中系统设计人员与用户讨论系统需求相关似。然后知识工程师将知识编码到知识库中,随后专家评估系统并返叫意见绔知识工程师,这个过程一宣循环,直到系统的性能为专家所满意为止。对丁采用了基于知识技术的应用而言,基亍知识的系统这·衣述是个较好的术语。然而正如人工智能这一术语一样,现今人涉及到专家系统和知识系统,即便是知识未达到专家水平,人们也往往使用专家系统这一术语般而言,专家系统设计不同于传统的程序设计,其问题通常没有算法去求解,而是依靠推理来获得一个合理的解决方法。在没有任何可利片的算法帮助我们获得最佳方法时,一个合理的方法就是最灯的。因为专家系统依赖于推理,它必须能够解释这个人类专家过程,所以它的推理过程是可以殓查的。鮮释机(Explanation facility)是复东专家系统的一个必要部分,实际上,对话复杂的解释机可设计为允诈用户深入探究“ What if”类或者假设的推理( Hypothetical reasoning)问题,甚至可允许用户把自然语言翻译为规则。知识工程师有些专家系统允许系统通过规则归纳( Rule induction)从例子中学丬规则。在归纳吋,系统从数据表中生成规则。把专家知识整理成规则并非易事,特别是当专家幻明确地衣达识还未被系统化时。在一个专家系统中,专家知识可能会存在不·致性、模糊性、重复性或其他问题,除非可专家系统以形式地表示知识,否则这些问题都难以解决。的知识库人类专家也知道自己知识的层限性,当问题达到他们」的未知界限( Limits of ignorance)时,他们会给建议打上一定折扣。如果专家系统没有专门设计来解决不确定图14专家系统的开发CaiNeepub.com第1章专家系统导论3性问题,那久即使亡们处理的数据不精确、不完整,专家系统也会以同样的确信来给出建议。专家系统的建议与专家的建议·样,在其不知晓的范围内其合炟性应降低现今亡多专家系统的一个不足是缺乏囚果知识( Causal knowledge),也就是说专家系统并不能真正地坦解系统中隐含的原因和结果。用基于经验和启发性的浅( Shallow)知识来设计专家系统比用基于对象的基本结构、功能和行为的深(Dep)知识要谷易得多。例如,设计一个针对头痛开阿斯匹林药方的专家系统比议汁一个关于人体所有基本的生物化学、生理学、动物学和神经医学等幻识的专家系统容易得多。一个人体机能模型的程序设计T作量非常之大,即使是成功了,由于要处理全部的信息,系统的响应时间也可能会很慢。启发性知识( Heuristic knowledge)是“浅”知识的一种类型,它个能侏证月同样的算法能取得成功。启发性知识是一和从实践中获得的经验性知识,它对问题的求解可起帮助作用,但不能保证一定有效。不过,在许多领域,如医学和工程上,启发性知识对问趣的求解起着重要的作用。即使知道一个确切的解决方沄,但由于费用或时间的限制,使得该方法不能实际应用。启发性知识能够提供有价佰的捷径,可以减少时间和花费。专家系统另一个不足是它的知识受限于系统的知识域。专家系统不能絛人那样,通过类比 Analogy)来推广知识以获得新的求解问题的方法。虽然通过规则的归纳,专家系绕可以获得少许新的知识。创建一个专家系统的常用方法,即知识工程师访问专家、设计原型、测试,然后再重复,这个过程是一件既费时、又费精力的事情。实际上,把人类知识转化到专家系统这问题是如此的重要,以致于人们称它为知识获取瓶颈( Kno wledge acquisition bottleneck)。这是一ˆ描述性的术语,囚为如同瓶颈控制液体流入瓶子一样,知识获取的瓶颈控制着专家系统的创建尽管有些局限性,但专家系统仍成功解决了现实世煚的许多问題,这些问题是常规的程序设计方沄学所不能解决的,尤其是那些需要处理不确定或不完仝信息的。重要的一点是解这种新技术的优点和局限性,只有这样才能够使之得到恰些地运用1.5专家系统的特点专家系统的设计具有以下一些特点高性能。系统能以此领域里专家的同等或更高水平响应,也就是说系统所给建议的质量必须很高·适当的响应时间。系统必须能在合理的时间内工作,时间与专家得出一个结论所需的时间杆当或更好。与专家一个小时的时间相比,需要一年才得出一个结论的专家系统是不会太有价值的。特别是必须在一特定时间间隔內作出响应的实时系统口,时间限制( Time constraint就显得史为苛刻·好的可靠性。专家系统必须可靠,且不易崩溃,否则就不能使用·可理解性。在执行过程中,系统能解释推理步骤,使之易于理解。专家系统不是一个推出不可思议答案的黑盒子,而是应该貝冇解群能力,其触释的方式应与专家解释他们推理的方式一样。山于以下几个原因,这个特征非常重要。原因之一是人的生命和财产可能会依靠专家系统的回答。由于危害的巨大潜在性,专家系统必须能够以专家解释如何得出某结论的方式来证明它的结论是止确的。因此,解释为人提供了一个可理解的推理检测。第二个原因出现在专家系统的发展阶段,这一阶段是让解释机证实知识已经被正确地获取并止被系统确地使用。这在调试中是很重要的,因为知识可能公被不止确地带入或者由J知6台家原阻与编程识工程师和专家间的误解而不正确。一个好你解释机允许专家和知识工程师证实知识正确性。而且由亍传统专家系统创建的方法,该∵个程序并哩解它的作将会很困难。另外一个错误源也许是没有预想到专家系统里的相互影响,这些相互影响可以通过运行测试实例来检测到,这些测试实例按照系统必须遵循的推理方法来运行。正如后而将要详红地讨论一样,复合规则可以提供一个系统推埋的环境。专家系统中的执行沇不是按頂序的,因此你仅仅一行行地阅读代码,是不能明白系统是如何工作的。也就是说,规则进入系统的次序并不必一定是宀们被执行的次序。专家系统就像一个规则狐立于知识处理机的并行程序。灵活性。专家系统可能有大量的知识,因此具有一个增力、修改和删除知识的高效机制是十分重要的。基于规则的系统得以普及的一个原因就是由于规则的高效和嫫块化存储视系统而定,一个解释机可以简单也可以复杂。在基于规则的系统中,一个筲兰的解释机可以显小使最近规刈待以执行的所有事实。而在史为复杂的系统中可能按照如下方式来做:列出又持和反对某个假设的原因。假设是将要被证玥的日标,例如,在一个医疗诊断专家系统中“病人有破伤风感染”就是一个假设。在一个现实问题中可以有复合假设,正如个病人可以同吋有人和病样。个假设也叫以被看作是·个事实,其确性仍存在嶷惑,需要被证实。列出所有可解释观测证据的假设。解释假设的所有推断结果。例如,假设病人确实有破伤风,由丁感染作用,就应该有发烧的迹象。如果后来观察到此症状,就会増强此儇改玊确的可信度:如果没有发现北症状,就会削弱假设的可信度·如果假设是止确的,给出将发生事件的个预测( Prognosis)·提供需要用户进一步信息的问题的依据。这些问惡可以用来指导推理链朝着可能的诊断路径前进。在大多数现实问题中,探究所有的可能性花费太大或者需要太长的时间,且要提供特定的方法引导正确搜索。例如,对一个抱怨咽唉痛的病人,考虑一下进行所有内科检查所需的花费及所用的时间。提供程序所用知识正确旳依据。例如,如果程序断言“病人有破伤风感染”这一假设是对的,用户可以要求解释,程序必须给出得到这一结论的依据是基于下面规则:如果病人进行血液检测,其破伤风是阼性,那么病人就惡冇破伤风。此时用户可要求程序提供此规则正确的依据,则稈序可向用户说明:血液检测为阳性是患有疚病的证椐。在这个实例屮,程序实际上在引月一个关于规则的知识——元规则( Metarule)。某些程序,如Mea- DENDRAL,山经使用了元规川来推理( Buchanan78)。假设通过知认而让实,知认通过正确的根据( Warrantυ来证实。根实质上是一个解释专家系统推理说明的元解释。在基于規则的系统屮,知识可以很容易地增加( (Incrementally),也就是说,知识库可以随着规则的添加而逐步增加,从而使得系统的性能和辶預性得到持续地检査。如果规则设计得妤,那么规则间的相工影响作用就会非常小或没有,从而消除那些难以预料的负作用。知识的这种逐步增加可以快速原型化( Rapid prototyping),以致知识T程师可很快地演示专家系统的T作模式。这是个重要的特征,因为它可保持专家和管坦者对项乍的兴趣。快速原型化还可迅速暴露出专家知识或系统中的缺陷、不一致性或错误,从而使之能够立即得到纠正。1.6专家系统技术的发展人工驽能有许多分支,包括语音、视觉、机器人、自然语言理解和学习以及专家系统。专Chinaepus.com第1章专家系统导论家系统的理论基础涉及到诸多学科,其一个主要理论基础是认知科学 Cognitive science)。认知就是仞究人类如何处埋信总,换饣话说,就是杌究人如何思考,尤其是如何解决问题如果我们想要计算机模拟专家,那么对认知旳研究是非常重要的。通常,即使问题是由专家解决的,他们也不能解释白己是如何解决问题的。在一个基于精确知识的专家系统中,如果不能解释闩题是如何解决的,则把知识译成代码是不可能的。在这种情况下,唯一的可行方法是设计通过自学习来模拟专家的程序。这些程序建立在归纳和人工神经系统的基础之上,我们将在后面讨论1.6.1人类问题求解与产生式专家系统技术的发展有着广阔的背景,表1-2总结了现代专家系统的一些重要发展。只要可能,项目的开始∏期都会给出,诈多项日都延续了几仨以上。在本章和其他章里都较详细地分析了这些发展。对所有早期系统而言,一本最好的参考书是三卷本的人L智能三册KHandbook of ArTificial Intelligence, Feigenbaum 81y衣1-2专家系统历史的一些重要事仁1943Post产生式规则: McCulloch和PiU神经元模型1954控制规则执行的Ⅵ arkov算法1956Dartmouth会议:逻辑学家;启发性搜索;创立“AI"”术语Rosenblatt出感知机; GPS(General Problem Solver,通用问题求解器)(丶 ewell shaw和 Sinon)1958人工智能语言Lisp( McCarthy)1962Rosen blat于感知的神经动力原理1965自动定理训明的归结方法( Robinson)模樹对象的模糊推逻辑(:adeh开始建立 DENDRAL,第一个专家系统( Feigenbaum、 Buchanan等1968话义网,联想记忆嘆型( Quillian)MACSYMA数学专家系统( Martin和 Moses)PROLOG(Colmerauer, Roussell1971语音识别 HEARSAY I人类问题求解通用规则( Newell和 Simon)1973MYCIN医疗诊断专玄系統( Shortliffe等)山此产生的 GLIDON,即智能豕裂( Clancey)TEIRESIAS,概念解释机( Davis)EMYCIN,第一个外壳( Van melle、 Shortliffe和 Buchanan)HEARSAY II,多协作专家的黑板模型框架知识表示 Minsky)1976AM( Artificial mathematician.人T数学家),数学概念的创造性发现( Lenat)不确定性推理的 Dempster-Sher证据珪论开始建立矿产探测的 PROSPECTOR专家系统(Duda,Ha等)1977XCON/R使用的OPS专家系统外壳(orgy)1978始建立 XCON/R1,阳置DC计算机系统( McDermott.DHC)Mea- DENDRAL,元规则,规则归纳( buichellall1979快速模式匹配的Rete算法( Forgy)人工智能开始商业化Inference公司成立(1985年发行ART专家系统L具)和LMI推出Lisp机982SMP数学专家系统: Hopfield神经网络;开发智能计算机的日木第五代语言项日1983KE专家系统工具( Intellicorp)1985CLIPS专家系统⊥具(NASA)专家系统原理与编程C的aCM在20世纪50年代后期及60代初,人们编写了大量的以通用间题求解为标的程序。其中最著名的是通用问题求解器,在 Newell和 Simon编写的不朽著作——《人类问题求解》( HumanProblem solving)里描述( Newel12)Newell和mon证明的最重要结果之一是大部分的人类问题求解或认知( Cognition),可以用IF…THEN类型的产生式规则( Production rule)表达。例如,“如果”看起来将要下雨,“那么”带上一把冋伞,或者“如果”你的爱人心情不好,“那么”不要显得很高兴。与一个小的、模玦化的知识集相对应的规则称为一块( Chunk),块以松散的形式连接、组织,并与內关的知识有联系,其原理之一是所有的人类记忆都以块的形式组织。下面是用一条规则表示一个知识块的例子工F汽玄运转个了并且油罐是空的THRN加油Newell)和 Simon用规则表示知识并显示了如何用规则推里。认知心埋学家已经使用规则作为模型来解彩人类信息处理,其基木思想是感官的接收对大脑产生刺激,刺激引发出适当的长期记忆(Long- term memory)规则并成恰当的响应,长期记忆是我们的知识贮存处。例如,我们都有如下的规则TP有火焰N有火灾⊥上有烟雾N可能有火灾工F有报警TN可能有火灾可以看到后两个规则在表述上不是完全肯定,火可能已经灭了,但空中可能仍有烟雾。同样,报警声并不证明就有火灾,因为可能是一个虚假的报警信号。看到火焰、嗅到烟雾或听到报警卢的刺激会诱发出这些或相似的规则。长期记忆包拒许多形如IF…THEN(如果……那么)简单结构的规则。实际上一个技艺高超的棋师可能通晓50000或更多的关于棋的模式的知识块。与长期记忆相反,短期记忆( Shortterm memory)是在解决问题过程中用来暂时存储知识的。尽管长期记忆能够容纳成千上万甚至更多的块,然而正工作着的记忆的容量是惊人地小—4~7块。试着在脑海中浮现几个数字就是一个简单的例子,人多数人一次仅可以浮现4~7个数字,但他们能记住的远不4~7位数字,只不过这些数字是贮存在长期记忆中种埋论假设短期记忆表示那些可以同时活跃的数据块,并把人类问题的解决当作脑海中这些已激汘块的传播。最后那个块被激活的強度如此之大以致产生出一个有意识的想象,你就对自己说:“哦……茉些东西在燃烧。”人类问题求解的另个必要元素是认知处理机( Cognitive processor),它尽力去发觉那些将被适当刺激激江的规则。但并不是任何规则都可激江,例如,你不会每次听到汽笛声就想到给油罐充油。只有与刺激相匹配的规刈会被激发。如果很多规刈同时被激发,认知处理机必须处理冲突来决定哪一个规则有最髙优先权,这个规则将会被执行。例如,如果以下炳个规刈是激发态的:TF有火灾THEN离开TF我的衣服着火了TFN扑灭火那么具有最高优先权的那条规则冷会执行。对现代专家系统来说,推理机貮相当于认知处理机Newell和 Simon把人类问题求解的模型归纳为:长期记忆(规则)、短期记忆(工作内存)和认知处理器(推理机),这三者是现代基于观则的专家系统的基础。
- 2020-06-03下载
- 积分:1
-
c# 读取串口写入数据库
用c#编写的winform程序,读取串口的数据,并写入本地的sqlite数据库,同时写入SQLServer网络数据库,这个过程都是多线程的。
- 2020-06-24下载
- 积分:1
-
APFC的matalab的仿真
【实例简介】
APFC的matalab的仿真,带反馈环
- 2021-10-14 00:31:15下载
- 积分:1
-
仿糗事百科微信小程序
【实例简介】仿糗事百科微信小程序
1. 实现顶部页签菜单左右滑动效果
2. 实现顶部页签菜单切换效果,页签菜单选中时字体加粗,同时对应的内容也跟着变化
3. 实现专享界面糗事列表设计,包括发布人头像、发布人昵称、发布的段子等信息,以列表的显示展现出来。
4. 实现视频列表页设计,视频可以进行播放与暂停;
5. 实现分享功能,可以将当前界面分享给好友
6.设计概要:数据绑定、列表渲染、请求服务器数据,
(1)实现顶部页签滑动效果,需要借助于scroll-view可滚动视图区域组件,设置scroll-x="true"属性,允许在水平方向上左右滑动
(2)页签菜单切换和内容也跟着进行切换,需要使用swiper滑块视图容器组件,根据current当前页面索引值来决定显示那个面板
(3)设计糗事列表,先设计一条内容,然后可以复制这条内容的布局,在这个基础上进行修改
(4)设计视频列表,需要使用video视频组件,每个视频组件都有唯一的id;设计幻灯片轮播效果,准备好幻灯片需要轮播的图片
(5)分享功能,需要在在 Page 中定义 onShareAppMessage 函数,设置该页面的分享信息
(6)在界面布局的时候,会用到微信小程序的组件,包括view视图容器组件、image图片组件、swiper滑块视图容器组件、scroll-view可滚动视图区域组件、video视频组件等组件的使用
(7) 界面样式设计,需要写一些wxss样式进行界面的美化和渲染
(8)页签菜单切换的时候,需要获得该页签所对应的id,需要绑定菜单切换事件
(9)页面分享,需要使用onShareAppMessage这个API接口,进行界面分享
(10)动态获取糗事列表信息,需要使用wx.request请求获得糗事列表信息
- 2021-10-29 00:36:15下载
- 积分:1
-
华为面试数字芯片提纲.pdf
本人面试华为海思数字芯片,总结出一份应对数字芯片面试的复习材料华为面试数字芯片提纲解答以及要点备注1、时序逻辑/组合逻辑时序逻辑电路主要由组合逻辑电路和触发器等记忆元件组成,输出不仅取决于当前输入,还和电路原米状态有关(这里原来状态是指的中间的触发器等记忆元件部分的端口值也可能会影响到当前的电路总的输出);组合逻辑电路主要由组合逻辑器件构成,电路无存储元件,输出仅仅取决于当前的输入。同步逻辑/异步逻辑同步逻辑是指的电路驱动时钟是有固定因果关系的逻,异步熤辑是电路驱动时钟之间没有固定因果关系的逻辑。通常同步逻辑电路的驱动时钟来源于同一个时钟源产生的相同时钟或者相位差可预知的不同时钟,这里不包括相位差在一定时钟周期内(例如1000ck)依然无法确定公共周期的同源时钟;异步逻辑的电路驱动时钟来自不同源时钟或者相位差关系不确定的时钟。同步时钟/异步时钟同步时钟指的是时钟源来自于同一个时钟源生成的时钟,其相位差可计算预知,这里不包拈来白同一时钟源但是在一定时钟周期内(例如1000ck)依然无汯确定公共周期的时钟,通常为由PLL生成的非整数分频或者倍频时钟。异步时钟是指的相位差无法预测的时钟,通常来自于不同的时钟源。2、亚稳态的概念/可能出现的场合和抑制手段亚稳态是指触发尜的建立时间或者保持时间不能满足时触发尜的输岀介于0或者1两者之间的某个不稳定态。理想的触发器在时钟到來时刻采样数据,但现实之中时钟边沿通常具有一定斜率,因此数据需要在时钟到来的前后各一段时间内保持稳定,使得触发器能够准确采样数据,否则就可能岀现亚稳态。亚稳态通常出现在同步时钟驱动电路的异步复位信号来临和消失的时候,或者是异步时钟域之冋数据传递的时候。前者解决方案是釆用同步复位(通常会导致电路逻辑资源占用面积增加)/或者是异步复位同步释放方式避免亚稳态;后者通常考虑用昦步FFo,双端口RAM,双触发器,或者是握于杋制等方法进行冋步ε比外还有例如降频,使用速度较快的触发器,改善时钟质量也会有一定效果。3、异步FIFO原理/FFO的深度计算/同步FFO/要求自凵写异步FFO代码/自凵尝试添加约束(H: Desktop Hardware study Async _ FIFO)异步FFO主要用于实现异步时钟域之间的数据传输。异步F|FO由以下几部分构成。●BRAM/DRAM组戍的缓冲区。用于缓存数据流,其深度的设定需要根据输入输岀数据的吋钟差别以及最大连续输入/输岀数据量确定。读写指针。其变化需要根椐FFO的空满状态以及当前的读写请求指令共同确定。当缓存为空则不读,读指针不变;当缓存为满不可写,写指针不变。空满状态标志。由于异步FFO工作在不同时钟域,因此对空满状态的判断依赖于不同时钟域的读指针和写指针。为了便于区分“快一圈”的现象,可以考虑将指针位宽多设置一位,当最髙位相同时候,读指针等于写指针认为是读空,当最高位不同的吋候,读指针等于写指针认为是写满●同步电路。由于两者读写指针比较是在不同时钟域下进行,因此为了避免亚稳态需要进行同步设计。此处通常采用格雷码进行比较(传输端首先 BIN TO GRAY,经过两级触发器在目的端同步,然后 GRAY TO BIN,进行下一步的比较,得出空满状态),保证一次只有一位数据变化,利用格雷码结合两级触发器进行同步后,可以严格保证至少数据不会出错(起码是原地踏步,不会造成满状态写入的情况),中间加的两级触发器公对实际状态做延迟比较(避免了空读和满写),也属于保守预估,最多是不是真空/真满情况下告知空淸,但是不会导致数据出错,属于保守的方法●FFO深度计算,计算主要考虑最坏的情况,例如100wclk里血进来80个这种,需要考虑200个时钟内连续进米160个的情况,然后计算深度也是根据“平均进米一个出去几个,然后乘以最大连续量即可得到FFO深度”这样的方式考虑最大深度同步FFO由」驱动时钟同步,因此可省去中闩同步器以及格雷码编码机制,其作用原理和异步FIFO类似4、双端口RAM的实现/要求自己写双端口RAM(H: Desktop Hardware study async_ Dual _port ram)FPGA内部RAM资源分为 Block ram和 Distribute ram,前者一殷用于大量数据的缓存,后者多用于小部分数据缓存。就速度而言由于 Distribυ ute ran利用FPGA内部 Slicer的LUT存储资源,少量存储的话速度比较快,但是大量存储会对布线造成影响,难以保让时序。FPGA可以配置 Single-port-ram, Simple-port-ram,True- port-ram等形式的RAM,读写模式有 write-first,read-frst,no- change等模式, write-first表明输出端口的数据和写入的数据相冋, read-first表明输出端口的数据为当前地址之前存储的数据,no- change表明输出数据为写入之前一刻的数据不变;Single- port-ram同时只能进行读或写操作; True-port-ram可同时进行读写操作,但是要避免地址冲突,不能两个端口同时对一个地址写入, Simple- port-ram实际上是 True-port-ram只开启了A端口的写入和B端口的输出。5、两级触发器同步/应用场合/MTBF的计算以及2FF的计算两级触发器通常用于异步时钟域之间的单比特信号传输,通常是控制信号。其扣制亚稳态传播的原理并不是避免亚稳态的发生,也无法避免出错信号的继续传输,而是尽量减少亚稳态传播的概率。根据触发器MTBF(平均故障时问间隔)计算,一缬触发器的MTBF=(e^(tmet/c1)/c2*f*a)两级触发器MTBF=(MTBF1)*MTBF2),相当」不稳定态在第一级触发器后被阻断了传播。如果条件更苛刻可考虑三级触发器。6、握手机制/代码(H: Desktop Hardware study async dual_ port ram握于机制通常用于数据传输速率要求不高但要求准确的场合,两边的握手信号都需要各自时钟域的同步器进行同步。当接收端经过冋步电路接收到req信号后锁存总线数据,然后发岀ack信号,ack经过冋步电路后到达发送端,发送端接受后撤销req信号,接收端也撤销掉ack信号,一次握手完成7、同步复位/异步复位/异步复位同步释放/三者比较/代码同步复位指的是时钟有效沿来临的时候进行复位操作,冋步复位使得电路为冋步电路,能够利于仿真,缺点是要求复位信号要大于一个周期,否则无法保证成功复位,此外综合出米的电路实际上并没有利用器件的复位端,而是在输入端插入额外的逻辑电跻,这样増加了额外的逻辑资源消耗。异步复位是指的在仼何时候只要复位信号有效即可复位,不占用额外的逻辑资源,充分利用器件的复位引脚,但是由于来临和结束时间未知,容易引起亚稳态现象对于FPGA的Fip-Fop,一般有同步复位,置位引脚RST/S和异步复位,置位引脚CLR/PRE,对于同步复位,需要引入额外的MUⅹ电路控制RST/S,对资源有一定的占用比较理想的方式是异步复位同步释放,既充分利用了器件的复位引脚,又能够有效避免亚稳态的产生。8、恢复时间/去除时间/ positive or negetive or global skew/ jitter/Recovery time(恢复时间)是指的异步控制信号(例如复位信号)在被断言后到下一个时钟沿的最短时间Recovery time is the minimum amount of time required between the release of an asynchronous signal from theactive state to the next active clock edge.(类比建立时间)( Example: The time between the reset and clock transitionsfor a flip-flop if the active edge occurs too soon after the release of the reset the state of the flip-flop can be unknownUFF5UFF6CDN-aCKNbCKCLKPRemoval time(去除吋间)是指异步控制信号在吋钟沿后需要保持稳定的吋间。 Removal time specifies theminimum amount of time between an active clock edge and the release of an asynchronous control signal.(类比保持时间)这个异步控制信号可以来自于“异步复位同步释放产生的复位信号,如下图”。positive or negetive or globa|skeW分别表明相比| atch clock edge的延迟为正/负/最大延迟减去最小延迟Clock jitter指的是实际周期和理想厝期之间产生的偏差,jter通常由时钟发生器电路,噪声,电源变化引起9、触发器组成/锁存器组成/区别触发器通常包括SR触发器,」触发器,D触发器,T触发器;SR锁存器由与非门或者或非门组成,SR触发由时钟控制逻辑加上双与非门/或非门组成,还有门控SR触发器将时钟换为使能即可。四状态分别为保持/0/1/不允许。不允许态主要是全1/全0同时翻转为0/1不能确定哪个逻辑元件最先变成0/1,从而导致下一时刻不定态D触发器由时钟边沿触发,锁存数据,D触发器是FPGA中的主要元件,T发器作用是翻转信号Q00-1DcLK-(LDLa触发器对边沿敏感,锁存器对电平敏感10、脉冲检测电路(非同步时钟如何处理,快到慢,慢到快)对于慢时钟到快时钟的脉冲检测电路,由于脉冲长度一般大于接收端一个时钟周期,可以利用两级触发器结合一个与门和反相器电路实现单周期脉冲的传输,如图1;对于快时钟到慢时钟区域的检测电路,由于脉冲长度一般较小,可能导致慢时钟区域检测不到,因此可借助脉冲信号作为触发器的时钟信号,然后利用接收端信号重新复位该触发器信号即可,如图2对于相同时钟的脉冲检测电路,可以利用两级触发器结合与门和非门电路,类似方案一11、可综合和不可综合概念/ timescale的理解可综合是指的代码能够被EDA工具映射为具体的逻辑电路,能够在硬件端实现的语句;不可综合指的无法被映射为只体的电路在哽件端,通常用于仿真阶段timescale是指的吋间维度的常量,用于仿真阶段,由吋间最小单元和时间精度两部分组成,例如 timescale1ns/1000s,意思是时间最小延迟单元为1ns,按照1005的精度进行换算,#5.22代表延迟52*100p5,如果是1ns/1s则代表延迟5220s,如果遇到一个模块包含其他模块的情况则精度按照最小的精度计算。精度越高会导致仿真的复杂度越大,仿真需求时间也就越久。12、组合逻辑环路概念缃合逻辑需要避免牛成环路,即绢合逻辑输岀端不绎过仟何时序逻辑就反馈到输入节点形成的环路,这样公产生振荡和毛刺等现象,而且会出现无法预知的结果。这样的组合逻辑坏烙的功能完全依赖丁逻辑元件的延迟和布线延迟,具有很大的不确定性。13、静态时序分析/动态时序分析/二者对比静态时序分析(STA)通过遍历系统中所有路径来计算每条路径是否满足时序要求。无需外部信号激励的输入,只需要按照设计要求作岀对应约束即可。静态时序分析不能分析电路逻辑功能是否满足需求,只能测试设计是否满足时序要求,系统能否在要求的时钟速率下正常运行。静态时序分析的速度较快。动态时序分析是指的对系统生成测试向量并查看输出结果是否满足设计要求的方法。动态时序分析能够验证系统的逻辑功能,但难以通过输入向量测试到所有路径,而且随着输入信号数量增加,验证复杂度会越米越大。14、建立时间/保持时间/数据到达时间/数据需求时间/建立时间裕量/保持时间裕量建立时间( (setup time)是指的时钟边沿到来之前数据保持稳定的最少时间。保持时间( hold time)是指的时钟边沿到来后数据保持稳定的最少时间。数据到达吋间( data arrival time)= Latch+Tlka+Tcq+ Logic建立时间的数据需求时间 data required time/ setup)= Capture+llkb-Tsu- Uncertainty保持时间的数据需求时间 data required time/hod)= Latch+Tk+Thd- Uncertainty( Uncertainty-还是+存疑)建立时间裕量( setup slack)=( data required time- data arrival time)=T-Tsu-(Tcq+ Logic)+ Skew保持时间裕量( hold slack)=( data arrival time- data required time)= Skew+Thd-(Tcq+ Logic15、四类时序路径及起点终点/完整的时序路径包含三部分/建立时间检查,保持时间检查/恢复时间检查,去除时间检查/检查违例的解决方案Start point-All input ports/pins or clock ports /pins of sequential cells are considered as start pointsEnd points-All output ports/ pins or d pin of sequential cells are considered as end pointsA.输入端口到第一级寄存器的数据输入D端之间路径B.最后一级寄存器输出Q端到输出端口之间路径C.系统内部寄存器的时钟端口CLK到下一级寄存器的数据输入端口D之间路径D.输入端口经过组合逻辑到输出端口之间路径个完整的时序路径包括源时钟路径(时钟端到当前寄冇器的时钟输入端),数据跤径(当前寄存器时钟输入端到卜一级寄存器数据输入端),目的时钟路径(时钟端到卜一级寄存器的时钟输入端)建立时间检查上要看数据路径的最大延迟路径,两级寄存器时钟skew最小的情况,淸足建立时间需要有:T+Tskew-Tsetup >(Tcq +Logic保持时间路径主要看数据路径的最小延迟路径,两级寄存器时钟skew最大的情况,淸足保持时间需要有:(cq+Tlogic)> Thd+ Tskew恢复时闩检査和去除时冋检査比较类似建立时间和保持时间检查,检查方式是一样的,主要看这个异步控制信号(通常是经过“例如异步复位同步释放生成的的复位信号”后传递给寄存器的复位信号)到达的时间是否和时钟边沿满足一定的时间关系,否则可能导致复位失败或者控制失败对于建立时间违例,可以考虑对较大的组合逻辑插入寄存器增加一级流水线,或者是考虑降低时钟频率,或者是考虑优化组合逻辑使之延迟降低;对于保持时间违例可以考虑插λ buffer或者两级反相器对效据路径实现延迟。16、时序约束/时钟约束/输入输出约束/时序例外约束/多周期路径约束( Multicycle paths)/伪路径约束( Falsepaths/ min-max约束/ set bus skew吋序约束是指的对电路的吋序提出要求,并在时序约束的基础上检验系统电路是否能够满足设计需求。●时钟约束是指的对系统中出现的时钟信号添加的限定条件,主要有以下类别:1) Primary clock(通过引脚输入系统) creat clock- name clk in- period10- waveform05}[ get ports clk2) Virtual clock(并未连接到系统的任何端口,只是用来做输入信号的参考,而该信号按照这个虚拟时钟的速率传输,只是这个时钟也没有接到系统任何韶位。可以理解为上游芯片的一个数据时钟,只是这个时钟没有接入系统)tcl语言描述为 create clock- name virtual clk-period103) Generated clock(通过PLL或者内部逻辑,如计数分频生成的吋钟) example1: create generated clock-nameclk div2 -source [get_ports clkin]-divide by 2 [get pins clk div 2]; example2: create generated clock -nameclk div_ mul-source [get_pins mmcmo/ clkin]-multiply by 4 -divide by 3 [get_pins mmcmo/clkout4) Clock groups(主要对异步时钟组之间约束,避免对异步时钟之间进行无效的时序分析,例如两个独立的时钟以及他们生成的时钟网络之间,或者是虽然来自同一个时钟源但是牛成的时钟在1000ck内无法确定公共周期的时it i [a )set clock groups -name async clk -asynchronous- group clk1-group clk 2 set clock groups-name clkunexclusive-group clko-group clk1;5) Clock latency(由于EDA工只通常会自动计算内部网络的时钟延迟,因此通常只需要提供器件外部时钟走线延iRRP H)set clock latency-source-early 0.2 [get ports sysclk]; set clock latency -source -late 0. 5 [get ports sysclk6) Clock jitter (E A input jitter FA system jitter) set input jitter sysclk 0.3 set system jitter 0.117) Clock uncertainty(为特定的时钟或者时钟之间约束) set clock uncertainty0.1[ get clocks clk];set clock uncertainty 0. 2 from [get_ports clk1] to [get clocks clk2输入输出约束1) set_input delay(用于确定和系统某个时钟相关的输入信号的外部路径延迟,通常取决于外部器作输出的最后一级寄存器的Tcq和中间走线延迟。 Consequently, the input delay value can be positive or negative, depending on theclock and data relative phase at the interface of the device,这个相关的时钟可以来自于系统的某个时钟或者虚拟时钟)example 1: set_input delay -clock sysclk [get_ ports din]; example 2: set_ input_ delay -clock sysclk-max 4 [get_ports din]example3: create clock -name clk virtual- period 10set input delay -clock clk virtual -min 2 [ get ports din22) set output delay(用于确定和系统某个时钟相关的输岀信号的外部路径延迟,通常取决于外部走线延迟和下游芯片第一级输入寄存器的建立时冋和保持时冋)exεmple: set output delay- clock sysclk-min2[ get ports dout●时序例外包含多周期路径约束,伪路径约束,最大最小延迟约束1) Multicycle paths(多周期路径通常指的由于系统的特定设计,重新修改建立时间和保持时间检查方式,通常不像EDA工具默认的单周期的检查,多周期路径约束通常定义新的时序检查方式)BEFOREA)相同时钟下由于使能信号等原因导致的多个周期读取IHold:SetupLostnaton clock对于相同时钟,无需确定- start-end,因为参考的时钟都是一样的,只需要重Choct Erable新确定建立时间检查和保持时间检查的关系。由于 setup relationship同时影响crScure cocshold relationship,因此修改建立吋间的同吋也要修改保持吋间关系。如图set multicycle path n -setup -from [get _ pins a-to [get pins b]capture edgeClock Enableset multicycle path N-1hold-from[ get pins a] to get pins b](其中N为建立OIS 2IN 46 CrIS IN 10: I2Slaunch edge时间检查的移动周期数)setupB)相同周期时钟但是有相移,因此修改建立时间检查关系,保持检查会随之-。如。2。=。移动。 set multicycle_path2- - setup- from Iget clocks clk』to[ get clocks clk2]。Destinationapture edge8ns Bn:launch edge Ons 2neine如果是负相移(相移很小)的话,无需约束,情形相当于同吋钟无相移。C)慢时钟到快时钟。 set multicycle_path3- setup-from[ get clocks clk1]-to[ get clocks clk2]Set multicycle_ path 2-hold -end- from iget clocks clk1]-to [get clocks clk2D)快时钟到慢时钟。 set multicycle_ path3- setup- - start-from[ get clocks clk1]-to【xx] set multicycle_ paths2- hold -fromlget clocks clkl to [get clocks clk2];Table 5.3: To define a multicycle path with a Setup of nScenarioMulticycle Constraintslaunch edgeSource cloSame clock domain or betweenset_multicycle_path N-setup-from CLK1 -to CLK2c「L「LLsynchronous clock domains with sameFeriod and no phase-shiftsct_multicycle_path N 1 hold from CLK1 to CLKBetween SLOW-to FAST synchronous clock set_multicycle_ path N-setup from CLK1 -to CIcomaInsset_multicycle_path N-1 -hold-end -from CLK1-to CLK2clock(CLk2capture edgeBetween FAST-to SLOW synchronous clock set_multicycle_path -start -from CLK1 -to CLKcomaInsset_multicycle_path N-1-hold -from CLKI-to CLK2False paths(伪路径约束)对于一些永远不可能起作用的路径或者无需进行时序分析的路径可以设置为 Falsepath(例如异步时钟之间已经经过两级同步器同步则无需分析,例如上电瞬间内容确定则无需分析)example: set false_ path-from [get clocks clk1] to [get clocks clk2]● Min-max(用于约束输入端口到输出端口的最人延迟以及异步信号之间的最人廷迟(意思是即使两个时钟域以经通过同步器或者FFO进行同步,依然可能需要一个最大路径延迟约束川 example1: set max delay10from [get _ ports din]-to [get ports dout] example 2: set max delay - from [get_ pins a]-to [get _pins b●set_bus_skew(用于对异步时钟域多位数据传输路径延迟进行约束,通常用于格雷码转换,多bit数据传输由于传输是多位的bit,因此每个bt之间的路径差异需要被约束,通常是约束一个目的时钟周期。 exampleset bus skew -from[ get cells gray*]-to[ get cells gray_sync+2.5,其中*代表这个寄存器的每个bt;同时为∫保证源时钟和目的时钟之间数据正常传输,需要进一步设置 sex max delay使得这个数据路径的延迟不能超过一定时间(通常是一个源时钟周期) set max delay-datapath only-from[ get cells gray]to[ get cellsgray_sync 517、竞争冒险/消除方法竞争是指的由J逻辑和走线延迟差异导致不同信号到达输入端的时间不同,冒险是指的由于不同信号到达输入端时间差异导致输出信号存在短时不稳定的现象,也叫输出毛刺。消除互补乘积项,例如(A~+B)*(A+C需要消除AA●增加冗余项,例如AB+A~C,当B=C=1的时候是A+A~,因此可以考虑增加BC项,这样就桷保输出无毛刺。输出端并联电容器,能够是的毛刺的上升下降沿变得缓慢,从而抑制毛刺被后级电跻读取的慨率。将组合逻辑电路转变为时序逻辑,因为触发器对毛刺边沿不敏感,可以有效减少毛刺对后级电路影响18、状态机分类/状态转移图/一段两段三段式状态机区别特征(优缺点,本质特征,状态数差别,输出改变时间差别,状态机也分为同步状态机(有CLK控制输出)和异步状态机)/思考具体的状态机实例(饮料售卖)MeaⅣy状态机:输出取决于当前状态和输入,输出可以在输入发牛改变之后立刻响应,具有异步输出的特点,Meay由于结合了当前输入信息和状态信息,因此状态数量更少。Moore状态机:输山仪仅取决于当前状态,和Meay相比 Moore机首先根据输入信息更新状态,然后在下个时钟根据当前状态决定输出,因此速度响应比Meay慢一拍,但是具有可以同步输出的特点。设计状态机首先考虑改计功能需求,然后根据运作流程列举可能的状态并根据转移条件列状态转移表转移图。状态的编码可以考虑采用格雷码(适用于连续跳变)或者是独热码,段式状态机将状态转移和输出集中在一个 always块内书写,电路为时序逻辑不会产生毛刺,但是书写代码冗长且不易修改,可维护性差;两段式状态机将状态转移和输出分放在两个 always块中,前一个用时序逻辑进行状态调转,第二个用组合逻辑控制下一状态的计算和组合逻辑输出,容易产生毛刺。这种与法只有最优的血积和时序性能,但是由于是组合逻辑输出因此增加了到下一级寄存器的输出延迟。段式状态机分为状态调转模块,状态转栘条件判断模块,输岀逻辑模块。三段式状态机将组合和时序逻辑分开,易于维护和综合饮料杋编写(自己编的题目),可以首先考虑实现的玏能,输入应该包括时钟信号,复位信号,输入的钱,输入的饮料选择,以及是否有当前饮料存货;输岀应包括找岺,饮料输出,无饮料提小等信息。中间状态应包括空闲状态,提示无饮料,输入钱多,输入钱正好,输入钱相等,找钱,出饮料,提示继续输入钱等状态,基于上述可能的状态进行状态转移图绘制,然后编写状态转移组合逻辑以及输出逻辑。“H、 Desktop Hardware_ study Sail_· machine”19、系统级/算法级/RTL级/门级/开关级Verilog HDL语言自顶向下通常分为系统级,算法级,RTL级(寄存器传输级),门级,开关级;系统级措述语言提供的髙级结构和所能实现的性能算法级措述算法运行的模型,以上两种描述级别一般不涉及具体实现细节,不考虑是否能转化为硬件结构。RTL级用」描述数据如何在寄存器之问流动和传输门级用于描述逻辑门之间的连接模型开关级措述的是器件晶体管规模的具体连接和信号流动模型前三个级别表述的是行为级,后两个级别分别代表逻辑级和电路级20、阻塞赋值/非阻塞赋值阻塞赋值是指的执行当前语句的时候阻塞其他语句的执行,因此阻塞赋值的执行具有一定的顺序性;非阻塞赋值是指的一次激活操作来临后会首先计算所有非阻塞语句表达式的右值,在激活操作结束后统一赋值给左边变量,执行无先后顺序,当前语句的赋值操作不会阻塞其他语句的赋值操作,因而叫做非阻塞赋值。在设计代码的付候通常对组合逻辑采用阻塞赋值,对时序逻辑采用非阻塞赋值,对阻寒赋值和非阻寒赋值分开在不同的away坎中实现。21 function/task/ repeat/ while/ forFunction用于执行一段的功能电路,由组合逻辑组成,至少一个输入,无输出。返回一个输出值(缺省值为1bit寄存器数据),输入输出的类型可以自己定义。 function可以驱动和使用全局变量,内部定义的为局部变量。函数
- 2021-05-07下载
- 积分:1
-
c++笔试面试之网络和多线程
该文档是我总结的c++笔试面试通常会问的一些问题。另外可以从我的资源目录下找c++数据结构与算法,c++笔试面试基础两部分材料,综合这三个材料一起看,我相信大家一定尽快找到工作。ClientServerFIN WAIT 1IFIN MCLOSE WAITack M+1FIN WAIT 2LAST ACKFIN NTIME WAITACK=1 ack=K+CLOSEDm由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送个FIN来终止这·方向的连接,收到个FIN只是意味着这方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此第一次挥于Client发送个HN,用来关闭 Client到 Server的数据传送, Client进入 FIN WA1状第二次挥手Server收到FIN后,发送一个ACK给 Clien,确认序号为收到序号+1(与SN相同,一个FIN占用一个序号), Server进入 CLOSE WAIT状态。第三次挥手Server发送一个FIN,用来关闭 Server到 Client的数据传送, Server进入 LAST ACK状态。第四次挥手Client收到FIN后, Client进入 TIME WAIT状态,接着发送一个ACK给 Server,确认序号为收到序号+1, Server进入CL0SED状态,完成四次挥手。5.tcp为什么建立连接是三次握手,而关闭连接却是四次挥手呢?当主杋A确认发送完数据且知道B已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FN给主机B;主机B收到A发送的F⊥N,表示收到了,就会发送ACK回复;但这是B可能还在发送数据,没有想要关闭数据口的意思,所以FⅣN与ACK不是同时发送的,而是等到B数据发送完了,才会发送FIN给主机A:;A收到B发米的FIN,知道B的数据也发送完∫,回复ACK,A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接了。6.TCP头大小,包含字段?TCP协议头最少20个字节,包括TCP的源端口,目的端口,序列号,应答号等等。7.tcp与udp的区别?为什么TCP要叫做数据流?1).基于连接与无连接2).对系统资源的要求(TCP较多,UDP少)3).UDP程序结构较简单4).流模式与数据报模式5).TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证6).TCP有拥塞控和流量控制,UDP没有TCP提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丟弃重复数据,检验数据,沇量控制等功能,保证数据能从端传到另·端UDP是一个简单的面向数据报的运输层协议。∪DP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是不能保证它们能到达目的地。山于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快8使用udp和tcp进程网络传输,为什么tcp能保证包是发送顺序,而udp无法保证?因为TCP发送的数据包是按序号发送,有确认机制和丢失重传机制,而udp是不可靠的发送机制,发送的对应端口的数据包不是按顺序发送的。9tcp三次握手的, accept发生在三次握手哪个阶段?三次握手:C--->SYNK>ACK K+1 SYN JC->ACK]+1DONELclient的 connect引起3次握于server在 socket,bind, listen后,阻塞在 accept,三次握手完成后, accept返回一个fd,TCP服务器端sackettTC客户端bindosten)connecto建立连接阻寒直到有客户端连接请求数据writereadr处理请求回应数据readr结束连接readr yclose10.流量控制和拥塞控制的实现机制数据的传送与接收过程当中很可能出现收方来不及接收的情况,这时就需要对发方进行控制,以免数据丢失。流量控制是一种解决发送端与接收方吞吐量不匹配问题的机制。网络拥瘧现象是指到达通信了网中杲部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个冈络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿即出现死锁现象。拥塞控制是处理网络拥塞现象的一种机。11.滑动窗口的实现机制滑动窗凵机制是tcp流量控制的一种机制。滑动窗口分为发送窗凵和接收窗口,发送窗口会根据接受窗口返回的ack中的大小来确定发送数据多少,如果ack返回可接受为零时,发送窗口不发送数据,然后启动定时器,一定时间内给接收端发送探测报文。为了传递效率提扃,发送数据吋会尽量次发送多个字节,这里会通过算法控制接收窗口发送窗口接收窗口取决发送窗口取决于对于本段应用端接收窗囗应用应用接收窗口取决发送窗口取决于对于本段应用端接收舍口发送窗口接收窗口字节流方向窗囗关联方问发送窗口中的四个概念:已发送并收到确认;凵发送但未收到确认;允许发送但未发送;不允许发送。每次成功发送完数据后,发送窗口都会根据接受窗口返冋的ack大小来调整窗口大小后浩前沿前移收缩前移A的发送窗凵=20E区图国时国时网國國回回区画乎图已发送井不允许发送收到确认允许发送的序号B期望收到的序号图5-15根据B给出的窗口值,A构造出自己的发送窗口12. linux的五种I0模式/异步模式1)同步阻塞I/O2)同步非阻塞I/O(只能阻塞个io)3)同步I/O复用模型(可以阻塞多个i,用一个进程/线程调用多个io,其实是复用进稈/线程)4)同步信号驱动I/O5)异步I/O模型3.网络编程设计模式, reactor/ proactor/半同步半异步模式?reactor模式:同步阻塞I/O模式,注册对应读写事件处理器,等待事件发生进而调用事件处理器处理事件。 proactor模式:异步I/O模式。 Reactor和 Proactor模式的主要区别就是真正的读取和写入操作是有谁来完成的, Reactor中需要应用程序自己读取或者写入数据, Proactor模式中,应用程序不需要进行实际读写过程。Reactor是:主线程往epo‖l核上注册 socket读事件,上线程调用 epoll_wait等待 socket上有数据可读,当 socket上有数据可读的时候,主线程把 socket可读事件放入请求队列。睡眠在请求队列上的某个工作线程被唤醒,处理客户请求,然后往epo‖!内核上注册 socket写请求事件。主线程调用 epoll_wait等待写请求事件,当有事件可写的时候,主线程把 socket可写事件放入请求队刎。睡眠在请求队列上的工作线程被唤醒,处理客户请求。Proactor主线程调用 aio read函数向内核注册 socket上的读完成事件,并告诉内核用广读缓冲区的位置,以及读完成后如何通知应用程序,主线程继续处理其他逻辑,当 socket上的数据被读入用户缓冲区后,通过信号告知应用程序数据已经可以使用。应用程序预先定义好的信号处理凼数选择一个工作线程来处理客户请求。工作线程处理完客户请求之后调用ao wrⅰte函数向内核注册 socke写完成事件,并告诉内核写缓冲区的位置,以及写完成时如何通知应用程序。主线程处玛其他逻辑。当用户缓存区的数据被写入 socket之后内核向应用程序发送一个信号,以通知应用程序数据已经发送完毕。应用程序预先定义的数据处理函数就会完成工作。半同步半异步模式上:层的任务(如:数据库查询,文件传输)使用同步IO模型,简化了编写并行程序的难度而底层的任务(如网络控制器的中断处理)使用异步I/O模型,提供了执行效率14.1inux下io多路复用的方案 select、poll、epol1的区别select:利用一个数组结构(最大1024)来存储需要检测的描述符,每次调用需要清空数组结构后重新存入新的描述符文件,然后遍历需要操作的描述符。可以用仨检测单个描述符可以理解为拉取pol:也是利用数组结构存储,但是没有描述符个数限制,而且每次调用时不需要清空存储描述符结构数组。可以用于检测大量描述符的情况。可以理解为拉取epoll:是 select/po!的升级版本,它的机制是可以监视大量的描述符,当有需要连接时将改描述符存放到队列中,而epol只监视和执行队列中即可。可以用于大量并发连接中只有少量活跃的情况。可以理解为推送http://blog.csdnnet/lookatthestars/article/details/5210877315.epo11哪些触发模式,有啥区别?(必须非常详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认epo‖有EPoL和 EPOLLET两种触发模式,LT是默认的模式,ET是高速"模式。LT模式下,只要这个fd还有数据可读,每次 epoll_wait都会返回它的事件,提醒用户稈序去操作,而在ET(边缘触发)模式中,它只会提示一次,直到下次再有数据流入之前都不会再提小」,无论fd中是否还有数据可读。所以在ET模式下,read一个fd的时候一定要把它的 buffer读光,也就是说一直读到read的返回值小于请求值。也就是说在LT模式的情况下‘定要确认收发的数据包的 buffer是不是足够大如果收发数据包大小大于 buffer的大小的时侯就可能会出现数据丢失的情况。16. Boost.asio、 libevent、1ibev简介。Boost.asio是一个跨平台的C++库,用于网络和底层I/0编程,可以在I/0对象(如socket)上执行同步和异步操作。 boost.asio的跨平台性原理是在win系统(支持I0CP)linux系统(支持epo11)。 boost:asio将整个异步平台抽象成 boost::asio: lo service,用work控制 1o service生命周期,通知它是否结束,只要对象work( 1o servi ce)存在,10 service就不会结束。利用 buffer类存储数据libevent是一个C语言与的网络库,官方主要支持的是类 linux操作系统,最新的版本添加了对 windows的I0CP的支持由于I0CP是异步I0,与 linux下的POL模型, EPOLL型,还有 freebsd的 KQUEUE等这些同步模型在用法上完全不一致,所以使用方法也不样,就好比ACE中的 Reactor和 Proactor模式一样,使用起来需要转变思路。如果对性能没有特别的要求,那么使用 Libevent中的 select模型来实现跨平台的操作, select模型可以橫跨 windows, linux,unix, solaris等系统。libel是一个C语言写的,只支持1inux系统的库,我以前研究的时候只封装了EPOL模型,不知道现在的新版有没有改进。使用方法类似 libevent,但是非常简洁,代码量是最少的一个库,乜貮几千行代码。显然这样的代码跨平台肯定是无法支持的了,如果你只需要在1inux下面运行,那用这个库也是可以的。17. connect可能会长时间阻塞,怎么解决?1.使用定时器;(最常用也最有效的·种方法2.采用非阻塞模式:设置非阻塞,返回之后用 select检测状态18. keepalive是什么东西?如何使用?keepalive,是在TCP中一个可以检测死连接的机制。1).如果主机可达,对方就会响应ACK应答,就认为是存活的。2).如果可达,但应用程序退岀,对方烑发RST应答,发送TCP撤消连接。3).如果可达,但应用程序崩溃,对方就发FIN消息。4).如果对方主杋不响应ack,rst,继续发送直到超时,就撤消连接。默认二个小时。19. socket什么情况下可读?1. socket接收缓冲区中己经接收的数据的字节数大于等于 socket接收缓冲区低潮限度的当前值;对这样的 socket的读操作不会阻塞,并返回一个大于0的值(准备好读入的数据的字节数)2连接的读一半关闭(即:接收到对方发过来的FIN的TCP连接)并且返回03.s0cket收到了对方的 connect请求已经完成的连接数为非0这样的 socket处于可读状态;4.异常的情况下 socket的读操作将不会阻塞,并且返同一个错误(-1)。20. socket编程,如果 client断电了,服务器如何快速知道?使用定时器(适合有数据流动的情况);使用sock吐t选项SO_ KEEPALIVE(适合没有数据流动的情况);1)、自己编写心跳包程序,简单的说就是自己的程序加入一条线程,定时向对端发送数据包,看是否有ACK,根据ACK的返回情况来管理连接。此方法比较通用,般使用业务层心跳处理,灵活可控,但改变了现有的协议2)、使用TCP的 keepalive机制,∪NX网络编程不推荐使用SO_ KEEPALIVE米做心跳检测。keepalive原理:TCP内嵌有心跳包,以服务端为例,当 serve检测到超过一定时间(/proc/sys/net/ipv4/tcp_ keepalive_ time7200即2小时)没有数据传输,那么会向client端发送一个 keepalive packet21.如果 select返回可读,结果只读到0字节,什么情况?某个套接字集合中没有准备好,可能会 select内存用 FD CLR清为0.22.网络中,如果客户端突然掉线或者重启,服务器端怎么样才能立刻知道?若客户端掉线或者重新启动,服务器端会收到复位信号,每一种tcp/ip得实现不一样,控制机制也不·样。23.TTL是什么?有什么用处,通常那些工具会用到它?ping? traceroute? ifconfig?netstat?TTL是 Time to live,每经过一个路由就会被减去一,如果它变成0,包会被丢掉。它的主要目的是防止包在有回路的网络上死转,浪费网络资源。ping和 traceroute用到它。24请说出http协议的优缺点1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务吋,只需传送请求方法和路径,通信速度很快。3.灵活:HTTP允许传输任意类型的数据对象。4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断廾连接。采用这种方式可以节省传输时间。5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,导致每次连接传送的数据量增大。缺点就是不够安全,可以使用hps完成使用25大规模连接上来,并发模型怎么设计Epol1+线程池(epo11可以采用 libevent处理)26.tcp怎么做到不丢包。TCP提供超时重发(每一个seq后都有ack,计时时间到后重发seq),丢重复数据(通过判断seq和ack的大小,如果seq比ack小说明发过了),检验数据(通过tcp的伪首部),流量控制(利用滑动窗口实伣流量控制)等功能,保证数据能从一端传到另一端。27.TCP的确认重发机制A发—B/a向b发送数据B确认-A//b收到数据后发送给a确认包A-在重发数据中将发送成功的数据删掉28.I0CP和epo1l的联系与区别?联系:两者都是高效的io模型,都是基于事件驱动。区别:TOCP用在 Windows上,epo11用在1inux上;IQCP本质是异步非阻塞的,而epo1l是同步非阻塞的;1OCP是当事件完成时再通知,而 epoll是当事件满足处理要求是通知处理。boost中的asio网络模块的跨平台性原理是在win系统(支持IOCP),1inuκ系统(支持epollhttps://yg.aliyun.com/articles/53621进程与线程1.进程之间的通信无名管道:单向通信,只能亲戚关系才能传递,般用在父了进程之间有名管道:单向通信,可以用在任意两个进程之间通信。信号量:是一种计数器,主要用于资源共亨,用在多个进程或者进程内多个线程之间同步手段共享内存:一个进程创建共多个进程使用,和信号一起使用在进程同步与通信。信号:比较复朵的·种通信。套接字:消息队列:客服信号传递信息少,管道缓冲区受限。2.线程同步临界区,互斥对象,事件,信号量3.多线程和多进程的区别1)进程数据是分丌的:共享复岽,需要用IPC,同步简单;多线程共享进程数据:共享简单,同步复杂2)进程创建销毁、切换复杂,速度慢:线程创建销毁、切换简单,速度快3)进程占用内存多,CPU利用率低;线程占用内存少,CPU利用率高4)进程编程简单,调试简单;线程编程复杂,调试复杂5)进程间不会相互影响;线程个线程挂掉将导致整个进程挂抻6)进程适应于多核、多机分布;线程适用于多核线程所私有的:线程jd、寄存器的值、栈、线程的优先级和调度策略、线程的私有数据、信号屏蔽字、ero变量。4.多线程锁的种类有哪些?a.互斥锁( mutex)b.递归锁C.自旋锁d.读写锁5.自旋锁和互斥锁的区别?白旋锁中当锁被其他线程占用时,其他线程并不是睡眠状态,而是不停的消耗CPU,获取锁;互斥锁则不然,保持睡眠,直到互斥锁被释放溦活。自旋锁,递归调用容易造成死锁,对长时间才能获得到锁的情况,使用自旋锁容易造成CPU效率低,只有内核可抢占式或SMP情况下才真正需要自旋锁6.多线程程序架构,线程数量应该如何设置?应尽量和CPU核数相等或者为CPU核数+1的个数7.有一个计数器,多个线程都需要更新,会遇到什么问题,原因是什么,应该如何做?如何优化?有可能一个线程更新的数据已经被另外一个线程更新了,更新的数据就会出现异常,可以加锁,保证数据史新只会被一个线程完成
- 2020-11-27下载
- 积分:1
-
k均值聚类分析matlab代码
基本思想:首先任意选取K个聚类中心,按最小距离原则将各模式分配到K类的某一类;不断计算聚类中心和调整各模式的类别,最终使各模式到其判属类别中心的距离平方之和最小。
- 2020-12-06下载
- 积分:1
-
AUTOSAR DCM标准
AUTOSAR 4.2版本的DCM规范。定义故障诊断通信的相关功能、接口函数、配置。
- 2020-12-03下载
- 积分:1
-
libwebsocket的API说明文档
这个是我根据官网提供的资料,采用doxygen生成的html格式的api说明文档。
- 2020-12-08下载
- 积分:1
-
Simulink实现ASK FSK PSK数字信号调制与解调仿真
Simulink实现ASK FSK PSK数字信号调制与解调仿真——源程序及报告
- 2020-12-05下载
- 积分:1