EDA技术基础第章电路设计实践_第1页
EDA技术基础第章电路设计实践_第2页
EDA技术基础第章电路设计实践_第3页
EDA技术基础第章电路设计实践_第4页
EDA技术基础第章电路设计实践_第5页
已阅读5页,还剩151页未读 继续免费阅读

下载本文档

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

文档简介

EDA技术基础第5章电路设计实践5.18位加法器5.1.1设计原理1.设计任务设计一个可以对两个8位二进制数进行加法运算的加法器。2.方案构思多位加法器按其进位方式的不同可以分为两类:串行进位加法器和并行进位加法器。串行进位加法器是将多个1位全加器级联,低位全加器的进位输出送给相邻高位全加器作为进位输入,以此构成多位加法器。这种设计思路简单明了且占用资源较少,但运算速度较慢。并行进位方式则是在各位的加法环节之外,另外设有进位产生逻辑电路,各位的进位输入信号同时产生,从而各位可以同时完成全加运算,输出最后结果。并行进位方式具有较快的运算速度,但是相对于串行进位方式来说,却往往占用更多的资源。尤其是当运算位数增加的时候,相同位数的并行进位和串行进位加法器的资源占用差距也越来越大。因此,常常需要设计者在运算速度和资源占用量之间做出折中和平衡。实践证明,4位二进制并行进位加法器和串行级联加法器占用的资源几乎相同。因此,可以用两个4位二进制并行加法器级联以构成8位二进制加法器,这是一种较为合理的选择,其结构组成如图5.1所示。图5.18位加法器电路原理图5.1.2程序设计1.子模块设计4位二进制并行进位加法器源程序ADDER4B.VHD如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYADDER4BISPORT(CIN:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(3DOWNTO0);B:INSTD_LOGIC_VECTOR(3DOWNTO0);S:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDADDER4B;ARCHITECTUREAOFADDER4BISSIGNALSINT:STD_LOGIC_VECTOR(4DOWNTO0);SIGNALAA,BB:STD_LOGIC_VECTOR(4DOWNTO0);BEGINAA<='0'&A;BB<='0'&B;SINT<=AA+BB+CIN;S<=SINT(3DOWNTO0);COUT<=SINT(4);ENDA;2.顶层模块设计8位二进制加法器源程序ADDER8B.VHD如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYADDER8BISPORT(CIN:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(7DOWNTO0);B:INSTD_LOGIC_VECTOR(7DOWNTO0);S:OUTSTD_LOGIC_VECTOR(7DOWNTO0);COUT:OUTSTD_LOGIC);ENDADDER8B;ARCHITECTUREARTOFADDER8BISCOMPONENTADDER4BPORT(CIN:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(3DOWNTO0);B:INSTD_LOGIC_VECTOR(3DOWNTO0);S:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALCARRY_OUT:STD_LOGIC;BEGINU1:ADDER4BPORTMAP(CIN=>CIN,A=>A(3DOWNTO0),B=>B(3DOWNTO0),S=>S(3DOWNTO0),COUT=>CARRY_OUT);U2:ADDER4BPORTMAP(CIN=>CARRY_OUT,A=>A(7DOWNTO4),B=>B(7DOWNTO4),S=>S(7DOWNTO4),COUT=>COUT);ENDART;在本例中,顶层设计可以用VHDL程序输入法,也可以用图5-1所示的原理图输入法。5.1.3编译/仿真1.编译过程(1)建立顶层设计文件夹ADDER8B在硬盘适当位置建立ADDER8B文件夹(本书中将该文件夹建立在G:\BEIDA_EDA)中。注意:该文件夹的路径中不能包含汉字。路径中的所有目录和子目录的名称都必须符合VHDL语言的语法规则。后面例子中的相关步骤都与此类似。(2)ADDER4B.VHD子模块设计新建一个.VHD格式文件,输入ADDER4B.VHD源程序后保存在顶层设计文件夹中,并进行语法查错、编译、功能和时序仿真等相关操作,同时生成符号文件(即.SYM文件)。(3)顶层文件设计新建一个ADDER8B.VHD文件,输入源程序后进行保存、查错、编译、功能和时序仿真等相关操作。或者采用原理图输入法,新建一个ADDER8B.GDF文件,按照图5-1所示原理图进行设计,两者结果一致。后面各例中的模块化设计方法与此例类似。2.仿真结果该8位并行进位加法器的仿真结果如图5.2所示,A、B、S都以十进制形式显示。图5.28位加法器仿真结果5.1.4下载验证1.引脚锁定按照表格5.1所示对应关系锁定引脚。被加数A[7..0]高4位和低4位分别由键4和键3输入,其值显示于数码管4和3;加数B[7..0]高4位和低4位分别由键2键1输入,其值显示于数码管2和1;相加后的和显示于数码管6和5;进位输入信号由键7输入;进位输出标志由二极管D1显示。2.下载验证选择实验箱NO.1配置模式,执行主菜单MAX+PLUSII|PROGRAMMER,然后点击CONFIGURE开始对芯片进行配置。配置完成后读者可以自行设置被加数和加数以及进位输入,同时观察相加后的和以及进位输出信号,可以发现,该设计是正确的。(本书所有例子均基于杭州康芯GW48-CK实验箱)表5.18位加法器引脚锁定对照表输入端子输出端子端子名称锁定引脚端子名称锁定引脚端子名称锁定引脚端子名称锁定引脚端子名称锁定引脚端子名称锁定引脚A725A321B716B38S738S330A624A219B611B27S637S229A523A118B510B16S536S128A422A017B49B05S435S027CIN80COUT545.28×8乘法器5.2.1设计原理1.设计任务设计一个可以对两个8位二进制数进行乘法运算的电路,结果以16位二进制数的形式输出。2.方案构思(1)原理分析两个8位二进制数相乘,其积最大值为255×255=65025,而一个16位二进制数能表示的最大数值是65535。因此可知,该乘法器只需有16位二进制输出即可,不会再产生第17位的进位输出。在数字电路设计中,乘法运算一般是采用逐项移位相加的原理来实现的。从乘数最低位开始:若为1,则将被乘数右端与乘数右端对齐写在下面;若为0,则将与被乘数同样位数的0写在下面。然后从乘数右边第二位开始:若为1,则被乘数左移1位后与上一次的结果相加;若为0,则左移后以全0相加。后面依次类推,每次若乘数相应位为1,则被乘数左移一位与前次和相加,若相应位为0,则左移后以全0相加。(2)系统构成及各引脚功能根据以上分析进行构思,可得该乘法器的逻辑结构图,如图5.3所示。图5.38位乘法器逻辑结构图乘数加载于8位右移寄存器的输入端,被乘数加载于16位左移寄存器的输入端。各引脚功能及系统工作原理说明如下。①ENABLEENABLE是一个使能端。它有两个功能:当为高电平时,16位锁存器LATCH16清零,同时乘数和被乘数向移位寄存器加载,并封锁CCLK不输出脉冲;当它为低电平时,CCLK输出脉冲信号,可以进行乘法运算。②CLKCLK为计数脉冲,每来一个脉冲,乘数的某一位就和被乘数的各位完成一次二进制乘法运算,并将结果送到16位锁存器里面。随着每一时钟节拍,加载于8位右移寄存器的乘数由低位向高位逐位移出,当该位为1时,与门打开,被乘数在同一时钟节拍左移后进入16位加法器,与上一次锁存在“LATCH16”中的和进行相加,其和在下一时钟上升沿被锁存进16位锁存器“LATCH16”。而当被乘数的移出位为0时,与门输出全零输出。如此往复,直至9个时钟脉冲过后,8位右移寄存器各位已全部变成0。此时,16位锁存器的输出值即为最后乘积,以后即使再来脉冲,锁存器的值也不再变化,保持在两数乘积值。(3)A[8..1]、B[8..1]A[8..1]、B[8..1]端子为两个乘数的输入端。因为是进行乘法操作,而不是除法操作,所以无所谓被乘数与乘数输入端,最后所得结果都是两数的乘积。(4)P[16..1]P[16..1]为乘积输出端。此乘法器的优点时节省芯片资源,它的核心元件只是一个16位加法器,其运算速度取决于输入的时钟频率。若时钟频率为100MHZ,则每一运算周期仅需80ns。而若利用具备最高时钟,即12MHZ晶振的MCS-51单片机的乘法指令,进行8位乘法运算,仅单指令的运算周期长达4微妙。因此可以利用此乘法器,或相同原理构成更高位数的乘法器完成一些数字信号处理方面的运算。5.2.2程序设计1.子模块设计(1)8位右移寄存器该右移寄存器只有一个QOUT输出端。在LOAD信号为高电平时,将乘数置入内部寄存器,移位脉冲CLK不起作用,不进行移位。并且要求LOAD信号为高电平期间,QOUT输出应该为零;在LOAD信号为低电平时,不再接受新的乘数置入,此时CLK起作用,每来一个脉冲,将右边最低位输出,同时其余7位也依次右移一位,最左边空出来的最高位置零。根据以上功能要求,可设计其VHDL源程序SHIFTR_REG8.VHD如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHIFTR_REG8ISPORT(LOAD,CLK:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(8DOWNTO1);QOUT:OUTSTD_LOGIC);ENDSHIFTR_REG8;ARCHITECTUREAOFSHIFTR_REG8ISBEGINPROCESS(LOAD,CLK)VARIABLEQ:STD_LOGIC_VECTOR(8DOWNTO1):="00000000";BEGINIFLOAD='1'THENQ:=A;ELSIFCLK'EVENTANDCLK='1'THENQOUT<=Q(1);Q(7DOWNTO1):=Q(8DOWNTO2);Q(8):='0';ENDIF;ENDPROCESS;ENDA;(2)16位左移寄存器该寄存器有16个输出端。在LOAD信号为高电平时,将被乘数置入内部寄存器,并将CLK移位脉冲屏蔽,不进行移位操作。在LOAD为低电平时,CLK脉冲起作用,但来第一个脉冲时,并不进行移位操作,只将被乘数各位从输出端Q[8..1]对应输出,Q[16..9]置零。从第二个脉冲开始,每来一个脉冲,乘数都向左移动一位,并将空出的低位置零。根据以上要求,可设计其VHDL源程序SHIFTL_REG16.VHD如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHIFTL_REG16ISPORT(LOAD,CLK:INSTD_LOGIC;B:INSTD_LOGIC_VECTOR(8DOWNTO1);Q:BUFFERSTD_LOGIC_VECTOR(16DOWNTO1));ENDSHIFTL_REG16;ARCHITECTUREAOFSHIFTL_REG16ISBEGIN

PROCESS(LOAD,CLK)VARIABLEM:STD_LOGIC_VECTOR(17DOWNTO1);BEGINIFLOAD='1'THENM(17DOWNTO1):="000000000"&B(8DOWNTO1);Q(16DOWNTO1)<=M(16DOWNTO1);ELSIFCLK'EVENTANDCLK='1'THENM(17DOWNTO2):=M(16DOWNTO1);M(1):='0';Q(16DOWNTO1)<=M(17DOWNTO2);ENDIF;ENDPROCESS;ENDA;(3)乘法运算控制器模块源程序EAL.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYEALISPORT(CLK,EN:INSTD_LOGIC;CCLK:OUTSTD_LOGIC);ENDEAL;ARCHITECTUREBEHAVEOFEALISBEGINPROCESS(CLK,EN)BEGINCCLK<=CLKAND(NOTEN);ENDPROCESS;ENDBEHAVE;(4)ANDL模块源程序ANDL.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYANDLISPORT(X:INSTD_LOGIC;BB:INSTD_LOGIC_VECTOR(16DOWNTO1);O:OUTSTD_LOGIC_VECTOR(16DOWNTO1));ENDANDL;ARCHITECTUREARTOFANDLISBEGINPROCESS(X,BB)BEGINFORIIN1TO16LOOPO(I)<=BB(I)ANDX;ENDLOOP;ENDPROCESS;ENDART;(5)16位加法器原理图可将前面5.1例子中已经设计好的8位加法器中的ADDER8B.VHD文件和ADDER8B.SYM文件复制到8位乘法器文件夹,然后按照图5.4所示构成16位加法器。图5.416位加法器原理图(6)16位锁存器源程序LATCH16.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYLATCH16ISPORT(CLK,CLR:INSTD_LOGIC;D:INSTD_LOGIC_VECTOR(16DOWNTO1);QX:BUFFERSTD_LOGIC_VECTOR(16DOWNTO1));ENDLATCH16;ARCHITECTUREARTOFLATCH16ISBEGINPROCESS(CLK,CLR)

BEGINIFCLR='1'THENQX<="0000000000000000";ELSIFCLK'EVENTANDCLK='1'THENQX<=D;ENDIF;ENDPROCESS;ENDART;2.顶层模块设计将前面所述6个模块全部编译仿真通过后,调用其符号文件构建如图5-3所示原理图,即为顶层模块设计方案,然后进行总体编译和仿真。5.2.3编译/仿真1.编译过程新建一个MULTI8X8文件夹,并依次在其中建立、编译和仿真上述所有子模块,生成相应的符号文件,然后按照图5.3所示构建顶层设计,并进行系统整体仿真和编译。2.仿真结果该乘法器仿真结果如图5.5、5.6所示。图5.5所示为两个乘数为最大值FFH(即十进制数255)的情况。图5.58×8乘法器仿真实例一图9-6所示为一般乘法运算的情况。图5.68×8乘法器仿真实例二5.2.4下载验证1.管脚锁定按照表格5.2所示对应关系锁定引脚。表5.28×8乘法器引脚锁定对照表输入端子输出端子端子名称锁定引脚端子名称锁定引脚端子名称锁定引脚端子名称锁定引脚A825B816P1653P838A724B711P1552P737A623B610P1451P636A522B59P1350P535A421B48P1249P430A319B37P1148P329A218B26P1047P228A117B15P939P127ENABLE81CLK2

2.下载验证选择实验箱NO.1配置方案,下载完成后将CLOCK0上面的跳线冒置于不同的短路位置,即可实现以不同的速度进行乘法运算。当然对于此例,如果不需要考虑资源占用率的话,可以直接考虑用VHDL语言提供的乘法指令来实现,将会使整个设计变得非常简单,而且所设计电路的时序性能会更加稳定、可靠。读者可以自己尝试着去做一番比较,在此限于篇幅,不再对后者给出具体程序。5.3同步清零的可逆计数器5.3.1设计原理1.设计任务设计一个可预置计数初始值、可同步清零、带计数使能端的128进制可逆计数器。2.方案构思根据这个计数器所应具备的功能,可以构思出其方框图,如图5.7所示。图5.7可预置\可同步清零\带使能端\128进制\可逆计数器设计方框图端口说明:CLK→计数脉冲输入端;SCLR→异步清零端;CNT_EN→计数使能控制端;LOAD→预置数据控制端;UPDOWN→递增\递减计数控制端;DIN[7..0]→预置数据输入端;Q[7..0]→计数结果输出端。5.3.2程序设计该计数器源程序COUNTER128.VHD如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCOUNTER128ISPORT(CLK,SCLR,EN:INSTD_LOGIC;LOAD,UPDOWN:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);Q:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0));ENDCOUNTER128;ARCHITECTUREAOFCOUNTER128ISBEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENIFSCLR='0'THENQ<="00000000";ELSIFQ="01111111"THENQ<="00000000";ELSIFEN='1'THENIFLOAD='1'THENQ<=DIN;ELSIFUPDOWN='1'THENQ<=Q+1;ELSEQ<=Q-1;ENDIF;ENDIF;ENDIF;ENDPROCESS;ENDA;5.3.3仿真结果1.编译过程新建一个COUNTER128.VHD文件,输入源程序后保存在G:\BEIDA_EDA\COUNTER128文件夹中。然后进行语法查错、编译和仿真等全部相关操作。2.仿真结果仿真完成后,可得功能和时序仿真结果如图5.8所示。图5.8128进制可逆计数器功能与时序仿真结果5.3.4下载验证1.管脚锁定并按照表格5.3所示对应关系锁定引脚。表5.3128进制可逆计数器引脚锁定对照表输入端子输出端子端子名称锁定引脚端子名称锁定引脚端子名称锁定引脚DIN725UPDOWN10Q738DIN624SCLR9Q637DIN523CNT_EN8Q536DIN422LOAD7Q435DIN321CLK43Q330DIN219Q229DIN118Q128DIN017Q0272.下载验证选择实验箱NO.0配置方案进行程序下载。然后可以由读者自行设定各输入端状态,进行预置计数初始值、清零、计数使能等操作,观察其实现128进制计数的情况。5.4可预置\可同步清零\8位

