您身边的网站建设专家
成功案例

【建站服务】海口爱采购会员/58同城会员账户/百度竞价开户/百家号注册运营/推广公司网站-网站营销全网推广-域名申请

日期: 2022-09-21 03:18:41 浏览数:3


​

上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。


海口爱采购会员/58同城会员账户/百度竞价开户/百家号注册运营/推广公司网站-网站营销全网推广

网站建设.png

路来说,常见的避免竞争与冒险的方法主要有 4 种。


1)增加滤波电容,滤除窄脉冲

此种方法需要在输出端并联一个小电容,将尖峰脉冲的幅度削弱至门电路阈值以下。


此方法虽然简单,但是会增加输出电压的翻转时间,易破坏波形。


2)修改逻辑,增加冗余项

利用卡诺图,在两个相切的圆之间,增加一个卡诺圈,并加在逻辑表达式之中。


如下图所示,对数字逻辑 Y = A'B' + AC 增加冗余项 B'C,则此电路逻辑可以表示为 Y = A'B' + AC + B'C。此时电路就不会再存在竞争与冒险。




3)使用时钟同步电路,利用触发器进行打拍延迟

同步电路信号的变化都发生在时钟边沿。对于触发器的 D 输入端,只要毛刺不出现在时钟的上升沿并且不满足数据的建立和保持时间,就不会对系统造成危害,因此可认为 D 触发器的 D 输入端对毛刺不敏感。 利用此特性,在时钟边沿驱动下,对一个组合逻辑信号进行延迟打拍,可消除竞争冒险。


延迟一拍时钟时,会一定概率的减少竞争冒险的出现。实验表明,最安全的打拍延迟周期是 3 拍,可有效减少竞争冒险的出现。


当然,最终还是需要根据自己的设计需求,对信号进行合理的打拍延迟。


为说明对信号进行打拍延迟可以消除竞争冒险,我们建立下面的代码模型。


实例

module competition_hazard

    (

      input             clk ,

      input             rstn ,

      input             en ,

      input             din_rvs ,

      output reg        flag

    );


    wire    condition = din_rvs & en ;  //combination logic

    always @(posedge clk or negedge !rstn) begin

        if (!rstn) begin

            flag   <= 1'b0 ;

        end

        else begin

            flag   <= condition ;

        end

    end


endmodule

testbench 描述如下:


实例

`timescale 1ns/1ns


module test ;

    reg          clk, rstn ;

    reg          en ;

    reg          din_rvs ;

    wire         flag_safe, flag_dgs ;


    //clock and rstn generating

    initial begin

        rstn              = 1'b0 ;

        clk               = 1'b0 ;

        #5 rstn           = 1'b1 ;

        forever begin

            #5 clk = ~clk ;

        end

    end


    initial begin

        en        = 1'b0 ;

        din_rvs   = 1'b1 ;

        #19 ;      en        = 1'b1 ;

        #1 ;       din_rvs   = 1'b0 ;

    end


ale 1ns/1ns


module test ;

    reg          clk, rstn ;

    reg          en ;

    reg          din_rvs ;

    wire         flag_safe, flag_dgs ;


    //clock and rstn generating

    initial begin

        rstn              = 1'b0 ;

        clk               = 1'b0 ;

        #5 rstn           = 1'b1 ;

        forever begin

            #5 clk = ~clk ;

        end

    end


    initial begin

        en        = 1'b0 ;

        din_rvs   = 1'b1 ;

        #19 ;      en        = 1'b1 ;

        #1 ;       din_rvs   = 1'b0 ;

    end


    competition_hazard         u_dgs

     (

      .clk              (clk           ),

      .rstn             (rstn          ),

      .en               (en            ),

      .din_rvs          (din_rvs       ),

      .flag             (flag_dgs      ));


    initial begin

        forever begin

            #100;

            if ($time >= 1000)  $finish ;

        end

    end


endmodule // test

仿真结果如下:


由图可知,信号 condition 出现了一个尖峰脉冲,这是由于信号 din_rvs 与信号 en 相对于模块内部时钟都是异步的,所以到达内部门电路时的延时是不同的,就有可能造成竞争冒险。


虽然最后的仿真结果 flag 一直为 0,似乎是我们想要的结果。但是实际电路中,这个尖峰脉冲在时间上非常靠近时钟边沿,就有可能被时钟采集到而产生错误结果。




下面我们对模型进行改进,增加打拍延时的逻辑,如下:


实例

module clap_delay

    (

      input             clk ,

      input             rstn ,

      input             en ,

      input             din_rvs ,

      output reg        flag

    );


    reg                  din_rvs_r ;

    reg                  en_r ;

    always @(posedge clk or !rstn) begin

        if (!rstn) begin

            din_rvs_r      <= 1'b0 ;

            en_r           <= 1'b0 ;

        end

        else begin

            din_rvs_r      <= din_rvs ;

            en_r           <= en ;

        end

    end


    wire                 condition = din_rvs_r & en_r ;

    always @(posedge clk or negedge !rstn) begin

        if (!rstn) begin

            flag   <= 1'b0 ;

        end

        else begin


            flag   <= condition ;

        end

    end // always @ (posedge clk or negedge !rstn)


endmodule

将此模块例化到上述 testbench 中,得到如下仿真结果。


由图可知,信号 condition 没有尖峰脉冲的干扰了,仿真结果中 flag 为 0 也如预期。


其实,输入信号与时钟边沿非常接近的情况下,时钟对输入信号的采样也存在不确定性,但是不会出现尖峰脉冲的现象。对输入信号多打 2 拍,是更好的处理方式,对竞争与冒险有更好的抑制作用。




4)采用格雷码计数器

递加的多 bit 位计数器,计数值有时候会发生多个 bit 位的跳变。


例如计数器变量 counter 从 5 计数到 6 时, 对应二进制数字为 4'b101 到 4'b110 的转换。因为各 bit 数据位的延时,counter 的变换过程可能是: 4'b101 -> 4'b111 -> 4'b110。如果有以下逻辑描述,则信号 cout 可能出现短暂的尖峰脉冲,这显然是与设计相悖的。


cout = counter[3:0] == 4'd7 ; 



海口爱采购会员/58同城会员账户/百度竞价开户/百家号注册运营/推广公司网站-网站营销全网推广


上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


全国咨询热线:400-111-6878

地址:全国各地都有驻点商务

Copyright © 2021 通陆科技

网站建设:上往建站