news 2026/9/2 23:54:27

格雷码:为什么只在异步FIFO里混得开?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
格雷码:为什么只在异步FIFO里混得开?

数据从一个时钟域传到另一个时钟域,时序稍微对不上,就会采到不确定的亚稳态值。这在芯片里是大忌,可能导致整个系统逻辑错乱。

格雷码的设计思路很直接:相邻两个数之间只变一位

十进制 二进制 格雷码 3 011 010 4 100 110 (只变最高位) 5 101 111 (只变最低位)

普通二进制从3到4,三位全跳了。格雷码只动一位。这个特性在跨时钟域场景下有个关键优势:就算采样时机不对,采到了中间翻转的瞬间,最多也就一位出错

而且这个错还不是随便错——要么采到当前值,要么采到下一个值,不会跳出这个范围。

异步FIFO就是靠这个活的

FIFO的读写指针分别在两个时钟域,要判断满空状态,必须把对方的指针同步过来对比。这时候格雷码的优势就炸裂了:

// 写指针(格雷码)同步到读时钟域 always @(posedge rclk) begin rq2_wptr <= rq1_wptr; rq1_wptr <= wptr_gray; // 写指针的格雷码 end // 判断空 assign empty = (rq2_wptr == rptr_gray);

关键点来了:指针采错一次根本不要紧

假设写指针刚从5跳到6,读时钟域采样时正好卡在中间态,可能采成5,也可能采成6。采成5?那就认为FIFO还没写入新数据,多等一拍再读,不会出错。采成6?正好,读取最新数据,也没问题。

因为指针是单调递增的,采样误差最多让判断延迟一个周期,不会导致逻辑错误。FIFO不会因为这一拍的误判就读出脏数据或者溢出。

但普通总线为什么不行?

因为总线传的数据不是连续变化的,采错了后果很严重

一条地址总线,这一拍传0x1000,下一拍传0x8000。如果用格雷码,两个数之间依然多位翻转,采样时碰上中间态,可能采成一个完全错误的地址,比如0x5000。

地址跳变: 0x1000 → 0x8000 即使用格雷码: 多位仍会同时变化 采样出错: 可能得到 0x5000(非法地址)

这个错误是致命的。芯片可能访问到错误的存储位置,读出垃圾数据或者写坏别的数据。这种错误没法容忍,多等一拍也救不回来

格雷码的单比特翻转特性确实优雅,但必须配合两个前提:数据连续变化,且采错一次可以容忍。异步FIFO的指针完美符合这两点,所以格雷码在那里是标配。

但芯片里大部分场景都不满足这两个条件。通用总线只能老老实实用握手协议或者干脆挂异步FIFO来缓冲。看起来笨重,但这才是非连续、不可容错数据的正确解法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 8:18:16

小白友好:Qwen3-ForcedAligner-0.6B字幕生成工具详解

小白友好&#xff1a;Qwen3-ForcedAligner-0.6B字幕生成工具详解 1. 这个工具到底能帮你做什么&#xff1f; 你有没有遇到过这些情况&#xff1f; 剪辑一段会议录音&#xff0c;想加字幕&#xff0c;但手动打时间戳太耗时&#xff1b; 给短视频配中英双语字幕&#xff0c;听一…

作者头像 李华
网站建设 2026/8/31 9:45:53

解锁二次元语音合成:MoeTTS角色语音定制全攻略

解锁二次元语音合成&#xff1a;MoeTTS角色语音定制全攻略 【免费下载链接】MoeTTS Speech synthesis model /inference GUI repo for galgame characters based on Tacotron2, Hifigan, VITS and Diff-svc 项目地址: https://gitcode.com/gh_mirrors/mo/MoeTTS 在ACG创…

作者头像 李华
网站建设 2026/8/27 4:30:19

ol-ext:OpenLayers扩展库完全指南

ol-ext&#xff1a;OpenLayers扩展库完全指南 【免费下载链接】ol-ext Cool extensions for Openlayers (ol) - animated clusters, CSS popup, Font Awesome symbol renderer, charts for statistical map (pie/bar), layer switcher, wikipedia layer, animations, canvas fi…

作者头像 李华
网站建设 2026/8/26 23:14:03

保姆级教程:Chord视频理解工具从安装到精准定位全流程

保姆级教程&#xff1a;Chord视频理解工具从安装到精准定位全流程 1. 你能学会什么&#xff1f;零基础也能上手的本地视频智能分析 你是否遇到过这些场景&#xff1a; 剪辑时反复拖动时间轴&#xff0c;只为找到“主角转身”的那一帧&#xff1b;审核安防视频&#xff0c;要…

作者头像 李华
网站建设 2026/8/30 1:02:02

Phi-3-mini-4k-instruct与TensorFlow Serving集成:生产级部署

Phi-3-mini-4k-instruct与TensorFlow Serving集成&#xff1a;生产级部署 如果你正在寻找一个既轻量又强大的语言模型&#xff0c;并且希望把它部署到生产环境中&#xff0c;那么Phi-3-mini-4k-instruct绝对值得你关注。这个只有38亿参数的模型&#xff0c;在推理、代码生成和…

作者头像 李华
网站建设 2026/8/31 2:19:34

无需编程经验:用Fish-Speech 1.5镜像3步搭建个人语音合成系统

无需编程经验&#xff1a;用Fish-Speech 1.5镜像3步搭建个人语音合成系统 你有没有过这样的念头&#xff1f;想给自己的播客配个专属声音&#xff0c;想把写好的文章自动变成有声书&#xff0c;或者只是单纯好奇&#xff1a;“如果我自己的声音能被AI学走&#xff0c;会是什么…

作者头像 李华