双向循环移位寄存器设计

5.4.1设计原理1.设计任务设计一个可以预置数;可以双向循环移位;可以同步清零;且具有移位使能控制端的8位移位寄存器。2.方案构思该移位寄存器的方框图应如图5.9所示。图5.98位双向循环移位寄存器方框图各端口的功能如下:LOAD→预置数据控制端;CLK→移位脉冲输入端;CLR→清零控制端;DIRE→移位方向控制端;EN→移位使能控制端;ATA[7..0]→预置数据输入端;DOUT[7..0]→输出显示端。5.4.2程序设计该移位寄存器源程序REG8.VHD如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYREG8ISPORT(LOAD,CLK,CLR,DIRE,EN:INSTD_LOGIC;DATA:INSTD_LOGIC_VECTOR(7DOWNTO0);DOUT:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0));ENDREG8;ARCHITECTUREAOFREG8ISBEGINPROCESS(CLK)BEGINIFEN='0'THENDOUT<=DOUT;ELSIFCLK'EVENTANDCLK='1'THENIFLOAD='1'THENDOUT<=DATA;ELSIFCLR='0'THENDOUT<="00000000";ELSIFDIRE='1'THENDOUT(7DOWNTO1)<=DOUT(6DOWNTO0);DOUT(0)<=DOUT(7);ELSEDOUT(6DOWNTO0)<=DOUT(7DOWNTO1);DOUT(7)<=DOUT(0);ENDIF;ENDIF;ENDPROCESS;ENDA;5.4.3编译/仿真1.编译过程跟前面几个例子类似,不再赘述。2.仿真结果移位寄存器仿真结果如图5.10所示,为便于观察循环移位情况,特将预置数和8位输出以自然二进制形式表示。图5.108位双向循环移位寄存器功能与时序仿真结果5.4.4下载验证1.管脚锁定按照表格5.4所示对应关系锁定引脚。2.下载验证选择实验箱NO.6配置方案,并按照前面例子中相同的方法进行程序配置,然后开始功能验证:用键2和键1配合输入初始数据,用键6~3控制各项操作,用D8~1共8个发光二极管显示移位操作的数据移动。5.5电子琴硬件电路设计5.5.1设计原理1.设计任务利用数控分频器设计一个电子琴硬件电路。主系统由顶层模块TOP.VHD和两个功能子模块TONE.VHD、SPEAKER.VHD构成。2.方案构思(1)顶层模块TOP该电子琴顶层模块内部构成应如图5.11所示。图5.11电子琴硬件结构组成(2)TONE子模块TONE模块是一个音阶发生器,当8位发声控制输入INDEX中某一位为高电平时,则对应该音阶的数值将从端口TONE输出,作为获得该音阶的分频预置值;同时由CODE输出对应该音阶简谱的显示数码,如‘5’,并由HIGH输出指示音阶高8度显示,由此可知,该模块的VHDL描述应是类似于真值表的纯组合电路描述,其中的音阶分频预置值,如TONE<=1290是根据产生该音阶频率所对应的分频比获得的。(3)SPEAKER子模块其主要电路是一个数控分频器。这个数控分频器由一个初值可预置的加法计数器构成,详细的设计和工作原理不再详述。当模块SPEAKER由端口TONE获得一个2进制数后,将以此值为计数器的预置数,对端口CLK12MHZ输入的频率进行分频,之后由SPKOUT向扬声器输出发声。5.5.2程序设计1.子模块设计(1)TONE子模块源程序TONE.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTONEISPORT(INDEX:INSTD_LOGIC_VECTOR(7DOWNTO0);CODE:OUTINTEGERRANGE0TO15;HIGH:OUTSTD_LOGIC;TONE:OUTINTEGERRANGE0TO16#7FF#);END;ARCHITECTUREONEOFTONEISBEGINSEARCH:PROCESS(INDEX)BEGINCASEINDEXISWHEN"00000001"=>TONE<=773;CODE<=1;HIGH<='0';WHEN"00000010"=>TONE<=912;CODE<=2;HIGH<='0';WHEN"00000100"=>TONE<=1036;CODE<=3;HIGH<='0';WHEN"00001000"=>TONE<=1116;CODE<=4;HIGH<='0';WHEN"00010000"=>TONE<=1197;CODE<=5;HIGH<='0';WHEN"00100000"=>TONE<=1290;CODE<=6;HIGH<='0';WHEN"01000000"=>TONE<=1372;CODE<=7;HIGH<='0';WHEN"10000000"=>TONE<=1410;CODE<=1;HIGH<='1';WHENOTHERS=>TONE<=2047;CODE<=0;HIGH<='0';ENDCASE;ENDPROCESS;END;生成TONE.SYM模块符号以备顶层设计调用。(2)SPEAKER模块源程序SPEAKER.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSPEAKERISPORT(CLK1:INSTD_LOGIC;TONE1:ININTEGERRANGE0TO16#7FF#;SPKS:OUTSTD_LOGIC);END;ARCHITECTUREONEOFSPEAKERISSIGNALPRECLK,FULLSPKS:STD_LOGIC;BEGINDIVIDECLK:PROCESS(CLK1)VARIABLECOUNT4:INTEGERRANGE0TO15;BEGINPRECLK<='0';IFCOUNT4>11THENPRECLK<='1';COUNT4:=0;ELSIFCLK1'EVENTANDCLK1='1'THENCOUNT4:=COUNT4+1;ENDIF;ENDPROCESS;GENSPKS:PROCESS(PRECLK,TONE1)VARIABLECOUNT11:INTEGERRANGE0TO16#7FF#;INDEX:INSTD_LOGIC_VECTOR(7DOWNTO0);SIGNALP:STATE;HIGH:OUTSTD_LOGIC;PROCESS(CLK,RESET)STD_LOGIC_1164.下面分别叙述频率计各逻辑模块的功能与设计方法。WHEN36=>Q<=13;WHEN37=>Q<=19;WHEN38=>Q<=26;PORT(LOAD:INSTD_LOGIC;TEST_EN<=NOTTEST_EN;CARRY_OUT:OUTSTD_LOGIC);IFCOUNT2='1'THENPROCESS(SEL)ENDADDER4B;ENDCOMPONENT;ELSIFDATA(7DOWNTO0)="10011001"THENBEGINIFPRECLK'EVENTANDPRECLK='1'THENIFCOUNT11=16#7FF#THENCOUNT11:=TONE1;FULLSPKS<='1';ELSECOUNT11:=COUNT11+1;FULLSPKS<='0';ENDIF;ENDIF;ENDPROCESS;DELAYSPKS:PROCESS(FULLSPKS)VARIABLECOUNT2:STD_LOGIC;BEGINIFFULLSPKS'EVENTANDFULLSPKS='1'THENCOUNT2:=NOTCOUNT2;IFCOUNT2='1'THENSPKS<='1';ELSESPKS<='0';ENDIF;ENDIF;ENDPROCESS;END;编译后生成SPEAKER.SYM模块符号,以备顶层设计调用。2.TOP(顶层模块)设计上述两项操作完成后,将TONE.SYM、TONE.VHD文件和SPEAKER.SYM和SPEAKER.VHD文件复制到TOP项目的文件夹中,即可进行调用。TOP模块源程序TOP.VHD如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTOPISPORT(CLK12MHZ:INSTD_LOGIC;INDEX1:INSTD_LOGIC_VECTOR(7DOWNTO0);CODE1:OUTINTEGERRANGE0TO15;HIGH1,SPKOUT:OUTSTD_LOGIC);END;SIGNALTONE2:INTEGERRANGE0TO16#7FF#;ARCHITECTUREONEOFTOPISCOMPONENTTONEPORT(INDEX:INSTD_LOGIC_VECTOR(7DOWNTO0);CODE:OUTINTEGERRANGE0TO15;HIGH:OUTSTD_LOGIC;TONE:OUTINTEGERRANGE0TO16#7FF#);ENDCOMPONENT;COMPONENTSPEAKERPORT(CLK1:INSTD_LOGIC;TONE1:ININTEGERRANGE0TO16#7FF#;SPKS:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALTONE2:INTEGERRANGE0TO16#7FF#;BEGINU1:TONEPORTMAP(INDEX=>INDEX1,TONE=>TONE2,CODE=>CODE1,HIGH=>HIGH1);U2:SPEAKERPORTMAP(CLK1=>CLK12MHZ,TONE1=>TONE2,SPKS=>SPKOUT);END;5.5.3编译/仿真1.编译过程跟前述例子类似,不再赘述。2.仿真结果本例从功能和时序仿真图上来判断设计是否成功不太直观。最好的办法是完成下载验证后通过实际电路验证一下,这里不再给出仿真结果。5.5.4下载验证1.管脚锁定按照表格5.5所示对应关系锁定引脚。2.下载验证选择实验箱NO.3配置方案,按照前面所述的方法进行程序配置,然后可由读者自己找一段音乐简谱进行演奏,应该是可以实现预期功能的。表5.5硬件电子琴引脚锁定对照表输入端子输出端子端子名称锁定引脚端子名称锁定引脚端子名称锁定引脚INDEX105INDEX1611CODE027INDEX116INDEX1716CODE128INDEX127CLK12MHZ1CODE229INDEX138CODE330INDEX149HIGH117INDEX1510SPKOUT35.6交通灯控制器设计5.6.1设计原理1.设计任务设计一个十字路口的交通灯控制系统,用实验平台上的LED发光二极管显示车辆通过的方向(东西和南北各一组),用数码管显示该方向的剩余时间。2.方案构思(1)该交通灯控制器应具备的功能设东西和南北方向的车流量大致相同,因此红、黄、绿灯的时长也相同,定为红灯45sec,黄灯5sec,绿灯40sec,同时用数码管指示当前状态(红、黄、绿)剩余时间。另外,设计一个紧急状态,当紧急状态出现时,两个方向都禁止通行,指示红灯。紧急状态解除后,重新计数并指示时间。(2)实现方案交通灯控制器是状态机的一个典型应用,除了计数器是状态机外,还有东西、南北方向的不同状态组合(红绿、红黄、绿红、黄红4个状态),如表5.6所示。

