精华内容
下载资源
问答
  • 端口的设计,区别主要在于输出端口是默认的wire还是自定义的reg,本篇将以1位四选一数据选择为例进行说明。 1.1 门级描述和数据流描述 这两种描述的时候,使用默认的wire即可。 这两种描述方式,本质上都是直接...

    0 前言

    本文从整体上带你完成Verilog HDL语言的三种不同描述方式,让你从宏观上有所把握。

    最核心的原则:一切设计实际需求而定,需要存储变量就用reg,需要有符号数就用integer/real/reg signed……

    1 输出端口的设计

    端口的设计,区别主要在于输出端口是默认的wire还是自定义的reg,本篇将以1位四选一数据选择器为例进行说明。

    1.1 门级描述和数据流描述

    这两种描述的时候,使用默认的wire即可。

    这两种描述方式,本质上都是直接使用逻辑门

    • 门级描述是显式地使用了门级原语
    • 数据流描述其实是隐式地使用门级原语,因为他是直接描述数据在寄存器直接的流动关系,本质上,还是在阐述逻辑门的使用

    门级描述与数据流描述,就好比结绳记事使用符号记事的区别,用一连串的符号标志,代替了绳子,减少了许多麻烦。

    • 门级描述是以门级原语为基石的描述方式,必须使用线网类型
    • 数据流描述是以连续赋值语句为基石的描述方式,其左值必须是线网类型,右值无要求。

    以下是四选一数据选择器的端口声明,关注output out语句

    module choose_4to1(
        input d0,d1,d2,d3,
        input add1,add0,
        output out	// 注意输出端口的设定
        );
        
        
    endmodule
    

    你需要记住Verilog描述形式
    需要记住,门级描述的输出和数据流描述的连续赋值语句的左值,必须是线网类型,所以必须使用默认的输出端口

    1.2 行为级描述

    行为级描述,输出端口类型应该使用output reg OUT,使用reg类型。

    因为过程赋值语句的左值必须是寄存器类型

    ANSI C风格的描述如下

    module choose_4to1(
        input d0,d1,d2,d3,
        input add1,add0,
        output reg out	// 注意输出端口的设定
        );
        
        
    endmodule
    

    你也可以将输出端口初始化output reg out = 0

    另外一种端口风格,但是不推荐

    module choose_4to1(d0,d1,d2,d3,add1,add0,out);
        input d0,d1,d2,d3;
        input add1,add0;
        // 以下两条语句才能将out声明为reg类型的输出端口
        output out;
        reg out;
        
        
    endmodule
    

    2 三种描述方式的整体架构

    就像盖房子那样,同样是楼房,使用不同的材料,建造的方式不同,速度也不同。

    下面我对这几种描述进行一个近似比喻:

    • 门级描述:手里只有基本材料,需要先烧制砖头再盖房子
    • 数据流描述:已经有了现成的砖头,只需要将其以合理的方式组合起来
    • 行为级描述:已经有了集成的房子,只需要拼接起来,就像火神山医院那样

    2.1 门级描述

    门级原语:andor……

    门级描述与门级原语为基本单元

    2.2 数据流描述

    连续赋值语句:assign

    数据流描述以连续赋值语句为基本单元

    2.3 行为级描述

    结构化过程语句:initialalways

    行为级描述以结构化过程语句为基本单元

    2.4 补充:独立的语句

    独立的语句指的是

    • 输入输出端口的声明,特别的,reg类型输出端口可以定义的时候初始化,但是输入端口不允许
    module Example (
    	input a,b,
    	output reg OUT = 0	//【这里是关键点!】
    	);
    	
    	<其他内容>
    endmodule
    
    • 内部线网的设定,可以在定义的时候初始化:wire a = 1;
    • 内部变量的声明,可以在定义的时候初始化:reg b = 0;

    2.5 小结

    1. 门级描述:输出部分必须是net类型,门级原语本质是模块实例调用,符合端口连接规则
    2. 数据流描述:左值必须是net类型,右值无要求
    3. 行为级描述:左值必须是reg类型,右值无要求,这里的重点是过程赋值语句的要求,因为它是行为描述的基本单元,就像C语言的变量那样。

    3 理解三种描述方式的本质

    3.1 门级描述

    门级描述,使用门级原语对硬件设计进行描述,它直接反应了逻辑门直接的关系,更加接近底层,接近硬件

    3.2 数据流描述

    数据流描述,描述了输出数据与输入数据之间的逻辑关系,通过逻辑表达式来建立输入输出数据的联系。

    逻辑表达式可以理解为对硬件设计功能的数学表达形式

    3.3 行为级描述

    行为级描述,直接描述硬件设计所能实现的功能,相当于:设计者告诉软件需要实现怎样的功能,由软件自动生成其门机描述。当然,没有那么智能。

    4 理解不同抽象层级描述方式与功能设计之间的联系

    此处,我将会以1位四选一数据选择器的设计为例

    4.1 需求分析 & 行为级描述

    1. 输入四个数据,从四个里面选择一个:d0,d1,d2,d3
    2. 通过地址控制选择哪个:s1,s0

    其行为描述是

    1. 对于输入的数据
    2. 如果地址是00,则输出d0
    3. 否则,如果地址是01,则输出d1
    4. 否则,如果地址是10,则输出d2
    5. 否则,如果地址是11,则输出d3
    6. 否则,输出x

    设计块如下:
    if语句版本的设计块

    module mux_4to1 ( 
        input d0,d1,d2,d3,
        input s1,s0,
        output reg out = 0
        );
        
        always @(*)
        begin
            if ({s1,s0} == 2'b_00)
                out = d0;
            else if ({s1,s0} == 2'b_01)
                out = d1;
            else if ({s1,s0} == 2'b_10)
                out = d2;
            else if ({s1,s0} == 2'b_11)
                out = d3;
            else
                out = 1'bx;
        end
        
    endmodule
    

    case语句版本的设计块

    module mux_4to1 (
        input d0,d1,d2,d3,
        input s1,s0,
        output reg out = 0
        );
        
        always @(*)
        begin
            case({s1,s0})
                2'b00: out = d0;	// 也可写成【2'd0】
                2'b01: out = d1;	// 【2'd1】
                2'b10: out = d2;	// 甚至于你可以直接写【2】
                2'b11: out = d3;	// 【3】
                default: $display("错误!\n"); // 千万别忘记这个
            endcase
        end
    
    endmodule
    

    激励块如下:

    module test4;
    
        reg d0 = 0,d1 = 1,d2 = 0,d3 = 1;
        reg s1,s0;
        wire out;
        
        mux_4to1 MT0 (d0,d1,d2,d3,s1,s0,out);
        
        initial
            $monitor("s1 = %b,  s0 = %b,  out = %b\n",s1,s0,out);
        
        initial
        begin
            #1 s1 <= 0; s0 <= 0;
            
            #1 s1 <= 0; s0 <= 1;
            
            #1 s1 <= 1; s0 <= 0;
            
            #1 s1 <= 1; s0 <= 1;
        end
        
    endmodule
    

    输出结果为:
    结果
    事实上,行为级描述,不仅仅可以适用于1位位宽,更可以直接设置为32位位宽,这是其他描述方式做不到的,他们需要将1位的模块组合成32位的。

    4.2 求逻辑表达式 & 数据流描述

    1. 列出真值表
    2. 求逻辑表达式:
      out = (~s1 & ~s0 & d0) | (~s1 & s0 & d1) | (s1 & ~s0 & d2) | (s1 & s0 & d3)

    逻辑表达式,表示了输出与输入直接的逻辑关系,可以直接使用数据流描述。

    事实上,只有你写得出逻辑表达式,就能使用数据流描述,但是,对于复杂问题往往很难将其逻辑表达式写清楚,并且当今时代有很多集成的模块,完全可以直接调用他们,而没有必要再自己设计,这一点我在后面再进行阐述。

    设计块:
    逻辑表达式版本的设计块

    module mux_4to1(
        input d0,d1,d2,d3,
        input s1,s0,
        output out
        );
        
        assign out = (~s1 & ~s0 & d0) | 
                     (~s1 & s0 & d1)  | 
                     (s1 & ~s0 & d2)  | 
                     (s1 & s0 & d3);
        
    endmodule
    

    条件操作符版本的设计块,这个其实已经和行为级描述类似了。

    module mux_4to1 (
        input d0,d1,d2,d3,
        input s1,s0,
        output out
        );
        
        assign out = s1? (s0? d3:d2):(s0? d1:d0);
        
    endmodule
    

    激励块与仿真结果和行为级一样,不再赘述。

    4.3 画逻辑电路图 & 门级描述

    1. 选择器件
    2. 根据逻辑表达式画出逻辑电路图

    此处选用基本的逻辑门作为器件。

    相比之下,门级描述显得非常复杂,这里不再赘述,请读者自行查阅资料。

    当今时代也很少有人再使用门级描述。

    4.4 小结

    当今时代人们会使用数据流描述和行为级描述,对于某些必要的部分使用门级描述,但是这种情况非常少。

    通常我们使用的是RTL级描述,也就是数据流和行为级描述的混合描述方式。

    我们来观察两条线对比以下

    需求分析___行为级描述
    逻辑表达式___数据流描述
    逻辑电路图___门级描述

    结果显而易见,行为级描述更加简单,提高了效率,但是,由于行为级描述目前没有足够智能,有些事情不能完成,因此我们依然需要数据流描述,但是门级描述几乎已经不需要了。

    5 激励块的特殊设置

    首先,采用分治思想,将激励块和设计块分开看,激励块的输出显示结果,是由激励信号的类型决定的,在符合端口对接规则的前提下,需要对激励信号的数据类型加以修饰,以达到验证输出结果的目的。

    目前我们的激励块是这样是:

    reg d0 = 0,d1 = 1,d2 = 0,d3 = 1;
    reg s1,s0;
    wire out;
    

    如果,我们需要输入的是有符号数,则可以改为reg signed d0;或者integer d0;或者real d0;,请记住,输入端口的reg类型,代表的是一组寄存器类型,而不单单是reg。

    如果我们需要输出的结果显示为十进制的负数,则需要设置为wire signed out;,代表其是有符号数。

    这也充分体现了开篇所说的:一切设计由需求决定

    6 善用科技黑箱:利用行为级描述和集成器件快速完成设计

    科技黑箱就是其他设计者已经开发好的功能,你可以直接拿来使用,以提高开发效率。它也可以是C++中的STL库,Python的库等等。

    同时,我想你也已经感受到三种描述方式在开发效率方面的差别,多多使用RTL级描述,会大大提高设计者的开发效率。

    简而言之,就是把别人做好的东西直接拿来用,帮助你快速完成你设计的东西。

    展开全文
  • (多题 *必答) A 星型拓扑易于维护 B 在星型拓扑中,某条线路的故障不影响其它线路下的计算机通信 C 星型拓扑具有很高的健壮性,不存在单点故障的问题 D 由于星型拓扑结构的网络是共享总线带宽,当网络负载过...

    题目和答案在最下面!

     

    全文转自百度,自己总结方便自己以后查找!

    常见类型:

    1.  星型拓扑
    2.  总线拓扑
    3. 环型拓扑
    4. 树型拓扑
    5. 混合型拓
    6. 网型拓扑
    7. 开关电源拓扑

     

    简单介绍的:

    • 星型

      优点:可靠性高,方便管理,易于扩展,传输效率高

      缺点:线路利用率低,中心节点需要很高的可靠性和冗余度

      计算机网络:常见网络拓扑结构

    • 总线型

      优点:费用较低,易于扩展,线路的利用率高

      缺点:可靠性不高,维护困难,传输效率低

      计算机网络:常见网络拓扑结构

    • 环型

      优点:令牌控制,没有线路竞争,实时性强,传输控制容易

      缺点:维护困难,可靠性不高

      计算机网络:常见网络拓扑结构

    • 网状

      优点:可靠性高,易于扩充,组网灵活

      缺点:费用高,结构复杂,维护困难

      计算机网络:常见网络拓扑结构

    • 树型

      优点:成本低,易于扩充,管理较方便,故障隔离较容易。

      缺点:根节点依赖性大,如发生故障,则全网不能正常工作。

      计算机网络:常见网络拓扑结构

    • 混合型

      优点:易于拓展,安装方便,故障诊断和隔离较为方便

      缺点:建设成本比较高,依赖于中心节点

    • 计算机网络:常见网络拓扑结构

    详细点的:

    星型拓扑

    星型拓扑

    星型拓扑是由中央节点和通过点到点通信链路接到中央节点的各个站点组成。中央节点执行集中式通信控制策略,因此中央节点相当复杂,而各个站点的通信处理负担都很小。星型网采用的交换方式有电路交换报文交换,尤以电路交换更为普遍。这种结构一旦建立了通道连接,就可以无延迟地在连通的两个站点之间传送数据。目前流行的专用交换机PBX (Private Branch exchange)就是星型拓扑结构的典型实例。

    星型拓扑结构的优点

    (1)结构简单,连接方便,管理和维护都相对容易,而且扩展性强。

    (2)网络延迟时间较小,传输误差低。

    (3)在同一网段内支持多种传输介质,除非中央节点故障,否则网络不会轻易瘫痪。

    (4)每个节点直接连到中央节点,故障容易检测和隔离,可以很方便地排除有故障的节点。

    因此,星型网络拓扑结构是目前应用最广泛的一种网络拓扑结构

    星型拓扑结构的缺点

    (1)安装和维护的费用较高

    (2)共享资源的能力较差

    (3)一条通信线路只被该线路上的中央节点和边缘节点使用,通信线路利用率不高

    (4)对中央节点要求相当高,一旦中央节点出现故障,则整个网络将瘫痪。

    星型拓扑结构广泛应用于网络的智能集中于中央节点的场合。从目前的趋势看,计算机的发展已从集中的主机系统发展到大量功能很强的微型机和工作站,在这种形势下,传统的星型拓扑的使用会有所减少。

    总线拓扑

    总线拓扑

    总线拓扑结构采用一个信道作为传输媒体,所有站点都通过相应的硬件接口直接连到这一公共传输媒体上,该公共传输媒体即称为总线。任何一个站发送的信号都沿着传输媒体传播,而且能被所有其它站所接收。

    因为所有站点共享一条公用的传输信道,所以一次只能由一个设备传输信号。通常采用分布式控制策略来确定哪个站点可以发送o发送时,发送站将报文分成分组,然后逐个依次发送这些分组,有时还要与其它站来的分组交替地在媒体上传输。当分组经过各站时,其中的目的站会识别到分组所携带的目的地址,然后复制下这些分组的内容。

    总线拓扑结构的优点

    (1)总线结构所需要的电缆数量少,线缆长度短,易于布线和维护。

    (2)总线结构简单,又是元源工作,有较高的可靠性。传输速率高,可达1~100Mbps。

    (3)易于扩充,增加或减少用户比较方便,结构简单,组网容易,网络扩展方便

    (4)多个节点共用一条传输信道,信道利用率高。

    总线拓扑的缺点

    (1)总线的传输距离有限,通信范围受到限制。

    (2)故障诊断和隔离较困难。

    (3)分布式协议不能保证信息的及时传送,不具有实时功能。站点必须是智能的,要有媒体访问控制功能,从而增加了站点的硬件和软件开销。

    环型拓扑

    环形拓扑

    在环型拓扑中各节点通过环路接口连在一条首尾相连的闭合环型通信线路中,环路上任何节点均可以请求发送信息。请求一旦被批准,便可以向环路发送信息。环型网中的数据可以是单向也可是双向传输。由于环线公用,一个节点发出的信息必须穿越环中所有的环路接口,信息流中目的地址与环上某节点地址相符时,信息被该节点的环路接口所接收,而后信息继续流向下一环路接口,一直流回到发送该信息的环路接口节点为止。

    环型拓扑的优点

    (1)电缆长度短。环型拓扑网络所需的电缆长度和总线拓扑网络相似,但比星形拓扑网络要短得多。

    (2)增加或减少工作站时,仅需简单的连接操作。

    (3)可使用光纤。光纤的传输速率很高,十分适合于环型拓扑的单方向传输。

    环型拓扑的缺点

    (1)节点的故障会引起全网故障。这是因为环上的数据传输要通过接在环上的每一个节点,一旦环中某一节点发生故障就会引起全网的故障。

    (2)故障检测困难。这与总线拓扑相似,因为不是集中控制,故障检测需在网上各个节点进行,因此就不很容易。

    (3)环型拓扑结构的媒体访问控制协议都采用令牌传递的方式,在负载很轻时,信道利用率相对来说就比较低。

    树型拓扑

    树形拓扑

    树型拓扑可以认为是多级星型结构组成的,只不过这种多级星型结构自上而下呈三角形分布的,就像一颗树一样,最顶端的枝叶少些,中间的多些,而最下面的枝叶最多。树的最下端相当于网络中的边缘层,树的中间部分相当于网络中的汇聚层,而树的顶端则相当于网络中的核心层。它采用分级的集中控制方式,其传输介质可有多条分支,但不形成闭合回路,每条通信线路都必须支持双向传输。

    树型拓扑的优点

    (1)易于扩展。这种结构可以延伸出很多分支和子分支,这些新节点和新分支都能容易地加入网内。

    (2)故障隔离较容易。如果某一分支的节点或线路发生故障,很容易将故障分支与整个系统隔离开来。

    树型拓扑的缺点

    各个节点对根的依赖性太大,如果根发生故障,则全网不能正常工作。从这一点来看,树型拓扑结构的可靠性有点类似于星型拓扑结构。

    混合型拓扑

    混合型结构

    混合型拓扑是将两种单一拓扑结构混合起来,取两者的优点构成的拓扑。

    一种是星型拓扑和环型拓扑混合成的"星-环"拓扑,另一种是星型拓扑和总线拓扑混合成的"星-总"拓扑。

    这两种混合型结构有相似之处,如果将总线拓扑的两个端点连在一起也就变成了环型拓扑。

    在混合型拓扑结构中,汇聚层设备组成环型或总线型拓扑,汇聚层设备和接入层设备组成星型拓扑。

    混合型拓扑的优点

    (1)故障诊断和隔离较为方便。一旦网络发生故障,只要诊断出哪个网络设备有故障,将该网络设备和全网隔离即可。

    (2)易于扩展。要扩展用户时,可以加入新的网络设备,也可在设计时,在每个网络设备中留出一些备用的可插入新站点的连接口。

    (3)安装方便。网络的主链路只要连通汇聚层设备,然后再通过分支链路连通汇聚层设备和接入层设备。

    混合型拓扑的缺点

    (1)需要选用智能网络设备,实现网络故障自动诊断和故障节点的隔离,网络建设成本比较高。

    (2)像星型拓扑结构一样,汇聚层设备到接入层设备的线缆安装长度会增加较多。

    网型拓扑

    网型拓扑。这种结构在广域网中得到了广泛的应用,它的优点是不受瓶颈问题和失效问题的影响。由于节点之间有许多条路径相连,可以为数据流的传输选择适当的路由,从而绕过失效的部件或过忙的节点。这种结构虽然比较复杂,成本也比较高,提供上述功能的网络协议也较复杂,但由于它的可靠性高,仍然受到用户的欢迎。

    网型拓扑的一个应用是在BGP协议中。为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系,即网状网络。假设在一个AS内部有n台路由器,那么应该建立的IBGP连接数就为n(n-1)/2个。

    网型拓扑的优点

    (1)节点间路径多,碰撞和阻塞减少。

    (2)局部故障不影响整个网络,可靠性高。

    网型拓扑的缺点

    (1)网络关系复杂,建网较难,不易扩充。

    (2)网络控制机制复杂,必须采用路由算法和流量控制机制。

    开关电源拓扑

    随着PWM技术的不断发展和完善,开关电源以其高的性价比得到了广泛的应用。开关电源的电路拓扑结构很多,常用的电路拓扑有推挽、全桥、半桥、单端正激和单端反激等形式。其中, 在半桥电路中,变压器初级在整个周期中都流过电流,磁芯利用充分,且没有偏磁的问题,所使用的功率开关管耐压要求较低,开关管的饱和压降减少到了最小,对输入滤波电容使用电压要求也较低。由于以上诸多原因,半桥式变换器在高频开关电源设计中得到广泛的应用。

    开关电源常用的基本拓扑约有14种。

    每种拓扑都有其自身的特点和适用场合。一些拓扑适用于离线式(电网供电的)AC/DC变换器。其中有些适合小功率输出(<200W),有些适合大功率输出;有些适合高压输入(≥220V AC),有些适合120V AC或者更低输入的场合;有些在高压直流输出(>~200V)或者多组(4~5组以上)输出场合有的优势;有些在相同输出功率下使用器件较少或是在器件数与可靠性之间有较好的折中。较小的输入/输出纹波和噪声也是选择拓扑经常考虑的因素。

    一些拓扑更适用于DC/DC变换器。选择时还要看是大功率还是小功率,高压输出还是低压输出,以及是否要求器件尽量少等。另外,有些拓扑自身有缺陷,需要附加复杂且难以定量分析的电路才能工作。

    因此,要恰当选择拓扑,熟悉各种不同拓扑的优缺点及适用范围是非常重要的。错误的选择会使电源设计一开始就注定失败。

    开关电源常用拓扑:

    buck开关型调整器拓扑 、boost开关调整器拓扑 、反极性开关调整器拓扑 、推挽拓扑 、正激变换器拓扑 、双端正激变换器拓扑 、交错正激变换器拓扑 、半桥变换器拓扑 、全桥变换器拓扑 、反激变换器 、电流模式拓扑和电流馈电拓扑 、SCR振谐拓扑 、CUK变换器拓扑

    开关电源各种拓扑集锦先给出六种基本DC/DC变换器拓扑

    依次为buck,boost,buck-boost,cuk,zeta,sepic变换器

    树型拓扑的缺点:

    各个节点对根的依赖性太大。

     

     

    以下关于星型网络拓扑结构的描述正确的是______。 (多选题 *必答)

    •  A 星型拓扑易于维护
    •  B 在星型拓扑中,某条线路的故障不影响其它线路下的计算机通信
    •  C 星型拓扑具有很高的健壮性,不存在单点故障的问题
    •  D 由于星型拓扑结构的网络是共享总线带宽,当网络负载过重时会导致性能下降

    A:跟B一个道理

    B:对呀,因为是一个网路一根线

    C:分开的线,出错就是单点故障啦!

    D:不是,Hub连接总线型共享总线带宽 集线器(Hub)

    展开全文
  • CSS结构伪类选择

    万次阅读 多人点赞 2018-01-11 20:08:37
    结构伪类选择 结构伪类选择,可以根据元素在文档中所处的位置,来动态选择元素,从而减少HTML文档对ID或类的依赖,有助于保持代码干净整洁。 表 2-6 结构伪类选择 选择 功能描述 版本 E:last-...

    结构伪类选择器,可以根据元素在文档中所处的位置,来动态选择元素,从而减少HTML文档对ID或类的依赖,有助于保持代码干净整洁。

    表 2-6 结构伪类选择器
    选择器功能描述版本
    E:last-child选择父元素的倒数第一个子元素E,相当于E:nth-last-child(1)3
    E:nth-child(n)选择父元素的第n个子元素,n从1开始计算3
    E:nth-last-child(n)选择父元素的倒数第n个子元素,n从1开始计算3
    E:first-of-type选择父元素下同种标签的第一个元素,相当于E:nth-of-type(1)3
    E:last-of-type选择父元素下同种标签的倒数第一个元素,相当于E:nth-last-of-type(1)3
    E:nth-of-type(n)与:nth-child(n)作用类似,用作选择使用同种标签的第n个元素3
    E:nth-last-of-type与:nth-last-child作用类似,用作选择同种标签的倒数第一个元素3
    E:only-child选择父元素下仅有的一个子元素,相当于E:first-child:last-child或E:nth-child(1):nth-last-child(1)3
    E:only-of-type选择父元素下使用同种标签的唯一子元素,相当于E:first-of-type:last-of-type或E:nth-of-type(1):nth-last-of-type(1)3
    E:empty选择空节点,即没有子元素的元素,而且该元素也不包含任何文本节点3
    E:root选择文档的根元素,对于HTML文档,根元素永远HTML3

    结构伪类选择器很容易遭到误解,需要特别强调。如,p:first-child表示选择父元素下的第一个子元素 p,而不是选择 p 元素的第一个子元素。

    需要注意的是,结构伪类选择器中,子元素的序号是从 1 开始的,也就是说,第一个子元素的序号是 1,而不是 0。换句话说,当参数 n 的计算结果为 0 时,将不选择任何元素。

    接下来,简单介绍 :first-child、:last-child、:nth-child、:nth-of-type、:empty 这几个选择器,其他选择器的功能在表格中已经描述清楚,不再赘述。

    E:first-child 和 E:last-child

    :first-child 和 :last-child分别用于选择元素的子元素中,符合条件的第一个和最后一个子元素。:first-child 伪类在CSS2就已经存在,:last-child 伪类是CSS3新增的伪类。

    如,对于下面的 tab 菜单,希望该 tab 菜单的第一个元素的左上角,和最后一个元素的右上角应用圆角。HTML代码如下:

    1. <ul class = "tabMenu">
    2. <li><a href="# ">公司介绍</a></li>
    3. <li><a href="# ">产品中心</a></li>
    4. <li><a href="# ">新闻动态</a></li>
    5. </ul>

    在CSS3之前,直接选取 class 为 tab 元素的第一个或最后一个子元素,是不可能的。现在,通过 :first-child 和 :last-child 伪类,就可以轻松实现。CSS代码如下:

    1. .tabMenu li:first-child {
    2. border-top-left-radius: 5px;
    3. }
    4. .tabMenu li:last-child {
    5. border-top-right-radius: 5px;
    6. }

    上述代码的运行结果如图 2‑19 所示:

    first-child和last-child伪类图2-19 first-child和last-child伪类

    E:nth-child(n)

    E:nth-child(n) 用于选择某个父元素的一个或多个特定的子元素。n 表示不确定的数字,th 是英语中序数词的后缀。因此,nth-child 就表示第 n 个子元素。该选择器的参数 n 可以是数字、公式或关键字:

    1)数字:可以是任何大于 0 的正整数。如,.tab li:nth-child(2),表示选择 class 为 .tab 的父元素下,第 2 个 li 子元素。

    2)公式:格式为 (an + b)。其中,a表示周期的长度,n 是计数器(从 0 开始),b 是偏移值。如,:nth-child(n+4) 选取序号大于等于 4 的元素,:nth-child(-n+4) 选取序号小于等于 4 的元素,:nth-child(2n) 选取序号为偶数的元素,:nth-child(2n+1) 选取序号为奇数的元素,:nth-child(3n) 选取序号为3、6、9…的子元素(即“隔二选一”),:nth-child(3n+1) 选取序号为1、4、7、10…的子元素,等等。

    3)关键字:只有odd 和 even 两个关键字。odd表示选取序号为奇数的元素,效果等同于 :nth-child(2n-1) 和 :nth-child(2n+1);even表示选取序号为偶数的元素,效果等同于 :nth-child(2n)。

    E:nth-of-type(n)

    :nth-of-type(n) 与 :nth-child(n) 的作用和使用方法完全相同,唯一不同的是,它用来选择某个父元素下,指定类型的一个或多个特定的子元素。

    E:empty

    选择空节点,即不包含任何子元素的元素,也就是内容为空白的元素。因为文本节点本身也被看作子元素,所以,包含文本节点的元素就不是空元素,哪怕是一个空格。如:

    1. <div>
    2. <p>我包含文本节点,我不是空元素</p>
    3. <p></p>
    4. </div>

    对上述HTML代码调用样式如下:

    1. p:empty {
    2. height: 25px;
    3. background: #eee;
    4. border: 1px solid #f90;
    5. }

    上述HTML代码中,由于最后一个 p 元素是空节点,则会被 p:empty 选择器选中。于是,它就会表现为一个高度为 25px,背景色为灰色,带有1px 的橙色边框的矩形框。运行结果如图 2‑20 所示:

    E:empty运行结果图2-20 E:empty运行结果

    :nth-child 与 :nth-of-type 的区别:

    :nth-child 和 :nth-of-type 都能选择子元素,它们到底有什么区别呢?

    区别其实也很简单,E:nth-child(n) 是把所有子元素作为选择对象,选择其中的第n个子元素,且这个子元素的类型必须是 E,如果不是,则选择失败。而 E:nth-of-type(n) 则先把类型为E的所有子元素选择出来,从1开始编号,然后把这些子元素作为选择对象,选择其中的第n个。假如有以下HTML代码片段: 

    1. <div>
    2. <ul class="demo">
    3. <p>zero</p>
    4. <li>one</li>
    5. <li>two</li>
    6. </ul>
    7. </div>

    上述代码中,.demo li:nth-child(2)是从 .demo 的所有子元素中找第二个子元素,且第二个子元素的类型必须是 li,选择结果为<li>one</li>节点;.demo li:nth-of-type(2) 先把 .demo 的所有类型为 li 的子元素找出来,然后选择其中的第 2 个,选择结果为 <li>two</li> 节点。

    关于作者

    歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、《Bootstrap2用户指南》、《Bootstrap3实用教程》,并全部在 GitHub 上开源。


    展开全文
  • 当我们使用Verilog HDL代码来描述硬件功能的时候,可采用三种不同方式或混合方式对设计进行建模,这些方式包括:结构化方式—使用门和模块实例语句描述建模;数据流方式—使用连续赋值语句方式建模;行为描述方式—...

    当我们使用Verilog HDL代码来描述硬件功能的时候,可采用三种不同方式或混合方式对设计进行建模,这些方式包括:结构化方式—使用门和模块实例语句描述建模;数据流方式—使用连续赋值语句方式建模;行为描述方式—使用过程化结构建模。

    1. 结构化方式

    在这里插入图片描述

    1.1门级结构建模(内置门原语)

    Verilog HDL 中有关门类型的关键字共有26个,下面列举了8个基本的门类型(gatetype)关键字和它们所代表门的类型:

    and——与门;
    nand——与非门;
    nor——或非门;
    or——或非门;
    xor——异或门;
    xnor——异或非门;
    buf——缓冲器;
    not——非门;

    门与开关的说明语法可以用标准的声明语句格式和一个简单的实例引用加以说明。

    门声明语句格式如下:

    <门的类型> [<驱动能力><延时>] <门实例1>[,<门实例2>,……,<门实例n>];

    nand #10 nd1(a,data,clock,clear);

    门的类型是门声明语句所必须的,它可以是Verilog HDL 语法规定的26种门类型中的任意一种。上述该例说明在模块中声明了nand与非门语句。

    驱动能力和延时是可选项,可根据不同的情况选不同的值或不选。上述该例中#10说明输出与输入延时了10个单位时间。

    <门实例1>是在本模块中引用的第一个这种类型的门,而<门实例n>是引用的第n个这种类型的门。上述该例在模块中使用了一个名为nd1的与非门,输入为data,clock和clear,输出为a。(在声明门实例时可能编译会报错。)

     逻辑图:

    在这里插入图片描述

     模块代码示例(1位全加器对应上述逻辑图):

    module FA_Str(A,B,Cin,Sum,Cout);
    
    input A,B,Cin;
    output Sum,Cout;
    
    /*门实例由线网类型变量S1,T1,T2和T3互连*/
    wire S1,T1,T2,T3;
    
    /*由于没有指定顺序,门实例语句可以以任何顺序出现*/
    /*X1,X2,A1等都是实例名称,紧跟在每个门后的信号列表是它的互连*/
    /*列表中的第一个是门的输出,余下的是输入*/
    	xor 
    			X1(S1,A,B),				//注意结束时用逗号,最后才用分号
    			X2(Sum,S1,Cin);      //表示X1和X2都是xor异或门
    	 
    	 
    	and 
    			A1(T3,A,B),
    			A2(T2,B,Cin),
    			A3(T1,A,Cin);
    
    	or
    		 O1(Count,T1,T2,T3);
    
    endmodule
    
    

    在这个结构描述的模块中,FA_Str定义了模块名,设计上层模块时可以用模块名(FA_Str)调用这个模块。

     由已经设计成的模块构成更高一层的模块

    如果已经编制了一个模块,如上例中的FA_Str,可以在另外的模块中引用这个模块,引用的方法与门类型的实例引用非常类似,只须在前面写上已编的模块名,紧跟着写上引用的实例名,按顺序写上实例的端口名即可,也可以用已编模块的端口名按对应原则逐一填入,详见以下两种语句:(注意在FA_Str1实例中端口已经申明,只须将对应信号的连接点注明)

    (1)FA_Str FA_Str1(FA[1],FB[1],FTemp[1],FSum[1],FCount[1]);

    (2)FA_Str FA_Str1(.B(FB[1]),.A(FA[1]),.Cin(FCin),.Sum(FSum[1]),.Count(FTemp[2]))

    这两条语句都表示实例FA_Str1引用已编模块FA_Str,也可以将FA_Str实例化了FA_Str1。从上面两条语句可以看出在引用实例时,FA_Str1的端口信号与FA_Str的端口对应有两种不同的表示方法,即模块实例化的端口名可以有序排列,也可以不必按序排列,如果模块的端口名按序排列,只须按序列出实例的端口名(见语句1),如果不按序排列,则实例的端口信号和被引用模块的端口信号必须一一列出。(见语句2)

     逻辑图

    在这里插入图片描述

     模块代码实例(4位全加器对应上面逻辑图)

    /*四位全加器使用4个1位全加器模块描述*/
    
    module FourBitFA(FA,FB,FCin,FSum,FCout);
    
    parameter SIZE = 4;
    
    input [SIZE:1] FA,FB;
    output [SIZE:1] FSum;
    input FCin;
    input FCout;
    
    wire [1:SIZE-1] FTemp;
    
    /*在模块实例语句中,端口可以与名称或位置关联*/
    
    FA_Str
    
    /*FA1和FA2使用命名关联方式,也就是说端口的名称和它
    连接的线网被显示描述(每一个的形式都为“.port_name(net_name)”)*/
    
    /*如果不需要FA_Str端口的的某个端口,可以在FA1和FA2端口中省去,
    即可以在FA1和FA2中不出现某端口*/
    
    FA1(.A(FA[1]),.B(FB[1]),.Cin(FCin),.Sum(FSum[1]),.Cout(FTemp[2])),
    FA2(.A(FA[2]),.B(FB[2]),.Cin(FTemp[1]),.Sum(FSum[2]),.Cout(FTemp[2])),
    
    /*FA3和FA4使用位置关联方式将端口与线网关联,这里的关联顺序很重要,
    必须一一对应,例如在实例FA4中,第一个FA[4]与FA_Str的端口A连接,
    第二个FB[4]与FA_Str的端口B连接,余下的一一对应,由此类推。*/
    
    /*如果不需要FA_Str端口的的某个端口,可以在FA3和FA4端口中省去,但逗号依然保留。
    如,FA3(FA[3],FB[3],,FSum[3],FTemp[3])*/
    
    FA3(FA[3],FB[3],FTemp[2],FSum[3],FTemp[3]),
    FA4(FA[4],FB[4],FTemp[3],FSum[4],FCout);
    
    endmodule
    
    

    显而易见,通过模块实例引用,可以构成任何复杂结构的电路。这种以结构方式所建立的Verilog模型不仅可以仿真,也是可以综合的,其本质表示电路的具体结构,也就是说,这种Verilog文件也是一种结构网表。

    1.2开关级结构建模

    通过调用Verilog HDL内部的基本开关元件来对硬件电路的结构进行说明,这种情况下的模块由基本的开关级元件实例组成,这种抽象程度更低,基本不用掌握。

    nmos 实例名(out,data,ctrl);
    pmos 实例名(out,data,ctrl);
    supply1 vdd;源极(逻辑1)
    supply0 vdd;地级(逻辑0);

    1.3用户定义的原语(UDP)

    and,or,not等逻辑门是Verilog HDL 自带的内建语法,对这些门的描述是以原语的形式在Verilog HDL中定义的,即内置原语。

    在实际设计中,有时会需要使用自己编写的原语,这种原语就是用户自定义原语(User Defined Primitive ,UDP),也就是说可以利用UDP来定义自己用于仿真的基本逻辑元件模块并建立相应的原语库,这样就可以与调用Verilog HDL基本逻辑元件一样的方法来调用原语库中的相应元件模块,并进行仿真。

    与一般的用户模块相比,UDP更为基本,它只能简单描述简单的能用真值表表示的组合或时序逻辑。UDP模块结构与一般模块类似,只是不用module而改用primitive关键词开始,以endprimitive关键词结束。

     定义UDP语法

    primitive 元件名(输出端口名,输入端口名1,输入端口名2……)
    output 输出端口名;
    input 输入端口名1,输入端口名2,……;
    
    reg 输出端口名;
    initial begin
         输出端口寄存器或时序逻辑内部寄存器赋初值(0,1或X);
    end
    //这两行在时序UDP中使用
    table
    //输入1   输入2   输入3   ……   :   输出
     逻辑值   逻辑值   逻辑值   ……   :  逻辑值;
    逻辑值   逻辑值   逻辑值   ……   :  逻辑值;
    逻辑值   逻辑值   逻辑值   ……   :  逻辑值;
    ……      ……     ……    ……   :   ……;
    endtable
    endprimitive
    
    

     注意点

    (1) UDP只能有一个输出端,而且必定是端口说明列表的第一项。

    Output a,b;//多个输出违法

    (2) UDP可以有多个输入端,最多允许有10个输入端。

    Input d3,d2,d2,d0;//合法

    (3) UDP所有端口变量必须是标量,也就是必须是1位的。

    Output [1:0] c;//多位输出违法
    Input [3:0] d;//多位输入违法

    (4) 时序电路的UDP需要保存状态,所以时序电路UDP的输出端口要声明为reg类型,且只有输出端才可以被定义成reg型变量。

    (5) Initial语句用于为时序电路内部寄存器赋初值,该语句可选,且只允许赋0,1,X3种逻辑值,默认值为X。

    (6) UDP与module同级别,所以模块内部不能定义UDP,但可以在模块内调用已定义的UDP,语法与门级调用完全相同。

    (7) UDP的真值表项可以处理0,1,X值,不能处理Z值,本身UDP不能输出Z值,输入给UDP的Z值会被当做X值来处理。

    (8) UDP中不能使用inout端口。

     二输入与非门(UDP)

    primitive nand_udp(Y,A,B);
    
    
    output Y;
    input A,B;
    
    table
    
    /*输入信号1   输入信号2  :  输出信号;*/
    	/*A B : Y,输入信号的顺序一定和UDP端口列表中的输入信号顺序相同*/
    	  0 0 : 1;
    	  0 1 : 1;
    	  1 0 : 1;   //输入和输出之间以“:”分开隔开,每一行结束处以“;”结束。
    	  1 1 : 0;
    /*状态表中要包含所有确定输出的输入情况,即做到	 每种可以得到确定
    输出值的输入都有对应的列表行与之相对应。*/ 
    endtable
    
    endprimitive
    
    

    Top-down流程

    在这里插入图片描述

    展开全文
  • p7结构的数字信封

    千次阅读 2012-08-23 16:17:00
    下面我就详细的解释一下,这两种数字信封的生成过程和其详细的数据结构。 首先是不带签名的数字信封。 不带签名的数字信封内容类型由任意类型的加密内容和加密的个/多个接收者的内容加密密钥组成,其生成过程...
  • 数据结构—— 一元多项式的加法运算

    万次阅读 多人点赞 2019-09-24 12:01:56
    0.问题描述 在数学上,个一元n次多项式 可按降序写成: 它由n+1个系数唯一确定,因此,在计算机里他可以用个线性表表示: 设Pn(x)和Qn(x)分别为两个一元多项式,请求出两个一元多项式的加法运算的结果,要求...
  • 个form表单中的结构是这样的: 则页面显示结果是: 如上填写数据,经过序列化后的数据是: [ {"id":"1","infoType":"11","infoName":"名称1"...
  •  *数据结构【线性表(二)链表】项目之猴子大王  *Copyright (c) 2015 烟台大学计算机与控制工程学院  *All right reserved.  *文件名称:danlianbiao.cpp  *标题:数据结构【线性表(二)链表】项目之猴子...
  • 超硬核!数据结构学霸笔记,考试面试吹牛就靠它

    万次阅读 多人点赞 2021-03-26 11:11:21
    上次发操作系统笔记,很快浏览上万,这次数据结构比上次硬核的多哦,同样的会发超硬核代码,关注吧。
  • 41选择设计

    千次阅读 2020-12-09 00:10:51
    在Logisim中利用上一关的21选择级联设计个41多路选择。 相关知识 多路选择又称数据选择或多路开关(MUX,Multiplexer),在多路数据传送过程中,能够根据需要将其中任意一路出来送到输出的的电路。 ...
  • 进程控制块PCB结构 task_struct 描述

    千次阅读 2014-04-10 14:13:55
    进程控制块PCB结构 task_struct 描述 分类: linux内核基础2013-09-16 10:46 644人阅读 评论(4) 收藏 举报 进程控制块pcbtask_struct 注:本分类下文章大多整理自《深入分析linux内核源代码》...
  • 该文章主要讲解如何识别复框CheckBox和单选按钮RadioButton 单选按钮RadioButton复框CheckBox查找元素异常情况汇总: 单选按钮RadioButton 单选按钮也可以通过Click()方法打开 使用网页...
  • 、哈希表的扩容和减容 在了解哈希表的扩容之前,我们来了解个概念,叫做填充因子,它表示的是哈希表中的数据个与哈希表长度的比值。其决定了哈希表的存取数据所需的时间大小。 当我们用第种解决冲突的办法...
  • MP4()-结构

    万次阅读 2013-12-09 14:47:11
    本文转载自网络,不过没找到原文在哪,感谢写这篇博文的哥们   、基本概念 1.mp4概述 MP4文件中的所有数据都装在box(QuickTime中为atom)中,也就是说MP4文件由若干个box组成...个MP4文件首先会有且只有
  • 约瑟夫环(猴子大王)C/C++

    千次阅读 2018-12-04 20:14:34
    [求助]C++经典问题:N个人围坐圈,从第个人开始顺序报到3的人出圈,出圈后的下个人继续从1开始报,以此类推。求最后的出圈序列.) 0.思路:分析题目,最后只会剩下个人,在此之前让他们从1挨个往后报...
  • 个彩票的模拟程序:307。随机(1~30之间)生成7个随机数,注意不能重复。然后从键盘输入7个,对比7个是否与随机数有相同的。最后显示“中了几个号”。同时,如果中了7个号,显示一等奖;如果中了6个号,...
  • 本博文参考:《从算法设计到硬件逻辑实现》,仅供学习交流使用。...这种以结构方式所建立的硬件模型不仅是可以仿真的,也是可综合的,这就是以门级为基础的结构描述建模的基本思路。        
  • 先贴灵感来源:添加链接描述 **问题描述:**在写编辑信息弹窗时,性别的值一直不能根据v-model的值选中,但是用{{editForm.sex}}是能正确打印出单选框的label值的。 以下是我的代码: 模板: <el-radio-group v-...
  • 2019数据结构考研()

    万次阅读 多人点赞 2018-09-17 13:45:27
    数据:数据是信息的载体,是所有能描述事物属性的,字符以及所有能输入到计算机被计算机程序识别和处理的符号的集合 数据元素:数据元素是数据的基本单位 数据项:数据项是构成数据元素不可分割的最小单位注意:不要...
  • Oracle-Oracle数据库结构

    万次阅读 2017-06-02 13:16:32
    再谈Oracle数据库结构之前写了篇文章《Oracle-知识结构漫谈》 粗略的介绍了Oracle数据库接口,在这里再更加详细的描述一下,当做是对原有知识的巩固,温故知新。Oracle体系结构数据库的体系结构是从某个角度来...
  • 逻辑结构:是指数据元素之间的逻辑关系,从逻辑关系上描述信息。 存储结构(又称物理结构):数据结构在计算机中的表示(又称映像)。 很好理解,但是光靠这些官话,做题保准做个错个 不信?下面放一道题: ...
  • 个简单PDF文件的结构分析

    万次阅读 热门讨论 2006-01-09 00:00:00
    个简单的PDF文件结构的分析 Adobe的PDF参考告诉我们个PDF文件可以通过下面4个方面来理解: 1. 对象, 个PDF文档是由组基本数据类型组成的数据结构。 2. 文件(物理结构), 决定对象是如何存放在个PDF...
  • 前面在 Linux 字符设备驱动开发基础 (三)—— ... struct file{...} ,下面来介绍另个比较重要数据结构 struct _file_operations struct _file_operations在Fs.h这个文件里面被定义的,如下所示: struct file_ope
  • 由多路选择的VHDL描述入门VHDL

    千次阅读 2016-12-08 17:48:32
    选一多路选择 VHDL描述: 1、顺序语句结构:library ieee; use ieee.std_logic_1164.all;entity mux21a is port(a,b:in bit; s:in bit; y:out bit); end entity mux21a;architecture one of mux21a is ...
  • C语言的种程序结构

    万次阅读 多人点赞 2018-01-02 12:13:59
    1、顺序结构 顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。例如;a = 3,b = 5,现交换a,b的值,这个问题就好像交换两个杯子水,这当然要用到第...
  • USB设备中有大类就是HID设备,即Human Interface Devices,人机接口设备。这类设备包括鼠标、键盘等,主要用于人与计算机...在USB协议中,HID设备的定义放置在接口描述符中,USB的设备描述符和配置描述符中不包含H...
  • 指出依序访问图4-61中的伸展树中关键字3,9,1,5后的结果。  图4-61 1.原理 这里主要涉及到两种旋转方式: ...之子型旋转是两次单旋转的组合,而且都可以看成是将目标节点父节点的转(后面实例进行说明)
  • 设计个算法,将个带头结点的单链表分解成两个具有相同结构的 链表B和C,其中B白哦的结点为A中小于0的结点,C表的结点为A中大于0 的结点, 要求B和C 仍利用A表的结点。 (A表的元素都是非0元素) */ 算法思想:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 312,718
精华内容 125,087
关键字:

结构描述四选一数选器