【前端设计】寄存器与主功能电路为异步时钟时的功能影响探索

简介: 【前端设计】寄存器与主功能电路为异步时钟时的功能影响探索


前言

今天想探究一个小问题,就是寄存器的时钟如果与主时钟是异步时钟,那么会不会对主功能有影响。当然,这样做肯定不是合理的,我知道的比较多的是寄存器使用降频到同源同相的时钟,或者使用主时钟再对寄存器读取时钟做跨异步。


不过我想了几天总是感觉如果使用异步时钟,是否也可能对功能影响有限?


场景

主要想探究三个场景:RW型配置寄存器、RO型状态记录寄存器和W1C型上报寄存器。


RW型配置寄存器

对于软件配置的RW型寄存器,配置时钟为apb_clk(假定使用apb总线配置,令其为125M),工作时钟为work_clk(令其为800M)。那么在寄存器配置后的几个时钟周期内,内部工作电路看到的值是不定的,最终会在几个周期后获取的正确的配置值,rtl内关联逻辑也会在几个周期后恢复正确:



那么如果rtl对这个值以及这个值的变化非常敏感,或者在电路工作中频繁的配置,则这样会引起电路内部的功能问题。而如果工作的流程是先配置寄存器,稳定后再启动电路工作,并且在工作过程中不会改配,则配置项可以视为准静态信号,此时即使配置寄存器在异步时钟域,也不会影响主电路动作。


举个例子,寄存器配置启动信号,电路中获取配置的沿跳变开始启动,这种场景下即使晚几拍开始工作实际也是没有影响的,而且启动配置一旦稳定为1后也不会随意跳变为0了,因此电路时可以正确工作:



因此我个人认为,如果对于一个系统,配置项在工作之前稳定,在工作过程中可视为准静态信号的话,寄存器处于异步时钟域是可以接受的。


RO型状态记录寄存器

状态寄存器一般用来记录内部的busy、cnt、接口等状态信息,主要用于在出现bug时“甩锅”。比如系统卡死了,我一查自己的模块ostd_cnt都是0,接口和内部的valid都是0,那就可以拍胸脯说:不是卡死在我这的!因此这一类记录寄存器基本为电平上报(即使为脉冲,在高频工作低频寄存器的场景下也会展宽),简单的电路如下图:



对于这种情况,同样的如果软件不需要实时的获取最新最准确的值,且在读取时(比如挂死的场景)这些状态已经稳定在某个值一段时间,那么应该说直接异步采样是不会有问题的,最后总是能够读取到需要的值。如果软件需要实时准确值,那么这样会导致状态读取错误。


W1C型上报寄存器

w1c型寄存器一般用来上报中断、上报完成等软件可以清掉的状态,这类状态一般在电路内部以脉冲的方式上报(总不能中断一直起,清掉了立马又上报吧,致命中断除外)。因此如果电路在高频工作,状态上报时是需要脉冲展宽的,当然如果以电平的方式上报则没有这个问题。那么还是刚刚的思考,脉冲展宽之后虽然有亚稳态的影响会导致寄存器在几拍之后才会采样的正确的值,但是只要正确的值能够被采样到,就可以软件读取到正确的值。


在这里我又多想了一些,w1c型寄存器提供给rtl的接口都是两个(以中断为例):irq_in和irq_wen。如果irq_wen和irq_in做相同的展宽(我印象中需要展宽到慢时钟两个周期),但是apb_clk在信号下降时采样到了亚稳态,irq_wen恢复到了1而irq_in恢复到了0,那是否会使得最终寄存器中保存的值为错误值?换而言之,是否需要将irq_in做更高的展宽确保一定最终上报正确的值呢?


以上就是这两天我的思考内容,并非来自工作经验因此结论很可能是错误的,请大家不吝勘误。


相关文章
|
25天前
|
前端开发 JavaScript API
前端:事件循环/异步
前端开发中的事件循环和异步处理是核心机制,用于管理任务执行、性能优化及响应用户操作,确保网页流畅运行。事件循环负责调度任务,而异步则通过回调、Promise等实现非阻塞操作。
|
5月前
|
存储 开发框架 前端开发
循序渐进VUE+Element 前端应用开发(18)--- 功能点管理及权限控制
循序渐进VUE+Element 前端应用开发(18)--- 功能点管理及权限控制
|
1月前
|
JSON 前端开发 搜索推荐
惊!这些前端技术竟然能让你的网站实现个性化推荐功能!
【10月更文挑战第30天】随着互联网技术的发展,个性化推荐已成为提升用户体验的重要手段。前端技术如JavaScript通过捕获用户行为数据、实时更新推荐结果等方式,在实现个性化推荐中扮演关键角色。本文将深入解析这些技术,并通过示例代码展示其实际应用。
78 4
|
2月前
|
前端开发 JavaScript
前端中的“+”连接符,居然有鲜为人知的强大功能!
【10月更文挑战第9天】前端中的“+”连接符,居然有鲜为人知的强大功能!
53 0
前端中的“+”连接符,居然有鲜为人知的强大功能!
|
2月前
|
设计模式 前端开发 JavaScript
前端编程的异步解决方案有哪些?
本文首发于微信公众号“前端徐徐”,介绍了异步编程的背景和几种常见方案,包括回调、事件监听、发布订阅、Promise、Generator、async/await和响应式编程。每种方案都有详细的例子和优缺点分析,帮助开发者根据具体需求选择最合适的异步编程方式。
91 1
|
3月前
|
前端开发 API
(WEB前端编辑DWG)在线CAD如何实现图形识别功能
mxcad 提供的图形识别功能可帮助用户快速识别和提取 CAD 图纸中的各种图形,如直线、多段线、弧线、圆及图块,显著提升设计效率。此功能不仅适用于图形分类,还能进行数量统计和快速定位,减少手动操作。用户可通过 API 进行二次开发,自定义识别逻辑。具体步骤包括打开在线示例、选择识别功能、设置识别参数并开始识别。更多开发文档请关注公众号:梦想云图网页 CAD。
|
2月前
|
Web App开发 存储 前端开发
前端开发必备:requestAnimationFrame、setInterval、setTimeout——功能解析与优劣对比
前端开发必备:requestAnimationFrame、setInterval、setTimeout——功能解析与优劣对比
180 0
|
2月前
|
移动开发 前端开发 JavaScript
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
264 0
|
2月前
|
前端开发 JavaScript Shell
深入解析前端构建利器:webpack核心概念与基本功能全览
深入解析前端构建利器:webpack核心概念与基本功能全览—
30 0
|
3月前
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
66 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