我们可以简单的将其看成两个(东西、南北)减1计数器,通过检测两个方向的计数值,可以检测红、黄、绿灯组合的跳变。这样使一个较复杂的状态机设计变成一个较简单的计数器设计。本例假设东西方向和南北方向的黄灯时间均为5sec,在设计交通灯控制器时,可在简单计数器的基础上增加一些状态检测,即可通过检测两个方向的计数值判断交通灯应处于4种状态中的哪个状态。表5.6交通灯的4种可能亮灯状态状态东西方向南北方向红黄绿红黄绿11000012100010300110040101000本交通灯控制器外部接口如图5.12所示。在表5.7中列出了需检测的状态跳变点,从中可以看出,有两种情况出现了东西和南北方向计数值均为1的情况,因此在检查跳变点时还应同时判断当前是处于状态2还是状态4,这样就可以决定次状态是状态3还是状态1。对于紧急状态,只需设计一个异步时序电路即可解决。图5.12交通灯控制器方框图表5.7交通灯设计设计中的状态跳变点交通灯现状态计数器计数值交通灯次状态计数器计数值东西方向计数值南北方向计数值东西方向计数值南北方向计数值1612552113404531645541114540程序中还应防止出现非法状态,即程序运行后应判断东西方向和南北方向的计数值是否超出范围。此电路仅在电路启动运行时有效,因为一旦两个方向的计数值正确后,就可能再计数到非法状态。5.6.2程序设计该交通灯控制器的源程序TRAFFIC_CTROL.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYTRAFFIC_CTROLISPORT(CLK:INSTD_LOGIC;LED:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0);EAST_WEST,SOUTH_NORTH:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0));ENDTRAFFIC_CTROL;ARCHITECTUREAOFTRAFFIC_CTROLISBEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENIFEAST_WEST>"01000110"ORSOUTH_NORTH>"01000110"THENEAST_WEST<="01000101";SOUTH_NORTH<="01000000";LED<="10000100";ELSIFEAST_WEST="00000110"ANDSOUTH_NORTH="00000001"THENEAST_WEST<="00000101";SOUTH_NORTH<="00000101";LED<="10000010";ELSIFEAST_WEST="00000001"ANDSOUTH_NORTH="00000001"ANDLED="10000010"THENEAST_WEST<="01000000";SOUTH_NORTH<="01000101";LED<="00100001";ELSIFEAST_WEST="00000001"ANDSOUTH_NORTH="00000110"THENEAST_WEST<="00000101";SOUTH_NORTH<="00000101";LED<="01000001";ELSIFEAST_WEST="00000001"ANDSOUTH_NORTH="00000001"ANDLED="01000001"THENEAST_WEST<="01000101";SOUTH_NORTH<="01000000";LED<="10000100";ELSIFEAST_WEST(3DOWNTO0)=0THENEAST_WEST<=EAST_WEST-7;SOUTH_NORTH<=SOUTH_NORTH-1;ELSIFSOUTH_NORTH(3DOWNTO0)=0THENEAST_WEST<=EAST_WEST-1;SOUTH_NORTH<=SOUTH_NORTH-7;ELSEEAST_WEST<=EAST_WEST-1;SOUTH_NORTH<=SOUTH_NORTH-1;ENDIF;ENDIF;ENDPROCESS;ENDA;5.6.3编译/仿真1.编译过程与前面例子类似,不再赘述。2.仿真结果仿真结果如图5.13所示。图中LED[7..0]以自然二进制表示,EAST_WEST[7..4]、EAST_WEST[3..0]、SOUTH_NORTH[7..4]、SOUTH_NORTH[3..0]为十进制表示。图5.13交通灯控制器功能与时序仿真结果5.6.4下载验证1.锁定管脚按照表格5.8所示对应关系锁定管脚。2.下载验证用实验箱上NO.9方案,按照前面几例中所述方法完成程序配置后,可以观察数码管的计数情况,判断其功能是否正常。注意:CLOCK0应置于1Hz位置。表5.8交通灯控制器引脚锁定对照表输入端子输出端子端子名称锁定引脚端子名称锁定引脚端子名称锁定引脚端子名称锁定引脚CLK2EAST_WEST753SOUTH_NORTH738LED765EAST_WEST652SOUTH_NORTH637LED664EAST_WEST551SOUTH_NORTH536LED562EAST_WEST450SOUTH_NORTH435LED461EAST_WEST349SOUTH_NORTH330LED360EAST_WEST248SOUTH_NORTH229LED259EAST_WEST147SOUTH_NORTH128LED158EAST_WEST039SOUTH_NORTH027LED0545.78位十进制数字频率计5.7.1设计原理1.设计任务设计一个8位十进制频率计,即测频上限为100MHz。2.方案构思该频率计的方框图如图5.14所示。它由一个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、一个32位锁存器REG32B组成。下面分别叙述频率计各逻辑模块的功能与设计方法。图5.148位十进制数字频率计逻辑结构图(1)测频控制信号发生器设计频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。这就要求TESTCTL的计数使能信号TSTEN能产生一个1sec脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。当TSTEN高电平时,允许计数;低电平时,停止计数,并保持其所计的数。在停止计数期间,首先需要一个锁存信号LOAD的上升沿将计数器在前1sec钟的计数值锁存进32位锁存器REG32B中,并由外部的7段译码器译出并稳定显示。锁存信号之后,必须有一个清零信号CLR_CNT对计数器进行清零,为下一秒钟的计数操作作准备。测频控制信号发生器的工作时序如图5.15所示。为了产生这个时序图,需首先建立一个由D触发器构成的二分频器,在每次时钟CLK上升沿到来时其值翻转。其中控制信号时钟CLK的频率取1Hz,而信号TSTEN的脉宽恰好为1sec,可以用作闸门信号。此时,根据测频的时序要求,可得出信号LOAD和CLR_CNT的逻辑描述。由图5.15可知,在计数完成后,即计数使能信号TSTEN在1sec的高电平后,利用其反相值的上跳沿产生一个锁存信号LOAD,0.5sec后CLR_CNT产生一个清零信号上跳沿。高质量的测频控制信号发生器的设计十分重要,设计中要对其进行仔细的实时仿真,以防止可能产生的毛刺。(2)寄存器REG32B设计设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。若已有32位BCD码存在于此模块的输入口,在信号LOAD的上升沿后即被锁存到寄存器REG32B的内部,并由REG32B的输出端输出,然后由实验板商的7段译码器译成能在数码管商显示输出的相对应数值。(3)十进制计数器CNT10的设计如图5.14所示,此十进制计数器的特殊之处是,有一时钟使能输入端ENA,用于锁定计数值。当高电平时计数允许,低电平时禁止计数。图5.15测频控制信号发生器工作时序5.7.2程序设计1.子模块设计(1)带使能端的十进制计数器源程序CNT10.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYCNT10ISPORT(CLK:INSTD_LOGIC;CLR:INSTD_LOGIC;ENA:INSTD_LOGIC;CQ:OUTINTEGERRANGE0TO15;CARRY_OUT:OUTSTD_LOGIC);ENDCNT10;ARCHITECTUREARTOFCNT10ISSIGNALCQI:INTEGERRANGE0TO15;BEGINPROCESS(CLK,CLR,ENA)BEGINIFCLR='1'THENCQI<=0;ELSIFCLK'EVENTANDCLK='1'THENIFENA='1'THENIFCQI<9THENCQI<=CQI+1;ELSECQI<=0;ENDIF;ENDIF;ENDIF;ENDPROCESS;PROCESS(CQI)BEGINIFCQI=9THENCARRY_OUT<='1';ELSECARRY_OUT<='0';ENDIF;ENDPROCESS;CQ<=CQI;ENDART;(2)32位锁存器源程序REG32B.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYREG32BISPORT(LOAD:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(31DOWNTO0);DOUT:OUTSTD_LOGIC_VECTOR(31DOWNTO0));ENDREG32B;ARCHITECTUREARTOFREG32BISBEGINPROCESS(LOAD,DIN)BEGINIFLOAD'EVENTANDLOAD='1'THENDOUT<=DIN;ENDIF;ENDPROCESS;ENDART;(3)测频控制信号发生器源程序TESTCTL.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYTESTCTLISPORT(CLK:INSTD_LOGIC;TSTEN:OUTSTD_LOGIC;CLR_CNT:OUTSTD_LOGIC;LOAD:OUTSTD_LOGIC);ENDTESTCTL;ARCHITECTUREARTOFTESTCTLISSIGNALDVI2CLK:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENDVI2CLK<=NOTDVI2CLK;ENDIF;ENDPROCESS;PROCESS(CLK,DVI2CLK)BEGINIFCLK='0'ANDDVI2CLK='0'THENCLR_CNT<='1';ELSECLR_CNT<='0';ENDIF;ENDPROCESS;LOAD<=NOTDVI2CLK;TSTEN<=DVI2CLK;ENDART;2.顶层模块设计系统整体源程序FREQ.VHD:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYFREQISPORT(FSIN:INSTD_LOGIC;CLK:INSTD_LOGIC;DOUT:OUTSTD_LOGIC_VECTOR(31DOWNTO0));ENDFREQ;ARCHITECTUREARTOFFREQISCOMPONENTCNT10PORT(CLK,CLR,ENA:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);CARRY_OUT:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTREG32BPORT(LOAD:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(31DOWNTO0);DOUT:OUTSTD_LOGIC_VECTOR(31DOWNTO0));ENDCOMPONENT;COMPONENTTESTCTLPORT(CLK:INSTD_LOGIC;TSTEN:OUTSTD_LOGIC;CLR_CNT:OUTSTD_LOGIC;LOAD:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALTSTEN:STD_LOGIC;SIGNALCLR_CNT:STD_LOGIC;SIGNALLOAD:STD_LOGIC;SIGNALCARRY1:STD_LOGIC;SIGNALCARRY2:STD_LOGIC;SIGNALCARRY3:STD_LOGIC;SIGNALCARRY4:STD_LOGIC;SIGNALCARRY5:STD_LOGIC;SIGNALCARRY6:STD_LOGIC;SIGNALCARRY7:STD_LOGIC;SIGNALCARRY8:STD_LOGIC;SIGNALDIN:STD_LOGIC_VECTOR(31DOWNTO0);BEGINU0:TESTCTLPORTMAP(CLK=>CLK,TSTEN=>TSTEN,CLR_CNT=>CLR_CNT,LOAD=>LOAD);U1:CNT10PORTMAP(CLK=>FSIN,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(3DOWNTO0),CARRY_OUT=>CARRY1);U2:CNT10PORTMAP(CLK=>CARRY1,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(7DOWNTO4),CARRY_OUT=>CARRY2);U3:CNT10PORTMAP(CLK=>CARRY2,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(11DOWNTO8),CARRY_OUT=>CARRY3);U4:CNT10PORTMAP(CLK=>CARRY3,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(15DOWNTO12),CARRY_OUT=>CARRY4);U5:CNT10PORTMAP(CLK=>CARRY4,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(19DOWNTO16),CARRY_OUT=>CARRY5);U6:CNT10PORTMAP(CLK=>CARRY5,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(23DOWNTO20),CARRY_OUT=>CARRY6);U7:CNT10PORTMAP(CLK=>CARRY6,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(27DOWNTO24),CARRY_OUT=>CARRY7);U8:CNT10PORTMAP(CLK=>CARRY7,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(31DOWNTO28),CARRY_OUT=>CARRY8);U9:REG32BPORTMAP(LOAD=>LOAD,DIN=>DIN(31DOWNTO0),DOUT=>DOUT);ENDART;5.7.3编译仿真1.编译过程(1)新建一个FREQ文件夹,并依次在其中建立上述各子模块,全部编译/仿真完成后生成符号文件。(2)按照图5.14所示建立建立顶层设计文件,并进行系统编译和仿真。2.仿真结果系统仿真结果如图5.16所示。图5.168位数字频率计仿真结果5.7.4下载验证1.引脚锁定按照表格5.9所示对应关系锁定引脚。表

5.98位数字频率计引脚锁定对照表输入端子输出端子端子名称锁定引脚端子名称锁定引脚端子名称锁定引脚端子名称锁定引脚端子名称锁定引脚CLK43DOUT3179DOUT2365DOUT1553DOUT738FSIN2DOUT3078DOUT2264DOUT1452DOUT637DOUT2973DOUT2162DOUT1351DOUT536DOUT2872DOUT2061DOUT1250DOUT435DOUT2771DOUT1960DOUT1149DOUT330DOUT2670DOUT1859DOUT1048DOUT229DOUT2567DOUT1758DOUT947DOUT128DOUT2466DOUT1654DOUT839DOUT0272.下载验证选择实验箱NO.0方案进行配置。基准时钟信号CLK由CLOCK2输入,实验箱CLOCK2提供了1Hz、2Hz、4Hz、8Hz种频率值,在这里应该选择1Hz,用跳线冒将其短路。被测信号从CLOCK0输入,实验箱提供了14种频率值。读者可以自己验证实验箱面板上标出的频率值与频率计测出来的频率值是否相等,若不相等,相对误差为多大。补充说明:对于频率计,其设计方案有很多,除了上述方案外,还有很多其他的方案。下面给出另一种更精巧的设计方案作为参考,读者可以自己进行后续操作。其VHDL源程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYFREQUENCY_TESTISPORT(FSIN:INSTD_LOGIC;CLK:INSTD_LOGIC;DOUT:OUTSTD_LOGIC_VECTOR(31DOWNTO0));ENDFREQUENCY_TEST;ARCHITECTUREBEHAVEOFFREQUENCY_TESTISSIGNALTEST_EN:STD_LOGIC;SIGNALCLEAR:STD_LOGIC;SIGNALDATA:STD_LOGIC_VECTOR(31DOWNTO0);BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENTEST_EN<=NOTTEST_EN;ENDIF;ENDPROCESS;CLEAR<=NOTCLKANDNOTTEST_EN;PROCESS(FSIN)BEGINIFCLEAR='1'THENDATA<="00000000000000000000000000000000";ELSIFFSIN'EVENTANDFSIN='1'THENELSIFDATA(7DOWNTO0)="10011001"THENDATA<=DATA+"01100111";ELSIFDATA(3DOWNTO0)="1001"THENDATA<=DATA+"0111";ELSEDATA<=DATA+'1';ENDIF;ENDIF;ENDPROCESS;

PROCESS(TEST_EN,DATA)BEGINIFTEST_EN'EVENTANDTEST_EN='0'THENDOUT<=DATA;ENDIF;ENDPROCESS;ENDBEHAVE;方案二的引脚锁定关系和方案一基本相同。5.8串行数据检测器5.8.1设计原理1.设计任务设计一个串行数据检测器。在连续输入3个以上1的时候输出为1,其他输入情况下输出为0。2.方案构思设计该电路应该用状态机,其状态转换电路如图5.17所示。其方框图如图5.18所示。管脚说明:CP-时钟信号;X-输入变量;Y-输出变量。图5.17串行数据检测器状态转换图图5.18串行数据检测器方框图5.8.2程序设计该串行数据检测器源程序H32.VHD:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYH32ISPORT(X,CP:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDH32;ARCHITECTUREWOFH32ISTYPESTATEIS(S0,S1,S2,S3);SIGNALP:STATE;SIGNALN:STATE;BEGIN

S:PROCESS(CP)BEGINIFCP'EVENTANDCP='1'THENP<=N;ENDIF;ENDPROCESSS;C:PROCESS(X,P)BEGINCASEPISWHENS0=>IFX='1'THENN<=S1;ELSEN<=S0;ENDIF;Y<='0';WHENS1=>IFX='1'THENN<=S2;ELSEN<=S0;ENDIF;Y<='0';WHENS2=>IFX='1'THENN<=S3;Y<='0';ELSEN<=S0;Y<='0';ENDIF;

WHENS3=>IFX='1'THENN<=S3;Y<='1';ELSEN<=S0;Y<='0';ENDIF;WHENOTHERS=>NULL;ENDCASE;ENDPROCESSC;ENDW;5.8.3编译/仿真1.编译过程该例较简单,编译过程略。2.仿真结果仿真结果如图5.19所示。5.8.4下载/验证本例较为简单,下载/验证过程略,读者可以自己进行有关操作。图5.19串行数据检测器功能与时序仿真结果5.9智能函数信号发生器5.9.1设计原理1.设计任务设计一个能够产生递增斜波、递减斜波、三角波、阶梯波、正弦波、方波等多种波形,并可通过开关选择输出波形的多功能函数信号发生器。2.方案构思系统总体构思如图5.20所示,输出端Q[7..0]后面接D/A转换器的数据输入端。图5.20智能函数信号发生器总体框图5.9.2程序设计1.子模块设计(1)递增斜波产生模块源程序ZENG.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYZENGISPORT(CLK,RESET:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDZENG;ARCHITECTUREBEHAVEOFZENGISBEGINPROCESS(CLK,RESET)VARIABLETMP:STD_LOGIC_VECTOR(7DOWNTO0);BEGINIFRESET='0'THENTMP:="00000000";ELSIFCLK'EVENTANDCLK='1'THENIFTMP="11111111"THENTMP:="00000000";ELSETMP:=TMP+1;COMPONENTTESTCTLIFCOUNT2='1'THEN这就要求TESTCTL的计数使能信号TSTEN能产生一个1sec脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。STD_LOGIC_1164.LOAD:OUTSTD_LOGIC);PORT(LOAD,CLK:INSTD_LOGIC;关于分频器

温馨提示

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

评论

0/150

提交评论