第二章硬件描述语言VHDL第二章硬件描述语言VHDL2.
1VHDL语言简介2.
2VHDL程序的基本结构2.
3VHDL语言的基本数据类型和操作符2.
4VHDL结构体的描述方式2.
5Active-VHDL上机准备2.
6使用VHDL书写测试基准的方法2.
7基本逻辑电路的VHDL实现2.
8VHDL上机实践复习思考题第二章硬件描述语言VHDL2.
1VHDL语言简介2.
1.
1VHDL的特点20世纪80年代以来,采用计算机辅助设计(CAD)技术设计硬件电路在全世界范围得到了普及和应用.
一开始,仅用CAD来实现印刷板的布线,以后慢慢地才实现了插件板级规模的设计和仿真,其中最具代表性的设计工具是OrCAD和Tango,它们的出现使电子电路设计和印刷板布线工艺实现了自动化.
但这种设计方法就其本身而言仍是自下而上的设计方法,即利用已有的逻辑器件来构成硬件电路,它没有脱离传统的硬件设计思路.
第二章硬件描述语言VHDL随着集成电路规模与复杂度的进一步提高,特别是大规模、超大规模集成电路的系统集成,使得电路设计不断向高层次的模块式的设计方向发展,原有的电原理图输入方式显得不够严谨规范,过多的图纸和底层细节不利于从总体上把握和交流设计思想.
再者,自下而上的设计方法使仿真和调试通常只能在系统硬件设计后期才能进行,因而系统设计时存在的问题只有在后期才易发现.
这样,一旦系统设计存在较大缺陷,就有可能要重新设计系统,使得设计周期大大增加.
第二章硬件描述语言VHDL基于以上电原理图输入方式的缺陷,为了提高开发效率,增加已有成果的可继承性并缩短开发时间,大规模ASIC研制和生产厂家相继开发了用于各自目的的硬件描述语言.
其中最具代表性的就是美国国防部开发的VHDL语言和Verilog公司开发的VerilogHDL以及日本电子工业振兴协会开发的UDL/I语言.
从工程的角度看,VHDL独立于各种电子CAD手段之外,它便于学习、继承、管理.
美国国防部曾硬性规定:所有牵涉ASIC设计的电子系统合同项目都要用VHDL语言设计和存档,VHDL的地位和作用由此可见一斑.
第二章硬件描述语言VHDL1987年12月10日,IEEE标准化组织发布IEEE标准的VHDL,定为IEEE1076-1987标准(该标准是从1983年8月美国空军支持并开发的VHDL7.
2版发展而来的).
这使得VHDL成为当时惟一被IEEE标准化的HDL语言,标志着VHDL被电子系统设计行业普遍接收并推广为标准的HDL语言.
许多公司因而纷纷使自己的开发工具与VHDL兼容.
第二章硬件描述语言VHDL利用VHDL语言设计数字系统具有以下4个优点:(1)设计技术齐全、方法灵活、支持广泛.
VHDL语言可以支持自上而下和基于库的设计方法,还支持同步电路、异步电路、FPGA以及其它随机电路的设计.
目前大多数EDA工具几乎在不同程度上都支持VHDL语言,这给VHDL语言进一步推广和应用创造了良好的环境.
(2)系统硬件描述能力强.
VHDL具有多层次描述系统硬件功能的能力,其描述的对象可以从系统的数学模型直到门级电路.
第二章硬件描述语言VHDL(3)VHDL语言可以与工艺无关编程.
VHDL设计硬件系统时,可以编写与工艺有关的信息,但是,与大多数HDL语言不同的是,当门级或门级以上层次的描述通过仿真验证后,可以用相应的工具将设计映射成不同的工艺(如MOS、CMOS等).
这样,工艺更新时,就无须修改程序,只须修改相应的映射工具,所以,在VHDL中,电路设计的编程可以与工艺相互独立.
(4)VHDL语言标准、规范,易于共享和复用.
VHDL语言的语法较严格,给阅读和使用都带来了极大的好处.
再者,VHDL作为一种工业标准,设计成果便于复用和交流,反过来也能进一步推动VHDL语言的推广和普及.
第二章硬件描述语言VHDL2.
1.
2VerilogHDL和VHDL的比较Verilog最初只是一家普通的民间公司的产品,后被当今第一大EDA公司Cadence收购,并推出了现今广为流传的VerilogHDL.
VerilogHDL是一种类似C语言风格的硬件描述语言,1995年正式成为IEEE标准,在工业界使用很普遍.
而VHDL是类似Pascal语言(脱胎于Ada语言)的硬件描述语言,严谨得有点呆板,但绝对不出错,所以在国内外教学上用得非常多.
现在大部分仿真器都支持VerilogHDL、VHDL混合仿真.
同时使用两种语言也没有什么问题,它们也正在相互向对方的优势学习,相互靠拢.
VerilogHDL和VHDL作为描述硬件电路设计的语言,不同点在于:VerilogHDL在行为级抽象建模的覆盖范围比VHDL稍差一些,而在门级描述方面比VHDL强一些,建模能力比较如图2-1所示.
第二章硬件描述语言VHDL图2-1VerilogHDL与VHDL建模能力比较示意图VHDLVITALVerilog行为级的抽象系统级算法级寄存器传输级逻辑门级开关电路级第二章硬件描述语言VHDLVerilogHDL和VHDL共同特点在于:都能形式化地抽象表示电路的结构和行为;都支持逻辑设计中层次与领域的描述;具有电路仿真和验证机制,以保证设计的正确性;支持电路描述由高层到低层的综合转换,便于文档管理,易于理解与设计重用.
从设计流程看,都利用层次化、结构化的设计方法,自顶向下进行设计,其HDL设计流程图如图2-2所示.
第二章硬件描述语言VHDL图2-2HDL设计流程图HDL设计事件与实现逻辑的物理器件有关的工艺技术文件HDL功能仿真、综合优化、布局布线布线后门级仿真芯片制造工艺没问题有问题有问题没问题第二章硬件描述语言VHDL2.
1.
3传统设计与VHDL设计对照我们把以原理图(Schematic)输入设计为主的方式称之为传统设计,而把以VHDL语言进行设计描述的方式称之为高层次设计.
由于VHDL代码完全由文字组成,而传统的设计往往是一张张的原理图,这两者之间存在一定的对应关系.
我们知道,传统的原理图总是由线和一些符号相互连接而构成,实体是与符号相对应的.
而且它规定了一个设计单元对外的接口信号结构体则是与某一层的原理图相对应,而且它总是与某个实体相关,并对该实体的结构和行为进行描述.
图2-3是一个RS触发器传统设计的实例.
第二章硬件描述语言VHDL图2-3所示rsFF的符号为设计者描述了下面几部分信息:器件输入脚的数目(本例为Set和Reset)、器件输出脚的数目(本例为Q和QB)以及器件的功能(本例由符号名描述器件的功能).
这个RS触发器的简单线路图如图2-4所示.
第二章硬件描述语言VHDL图2-3rsFF符号QBQSetResetrsFF第二章硬件描述语言VHDL图2-4rsFF线路图SetResetQBQU1U2第二章硬件描述语言VHDL同样的设计在VHDL中将如何完成在VHDL中将如何表示符号呢在VHDL中将看到什么样的原理图呢(1)实体Entity与符号对应.
由实体建立所有的设计,在VHDL中实体直接和传统设计中的符号相对应,图2-3所表示的这个rsFF符号对应于如下的VHDL代码:ENTITYrsFFISPORT(set,reset:INBIT;Q,QB:BUFFERBIT);ENDrsFF;第二章硬件描述语言VHDL注意:在VHDL语言中,库的声明与包的使用总是放在设计单元的最前面.
LIBRARYIEEE;USEIEEE.
STD.
LOGIC.
1164.
ALL;这里,IEEE是库名,STD.
LOGIC.
1164是IEEE库中的一个包.
有了上面这两条语句,下面的设计单元(实体和结构体)就可以使用STD.
LOGIC.
1164包中定义的数据类型和各种函数了.
在图2-3的VHDL代码中,关键词ENTITY是实体语句的开头,即由程序包STD.
LOGIC.
1164提供该语言的关键词与数据类型,它们全部用大写表示,以便于熟记,例如IS、PORT、IN、BIT等,提供的标准数据类型是BIT.
VHDL编辑器并不区分大、小写.
第二章硬件描述语言VHDL(2)ARCHITECTURE与线路图对应.
在VHDL中也有rsFF元件线路图的相对应部分,它叫结构体,结构体总是对应实体而言并描述那个实体的行为.
对应rsFF线路图的结构体的VHDL代码如下所示:ARCHITECTUREnetlistOFrsFFISCOMPONENTnand2PORT(A,B:INBIT;C:OUTBIT);ENDCOMPONENT;BEGINU1:nand2PORTMAP(set,QB,Q);U2:nand2PORTMAP(reset,Q,QB);ENDnetlist;第二章硬件描述语言VHDL这里,在关键词ARCHITECTURE标明的语句中描述实体的结构,结构体名字是netlist,正描述的结构体叫rsFF实体的结构体.
VHDL语言的语法比较严格.
一段完整的VHDL代码通常由实体语句、结构体语句、配置说明语句以及库、包说明语句组成.
其中实体语句可用于描述设计单元的外部接口信号,结构体语句可用于描述设计单元内部的结构和行为.
一般来说,结构体对设计单元内部的功能描述有三种描述:行为级描述、寄存器传输级描述和结构描述(本例中采用的是结构方式的描述);配置说明语句可用于从库中选取不同的元件来构成设计单元的不同版本;设计单元主要用于存放已经编译过的实体结构体、设计单元和配置数据.
当前,在VHDL中的库大致可以分为5种:IEEE库、STD库、ASIC矢量库、用户定义和WORK库,包则主要用于罗列程序中用到的各种数据、常量、子程序等第二章硬件描述语言VHDL(3)VHDL的描述.
VHDL对系统与电路提供的描述主要是两个方面:结构方式和行为方式.
从上例中可看出,结构化描述与传统的原理图设计更接近,但VHDL的主要优点是它能从行为上描述系统和电路,而且可以按算法方式或按数据流的方式进行行为描述.
如何选用一种具体的描述方式,要视具体的系统和电路而定.
RS触发器对应的行为描述如下:ARCHITECTUREbehaveOFrsFFISBEGINQA,Y=>B,Sum=>Temp-sum,Carry=>Temp_carry_1);U1:Half_adderportmap(X=>Temp_sum,Y=>Carry_in,Sum=>AB,Carry=>Temp_Carry_2);U2:Or_gateportmap(In1=>Temp_carry_1,In2=>Temp_carry_2,Out1=>Carry_out);endstructure;第二章硬件描述语言VHDL注意:(1)In1:inBit;In2:inBit;可写成In1:Bit,In2:Bit;,因为in是缺省的I/O状态.
(2)"---"为注释行标志,该标志后的所有字符均为注释内容.
(3)由"component.
.
.
endcomponent;"注明的一段为元件说明语句,给出了该元件的外端口情况,或者说是给出了一个元件的模板.
(4)由"--componentinstantiationstatements"说明的为元件例化语句部分.
该语句将元件说明中的端口映射到实际元件中的端口,即将模板映射到现实电路.
第二章硬件描述语言VHDL1.
实体说明实体类似原理图中的模块符号,它并不描述模块的具体功能,实体的每一个I/O信号被称为端口,它与部件的输入/输出或器件的引脚相关连.
实体说明的一般形式是:entity实体名is[generic(类属表);][port(端口表);][declarations说明语句;][begin实体语句部分];end[实体名];第二章硬件描述语言VHDL说明:(1)实体名和所有端口名都由字符串组成(称为标识符).
该字符串中的任意字符可以是"a"到"z"、"A"到"Z",或数字"0"到"9",以及下划线"-".
字符串的第一个字符必须是字母,中间不包括空格,且最后一个字符不可以为下划线,两个下划线不允许相邻.
(2)[]表示其中的部分是可选项.
(3)对VHDL而言,大小写一视同仁,不加区分.
第二章硬件描述语言VHDL(4)实体说明以entity实体名is开始,至end[实体名]结束,最简单的实体说明是:entityEisend;除此之外,其余各项皆为可选项.
第二章硬件描述语言VHDL(5)类属(generic)语句必须放在端口语句之前,用于指定由环境决定的参数.
例如,在数据类型说明上用于传递位矢量长度、数组的位长以及器件的延迟时间等参数.
类属语句的一般形式为generic([常量]名字表:[in]类型标识[∶=初始值];.
.
.
);例如,在二选一电路的描述中的generic(m:time∶[KG-*3]=1ns)指定了结构体内延时m的值为1ns.
又如:entityAndGateisgeneric(N:NatUral∶=2);port(inputs:inBit_vector(1toN);--类属参数N规定了位矢量(Bit_Vector)inputs的长度result:outBit);endAndGate;第二章硬件描述语言VHDL(6)端口(port)说明是设计实体之外部接口的描述,规定了端口的名称、数据类型和输入输出方向,其一般书写格式是:port(端口名{,端口名}:[方向]子类型符[bus][:=初始值]{;端口名{,端口名}:[方向]子类型符[bus][:=初始值]})其中,方向用于定义外部引脚的信号方向是输入还是输出,共有5种方向:in,out,inout,buffer,linkage.
in表示信号自端口输入到结构体;out表示信号自结构体输出到端口;inout表示该端口是双向的;buffer说明端口可以输出信号,且结构体内部可以利用该输出信号;linkage用于说明该端口无指定方向,可以与任何方向的信号连接.
第二章硬件描述语言VHDL(7)说明语句(declaration)可以包括subprogram说明、subprogram定义(或称subprogram体)、type说明、subtype说明、constant说明、signal说明、file说明、alias说明、attribute说明、attribute定义、use语句、disconnection定义.
用于对设计实体内所用的信号、常数、数据类型和函数进行定义,这种定义对该设计实体是可见的.
第二章硬件描述语言VHDL2.
结构体结构体是对实体功能的具体描述,必须跟在实体后面.
通常,编译实体后才能对结构体进行编译,如果实体需要重新编译,那么相应的结构体也应重新编译.
结构体的一般结构描述如下:Architecture结构体名of实体名is[说明语句;]begin[并行处理语句;]end[结构体名];第二章硬件描述语言VHDL说明:(1)结构体的名称应是该结构体的惟一名称,of后紧跟的实体名表明了该结构体所对应的是哪一个实体.
is用来结束结构体的命名.
结构体名称的命名规则与实体名的命名规则相同.
第二章硬件描述语言VHDL(2)说明语句的内容除了实体说明中可有的说明项外,还可以包括元件说明(component)和组装说明(也称配置configuration)语句.
说明语句用于对结构体内所用的信号、常数、数据类型和函数进行定义,且其定义仅对结构体内部可见.
例如在对二选一电路的描述中:architectureconnectofmuxissignaltmp:BIT;--对内部信号tmp进行定义--信号定义和端口语句一样,应有信号名和数据类型的说明--因它是内部连接用的信号,故没有也不需要方向说明begin.
.
.
endconnect;第二章硬件描述语言VHDL(3)处于begin和end之间的并行处理语句(即各语句是并发执行的)用于描述该设计实体(模块)的行为和结构.
它包括block语句、process语句、procedure调用语句、assert语句、assignment语句、generate语句、componentinstance语句.
有关这部分语句的详情也会在后面几节中继续介绍.
二选一电路描述中的进程语句如下:cale:process(d0,d1,sel)variabletmp1,tmp2,tmp3:BIT;begin.
.
.
endprocess;第二章硬件描述语言VHDL(4)一个实体说明可以对应于多个不同的结构体.
即对于对外端口相同而内部行为或结构不同的模块,其对应的设计实体可以具有相同的实体说明和不同的结构体.
所以,一个给定的实体说明可以被多个设计实体共享,而这些设计实体的结构体不同.
从这个意义上说,一个实体说明代表了一组端口相同的设计实体(如两输入端的"与非门"和两输入端的"或非门"等).
所以VHDL规定:对应于同一实体的结构体不允许同名,而对应于不同实体的结构体可以同名.
第二章硬件描述语言VHDL2.
2.
2包(Package)、配置(Configuration)和库(Library)1.
包在实体说明和结构体中说明的数据类型、常量和子程序等只对相应的结构体可见,而不能被其它设计实体使用.
为了提供一组可被多个设计实体共享的类型、常量和子程序说明,VHDL提供了包(package).
包用来罗列要用到的信号定义、常数定义、数据类型,元件语句、函数定义和过程定义等.
它是一个可编译的设计单元,也是库结构中的一个层次.
第二章硬件描述语言VHDL包分为包说明(packagedeclaration)和包体(packagebody)两部分.
包说明的一般形式是:package包名is{说明语句;}end[包名];包体的一般形式是:packagebody包名is{说明语句;}end[包名];第二章硬件描述语言VHDL说明:(1)包说明和相应的包体的名称必须一致.
(2)包说明中的说明语句可包括subprogram说明、type说明、subtype说明、constant说明、signal说明、file说明、alias说明、attribute说明、attribute定义、use语句、disconnection定义,即除了不包括子程序体外,与实体说明中的说明语句情况相同.
包体中的说明语句可包括subprogram定义、type说明、subtype说明、constant说明、file说明、alias说明、use语句.
第二章硬件描述语言VHDLVHDL中的subprogram(子程序)概念与一般计算机高级语句中子程序的概念类似.
子程序包括过程(procedure)和函数(function),分别由子程序说明和子程序体(子程序定义)两部分组成.
可以出现在相应的实体说明、结构体、包说明和包体中,供其它语句调用.
包说明可定义数据类型,给出函数的调用说明,而在包体中才具体地描述实现该函数功能的语句(即函数定义)和数据的赋值.
这种分开描述的好处是,当函数的功能需要作某些调整时,只要改变包体的相关语句就行了,这样可以使重新编译的单元数目尽可能少.
第二章硬件描述语言VHDL(3)可见性.
包体中的子程序体和说明部分不能被其它VHDL元件引用,只对相应的包说明可见,而包说明中的内容才是通用的和可见的(当然还必须用use子句才能提供这种可见性).
下面即为一个包说明及其相应包体的例子:packageLogicistypeThree_level_logicis(′0′,′1′,′z′);functioninvert(input:Three_level_logic)returnThree_level_logic;endlogic;packagebodyLogicisfunctioninvert(input:Three_level_logic)returnThree_level_logicis第二章硬件描述语言VHDLbegincaseinputiswhen′0′=>return′1′;when′1′=>return′0′;when′z′=>return′z′;endcase;endinvert;endLogic;第二章硬件描述语言VHDL在上例中,第一段是包说明,其中第三行是函数invert说明;第二段是包体,第二行开始函数的定义,给出了函数的行为.
这部分内容只对包说明(即第一段)可见.
所以,包说明包含的是通用的、可见的说明,而包体包含的是专用的、不可见的说明.
第二章硬件描述语言VHDL(4)在一个设计实体中加上use子句(在实体说明之前),可以使包说明中的内容可见.
如:useIEEE.
STD_LOGlC_1164.
all;all表示将IEEE库中的STD_LOGIC_1164包中的所有说明项可见.
又如,useLogic.
Three_level_logic;表示将用户自定义的包Logic中的类型Three_level_logic对相应的设计实体可见.
(5)包也可以只有一个包说明,因为如果包说明中既不创造子程序说明也没有待在包体中赋值的常数(deferredconstant),所以,包体就没必要存在了.
第二章硬件描述语言VHDL2.
配置设计者可以利用配置语句为待设计的实体从资源文件(库或包)中选择描述不同行为和结构的结构体.
在仿真某个实体时,可以利用配置语句选择不同的结构体,以便进行性能对比得到最佳性能的结构体.
在标准VHDL中,配置并不是必需的,因为系统总是将最后编译到工作库中的结构体作为实体的默认结构体.
但是,使用配置来规定实体给了设计者一种自由——设计者可以自由选择结构体.
第二章硬件描述语言VHDL配置语句的一般形式为:configuration配置名of实体名is[配置说明部分:use子句或attribute定义;][语句说明;]end[配置名];第二章硬件描述语言VHDL配置语句根据不同情况,其语句说明有繁有简,下面以一个微处理器的配置为例作一些简要说明.
--;anarchitectureofamicroprocessor:architectureStructure_ViewofProcessoris--;component说明语句ComponentALUport(.
.
.
)endcomponent;ComponentMUXport(.
.
.
)endcomponent;begin--;component例化语句:A1:ALUportmap(…);M1:MUXportmap(…);M2:MUXportmap(…);第二章硬件描述语言VHDLendStructure_View;--aconfigurationofthemicroprocessor;LibraryTTL.
Work;configurationV4_27_87ofprocessorisuseWork.
All;forStructure_View--组装说明forA1:ALUuseconfigurationTTL.
SN74LS181;endfor;forM1,M2:MUXuseentityMultiplex4(Behavior);endfor;endfor;endV4_27_87;第二章硬件描述语言VHDL其中:configurationV4_27_87ofProcessoris…endV4_27_87;第二章硬件描述语言VHDL属于配置语句部分,为实体Processor选择了结构体Structure_View(用语句forStructure_View…);结构体Structure-View仅给出了元件ALU、MUX的模板,而没有给出任何实质的行为或结构描述,所以配置语句中又采用元件配置(ComponentConfiguration),如:ForA1:ALUuseconfigurationTTL.
SN74LS181;endfor;为元件ALU选择标准库TTL中的配置SN74LS181;forM1,M2:MUXuseentityMultiplex4(Behavior);endfor;第二章硬件描述语言VHDL将元件MUX(M1、M2)组装到库WORK中的实体Multiplex4及相应的结构体Behavior上,使元件具有具体的行为或结构.
类似元件配置的语句也可用于结构体中,称组装规则.
例如,在原来的结构体的说明部分增加一句:forM1,M2:MUXuseentityMultiplex4(Behavior);与在configurationV4_27_87中使用组装说明的目的和意义相同.
组装规则的一般形式是:for元件例示标号:元件名use对应对象;其中对应对象可以是某个配置configuration或实体entity.
第二章硬件描述语言VHDL组装规则就是将元件例示语句中的元件(如M1,M2:MUX)组装到实体Multiplex4及其相应的结构体(Behavior)或已有的某个组装说明上.
这样,配置语句(组装说明)为要设计的实体选择了结构体,元件配置或组装规则将元件与某个实体及其相应的结构体对应起来.
第二章硬件描述语言VHDL3.
库库是经编译后的数据的集合,它存放已经编译的实体、结构体、包和配置.
库由库元组成,库元是可以独立编译的VHDL结构.
VHDL中有两类库元,即基本元和辅助元.
基本元包括实体说明、包说明和配置,辅助元为包体和结构体.
基本元对同一库中其它基本元都是不可见的,必须用use子句才能提供可见性.
第二章硬件描述语言VHDL(1)库的种类.
在VHDL语言中存在的库大致可以归纳为5种:IEEE库、STD库、ASIC库、用户定义的库和WORK库.
IEEE库中汇集着一些IEEE认可的标准包集合,如STD_LOGIC_1164;STD库是VHDL的标准集.
其中存放的STANDARD包是VHDL的标准配置,如定义了Boo1ean、Character等数据类型;ASIC库存放着与逻辑门一一对应的实体;用户为自身设计需要所开发的共用包集和实体等可以汇集在一起,定义为用户定义库;WORK库是现行工作库,设计者所描述的VHDL语句不加任何说明时,都将存放在WORK库中,例如,用户自定义的包在编译后都会自动加入到WORK库中.
第二章硬件描述语言VHDL(2)库的使用.
前面提到的5类库除了WORK库外,其它4类库在使用前都必须作说明,用库子句(library)对不同库中的库元提出可见性.
library的说明总是放在设计单元的最前面,其一般形式为:library库名;接着用use子句使库中的包和包中的项可见.
例如:libraryIEEE;UseIEEE.
STD_LOGIC_1164.
all;也就是说,对于同一库中不同的库元,必须用use子句提供所需的可见性,而对于不同库中的库元,则必须用库子句加上use子句来提供相应的可见性.
第二章硬件描述语言VHDL(3)库的作用范围.
库语句的作用范围从一个实体说明开始到它所属的结构体和配置为止.
当一个源程序中出现两个以上的实体时,库语句应在每个实体说明语句前书写.
例如:libraryIEEE:--库使用说明useIEEE.
STD_LOGIC_1164.
all;entityand1is.
.
.
endand1;architecturert1ofand1is.
.
.
endrt1;第二章硬件描述语言VHDLconfigurations1ofand1is.
.
.
ends1;libraryIEEE;--库使用说明useIEEE.
STD_LOGIC_1164.
all;entityor1is.
.
.
endor1;configurations2ofor1is.
.
.
ends2;第二章硬件描述语言VHDL2.
2.
3设计实例以上从设计硬件电路的角度出发,介绍了完整的VHDL语言程序应具备的5个部分:实体+结构体,并配合以相应的资源(包、库、配置).
采用VHDL语言进行硬件设计时,采用自上而下的设计方法,逐步将设计内容细化,最后完成系统硬件的整体设计.
下面以设计一个小规模处理器mp为例,简要说明VHDL程序的基本结构.
第二章硬件描述语言VHDL尽管mp是小规模的处理器,但是仍考虑采用大规模电路自上而下的设计方法.
所谓自上而下的设计方法,即先将要设计的硬件系统(如微处理器mp)看成一个顶部模块,对应于VHDL程序中的一个设计实体(entitymp),然后按一定的标准(如功能)将该系统分成多个子模块,参见图2-7.
第二章硬件描述语言VHDL图2-7处理器的6大部分mcumiubcualubsurfu第二章硬件描述语言VHDL表2-1处理器各部分的功能说明第二章硬件描述语言VHDL在图2-7中,处理器mp按功能被分为6个子模块:mcu、miu、alu、bsu、rfu、bcu(具体功能见表2-1).
这些子模块对应于设计实体mp中的各个元件,用结构体中的component说明语句对元件的名字和接口进行说明:--TOPLEVEL;--PackagedeclarationslibraryIEEE;useIEEE.
STD_LOGIC_1164.
all;useIEEE.
STD_LOGIC_1164EXTENSION.
all;libraryWORK;useWORK.
mp_package.
all;.
.
.
---;entitydeclarationofmp第二章硬件描述语言VHDLentitympisgeneric(.
.
.
);port(…);begin.
.
.
endmp;--;anarchitectureofmp;architecturestruct_viewofmpiscomponentmcuport(.
.
.
);endcomponent;componentaluport(.
.
.
);endcomponent;componentbcuport(.
.
.
);endcomponent;componentbsuport(.
.
.
);endcomponent;componentmiuport(.
.
.
);endcomponent;componentrfuport(.
.
.
);endcomponent;第二章硬件描述语言VHDLbeginl--1:mcuportmap(1--2:aluportmap(1--3:bcuportmap(1--4:bsuportmap(1--5:miuportmap(1--6:rfuportmap(endstruct_view;--aconfigurationofmap;configurationofV_5_30ofmpisuseWORK.
all;forstruct_viewfor1--1:mcuuseentitywork.
mcu;endfor;第二章硬件描述语言VHDLfor1--2:aluuseentitywork.
alu;endfor;for1--3:bcuuseentitywork.
bcu;endfor;for1--4:bsuuseentitywork.
bsu;endfor;for1--5:miuuseentitywork.
miu;endfor;for1--6:rfuuseentitywork.
rfu;endfor;endfor;endV_5_30;第二章硬件描述语言VHDL在程序中,实体mp对处理器的外部引脚进行了说明,结构体则对处理器内部结构及相互关系进行了描述:(1)在结构体的说明部分,使用元件说明语句(如componentmcuport(…);endcomponent;)描述了子模块的名称(mcu)和端口(形式端口).
(2)在结构体的语句部分,用元件例化语句(1--1:mcuportmap(…);)将元件标号、元件名称的对应关系进行描述,给出形式端口与实体中的端口、实际信号以及各子元件间的连接关系.
第二章硬件描述语言VHDL(3)用Configuration语句(如configurationV_5_30ofmpis…endV_5_30;)或一些组装规则将各个实际元件与器件库中的特定实体对应起来,从而使这个设计实体完成了该处理器的顶层设计.
它描述了该处理器的外部端口和各个子模块间的相互关系,建立了一个VHDL的外部框架.
(4)所谓器件库中的特定实体,是指与各个子模块相对应的各个设计实体,它们将各个子模块的功能和行为细化.
这种对各个子模块的VHDL设计是该系统的次一层设计.
第二章硬件描述语言VHDL(5)如果子模块又可以分成几个小模块,则将进行该系统的更次一层设计(方法相同),……,如此细化下去,直到最底层设计.
这样由上至下进行系统硬件设计,其好处是:在程序设计的每一步都可进行仿真检查,有利于尽早发现系统设计中存在的问题.
VHDL是一种结构严密、语法严谨的语言.
为了更灵活地掌握这种硬件设计方法,从总体上把握全局,而不至于被其中繁多的语法混淆思路,迷失设计方向,在前面充分讨论了VHDL程序的基本框架和设计思路的基础上,下面讨论VHDL语言的数据类型、操作符和对硬件系统的描述方式.
第二章硬件描述语言VHDL2.
3VHDL语言的基本数据类型和操作符2.
3.
1数的类型和数的字面值VHDL中的数分整数、浮点数、字符、字符串、位串及物理数等六种类型.
各类数的书写形式不同,而数的类型正是由其书写形式所决定.
通常把数的书写形式称为字面值.
第二章硬件描述语言VHDL1.
数字VHDL中的数字可以用十进制数表示,也可以用二、八、十六进制数来表示.
(1)十进制文字表示格式为:十进制数文字::=整数[.
整数][指数]整数::=数字{[下划线]数字}指数::=E[+]整数|E-整数第二章硬件描述语言VHDL注意:在相邻的数字之间插入下划线,对十进制数的数值并没有影响,十进制数前面可以加若干个"0",但不允许在数字之间存在空格,数字与指数之间也不允许有空格.
例如,以下数字书写是合法的:257--十进制整数0--十进制整数12_4_6A---等效于1246a0.
09--十进制浮点数4.
1E-4--十进制浮点数第二章硬件描述语言VHDL(2)非十进制数,其定义格式如下:以基表示的数::=基#基于基的整数[.
基于基的整数]#指数基::=整数基于基的整数::=扩展数字{[下划线]扩展数字}扩展数字::=数字|字母扩展数字指除了数字("0"~"9")外,还包括"A"~"F"表示十六进制数的字母(大小写不分).
同样,在以基表示的数中插入下划线对其数值无影响.
基数的最小值为2,最大值为16.
基数和指数都必须用十进制数表示.
下面是一些例子:第二章硬件描述语言VHDL--整数文字,值为254的十进制数可以用下列不同基的数表示:2#1111_1110#8#376#16#FE#016#0FE#--224(00E0H)的十六进制指数表示:16#E#E1--以基表示的浮点数2#1.
1111-1111#E4(等于十进制数31.
9375)16#0.
F#E0(等于十进制数0.
9375)第二章硬件描述语言VHDL2.
字符、字符串、位串和物理数字符、字符串、位串均用ASCII字符表示.
单个ASCII字符用单引号括起称为字符,如'j'.
一串ASCII字符用双引号括起来的字符序列(可以为空)称为字符串,如"CDMA".
位串是用字符表示多位数码,位串可用二进制、八进制或十六进制表示,如数码2748用位串表示则为:B″101010111100″--二进制位串表示的数码2748X″ABC″--十六进制位串表示的数码2748O″5274″--八进制位串表示的数码2748″A″--字符串中有一个字符A,注意与字符′A′区别第二章硬件描述语言VHDL物理数的字面值由一个整数或浮点数加上一个物理单位组成.
如:1.
7ps--1.
7ps15kohm--15kΩ此例中,ps和kohm均非关键字,它是专门定义的物理单位.
第二章硬件描述语言VHDL2.
3.
2对象和分类VHDL的数据对象包括信号(signal)、变量(variable)、常数(constant)和文件(file)四类.
其中,文件包含一些专门类型的数值,它不能通过赋值来更新文件的内容,文件可以作为参数向子程序传递,通过子程序对文件进行读写操作.
因此,文件参数没有模式.
除了文件外,其它三类数据对象的区别有:(1)在电子电路设计中,这三类对象都与一定的物理对象相对应.
例如,信号对应硬件设计中的某一条硬件连接线,常数代表数字电路中的电源和地,变量与硬件的对应关系不太直接,通常代表暂存某些值的载体.
第二章硬件描述语言VHDL(2)变量和信号的区别在于变量的赋值被立即执行,信号的赋值则有可能延时.
(3)三种对象的含义和说明场合见表2-2.
表2-2三种对象的含义和说明场合第二章硬件描述语言VHDL1.
对象说明每个对象都有类型,该类型决定可能取值的类型.
constant、variable、signal三类对象说明的一般形式是:constant常数名表:数据类型[∶=表达式值];variable变量名表:数据类型[∶=表达式值];signal信号名表:数据类型[信号类别][∶=表达式值];第二章硬件描述语言VHDL说明:常数名表、变量名表和信号名表,均由一个标识符或以","隔开的多个标识符组成.
"∶=表达式"为常数、变量、信号赋初值.
通常常数赋值在常数说明时进行,且常数一旦被赋值就不能改变.
信号类别只有bus或register两种类型,是可选项.
对象说明的示例如下:constantVcc:real∶=5.
00;variablex,y:integerRange0to255∶=10;signalground:Bit∶=′0′;第二章硬件描述语言VHDL2.
变量和信号的区别(1)物理意义不同.
信号是电子电路内部硬件连接的抽象;变量没有与硬件对应的器件.
(2)赋值符号不同.
信号赋值用"顺序处理语句when条件表达式2=>顺序处理语句.
.
.
endcase;第二章硬件描述语言VHDL其中,when表达式可以有4种形式:when值=>顺序处理语句;when值|值|值|.
.
.
值|=>顺序处理语句;whenothers=>顺序处理语句;when值to值=>顺序处理语句;--表示在一定取值范围内执行顺序处理语句.
例如,RS触发器程序中的if语句又可以写为:Cases&riswhen00=>Last_state∶=Last-state;when01=>Last_state∶=0;whenothers=>Last_state∶=1;endcase:第二章硬件描述语言VHDL7.
循环语句loop语句有两种表达形式:(1)[标号:]for循环变量in离散范围loop顺序处理语句endloop[标号];例如,对数1~9进行累加运算:sum∶=0;assume:foriin1to9loopsum∶=sum+1;endloopassume;第二章硬件描述语言VHDL(2)[标号:]while条件loop顺序处理语句end[标号];例如,上例又可写为:sum∶=0;i∶=1;assume:while(iInputs(I),O1=>Outputs(I));第二章硬件描述语言VHDL2.
5Active-VHDL上机准备2.
5.
1Active-VHDL的安装与启动1.
系统配置Active-VHDL所需的硬件条件并不高,Pentium以上PC机,最少有32MB内存.
系统运行环境可在Windows98/NT/2000操作系统下,安装系统约需要160MB硬盘空间.
内存大小可能限制仿真周期长短和仿真时间,但我们只做教学、学习时,不考虑这些问题.
第二章硬件描述语言VHDL2.
安装步骤(1)上网下载ActiveVHDL3.
3教学程序.
(2)展开该软件后,选中main.
exe文件并输入密码jackpot1999后开始安装.
第二章硬件描述语言VHDL(3)安装完毕后,将破解文件中的两个关键文件直接展开释放到:AfterinstallationofActiveVHDL3.
3,copylicense.
datintoDatsubdirectoryofActiveVHDL;e.
g.
C:\ProgramFiles\Aldec\ActiveVHDL\DatcopyRMCL.
dllintoBINsubdirectoryofActiveVHDL;e.
g.
C:\ProgramFiles\Aldec\ActiveVHDL\BIN其中,盘符可以变化,例如d:\ProgramFiles\Aldec\ActiveVHDL\Dat(4)电脑重新启动后,即可运行Active-VHDL.
第二章硬件描述语言VHDL2.
5.
2EDITPlus安装使用1.
为什么要使用EDITPlusEDITPlus是功能强大的文本编辑器,可以无限制地撤消、重做,支持表达式查找替换,能够同时搜索、编辑多个文件,具有监视剪贴板功能,可以同步自动地将剪贴板上的文本粘贴到EDITPlus的编辑窗口中.
另外,它也是一个好用的HTML编辑器,也支持C/C++、Perl、Java等语句的关键词突出显示,除了可以突出显示HTML标签外,还内嵌有完整的HTML和CSS命令功能.
它还会结合IE浏览器于EDITPlus窗口中,让您可以直接预览编辑好的网页.
它非常适合编辑网页与程序的撰写,对于HTML、ASP、JavaScript、VBScript、Perl、Java、C/C++等语言,可将程序代码以鲜明色彩显示,也可以自定义需彩色显示的文字集.
第二章硬件描述语言VHDL2.
安装步骤(1)网上下载EDITPlus.
(2)下载并释放EDITPlus.
(3)安装并注册.
(4)可以通过下载中文化程序简体版来汉化EDITPlus.
第二章硬件描述语言VHDL2.
5.
3熟悉Active-VHDL的集成环境1.
认识Active-VHDL的文件类型打开Active-VHDL的文件菜单,该菜单中"New"命令包括了Active-VHDL中的基本文件.
下面将对Active-VHDL有关文件类型进行总结分类:(1)VHDLSource.
该项为VHDL源文件,其扩展名为.
vhd.
(2)Waveform.
该项为波形文件,主要用于ActiveVHDL在进行仿真之后显示各信号的波形变化.
注意:运行仿真之后才能生成波形文件,其扩展名为.
wfv.
(3)List.
该项为信号列表文件,用于显示各信息数值的变化.
第二章硬件描述语言VHDL(4)BasicScript.
该项用于建立BasicScript文件,在Active-VHDL中支持用Active-VHDL编写的宏,可以用于一系列重复的操作,主要用于仿真中.
(5)TextDocument.
该项为文本文档,主要用于编写一些和设计有关的说明文件.
(6)位图文件.
其扩展名为.
bmp.
(7)设计文件.
其扩展名为.
adf或.
pdf,建议使用.
adf.
(8)测试矢量文件.
其扩展名为.
asc.
(9)StateDisgram.
该项为状态转换图文件,在Active-VHDL中,主要用于有限状态机(fsm)的设计.
第二章硬件描述语言VHDL2.
学会CommentBlock和UncommentBlock的用法CommentBlock用于把当前所选定的文本块变为注释.
该文本块被注释后,在编译时将不作为程序的一部分存入编译数据库中.
在不知哪一部分出问题的情况下多用于VHDL调试中.
被注释的文本块前面将加上"--"注释号.
UncommentBlock用于把当前所选定的注释文本块前的注释号去掉,还原成程序描述的一部分.
第二章硬件描述语言VHDL3.
ZOOM选项的用法在波形调试时,点击In选项可放大1倍,点击Out选项可缩小1倍,用于调整波形大小到合适位置.
点击Full选项可以将波形显示正好和波形显示窗口大小吻合,适合总体观察波形形状.
第二章硬件描述语言VHDL4.
Refresh命令的用法点击Refresh命令可刷新,将变形的波形恢复正常.
第二章硬件描述语言VHDL5.
Design菜单的用法(1)AddfilestoDesign.
该项用于在当前设计中加入一些新的文件.
单击该选项后,可以选择VHDL源文件,测试基准文件,以及将宏文件加入到当前设计中的文件之中.
(2)Compileall.
该项用于编译当前设计中的所有文件.
(3)每次仿真中只可以使用一个测试基准(testbench)文件,而且必须在仿真之前将其置于顶层.
设置方法:选择Design菜单的"Setting"命令中的"ToplevelSelection"选项卡,将测试基准文件置于顶层.
第二章硬件描述语言VHDL6.
仿真菜单的用法(1)Initializesimulation.
该选项用于初始化,把一些仿真要用到的信息先存入数据库,然后进行仿真.
(2)运行命令.
该项用于运行仿真.
该命令分Run、Rununtil、Runfor三种.
Run命令用于运行仿真,并直到仿真结束为止;Rununtil命令用于从头运行仿真到某一指定的时间点;Runfor是从当前仿真所处的时间点上继续运行的时间.
第二章硬件描述语言VHDL2.
5.
4Active-VHDL自带范例的调试流程调试流程如下:(1)打开设计文件(例如可选计数器).
熟悉NewDesign、OpenDesign和CloseDesign命令.
(2)调整并理解View菜单中各个窗口显示.
(3)调出并阅读设计文件源程序.
(4)编译和改错.
(5)使用"Setting"命令置testbench文件于顶层.
(6)添加信号.
(7)Run(仿真).
(8)阅读并分析波形.
第二章硬件描述语言VHDL2.
5.
5测试基准中的VHDL激励信号VHDL可以很有效地作为测试基准中激励信号的编程语言,激励信号中的测试矢量可以直接用VHDL语言来编写,这使得测试矢量的编写与模拟器无关.
例如,对于半加器、全加器施加激励信号,测试矢量可以如表2-4所示(不是惟一的).
第二章硬件描述语言VHDL表2-4测试矢量第二章硬件描述语言VHDL续表第二章硬件描述语言VHDL2.
5.
6Active-VHDL中测试基准自动生成流程(1)设计半加器时,设计浏览器(DesignBrowser)如图2-8所示.
(2)在"Design"菜单项下选择"Compileall"命令项,对所有源文件进行编译.
编译完成后,设计浏览器的每一个源文件前面都出现一个"+"号,表示其产生子项.
(3)点击选中"半加器和全加器"前面的"+"号,将打开其下的子项.
(4)用鼠标右击该子项,将出现如图2-9所示的弹出式菜单.
第二章硬件描述语言VHDL图2-8设计浏览器第二章硬件描述语言VHDL图2-9右击快捷菜单第二章硬件描述语言VHDL(5)选择"GenerateTestBench.
.
.
"项目,将出现如图2-10所示的对话框.
图2-10测试基准生成对话框第二章硬件描述语言VHDL(6)可选择要产生测试基准的实体和结构体,以及测试基准的类型.
(7)单击"下一步"按钮,按提示要求选择对话框有关选项.
这时如果要从文件引入测试矢量,可以选定"Testvectorsfromfile"项.
然后选择可以从中引入测试矢量的文件,否则将自动产生测试矢量.
(8)单击"下一步"按钮,将出现选择对话框,按提示进行操作.
(9)单击"完成"按钮,将自动生成测试基准(testbench-for-half-adder).
第二章硬件描述语言VHDL(10)打开该文件,在其中的"--addyourstimulushere.
.
.
"位置加上测试矢量描述即可,参见图2-11.
例如,半加器可以是:图2-11半加器测试基准示意图第二章硬件描述语言VHDL--Addyourstimulushere.
.
.
xoutputsoutputsoutputsoutputsoutputsoutputsoutputsoutputsnull;endcase;endif;endprocess;ende_decode;第二章硬件描述语言VHDL(3)ActiveVHDL下编写的三_八译码器测试基准源代码:libraryIEEE;useIEEE.
std_logic_1164.
all;__Addyourlibraryandpackagesdeclarationhere.
.
.
entitye_decode_tbisende_decode_tb;architectureTB_ARCHITECTUREofe_decode_tbis第二章硬件描述语言VHDL__Componentdeclarationofthetestedunitcomponente_decodeport(inputs:instd_logic_vector(0to2);enables:instd_logic_vector(0to2);outputs:outstd_logic_vector(7downto0));endcomponent;__Stimulussignals_signalsmappedtotheinputandinoutportsoftestedentitysignalinputs:std_logic_vector(0to2);第二章硬件描述语言VHDLsignalenables:std_logic_vector(0to2);__Observedsignals_signalsmappedtotheoutputportsoftestedentitysignaloutputs:std_logic_vector(7downto0);__Addyourcodehere.
.
.
begin__UnitUnderTestportmapUUT:e_decodeportmap(inputs=>inputs,enables=>enables,outputs=>outputs);第二章硬件描述语言VHDLenablesd,clk=>clk,q=>q);clkCLK,RESET=>RESET,第二章硬件描述语言VHDLCE=>CE,LOAD=>LOAD,DIR=>DIR,DIN=>DIN,COUNT=>COUNT);CLK_IN:processbeginifend_sim=falsethenCLKifcar_on_farmroadandtime_out_longthenstart_timer∶=notstart_timer;present_stateiftime_out_shortthenstart_timer∶=notstart_timer;present_state第二章硬件描述语言VHDLifnotcar_on_farmroadortime_out_longthenstart_timer∶=notstart_timer;present_stateiftime_out_shortthenstart_timer∶=notstart_timer;present_stateifcar_on_farmroadandtime_out_longthenstart_timeriftime_out_shortthenstart_timerifnotcar_on_farmroadortime_out_longthenstart_timeriftime_out_shortthenstart_timer>ende_traffic_con;第二章硬件描述语言VHDL(2)交通灯测试基准文件名:e_traffic_con_tb.
vhdusework.
traffic_package.
all;--Addyourlibraryandpackagesdeclarationhere.
.
.
entitye_traffic_con_tbis--Genericdeclarationsofthetestedunitgeneric(long_time:time∶=80.
0ns;short_time:time∶=40.
0ns);ende_traffic_con_tb;第二章硬件描述语言VHDLarchitecturetb_architectureofe_traffic_con_tbis--Componentdeclarationofthetestedunitcomponente_traffic_congeneric(long_time:time∶=80.
0ns;short_time:time∶=40.
0ns);port(car_on_farmroad:inboolean;highway_light:outcolor;farmroad_light:outcolor);endcomponent;第二章硬件描述语言VHDL--Stimulussignals_signalsmappedtotheinputandinoutportsoftestedentitysignalcar_on_farmroad:boolean;--Observedsignals-signalsmappedtotheoutputportsoftestedentitysignalhighway_light:color;signalfarmroad_light:color;--Addyourcodehere.
.
.
begin--UnitUnderTestportmapUUT:e_traffic_conportmap(car_on_farmroad=>car_on_farmroad,第二章硬件描述语言VHDLhighway_light=>highway_light,farmroad_light=>farmroad_light);--Addyourstimulushere.
.
.
car_on_farmroad<=false,trueafter50ns,falseafter300ns,trueafter400ns,falseafter600ns;endtb_architecture;configurationTESTBENCH_FOR_e_traffic_conofe_traffic_con_tbisfortb_architecture第二章硬件描述语言VHDLforUUT:e_traffic_conuseentitywork.
e_traffic_con(e_traffic_con);endfor;endfor;endTESTBENCH_FOR_e_traffic_con;交通灯的测试基准文件调试如图2_25所示.
交通灯控制器调试通过后的波形图如图2_26所示.
第二章硬件描述语言VHDL图2-25Active-VHDL下的测试基准文件调试第二章硬件描述语言VHDL图2-26交通灯控制器波形图第二章硬件描述语言VHDL2.
交通灯控制器状态表和状态图设计一个如图2-24所示的控制交叉路口交通灯控制器.
在乡间小路的每一面上都有探测器来监测汽车出现的情况.
只有在小路上发现有车时高速公路上的交通灯才有可能为红灯.
一般情况下,高速公路上的交通灯为绿色.
交通灯控制器状态表如表2-6所示.
其中,状态4为初始状态(实际上该状态为冗余状态),剩余4个状态为稳定状态.
其状态转换图如图2-27所示.
第二章硬件描述语言VHDL表2-6交通灯控制器状态表第二章硬件描述语言VHDL图2-27交通灯控制器状态转换图状态4状态0状态3状态1状态2SC*LSC+L第二章硬件描述语言VHDL在图2_27中,C表示小路上有车;L表示过了一段长的时间;S表示已过了一段短的时间;操作符"*"表示逻辑与的关系;操作符"+"表示逻辑或的关系.
描述中定义变量current_state表示当前状态,其类型为BIT_VECTOR(2downto0),5种状态分别由它的5个值来代表,如111代表状态4.
第二章硬件描述语言VHDL3.
上机实验内容和步骤(1)调通并分析源程序和激励程序.
程序中进程说明部分的几个变量的意义如下:newstate:下一个状态值;current_state:当前状态值;newHL:高速公路灯的状态,3位位长的每一位表示绿、黄、红灯的亮、灭状态;newFL:乡间公路灯;newST:用于启动外部计时器的输出位.
第二章硬件描述语言VHDL(2)实验步骤指导如下:①将源程序输入到ActiveVHDL;②将激励程序输入到ActiveVHDL;③编译、仿真该电路;④对波形结果进行分析;⑤填写作业模板.
参见附录一给出的上机作业模板范例.
第二章硬件描述语言VHDL复习思考题1.
什么是VHDL采用VHDL进行数字系统设计有哪些优点2.
信号和变量在描述和使用时有哪些主要区别3.
配置的主要功能有哪些试举例说明.
4.
试写出RS触发器测试基准,并在ActiveVHDL中验证.
第二章硬件描述语言VHDL5.
在一个设计文件中,写出二输入与门、与非门、或门、或非门、异或门的VHDL模型.
6.
编写八位全减器,并比较它和一位全加器的异同.
7.
上机调试本章给出的八位移动寄存器VHDL语言描述,并编写测试基准以及分析波形.
8.
试编写一个八位可控制计数器,要求考虑计数值预置输入端、计数输出端、控制代码、选通信号及计数时钟.
sparkedhost怎么样?sparkedhost主机。Sparkedhost于2017年7月注册在美国康涅狄格州,2018年收购了ClynexHost,2019年8月从Taltum Solutions SL收购了The Beast Hosting,同年10月从Reilly Bauer收购了OptNode Hosting。sparkedhost当前的业务主要为:为游戏“我的世界”提供服务器、虚拟...
飞讯云官网“飞讯云”是湖北飞讯网络有限公司旗下的云计算服务品牌,专注为个人开发者用户、中小型、大型企业用户提供一站式核心网络云端部署服务,促使用户云端部署化简为零,轻松快捷运用云计算。飞讯云是国内为数不多具有ISP/IDC双资质的专业云计算服务商,同时持有系统软件著作权证书、CNNIC地址分配联盟成员证书,通过了ISO27001信息安全管理体系国际认证、ISO9001质量保证体系国际认证。 《中华...
Virmach 商家算是比较久且一直在低价便宜VPS方案中玩的不亦乐乎的商家,有很多同时期的商家纷纷关闭转让,也有的转型到中高端用户。而前一段时间也有分享过一次Virmach商家推出所谓的一次性便宜VPS主机,比如很低的价格半年时间,时间到服务器也就关闭。这不今天又看到商家有提供这样的产品。这次的活动产品包括圣何塞和水牛城两个机房,为期六个月,一次性付费用完将会取消,就这么特别的产品,适合短期玩玩...
shift后门怎么用为你推荐
急救知识纳入考试100%的大学生有学习现场急救知识的欲望吗摩根币JPM摩根币是什么?怎么赚钱是骗人的吗?今日油条油条每周最多能吃多少今日油条联通大王卡看今日头条免流量吗?bbs.99nets.com怎么打造完美SF刘祚天你们知道21世纪的DJ分为几种类型吗?(答对者重赏)比肩工场比肩成局 什么意思22zizi.com河南福利彩票22选52010175开奖结果www.jjwxc.net晋江文学网 的网址是什么?丑福晋历史上真正的八福晋是什么样子的?
in域名注册 域名解析文件 vps.net 私人服务器 shopex空间 unsplash iis安装教程 一点优惠网 mysql主机 浙江独立 坐公交投2700元 日本bb瘦 jsp空间 服务器托管什么意思 中国电信宽带测速网 天翼云盘 33456 电信托管 联通网站 独享主机 更多