精华内容
下载资源
问答
  • 牛顿插值,同步输出差商表,简单的小程序。调用函数,有注释。
  • 为了给差频太赫兹(THz)光辐射提供较为理想的光源, 研究了两台10 μm波段光栅选支射频波导CO2激光器的脉冲激光同步输出方法。结果表明, 将调节触发激光脉冲的延时方法和调节压电陶瓷(PZT)电压的方法配合, 可以使两个...
  • matlab开发-要求同步输出发电机基本测试。使用Simulink报表生成器和Matlab脚本自动测试的示例
  • IDT推出业界首款具备多同步输出的高性能四频MEMS振荡器。IDT的振荡器提供业界标准兼容封装尺寸内的可配置输出,从而节省通信、网络、存储、工业和FPGA等应用中的电路板面积和物料清单 (BOM) 成本。  IDT 4E系列 ±...
  • 介绍了一种解决多路传感器长时间同步输出测试的系统,该系统具有同时处理30路电压或电流型传感器输出信号和2路环境同步检测温度传感器输出信号的能力。通过经多路模拟量采集卡送入计算机,实现对上述传感器进行老化...
  • FPGA源同步输出时序约束(一)

    千次阅读 2017-08-07 16:38:04
    同步输出 fpga

    下文主要介绍源同步输出时,输出时钟的几种产生方式以及相应的时钟约束指令
    源同步输出的信号有时钟和数据信号,输出时钟是由fpga产生的,对于输出时钟有多种产生方式,例如:
    1、通过fpga的锁相环产生输出时钟;
    2、通过fpga的ALTDDIO IP核产生输出时钟;
    3、通过状态机控制产生输出时钟;
    4、将驱动数据的时钟直接输出。

    通过产生时钟直接作为输出时钟 和用一个时钟去驱动ALTDDIO IP核 产生输出时钟 这两种是比较常用的方式。在fpga里驱动数据输出用的时钟和 用来驱动ALTDDIO IP核 的时钟 可以是由相同的锁相环产生的,也可以是由不同的锁相环产生的。具体要看你输出的信号类型
    以下情况可以用同一个锁相环:
    (1)中心或边沿对齐的SDR输出;
    (2)边沿对齐的DDR输出。
    以下情况应该用不同的锁相环:
    (1)中心对齐的DDR输出;
    (2)一个时钟直接作为驱动外部器件的时钟(这样可以补偿时钟和数据间的不同延迟);
    (3)输出时钟和数据中心或边沿对齐(比如时钟和数据延迟50°,这样的话就只能用锁相环去生成对应的延迟);
    (4)精确调试时钟和数据间的相位关系

    下面是几种常用的时钟输出方式及时钟约束命令:

    1、输入时钟直接输出:
    输入fpga的时钟直接用来作为输出的时钟和发送数据的时钟

    这里写图片描述

    对输入fpga的时钟和输出时钟做约束,命令如下:
    这里写图片描述
    2、用锁相环来产生两个独立的时钟:输出时钟和数据时钟。
    输出时钟和数据边沿对齐。
    这里写图片描述
    此时需与约束的时钟有:输入fpga时钟clk_in,通过锁相环生成的两个时钟,以及输出fpga的时钟clk_out
    这里写图片描述
    3、DDR输出数据与时钟中心对齐
    此时输出的时钟相对于输出数据有一个90°的相位偏移,用PLL去产生一个相对于数据有90°偏移的时钟。
    这里写图片描述
    此时约束输出时钟有一个90°的相位偏移
    这里写图片描述
    4、DDR输出时,输出时钟和数据时钟共用一个时钟,输出时钟通过例化的ALTDDIO IP核输出
    这里写图片描述
    约束指令如下:
    这里写图片描述
    5、同一锁相环产生驱动ALTDDIO 模块时钟和数据时钟
    PLL输出的两个端口 一个输出时钟发送到外部器件, 一个输出时钟用来发送数据到外部器件
    这里写图片描述
    约束指令如下:
    这里写图片描述
    6、同一锁相环产生输出到外部的时钟和驱动数据发送的时钟
    这里写图片描述
    约束指令如下:
    这里写图片描述

    展开全文
  • for循环中 echo 同步输出,无需等待循环结束再输出结果方法 1://在for循环前加上2句ob_end_clean();//关闭输出缓存ob_implicit_flush(1);//开启绝对输出for($i=0;$i<10;$i++){echo$i;}方法 2://echo输出前加上...

    for循环中 echo 同步输出,无需等待循环结束再输出结果

    方法 1:

    //在for循环前 加上2句

    ob_end_clean(); //关闭输出缓存

    ob_implicit_flush(1); //开启绝对输出

    for($i=0;$i<10;$i++){

    echo $i;

    }

    方法 2:

    //echo 输出前加上ob_flush();和flush();

    for($i=0;$i<10;$i++){

    ob_flush();

    flush();

    echo $i;

    }

    //php ping 域名的方法

    $address = 'qq.com';

    if (strcasecmp(PHP_OS, 'WINNT') === 0) {

    // Windows 服务器下

    $pingresult = exec("ping -n 1 {$address}", $outcome, $status);

    } elseif (strcasecmp(PHP_OS, 'Linux') === 0) {

    // Linux 服务器下

    $pingresult = exec("ping -c 1 {$address}", $outcome, $status);

    }

    喜欢 (2)or分享 (0)

    展开全文
  • IDT推出业界首款具备多同步输出的高性能四频MEMS振荡器。IDT的最新振荡器提供业界标准兼容封装尺寸内的可配置输出,从而节省通信、网络、存储、工业和FPGA等应用中的电路板面积和物料清单 (BOM) 成本。  IDT 4E...
  • stm32(正点原子开发板)使用PWM同步输出50k、30k、10k方波
  • Openresty的同步输出与流式响应 默认情况下, ngx.say和ngx.print都是异步输出的,先来看一个例子: location /test { content_by_lua_block { ngx.say("hello") ngx.sleep(3) ngx.say("the world") } } 执行...

    Openresty的同步输出与流式响应

    默认情况下, ngx.say和ngx.print都是异步输出的,先来看一个例子:

    location /test {
        content_by_lua_block {
            ngx.say("hello")
            ngx.sleep(3)
            ngx.say("the world")
        }
    }

    执行测试,可以发现首先, /test 响应内容是在触发请求 3s 后一起接收到响应体,第一个ngx.say好像是被“绕过”,先执行sleep,然后和最后一个ngx.say的内容一起输出。

    location /test {
        content_by_lua_block {
            ngx.say("hello")
            ngx.flush() -- 显式的向客户端刷新响应输出
            ngx.sleep(3)
            ngx.say("the world")
        }
    }

    首先输出"hello",然后停顿3秒,最后输出"the world"——正如我们想象的那样。ngx.flush执行显示的输出,前一个ngx.say被“阻塞”住,执行完输出后方往下执行。

    再看一个例子:

    server {
        listen 80;
        lua_code_cache off;
        location /test {
            content_by_lua_block {
                ngx.say(string.rep("hello", 4000))
                ngx.sleep(3)
                ngx.say("the world")
            }
        }
    }

    这个例子和第一个例子相比,唯一不同就是ngx.say输出内容长了不少,我们发现浏览器先收到所有的hello,接着又收到了"the world" 。然而如果我们把4000改为小一点的值如2000(不同配置这个相对大小或有不同),那么仍然会出现先停顿3s,然后所有"hello"连同最后"the world"一起输出的情况。

    通过以上三个例子,我们可以得出下面的结论:

    ngx.say和ngx.print的同步和异步

    • nginx有个输出缓冲(system send buffer),如16k。ngx.say和ngx.print默认是向这个输出缓冲写入数据,如果没有显示的调用ngx.flush,那么在content阶段结束后输出缓冲会写入客户端;

    • 如果没有ngx.flush也没有到结束阶段,但如果输出缓冲区满了,那么也会输出到客户端;

    因此ngx.say和ngx.print的默认向客户端的输出都是异步的非实时性的,改变这一行为的是ngx.flush,可以做到同步和实时输出。这在流式输出,比如下载大文件时非常有用。

    ngx.flush的同步和异步

    lua-nginx也提到了ngx.flush的同步和异步。某一个ngx.say或者ngx.print调用后,这部分输出内容会写到输出缓冲区,同步的方式ngx.flush(true)会等到内容全部写到缓冲区再输出到客户端,而异步的方式ngx.flush()会将内容一边写到缓冲区,而缓冲区则一边将这些内容输出到客户端。

    openresty和nginx流式输出的比较

    流式输出,或者大文件的下载,nginx的upstream模块已经做得非常好,可以通过proxy_buffering|proxy_buffer_size|proxy_buffers 等指令精细调控,而且这些指令的默认值已经做了妥善处理。我们来看看这些指令以及默认值:

    proxy_buffering on;
    proxy_buffer_size 4k|8k; 
    proxy_buffers 8 4k|8k; 
    proxy_busy_buffers_size 8k|16k;
    proxy_temp_path proxy_temp;
    • proxy_buffering on表示内存做整体缓冲,内存不够时多余的存在由proxy_temp_path指定的临时文件中,off表示每次从上游接收proxy_buffer_size响应的内容然后直接输出给客户端,不会试图缓冲整个响应
    • proxy_buffer_size和proxy_buffers都是指定内存缓冲区的大小,proxy_buffer_size通常缓冲响应头,proxy_buffers缓冲响应内容,默认为一页的大小,proxy_buffers还可以指定这样的缓冲区的个数
    • proxy_busy_buffers_size nginx在试图缓冲整个响应过程中,可以让缓冲区proxy_busy_buffers_size大小的已经写满的部分先行发送给客户端。于此同时,缓冲区的另外部分可以继续读。如果内存缓冲区不够用了,还可以写在文件缓冲区
    • proxy_temp_path 使用文件作为接受上游请求的缓冲区buffer,当内存缓冲区不够用时启用

    openresty的怎么做到过大响应的输出呢? 《OpenResty 最佳实践》 提到了两种情况:

    • 输出内容本身体积很大,例如超过 2G 的文件下载
    • 输出内容本身是由各种碎片拼凑的,碎片数量庞大

    前面一种情况非常常见,后面一种情况比如上游已经开启Chunked的传输方式,而且每片chunk非常小。笔者就遇到了一个上游服务器通过Chunked分片传输日志,而为了节省上游服务器的内存将每片设置为一行日志,一般也就几百字节,这就太“碎片”了,一般日志总在几十到几百M,这么算下来chunk数量多大10w+。笔者用了resty.http来实现文件的下载,文件总大小48M左右。

    local http = require "resty.http"
    local httpc = http.new()
    
    httpc:set_timeout(6000)
    httpc:connect(host, port)
    
    local client_body_reader, err = httpc:get_client_body_reader()
    
    local res, err = httpc:request({
        version = 1.1,
        method = ngx.var.request_method,
        path = ngx.var.app_uri,
        headers = headers,
        query = ngx.var.args,
        body = client_body_reader
    })
    
    if not res then
        ngx.say("Failed to request ".. ngx.var.app_name .." server: ", err)
        return
    end
    
    -- Response status
    ngx.status = res.status
    
    -- Response headers
    for k, v in pairs(res.headers) do
        if k ~= "Transfer-Encoding" then  --必须删除上游Transfer-Encoding响应头
            ngx.header[k] = v
        end
    end
    
    -- Response body
    local reader = res.body_reader
    repeat
        local chunk, err = reader(8192)
        if err then
            ngx.log(ngx.ERR, err)
            break
        end
    
        if chunk then
            ngx.print(chunk)
            ngx.flush(true)  -- 开启ngx.flush,实时输出
        end
    until not chunk
    
    local ok, err = httpc:set_keepalive()
    if not ok then
        ngx.say("Failed to set keepalive: ", err)
        return
    end

    多达10w+的"碎片"的频繁的调用ngx.pirnt()和ngx.flush(true),使得CPU不堪重负,出现了以下的问题:

    • CPU轻轻松松冲到到100%,并保持在80%以上
    • 由于CPU的高负荷,实际的下载速率受到显著的影响
    • 并发下载及其缓慢。笔者开启到第三个下载连接时基本就没有反应了

    1313567-20181113113326218-1445968087.png

    这是开启了ngx.flush(true)的情况(ngx.flush()时差别不大),如果不开启flush同步模式,则情况会更糟糕。CPU几乎一直维持在100%左右:

    1313567-20181113113334110-1331618139.png

    可见,在碎片极多的流式传输上,以上官方所推荐的openresty使用方法效果也不佳。

    于是,回到nginx的upstream模块,改content_by_lua_file为proxy_pass再做测试,典型的资源使用情况为:

    1313567-20181113113339220-728077235.png

    无论是CPU还是内存占用都非常低,开启多个下载链接后并无显著提升,偶尔串升到30%但迅速下降到不超过10%。

    因此结论是,涉及到大输出或者碎片化响应的情况,最好还是采用nginx自带的upstream方式,简单方便,精确控制。而openresty提供的几种方式,无论是异步的ngx.say/ngx.print还是同步的ngx.flush,实现效果都不理想。

    转载于:https://www.cnblogs.com/minirice/p/9951320.html

    展开全文
  • JS与Jquery之文本框输入并同步输出显示 JS与Jquery之文本框输入并同步输出显示
  • FPGA源同步输出时序约束(二)

    千次阅读 2017-08-10 14:43:24
    fpga 源同步输出约束 最大最小延迟值计算 对应约束指令

    FPGA源同步输出约束(一)主要是介绍了输出时钟的几种产生方式以及对应的约束指令,本节主要介绍源同步输出延迟的几种约束方法:(1)system-centric 以系统为中心进行约束 (2)FPGA-centric 以fpga为中心进行约束。以及输出最大最小延迟值的计算推导,最后用约束指令描述出来。下文是以从spec上得到fpga和外部器件的特性参数 进行约束,至于用示波器测量fpga时钟,数据输出端口延迟的方法暂时不做介绍。

    1、system-centric
    该方法是将fpga部分和外部器件联合起来构成一个系统 进行时序约束分析,其特点是要用到外部器件的一些参数 比如tco,tsu,th 或fpga 到外部器件间的时钟,数据走线延迟 。所以如果选用该方法时,你需要知道外部器件的参数。
    (1)用外部器件的tsu ,th和时钟,数据的走线延迟 来进行输出最大最小延迟约束
    —-输出最大延迟约束:即数据路径的最大延迟+时钟路径的最小延迟+外部器件的tsu
    这里写图片描述
    对于源同步SDR输出约束指令如下:
    output_clock:即 源同步的输出时钟
    data_out*: 即源同步输出的数据
    这里写图片描述
    对于源同步DDR输出,其上升下降沿都需要约束,约束指令如下:
    这里写图片描述

    —-输出最小延迟约束:即数据路径的最小延迟+时钟路径的最大延迟-外部器件的th
    这里写图片描述
    对于源同步SDR输出约束指令如下:
    这里写图片描述
    对于源同步DDR输出,其上升下降沿都需要约束,约束指令如下:
    这里写图片描述

    2、FPGA-centric
    该方法是以fpga为中心,进行源同步输出延迟约束。fpga-centric是根据输出时钟和数据间的一个时钟偏斜去进行输出约束的。时钟偏斜等于时钟沿和数据沿之间的时间差,对于时钟数据边沿对齐接口 时钟偏斜等于0;对于时钟数据中心对齐,时钟偏斜等于UI/2。SDR接口UI等于时钟周期,DDR接口UI=时钟周期/2。
    用FPGA-centric进行约束,你只需要知道fpga的输出时钟和数据间的偏斜值tskew就能进行输出约束。下面是我查找到的 altera cyclone v 芯片datasheet上给出RGMII接口的输出时钟和数据间的偏斜值。
    这里写图片描述
    fpga-centric方法 即 时钟 数据时序要满足下面的公式:
    这里写图片描述
    数据的最早到达时间必须比时钟到达时间-skew 大,否则不能满足外部器件的th保持时间。
    数据的最晚到达时间必须比时钟到达时间+skew 小 ,否则不能满足外部器件的tsu建立时间。

    时钟和数据间到达外部器件的时间关系如下图所示:
    这里写图片描述
    (1) 根据时钟数据间的建立保持关系进行源同步输出时序约束
    根据建立关系对输出最大延迟进行时序约束
    根据Equation 3 ,数据的最晚到达时间(data arrival +skew)必须比数据需求时间(clock arrival) 小 ,否则不能满足外部器件的tsu建立时间,下面是数据到达时间和数据需求时间的计算器公式。
    这里写图片描述
    根据时钟数据满足建立时间正裕量,如下
    这里写图片描述
    在源同步电路中,要求数据到达时间跟时钟到达时间一致,所以根据此把Equation6 进行简化得到下面Equation7的公式1以及输出最大延迟值计算公式2
    这里写图片描述
    对于源同步SDR输出约束指令如下:
    这里写图片描述
    对于源同步DDR输出,其上升下降沿都需要约束,约束指令如下:
    这里写图片描述

    根据保持关系对输出最小延迟进行时序约束

    根据Equation 3 ,数据的最早到达时间(data arrival -skew)必须比数据需求时间(clock arrival) 大 ,否则不能满足外部器件的th保持时间,下面是数据到达时间和数据需求时间的计算器公式。
    这里写图片描述

    下面是将Equation8,9的数据到达时间和数据需求时间代入后的公式
    这里写图片描述

    同样根据在源同步电路中,要求数据到达时间跟时钟到达时间一致,所以根据此把Equation10进行简化得到下面Equation11的公式1以及输出最小延迟值计算公式2,这里的latch和launch 是保持的latch 和launch。
    这里写图片描述
    对于源同步SDR输出约束指令如下:
    这里写图片描述
    对于源同步DDR输出,其上升下降沿都需要约束,约束指令如下:
    这里写图片描述
    (2)用early and late margins进行约束
    early margin等于minimum tco,late margin等于miximum tco。
    —-时钟数据中心对齐的DDR接口,进行时序最大最小延迟值的公式推导。
    这里写图片描述
    输出最大最小延迟值推导如下:
    这里写图片描述
    这里写图片描述

    下面的这4中数据时钟输出形式,只需要把上面公式里的clock offset,unit interval 替换成对应的值就可以了。
    —-时钟数据边沿对齐的SDR接口,进行时序分析约束。
    时钟数据的输出相位如下图所示,此时clock offset为0 ,UI等于时钟周期:
    这里写图片描述

    —-时钟数据中心对齐的SDR接口,进行时序分析约束。
    时钟数据的输出相位如下图所示,此时clock offset为时钟周期/2 ,UI等于时钟周期:
    这里写图片描述
    —-时钟数据边沿对齐的DDR接口,进行时序分析约束。
    时钟数据的输出相位如下图所示,此时clock offset为0 ,UI等于时钟周期/2:
    这里写图片描述
    —-时钟数据中心对齐的DDR接口,进行时序分析约束。
    时钟数据的输出相位如下图所示,此时clock offset为时钟周期/4 ,UI等于时钟周期/2:
    这里写图片描述

    展开全文
  • 高分悬赏:Java语言多线程倒计时怎么同步输出,怎么用多线程来实现 高分悬赏:Java语言多线程倒计时怎么同步输出,怎么用多线程来实现
  • 双屏同步输出软件

    2013-07-01 16:53:12
    简单小巧的软件,某些低端显卡驱动里不支持双屏复制输出,通过该软甲即可达到目的.唯一缺陷是分辨率不可微调,如果输出到电视机或大屏幕,无法做到全屏显示
  • 用C#调用CMD时,如何实现同步输出结果,而不是等命令执行完了后再输出。
  • 一个小程序,用来播放音乐并且随每一个音符显示图片的。是一个非常小型的程序,在Head First Java中看到的源文件。
  • node中子进程同步输出

    2016-10-17 14:34:00
    由于在shell命令执行过程中需要模拟同步效果,因此在循环中不仅仅获取新写入的数据,同时需要模拟I/O阻塞操作,此处shelljs的作者通过尝试所有的同步IO API,发现fs.writeFileSync操作可以较少的减轻CPU利用率,因此...
  • 项目中需要执行shell命令,虽然exec包提供了CombinedOutput()方法,在shell运行结束会返回shell执行的输出,但是用户在发起一次任务时,可能在不停的刷新log,想达到同步查看log的目的,但是CombinedOutput()方法...
  • Python多线程同步输出1-100的数

    千次阅读 2019-10-16 11:28:58
    发生任务不同步的问题,因为只有一个主线程,而主线程同时只能完成一个任务,所以下一个任务就会等待> 上一个任务完成后才能继续运行。 代码如下: def print_num(): while True: print(1) def print_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,689
精华内容 5,075
关键字:

同步输出