Adata

CDC的那些事:flop synchronizer

让人想犯罪 __ 提交于 2021-01-12 19:10:14
上一篇中我们回顾了一些基础知识,其中最重要的概念就是 亚稳态 。我们接下来所要看到的各种CDC的设计方法,本质上都是围绕在如何解决亚稳态带来的问题。 我们首先来看最基本的问题, single bit level 信号 的跨时钟域。single bit 直接被destination domain的flop去sample产生的问题我们在上一篇已经讨论过,那么解决的办法呢?看起来很简单 -- 之后再加一个flop,也就是说用两级的flop来同步source domain的signal。我们通常把这种synchronizer 叫做 2flop synchronizer 或者double flop synchronizer,俗称“打两拍”。 说实话,老李在最开始学习到这个办法的时候,内心的声音是:“这TM在逗我?这么简单就可以了吗?凭什么第二级的输出就没有亚稳态了?” 相信有很多初学者也和我当初有同样的困惑。在这里我们要再次回顾一下metastable产生的原因。第一级flop产生metastable的原因是flop里面没有及时锁住该锁的值,所以我们无法直接使用第一级flop的Q来直接用于bclk时钟域。但是要注意,我们之前说过,第一级flop的Q 会最终稳定下来 的,而且在 绝大多数时候 ,可以在一个bclk周期内稳定下来,这样第二级flop的D输入就是一个稳定的值

CDC的那些事:跨时钟域

时光毁灭记忆、已成空白 提交于 2021-01-12 18:09:11
一转眼,老李在数字芯片设计领域又摸爬滚打了四年。 跨时钟域设计 几乎是现代数字芯片设计中所有设计人员必须要掌握的基本知识,但是从老李自身的经历来说,这方面的知识 在本科和研究生的课程当中都没有讲过,却是面试中经常被考到的知识点 。同时工作中工程师也必不可少地要和 CDC 打交道,考虑如何进行跨时钟域设计,以及掌握 CDC 相关的 EDA 工具。以下文章我们就从跨时钟域设计的最基本开始讲起。 这里我们先复习一下 同步电路 和 异步电路 的概念。在现代 SoC 设计中,绝大多数的电路都是同步电路。同步电路是由时钟驱动存储元件的电路,也就是说存储元件的状态只在时钟沿到来的时候才能发生变化。因为组合逻辑电路在输入变化时输出可能出现毛刺 (glitch) ,而存储元件因为只会在时钟沿到来时才会更新状态,那么在时钟沿之间的时间状态是稳定的,这样的同步电路可以 消除组合电路中的毛刺 ,如下图所示。 相应的,时钟周期的大小取决于最长的传输延时 (propagation delay) 。同步电路的好处是时序很清晰,电路中的存储元件例如触发器都是依照一个固定的节拍来工作, 便于 EDA 工具来进行延时的分析和计算 ,所以同步电路几乎占据了当前数字芯片的绝大多数部分。 而异步电路就没有时钟的概念了,存储元件所存的状态跟随了输入信号的变化立刻发生变化。信号之间的传递通常通过握手 (handshake)

Levmar:Levenberg-Marquardt非线性最小二乘算法

◇◆丶佛笑我妖孽 提交于 2020-12-11 07:46:54
Levmar:Levenberg-Marquardt非线性最小二乘算法 eryar@163.com Abstract. Levmar is GPL native ANSI C implementations of the Levenberg-Marquardt optimization algorithm.The blog focus on the compilation of levmar on Windows with Visual Studio. Key Words. Levmar, C, LM least squares 1. levmar简介 Gauss-Newton算法是一个古老的处理非线性最小二乘问题的方法。该方法在迭代过程中要求矩阵J(x)满秩。为了克服这个困难,Levenberg(1944)提出了一种新的方法,但未受到重视。后来Marquardt(1963)又重新提出,并在理论上进行了控讨,得到Levenberg-Marquardt方法,简称LM方法。在此基础上,Fletcher(1971)对其实现策略进行了改进,得到了Levenberg-Marquardt-Fletcher方法(LMF)。再后来,More(1978)将LM方法与信赖域方法结合,建立了带信赖域的LM方法。 LM算法的产生主要是解决曲线最小二乘拟合问题

websocket网络编程实战

