毕业设计(论文)-基于VHDL汉明码编译码器的设计与实现_第1页
毕业设计(论文)-基于VHDL汉明码编译码器的设计与实现_第2页
毕业设计(论文)-基于VHDL汉明码编译码器的设计与实现_第3页
毕业设计(论文)-基于VHDL汉明码编译码器的设计与实现_第4页
毕业设计(论文)-基于VHDL汉明码编译码器的设计与实现_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE基于VHDL汉明码编译码器的设计与实现目录摘要 1第一章绪论 3 3 3 4第二章汉明码及汉明码编译原理 42.1纠错编码的基本原理 42.1.1分组码基本原理 4 52.2汉明码编译原理 8第三章VHDL语言与集成环境 103.1EDA概念 103.2Max+pluxII简介 113.3VHDL语言 12 123.3.2VHDL语言设计的特点 123.3.3VHDL语言优势 13第四章汉明码编译系统模块设计与实现 144.1汉明码编译原理设计 144.2系统模块设计 144.2.116位比特序列产生与分组模块 144.2.2编码模块 164.3.3加错模块 164.3.4译码与分组模块 17第五章系统仿真、调试和结果分析 185.116位序列产生与分组模块仿真 18 185.1.2结果分析 195.2编码模块仿真 19 195.2.2结果分析 195.3加错模块 19 195.3.2结果分析 205.4译码与分组串行模块仿真 205.4.2结果分析 205.5系统仿真 205.5.1顶层图 205.5.3结果分析 25第六章总结 25参考文献 26附录程序: 28山东轻工业学院2011届本科生毕业设计(论文)PAGE26摘要在通信系统中,要提高信息传输的有效性,我们将信源的输出经过信源编码用较少的符号来表达信源消息,这些符号的冗余度很小,效率很高,但对噪声干扰的抵抗能力很弱。为了提高信息传输的准确性,我们引进了差错控制技术。而该技术采用可靠的,有效的信道编码方法来实现的。纠错码是一种差错控制技术,目前已广泛应用于各种通信系统和计算机系统中,纠错编码主要用于数字系统的差错控制,对于保证通信、存储、媒体播放和信息转移等数字传递过程的质量有着重要意义,是通信、信息类科知识结构中不可缺少的一部分。本文章主要研究了基于VHDL语言的(7,4)汉明码的设计。整个设计包括四个模块:16位序列产生和分组模块,编码模块,加错模块,译码模块。其中加错模块是为了模拟信道干扰人为的给数据添加一位错误,然后通过MAX+plusII10.2软件进行仿真和调试,从而验证了(7,4)汉明码具有纠正一位错码的能力。关键词:编码译码MAX+plusIIABSTRACTInthecommunicationssystem,toenhancetheeffectivenessofinformationtransmission,wewillsourcetheoutputaftersourcecodingwithfewersymbolstoexpressthesourceofthenewsletter,theredundancyofthesesymbolsisverysmall,veryefficient,butthenoiseweakresistancetointerference.Inordertoimprovetheaccuracyofinformationtransmission,weintroduceerrorcontroltechniques.Thetechnologyusesareliableandeffectivemethodofchannelcodingtoachieve.Error-correctingcodeisanerrorcontroltechniqueshavebeenwidelyusedinvariouscommunicationssystemsandcomputersystems,mainlyusedforerror-correctingcodingerrorsindigitalcontrolsystems,toensurecommunication,storage,mediaplayersanddigitaltransmissionofinformationtransferthequalityoftheprocessofgreatsignificance,isthecommunications,information-typeknowledgestructureofsubjectsanindispensablepart.Thisarticleintroducesasystematicerror-correctingcodesindigitalsystemsintheuseanddevelopment,aswellasthebasicprinciplesoferror-correctingcodesandmeaningofcommonlyusederror-correctingcodesandclassifiedbriefings,aswellasVc++6.0,introducedthebasicknowledge,andhowVc++toachievetheapplicationofhammingcodeencoderanddecoder.Thisarticlemainlystudythedesignofthe(7,4)HammingCodebasedontheVery-High-SpeedIntegratedCircuitHardwareDescriptionLanguage.Thedesignofhammingcodeconsistsoffourmodules:the16Sequencegenerationandgroupingmodule,theencodingmodule,theaddingonebiterrormodule,andthedecodingmodule.thedesignoftheaddingonebiterrormoduleistosimulatechannelsinterference,affertestingandsimulation,thusprovingthatthe(7,4)Hanmmingcodehastheabilitytocorrectawrongcode.Keywords:encode;decode;MAX+plusII第一章绪论研究背景与选题意义1、研究背景移动通信的发展日新月异,其强大的魅力之所在就是它能为众提供了固话所不及的灵活、机动、高效的通信方式,非常适合信息社会发展的需要,但同时这也使移动通信系统的研究、开发和实现比有线通信系统更复杂、更困难。实际上,移动无线信道是通信中最恶劣、最难预测的通信信道之一。于是促进了信道编码技术的发展。目前信道编码已经成功地应用于各种通信系统中,并且在计算机、磁记录与各种存储器中了得到日益广泛的应用。提高数据传输效率,降低误码率是信道编码的任务。信道编码的本质是增加通信的可靠性。但信道编码会使有用的信息数据传输减少,信道编码的过程是在源数据码流中加插一些码元,从而达到在接收端进行判错和纠错的目的,这就是我们常常说的开销。这就好象我们运送一批玻璃杯一样,为了保证运送途中不出现打烂玻璃杯的情况,我们通常都用一些泡沫或海棉等物将玻璃杯包装起来,这种包装使玻璃杯所占的容积变大,原来一部车能装5000各玻璃杯的,包装后就只能装4000个了,显然包装的代价使运送玻璃杯的有效个数减少了。同样,在带宽固定的信道中,总的传送码率也是固定的,由于信道编码增加了数据量,其结果只能是以降低传送有用信息码率为代价了。将有用比特数除以总比特数就等于编码效率了,不同的编码方式,其编码效率有所不同。编码涉及到的内容也比较广泛,前身纠错编码(FEC)、线性分组码(汉明码、循环码)、理德-所罗门码(RS码)、FIRE码、交织码、卷积码、TCM编码、Turbo码等都是差错控制编码的研究范畴。汉明码是由汉明于1950年提出的,具有纠正一位错误能力的线性分组码,它的突出特点是:编译码电路简单,易于硬件实现;用软件实现编译码算法时,软件效率高;而且性能比较好。2、选题意义汉明码的编码与译码是通信领域的一个重要的研究内容。与一般的编码相比其具有比较高效率,同时其是分组码的典型代表,是深入研究其他分组码的基础,也是研究其他非分组码(如循环码)的基础,本课题利用EDA来实现,与实际联系很大,对将来从事实际工作和相关研究具有很大帮助。与主要工作1、研究目标学习EDA集成开发工具(MAX+plusII)相关操作。包括学习VHDL编程语言、方法和仿真结果的查看、处理等。研究学习汉明码编译的原理。2、主要工作查阅资料,认真学习EDA开发工具(MAX+plusII),熟练掌握VHDL语言的编程思路与方法。对系统的结构设计有了初步的思路以后,大体绘出系统的结构框图。对系统进行设计,完成程序的编写。在认真学习了汉明码编译的原理后,编写程序实现算法。对程序进行调试,对系统进行计算机仿真。对已搭建好的汉明码编译系统仿真研究,记录相应的仿真结果。第二章将介绍汉明码及汉明码编译原理。第三章将介绍VHDL语言,以及EDA集成开发环境MAX+plusII。第四章详细介绍了汉明码编译系统模块设计与实现。第五章对系统仿真和调试以及最后对结果进行分析。第六章对整个系统的设计进行总结与展望。最后是致谢和参考文献。第二章汉明码及汉明码编译原理2.1纠错编码的基本原理 2.1.1分组码基本原理设有一种由3位二进制数字构成的码组,它共有8种不同的可能组合。若将其全部用来表示天气,则可以表示8种不同天气,例如:“000”(晴),“001”(云),“010”(阴),“011”(雨),“100”(雪),“101”(霜),“110”(雾),“111”(雹)。其中任一码组在传输中若发生一个或多个错码,则将变成另一个信息码组。这时,接收端将无法发现错误。若在上述8种码组中只准许使用4种来传送天气,例如:“000”=晴 “011”=云“101”=阴“110”=雨这时,虽然只能传送4种不同的天气,但是接收端却有可能发现码组中的一个错码。例如,若“000”(晴)中错了一位,则接收码组将变成“100”或“010”或“001”。这3种码组都是不准使用的,称为禁用码组。接收端在收到禁用码组时,就认为发现了错码。当发生3个错码时,“000”变成了“111”,它也是禁用码组,故这种编码也能检测3个错码。但是这种码不能发现一个码组中的两个错码,因为发生两个错码后产生的是许用码组【1】。上面这种编码只能检测错码,不能纠正错码。例如,当接收码组为禁用码组“100”时,接收端将无法判断是哪一位码发生了错误,因为晴、阴、雨三者错了一位都可以变成“100”。要能够纠正错误,还要增加多余度。例如,若规定许用码组只有两个:“000”(晴),“111”(雨),其他都是禁用码组,则能够检测两个以下错码,或能够纠正一个错码。例如,当收到禁用码组“100”时,若当作仅有一个错码,则可以判断此错码发生在“1”位,从而纠正为“000”(晴)。因为“111”(雨)发生任何一位错码时都不会变成“100”这种形式。但是,这时若假定错码数不超过两个,则存在两种可能性:“000”错一位和“111”错两位都可能变成“100”,因而只能检测出存在错码而无法纠正错码。将信息码分组,为每组信息码附加若干监督码的编码称为分组码。在分组码中,监督码元仅监督本码组中的信息码元。信息位和监督位的关系举例如表2-1-1:表2-1-1信息位与监督位的关系信息位监督位晴000云011阴101雨110分组码的一般结构如图2-1-1:图2-1-1分组的一般结构分组码的符号:(n,k)N-码组的总位数,又称为码组的长度(码长)。k-码组中信息码元的数目。n–k=r-码组中的监督码元数目,或称监督位数目。码重:把码组中“1”的个数目称为码组的重量,简称码重。码距:把两个码组中对应位上数字不同的位数称为码组的距离,简称码距。码距又称汉明距离。例如,“000”=晴,“011”=云,“101”=阴,“110”=雨,4个码组之间,任意两个的距离均为2。最小码距:把某种编码中各个码组之间距离的最小值称为最小码距(d0)。例如,上面的编码的最小码距d0=2。图2-1-2三维空间对于3位的编码组,可以在3维空间中说明码距的几何意义。每个码组的3个码元的值(a1,a2,a3)就是此立方体各顶点的坐标。而上述码距概念在此图中就对应于各顶点之间沿立方体各边行走的几何距离。由图2-1-2可以直观看出,上例中4个准用码组之间的距离均为2。一种编码的最小码距d0的大小直接关系着这种编码的检错和纠错能力,为检测e个错码,要求最小码距d0e+1。[2]图2-1-3汉明距离【证】设一个码组A位于O点,如图2-1-3所示。若码组A中发生一个错码,则我们可以认为A的位置将移动至以O点为圆心,以1为半径的圆上某点,但其位置不会超出此圆。若码组A中发生两位错码,则其位置不会超出以O点为圆心,以2为半径的圆。因此,只要最小码距不小于3,码组A发生两位以下错码时,不可能变成另一个准用码组,因而能检测错码的位数等于2。同理,若一种编码的最小码距为d0,则将能检测(d0-1)个错码。反之,若要求检测e个错码,则最小码距d0至少应不小于(e+1)。为了纠正t个错码,要求最小码距d02t+1。图2-1-4汉明距离【证】图2-1-4中画出码组A和B的距离为5。码组A或B若发生不多于两位错码,则其位置均不会超出半径为2以原位置为圆心的圆。这两个圆是不重叠的。判决规则为:若接收码组落于以A为圆心的圆上就判决收到的是码组A,若落于以B为圆心的圆上就判决为码组B。这样,就能够纠正两位错码。若这种编码中除码组A和B外,还有许多种不同码组,但任两码组之间的码距均不小于5,则以各码组的位置为中心以2为半径画出之圆都不会互相重叠。这样,每种码组如果发生不超过两位错码都将能被纠正。因此,当最小码距d0=5时,能够纠正2个错码,且最多能纠正2个。若错码达到3个,就将落入另一圆上,从而发生错判。故一般说来,为纠正t个错码,最小码距应不小于(2t+1)。在解释此式之前,先来分析图2.1.5所示的例子。图2-1-5汉明距离图2-1-5中码组A和B之间距离为5。按照检错能力公式,最多能检测4个错码,即e=d0–1=5–1=4,按照纠错能力公式纠错时,能纠正2个错码。但是,不能同时作到两者,因为当错码位数超过纠错能力时,该码组立即进入另一码组的圆内而被错误地“纠正”了。例如,码组A若错了3位,就会被误认为码组B错了2位造成的结果,从而被错“纠”为B。这就是说,检错和纠错公式不能同时成立或同时运用。所以,为了在可以纠正t个错码的同时,能够检测e个错码,就需要像图2-1-6所示:图2-1-6汉明距离使某一码组(譬如码组A)发生e个错误之后所处的位置,与其他码组(譬如码组B)的纠错圆圈至少距离等于1,不然将落在该纠错圆上从而发生错误地“纠正”。因此,由图2-1-6可以直观看出,要求最小码距这种纠错和检错结合的工作方式简称纠检结合。这种工作方式是自动在纠错和检错之间转换的。当错码数量少时,系统按前向纠错方式工作,以节省重发时间,提高传输效率;当错码数量多时,系统按反馈重发方式纠错,以降低系统的总误码率。所以,它适用于大多数时间中错码数量很少,少数时间中错码数量多的情况。2.2汉明码编译原理能够纠正1位错码且编码效率较高的一种线性分组码。在偶数监督码中,由于使用了一位监督位a0,它和信息位an-1…a1一起构成一个代数式:在接收端解码时,实际上就是在计算 若S=0,就认为无错码;若S=1,就认为有错码。现将上式称为监督关系式,S称为校正子。由于校正子S只有两种取值,故它只能代表有错和无错这两种信息,而不能指出错码的位置。若监督位增加一位,即变成两位,则能增加一个类似的监督关系式。由于两个校正子的可能值有4中组合:00,01,10,11,故能表示4种不同的信息。若用其中1种组合表示无错,则其余3种组合就有可能用来指示一个错码的3种不同位置。同理,r个监督关系式能指示1位错码的(2r–1)个可能位置。一般来说,若码长为n,信息位数为k,则监督位数r=n-k。如果希望用r个监督位构造出r个监督关系式来指示1位错码的n种可能位置,则要求下面通过一个例子来说明如何具体构造这些监督关系式。例:设分组码(n,k)中k=4,为了纠正1位错码,由上式可知,要求监督位数r3。若取r=3,则n=k+r=7。我们用a6a5……a0表示这7个码元,用S1、S2和S3表示3个监督关系式中的校正子,则S1、S2和S3的值与错码位置的对应关系可以规定如表2-1-2所示:表2-1-2校正子与错码位置的关系S1S2S3错码位置S1S2S3错码位置001a0101a4010a1110a5100a2111a6011a3000无错码由上表中规定可见,仅当一位错码的位置在a3、a4、a5或a6时,校正子S1为1;否则S1为零。这就意味着a3、a4、a5和a6四个码元构成偶数监督关系:同理,a1、a2、a5和a6构成偶数监督关系:以及a0、a2、a4和a6构成偶数监督关系在发送端编码时,信息位a6、a5、a4和a3的值决定于输入信号,因此它们是随机的。监督位a2、a1和a0应根据信息位的取值按监督关系来确定,即监督位应使上三式中S1、S2和S3的值为0(表示编成的码组中应无错码):上式经过移项运算,解出监督位给定信息位后,可以直接按上式算出监督位,结果见表2-1-3:表2-1-3与信息位对应的监督位信息位a6a5a4a3监督位a2a1a0信息位a6a5a4a3监督位a2a1a00000000100011100010111001100001010110100100011110101100101001101100001010110111010100110011111010001110001111111接收端收到每个码组后,先计算出S1、S2和S3,再查表判断错码情况。例如,若接收码组为0000011,按上述公式计算可得:S1=0,S2=1,S3=1。由于S1S2S3等于011,故查表可知在a3位有1错码。按照上述方法构造的码称为汉明码。表中所列的(7,4)汉明码的最小码距d0=3。因此,这种码能够纠正1个错码或检测2个错码。由于码率k/n=(n-r)/n=1–r/n,故当n很大和r很小时,码率接近1。可见,汉明码是一种高效码。第三章VHDL语言与集成环境3.1EDA概念20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。【4】EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。【3】3.2Max+pluxII简介Max+plusⅡ是Altera公司提供的FPGA/CPLD开发集成环境,Altera是世界上最大可编程逻辑器件的供应商之一。Max+plusⅡ界面友好,使用便捷,被誉为业界最易用易学的EDA软件。在Max+plusⅡ上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。【5】Max+plusⅡ开发系统的特点开放的界面Max+plusⅡ支持与Cadence,Exemplarlogic,MentorGraphics,Synplicty,Viewlogic和其它公司所提供的EDA工具接口。与结构无关Max+plusⅡ系统的核心Complier支持Altera公司的FLEX10K、FLEX8000、FLEX6000、MAX9000、MAX7000、MAX5000和Classic可编程逻辑器件,提供了世界上唯一真正与结构无关的可编程逻辑设计环境。完全集成化Max+plusⅡ的设计输入、处理与较验功能全部集成在统一的开发环境下,这样可以加快动态调试、缩短开发周期。丰富的设计库Max+plusⅡ提供丰富的库单元供设计者调用,其中包括74系列的全部器件和多种特殊的逻辑功能(Macro-Function)以及新型的参数化的兆功能(Mage-Function)。模块化工具设计人员可以从各种设计输入、处理和较验选项中进行选择从而使设计环境用户化。硬件描述语言(HDL)Max+plusⅡ软件支持各种HDL设计输入选项,包括VHDL、VerilogHDL和Altera自己的硬件描述语言AHDL。Opencore特征Max+plusⅡ软件具有开放核的特点,允许设计人员添加自己认为有价值的宏函数。3.3VHDL语言VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的认可,并逐步取代了原有的非标准的硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL与Verilog语言将承担起大部分的数字系统设计任务。【6】VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。VHDL的英文全写是:VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage.翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。3.3.2VHDL语言设计的特点与其他硬件描述语言相比,VHDL具有以下特点:(1)功能强大、设计灵活VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言所不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。(2)支持广泛、易于修改由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计。(3)强大的系统硬件描述能力VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建。【7】(4)高层次的系统模型。独立于器件的设计、与工艺无关设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。当设计描述完成后,可以用多种不同的器件结构来实现其功能。(5)很强的移植能力VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。(6)易于共享和复用VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。3.3.3VHDL语言优势(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。【8】第四章汉明码编译系统模块设计与实现4.1汉明码编译原理设计原理图如图4-1所示:图4-1原理图该系统一共有四大模块:(1)16位序列产生与分组模块(2)编码模块(3)加错模块(4)译码与分组串行4.2系统模块设计4.2.116位比特序列产生与分组模块1、管脚说明CLK:输入的时钟,std_logic数据类型,上升沿有效。CLR:输入清零信号,高电平有效。ZO:输出的序列,std_logic数据类型。dataout16:每4个bit输出一次,std_logic_vector(3downto0)数据类型。2、功能该序列可以固定的输出011011110010110116位二进制数,并且能够每16位循环一次。ZO输出管脚是直接输出的串行数据,并没有进行分组处理,而dataout16管脚实现了分组功能,即每四位分为一组。这样16位数据分成了四组。【9】3、用VHDL语言实现首先选择一个计数变量,每当计数一次就输出一个bit。IF(CLR='1')THENCOUNT<="0000";ELSEIF(CLK='1'ANDCLK'EVENT)THENIF(COUNT="1111")THENCOUNT<="0000";ELSECOUNT<=COUNT+'1';ENDIF;ENDIF;ENDIF;CASECOUNTISWHEN"0000"=>Z<='0';WHEN"0001"=>Z<='1';WHEN"0010"=>Z<='1';WHEN"0011"=>Z<='0';WHEN"0100"=>Z<='1';WHEN"0101"=>Z<='1';WHEN"0110"=>Z<='1';WHEN"0111"=>Z<='1';WHEN"1000"=>Z<='0';WHEN"1001"=>Z<='0';WHEN"1010"=>Z<='1';WHEN"1011"=>Z<='0';WHEN"1100"=>Z<='1';WHEN"1101"=>Z<='1';WHEN"1110"=>Z<='0';WHENOTHERS=>Z<='1';ENDCASE;然后将输出存入一个矢量数据dataout16中:ifclr='1'thendataout16<="0000";elsifrising_edge(clk)theniftemp1<4then casetempis when0=>a(3):=Z;temp:=1; when1=>a(2):=Z;temp:=2; when2=>a(1):=Z;temp:=3; when3=>a(0):=Z;temp:=0;temp1:=temp1+1;dataout16<=a(3)&a(2)&a(1)&a(0); endcase;endif;endif;其中变量temp1是数组个数,按照每16分四个组则可分四个数组,所以其值是从0到3四个整数,temp变量标志一个数组中的第几位,如果temp=0,则是相应数据中的第一个比特。4.2.2编码模块1、管脚说明a:输入要编码的数据,共有四位。b:输出已经编码的码,b6,b5,b4,b3,b2,b1,b0,前四位为信息位,后三位为监督位。2、功能将四位信息码,根据汉明码原理,加上3位监督位,输出六位二进制码。3、用VHDL语言实现b(6)<=a(3);b(5)<=a(2);b(4)<=a(1);b(3)<=a(0);b(2)<=a(3)xora(2)xora(1);b(1)<=a(3)xora(2)xora(0);b(0)<=a(3)xora(1)xora(0);其中xor为异或运算符。4.3.3加错模块1、管脚说明datain:输入七位二进制,其为已编码数据dataout:输出七位数据,含一位错C:为控制位,如果C为001则是数组中的最右边一位发生错误,如果C为010则为数组中从最右边算第二位。2、用VHDL语言实现CASECISWHEN"001"=>S(0):=NOTDATAIN(0);DATAOUT<=DATAIN(6DOWNTO1)&S(0);WHEN"010"=>S(1):=NOTDATAIN(1);DATAOUT<=DATAIN(6DOWNTO2)&S(1)&DATAIN(0);WHEN"011"=>S(2):=NOTDATAIN(2);DATAOUT<=DATAIN(6DOWNTO3)&S(2)&DATAIN(1DOWNTO0);WHEN"100"=>S(3):=NOTDATAIN(3);DATAOUT<=DATAIN(6DOWNTO4)&S(3)&DATAIN(2DOWNTO0);WHEN"101"=>S(4):=NOTDATAIN(4);DATAOUT<=DATAIN(6DOWNTO5)&S(4)&DATAIN(3DOWNTO0);WHEN"110"=>S(5):=NOTDATAIN(5);DATAOUT<=DATAIN(6)&S(5)&DATAIN(4DOWNTO0);WHEN"111"=>S(6):=NOTDATAIN(6);DATAOUT<=S(6)&DATAIN(5DOWNTO0);whenothers=>dataout<=datain;endcase;以上是用一个case语句来实现,比较简单。4.3.4译码与分组模块1、管脚说明A(7):输入加错以后的七位二进制数据。Clk1:时钟,上升沿有效Clr1:置零作用,高电平有效M1:将数据串行输出B(4):将数据以分组的形式输出,每四位一组。S(3):输出一个三比特数组矢量,表示七位数据中哪一位发生了错误。如是001表示第一位发生错误,如是002则表示第二位发生错误,依次类推,000则表示没有发生错误。[11]2、用VHDL语言实现先是译码输出,ss(2):=a(6)xora(5)xora(4)xora(2);ss(1):=a(6)xora(5)xora(3)xora(1);ss(0):=a(6)xora(4)xora(3)xora(0);casessis--纠1位错码when"001"=>bb(0):=notbb(0);n<="001";when"010"=>bb(1):=notbb(1);n<="010";when"100"=>bb(2):=notbb(2);n<="011";when"011"=>bb(3):=notbb(5);n<="100";when"101"=>bb(4):=notbb(4);n<="101";when"110"=>bb(5):=notbb(5);n<="110";when"111"=>bb(6):=notbb(6);n<="111";whenothers=>null;n<="000";endcase;s<=n(2)&n(1)&n(0);bbb<=bb(6)&bb(5)&bb(4)&bb(3);b<=bbb;其中ss为校正子,通过查表的形式来确定输入的七位比特是否发生错误,如果错误了是哪一位发生错误了。由于校正子ss与错误位置并不对应,所以引入一个信号n,来校正这种对应关系。当n=001,就表示从右边数第一位发生了错误。[10]然后是将输出的分组进行串行输出:ifclr1='1'thenm1<='0';elsifrising_edge(clk1)thenif(bbb>"0000")theniftemp1<4thencasetempiswhen0=>s4<=bbb(3);temp:=1;m1<=s4;when1=>s4<=bbb(2);temp:=2;m1<=s4;when2=>s4<=bbb(1);temp:=3;m1<=s4;when3=>s4<=bbb(0);temp:=0;m1<=s4;temp1:=temp1+1;endcase;endif;endif;endif;与编码原理正好相反,其中变量temp1表示数组的个数,变量temp表示数组中第几位。[12]第五章系统仿真、调试和结果分析5.116位序列产生与分组模块仿真图5-1-116位序列产生与分组仿真5.1.2结果分析由图5-1-1可知,每经过一个Clk时钟,就ZO输出一个比特,每经过四个Clk时钟,DATAOUT16就输出四位二进制,即为一个矢量数组。并且每四个数组为一个循环。5.2编码模块仿真图5-2-1编码模块仿真5.2.2结果分析由图5-2-1可知,每输入四位数据就输出六位输出,输出的六位前四位是信息位,与输入的数据相同,后三位为监督位,输出结果与经过公式编码输出的结果一样。5.3加错模块图5-3-1加错模块仿真5.3.2结果分析为了更好测试该系统的纠错能力,人为的增加一个控制变量C,如果C为001则控制输入的第一位(从右边数)发生错误,如果是010则是第二位发生错误,依次类推,但当C为000时,表示没有发生错误。图5.3.1是C=001,表示控制第一位发生错误,将datain与dataout相比,很容易看出dataout中第一位均发生错误,从而实现错位控制的作用。5.4译码与分组串行模块仿真5.4.1仿真图图5-4-1译码与分组串行模块仿真5.4.2结果分析a是输入数据,此数据是经过加错处理后的数据,原始数据是0110011,控制第五位发生错误,输出0100011,即是a,经过译码输出b=0110,可见已经将错位纠正,输出s指示出纠正了哪一位,正好与控制位相同,输出m1是将数组b进行串行输出。由此可知该模块实现指定的功能。5.5系统仿真5.5.1顶层图图5-5-1顶层图5.5.2仿真图当错位控制C=001,即使第1位(从右边数)发生错误。图5-5-2-1C=001时的仿真结果当错位控制C=010,即使第2位(从右边数)发生错误。图5-5-2-2C=010时的仿真结果当错位控制C=011,即使第3位(从右边数)发生错误。图5-5-2-3C=011时的仿真结果当错位控制C=100,即使第4位(从右边数)发生错误。图5-5-2-4C=100时的仿真结果当错位控制C=101,即使第5位(从右边数)发生错误。图5-5-2-5C=101时的仿真结果当错位控制C=110,即使第6位(从右边数)发生错误。图5-5-2-6C=110时的仿真结果当错位控制C=111,即使第7位(从右边数)发生错误。图5-5-2-7C=111时的仿真结果当错位控制C=000,此时没有发生错误。图5-5-2-8C=000时的仿真结果5.5.3结果分析以上共有八个仿真图,分别是当错位控制C为001、010、011、100、101、110、111、000,即使第一位、第二位……依次发生错误和没有发生错误这八种情况下的仿真图。可以看出错位控制与译码输出的错位指示数据相同,说明译码正确,另外从原始数据sin与最终输出数据sout相比也可以看出。如果从上往下依次看下去,即:sin[3..0]aedcod[6..0]add1err[6..0]Adecod[3..0]sout可以清晰的了解各个模块实现的功能,以及整个系统的功能。第六章总结本文阐述了汉明码编译原理及用VHDL语言进行实现的方法,并且最后在EDA集成开发环境MAX+plusII软件中通过了仿真和调试,从仿真图可以清晰地看出具体的实现流程及各模块的具体的功能。整个系统实现(7,4)汉明码的编码与译码,并且可以纠正一位错码。当然本系统并非完美的,其缺点是,如果发生两位错码或更多的错码将无法识别和纠正。可以增加一位组成(8,4)汉明码,增加一位可用于奇偶校验,根据(7,4)汉明码的译码情况与对整个码进行的奇偶校验可以判断是否发生两位错码。如果使汉明码可以纠正或识别更多的码,将会使系统可靠性增加,但有效性降低,并且现在的传输带宽并非无限,所以在可靠性与有效性之间应该根据实际情况折中选择。参考文献[1]樊昌信,曹丽娜,通信原理.北京:国防工业出版社.2007[5]褚振勇,翁木云,FPGA设计用应用[M].西安:西安电子科技大学出版社.2002[9]SunMicrosystems.java2PlatformMicroEditionTechnologyforCreatingMobileDevices.://java.sun,May19,2000[12]ShuLin,,Jr,致谢毕业设计从开始准备到最后上交前前后后有两个多月,在这两个多月里,我碰到了许许多多的问题,这些问题虽然给我制造了不少的麻烦,但是也正是这些问题,让我在解决他们的同时,使自己的能力得到了提高,让自己得到了锻炼。当然,这些问题的解决,离不开张老师和同学们的帮助。张老师兢兢业业的工作态度令我尊敬,循循善诱的教学方法令我大受裨益,无论何时,只要碰到问题,张老师总会非常耐心的帮我解决。我周围的同学们也让我感受到了集体的温暖,几个同学为在一起热烈的讨论问题,解决问题的氛围,让我无法不更加努力的学习。在我们一起讨论的同时,也让我们的能力得到了共同的提高。大学四年的时光马上就要过去了,每当想起大学里的往事,无论是喜还是悲,总会感觉自己是幸福的,我要感谢陪我度过这段美好时光的所有的老师、同学和朋友。在今后的人生道路上,我会牢记老师们的教导和同学们的帮助,面对困难,要保持冷静,敢于面对,因为我不是一个人。最后我再一次感谢在大学这四年里曾经帮助过我的人,谢谢!附录程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSENQ16GENISPORT(CLK,CLR:INSTD_LOGIC;ZO:OUTSTD_LOGIC;DATAOUT16:OUTSTD_LOGIC_vector(3DOWNto0));ENDENTITYSENQ16GEN;ARCHITECTUREARTOFSENQ16GENISSIGNALCOUNT:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALZ:STD_LOGIC:='0';BEGINPROCESS(CLK,CLR)ISBEGINIF(CLR='1')THENCOUNT<="0000";ELSEIF(CLK='1'ANDCLK'EVENT)THENIF(COUNT="1111")THENCOUNT<="0000";ELSECOUNT<=COUNT+'1';ENDIF;ENDIF;ENDIF;ENDPROCESS;PROCESS(COUNT)ISBEGINCASECOUNTISWHEN"0000"=>Z<='0';WHEN"0001"=>Z<='1';WHEN"0010"=>Z<='1';WHEN"0011"=>Z<='0';WHEN"0100"=>Z<='1';WHEN"0101"=>Z<='1';WHEN"0110"=>Z<='1';WHEN"0111"=>Z<='1';WHEN"1000"=>Z<='0';WHEN"1001"=>Z<='0';WHEN"1010"=>Z<='1';WHEN"1011"=>Z<='0';WHEN"1100"=>Z<='1';WHEN"1101"=>Z<='1';WHEN"1110"=>Z<='0';WHENOTHERS=>Z<='1';ENDCASE;ENDPROCESS;PROCESS(Z,CLK)IS--消除毛刺的锁存器BEGINIF(CLK'EVENTANDCLK='1')THENZO<=Z;ENDIF;ENDPROCESS;--实现分组process(clk,Z,clr)variabletemp:integerrange0to3;variabletemp1:integerrange0to3;variablea:std_logic_vector(3downto0);beginifclr='1'thendataout16<="0000";elsifrising_edge(clk)theniftemp1<4then casetempis when0=>a(3):=Z;temp:=1; when1=>a(2):=Z;temp:=2; when2=>a(1):=Z;temp:=3; when3=>a(0):=Z;temp:=0;temp1:=temp1+1;dataout16<=a(3)&a(2)&a(1)&a(0); endcase;endif;endif;endprocess;endARCHITECTURE;libraryieee;useieee.std_logic_1164.all;entityencodeisport(a:instd_logic_vector(3downto0);b:outstd_logic_vector(6downto0));endentityencode;--前三位是监督位architectureart1ofencodeisbeginb(6)<=a(3);b(5)<=a(2);b(4)<=a(1);b(3)<=a(0);b(2)<=a(3)xora(2)xora(1);b(1)<=a(3)xora(2)xora(0);b(0)<=a(3)xora(1)xora(0);endarchitectureart1;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYadd1errorISPORT(datain:INSTD_LOGIC_VECTOR(6DOWNTO0);C:INSTD_LOGIC_VECTOR(2downto0);dataout:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDENTITYadd1error;ARCHITECTUREart2OFadd1errorISBEGINPROCESS(C)variableS:STD_LOGIC_VECTOR(6DOWNTO0);BEGIN--如果C为000则是数组中的第一位发生错误CASECISWHEN"001"=>S(0):=NOTDATAIN(0);DATAOUT<=DATAIN(6DOWNTO1)&S(0);WHEN"010"=>S(1):=NOTDATAIN(1);DATAOUT<=DATAIN(6DOWNTO2)&S(1)&DATAIN(0);WHEN"011"=>S(2):=NOTDATAIN(2);DATAOUT<=DATAIN(6DOWNTO3)&S(2)&DATAIN(1DOWNTO0)

;WHEN"100"=>S(3):=NOTDATAIN(3);DATAOUT<=DATAIN(6DOWNTO4)&S(3)&DATAIN(2DOWNTO0)

;WHEN"101"=>S(4):=NOTDATAIN(4);DATAOUT<=DATAIN(6DOWNTO5)&S(4)&DATAIN(3DOWNTO0)

;WHEN"110"=>S(5):=NOTDATAIN(5);DATAOUT<=DATAIN(6)&S(5)&DATAIN(4DOWNTO0);WHEN"111"=>S(6):=NOTDATAIN(6);DATAOUT<=S(6)&DATAIN(5DOWNTO0);whenothers=>dataout<=datain;endcase;ENDPROCESS;ENDARCHITECTURE;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;entitydecodeisport(a:instd_logic_vector(6downto0);--汉明码输入s:outstd_logic_vector(2downto0);--指示错码位置b:outstd_logic_vector(3downto0);--译码输出m1:outstd_logic;clk1,clr1:instd_logic--n:outstd_logic_vector(2downto0));endentity;architectureart3ofdecodeissignalBBB:std_logic_vector(3downto0);signalBBB1:std_logic_vector(3downto0);signals4:std_logic;signaln:std_logic_vector(2downto0);beginprocess(a)variabless:std_logic_vector(2downto0);variablebb:std_logic_vector(6downto0);begin--指示错码位置ss(2):=a(6)xora(5)xora(4)xora(2);ss(1):=a(6)xora(5)xora(3)xora(1);ss(0):=a(6)xora(4)xora(3)xora(0);bb:=a;casessis--纠1位错码when"001"=>bb(0):=notbb(0);n<="001";when"010"=>bb(1):=notbb(1);n<="010";when"100"=>bb(2):=notbb(2);n<="011";when"011"=>bb(3):=notbb(5);n<="100";when"101"=>bb(4):=notbb(4);n<="101";when"110"=>bb(5):=notbb(5);n<="110";when"111"=>bb(6):=notbb(6);n<="111";whenothers=>null;n<="000";endcase;s<=n(2)&n(1)&n(0);bbb<=bb(6)&bb(5)&bb(4)&bb(3);b<=bbb;endprocess;process(clk1,s4,clr1)--实现m序列的串行输出variabletemp:integerrange0to3;variabletemp1:integerrange0to3;beginifclr1='1'thenm1<='0';elsifrising_edge(clk1)thenif(bbb>"0000")theniftemp1<4thencasetempiswhen0=>s4<=bbb(3);temp:=1;m1<=s4;when1=>s4<=bbb(2);temp:=2;m1<=s4;when2=>s4<=bbb(1);temp:=3;m1<=s4;when3=>s4<=bbb(0);temp:=0;m1<=s4;temp1:=temp1+1;endcase;endif;endif;endif;endprocess;endarchitecture;PAGEPAGE38原文已完。下文为附加文档,如不需要,下载后可以编辑删除,谢谢!施工组织设计本施工组织设计是本着“一流的质量、一流的工期、科学管理”来进行编制的。编制时,我公司技术发展部、质检科以及项目部经过精心研究、合理组织、充分利用先进工艺,特制定本施工组织设计。工程概况:西夏建材城生活区27#、30#住宅楼位于银川市新市区,橡胶厂对面。本工程由宁夏燕宝房地产开发开发,银川市规划建筑设计院设计。本工程耐火等级二级,屋面防水等级三级,地震防烈度为8度,设计使用年限50年。本工程建筑面积:27#m2;30#m2。室内地坪±m为准,总长27#m;30#m。总宽27#m;30#m。设计室外地坪至檐口高度18.600m,呈长方形布置,东西向,三个单元。本工程设计屋面为坡屋面防水采用防水涂料。外墙水泥砂浆抹面,外刷浅灰色墙漆。内墙面除卫生间200×300瓷砖,高到顶外,其余均水泥砂桨罩面,刮二遍腻子;楼梯间内墙采用50厚胶粉聚苯颗粒保温。地面除卫生间200×200防滑地砖,楼梯间50厚细石砼1:1水泥砂浆压光外,其余均采用50厚豆石砼毛地面。楼梯间单元门采用楼宇对讲门,卧室门、卫生间门采用木门,进户门采用保温防盗门。本工程窗均采用塑钢单框双玻窗,开启窗均加纱扇。本工程设计为节能型住宅,外墙均贴保温板。本工程设计为砖混结构,共六层。基础采用C30钢筋砼条形基础,上砌MU30毛石基础,砂浆采用M10水泥砂浆。一、二、三、四层墙体采用M10混合砂浆砌筑MU15多孔砖;五层以上采用M混合砂浆砌筑MU15多孔砖。本工程结构中使用主要材料:钢材:=1\*ROMANI级钢,=2\*ROMANII级钢;砼:基础垫层C10,基础底板、地圈梁、基础构造柱均采用C30,其余均C20。本工程设计给水管采用PPR塑料管,热熔连接;排水管采用UPVC硬聚氯乙烯管,粘接;给水管道安装除立管及安装IC卡水表的管段明设计外,其余均暗设。本工程设计采暖为钢制高频焊翅片管散热器。本工程设计照明电源采用BV-铜芯线,插座电源等采用BV-4铜芯线;除客厅为吸顶灯外,其余均采用座灯。施工部署及进度计划1、工期安排本工程合同计划开工日期:2004年8月21日,竣工日期:2005年7月10日,合同工期315天。计划2004年9月15日前完成基础工程,2004年12月30日完成主体结构工程,2005年6月20日完成装修工种,安装工程穿插进行,于2005年7月1日前完成。具体进度计划详见附图-1(施工进度计划)。2、施工顺序=1\*GB2⑴基础工程工程定位线(验线)→挖坑→钎探(验坑)→砂砾垫层的施工→基础砼垫层→刷环保沥青→基础放线(预检)→砼条形基础→刷环保沥青→毛石基础的砌筑→构造柱砼→地圈梁→地沟→回填工。=2\*GB2⑵结构工程结构定位放线(预检)→构造柱钢筋绑扎、定位(隐检)→砖墙砌筑(+50cm线找平、预检)→柱梁、顶板支模(预检)→梁板钢筋绑扎(隐检、开盘申请)→砼浇筑→下一层结构定位放线→重复上述施工工序直至顶。=3\*GB2⑶内装修工程门窗框安装→室内墙面抹灰→楼地面→门窗安装、油漆→五金安装、内部清理→通水通电、竣工。=4\*GB2⑷外装修工程外装修工程遵循先上后下原则,屋面工程(包括烟道、透气孔、压顶、找平层)结束后,进行大面积装饰,塑钢门窗在装修中逐步插入。施工准备现场道路本工程北靠北京西路,南临规划道路,交通较为方便。场内道路采用级配砂石铺垫,压路机压。机械准备=1\*GB2⑴设2台搅拌机,2台水泵。=2\*GB2⑵现场设钢筋切断机1台,调直机1台,电焊机2台,1台对焊机。=3\*GB2⑶现场设木工锯,木工刨各1台。=4\*GB2⑷回填期间设打夯机2台。=5\*GB2⑸现场设塔吊2台。3、施工用电施工用电已由建设单位引入现场;根据工程特点,设总配电箱1个,塔吊、搅抖站、搅拌机、切断机、调直机、对焊机、木工棚、楼层用电、生活区各配置配电箱1个;电源均采用三相五线制;各分支均采用钢管埋地;各种机械均设置接零、接地保护。具体配电箱位置详见总施工平面图。施工用水施工用水采用深井水自来水,并砌筑一蓄水池进行蓄水。楼层用水采用钢管焊接给水管,每层留一出水口;给水管不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论