让人想犯罪 __ 提交于 2020-10-02 14:45:37
前言 上篇文章我们用STOMP子协议实现了在线群聊和一对一聊天室等功能,本篇我们继续WebSocket这个话题,这次我们换个实现维度:用原生的WebSocket来实现,看看这两者在实现上的差别有多大。 实战WebSocket的要点 一、WebSocket重要属性 属性 备注 Socket.readyState 只读属性 readyState 表示连接状态,可以是以下值: 0 - 表示连接尚未建立。 1 - 表示连接已建立,可以进行通信。 2 - 表示连接正在进行关闭。 3 - 表示连接已经关闭或者连接不能打开。 Socket.bufferedAmount 只读属性 bufferedAmount 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数。 二、WebSocket核心事件 事件 事件处理程序 备注 open Socket.onopen 连接建立时触发 message Socket.onmessage 客户端接收服务端数据时触发 error Socket.onerror 通信发生错误时触发 close Socket.onclose 连接关闭时触发 三、WebSocket核心方法 方法 备注 Socket.send() 使用连接发送数据 Socket.close() 连接关闭 代码设计实现 一、服务端部分 /** * @author

使用ABAP Data Validator验证数据有效性

蓝咒 提交于 2020-08-15 08:41:04
在日常的开发过程中,我们常常要处理不同来源的数据。数据可能来自不可靠的外部系统、不可靠的用户输入和甚至设计有误的数据库表,因此,对数据有效性进行验证是必要的工作。 开源工具 ABAP Data Validator 是一个使用ABAP开发的数据验证工具,它可以简化开发者在这方面的工作。本文将介绍它的用法和一些设计思路。 本文链接: https://www.cnblogs.com/hhelibeb/p/12206648.html 原创内容,转载请注明 目的 具体而言,ABAP Data Validator将通过以下的思路简化数据有效性验证方面的工作: 提供统一的检查接口,让开发者通过单次方法调用就可以实现对数据的检查。 将验证逻辑集中实现,避免相似的检查代码分散在系统各处造成的逻辑不一致,从而降低相关程序的维护成本。 避免检查过程中的潜在dump,减少开发者处理dump问题的精力花费。 为了实现以上目的,该工具实现了一些功能: 内置常见的验证逻辑。 可配置的检查规则。 可扩展的检查程序。 异常的统一处理。 支持的检查列表 ABAP Data Validator目前支持以下类型的检查(持续更新中): 日期. 时间. 时间戳. 邮件地址. INT4. 正则字符串. URL. JSON. HEX. IMEI. GUID. BASE64. HTML (实验性的). 此外

Mac系统上给USB设备发送SCSI自定义命令

旧时模样 提交于 2020-08-10 12:32:05
各位大佬,请问在Mac上给USB发送SCSI命令,是使用哪个结构体?SCSICmd_INQUIRY_StandardDataAll还是SCSI_Sense_Data,又怎么实现发送呢?在Linux下会有一个结构体专门处理这事,代码如下: sg_io_hdr_t p_io_hdr; memset(&p_io_hdr,0x00,sizeof(sg_io_hdr_t)); p_io_hdr.interface_id = 'S'; p_io_hdr.flags = SG_FLAG_LUN_INHIBIT; if(aDataIn == DATA_USB_TO_HOST) p_io_hdr.dxfer_direction = SG_DXFER_FROM_DEV; else p_io_hdr.dxfer_direction = SG_DXFER_TO_DEV; p_io_hdr.cmd_len = aCBDLen; //指向 SCSI 命令的 cmdp 的字节长度 p_io_hdr.cmdp = (unsigned char*)aCBD; //指向将要执行的 SCSI 命令的指针 p_io_hdr.dxfer_len = aDataLen; //数据传输的用户内存的长度 p_io_hdr.dxferp = aData; //指向数据传输时长度至少为 dxfer_len 字节的用户内存的指针

Schema Registry 教程

感情迁移 提交于 2019-11-30 02:49:19
物联网设备终端种类繁杂,各厂商使用的编码格式各异,所以在接入物联网平台的时候就产生了统一数据格式的需求,以便平台之上的应用进行设备管理。 EMQ X 企业版 3.4.0 提供了 Schema Registry 功能,提供编解码能力。Schema Registry 管理编解码使用的 Schema、处理编码或解码请求并返回结果。Schema Registry 配合规则引擎,可适配各种场景的设备接入和规则设计。 数据格式 下图展示了 Schema Registry 的一个应用案例。多个设备上报不同格式的数据,经过 Schema Registry 解码之后,变为统一的内部格式,然后转发给后台应用。 [图1: 使用 Schema Registry 对设备数据进行编解码] 二进制格式支持 EMQ X 3.4.0 内置的 Schema Registry 数据格式包括 Avro 和 Protobuf 。Avro 和 Protobuf 是依赖 Schema 的数据格式,编码后的数据为二进制,使用 Schema Registry 解码后的内部数据格式(Map,稍后讲解) 可直接被规则引擎和其他插件使用。此外 Schema Registry 支持用户自定义的 (3rd-party) 编解码服务,通过 HTTP 或 TCP 回调的方式,进行更加贴近业务需求的编解码。 架构设计 Schema