1. 从“随机”说起:为什么数字电路也需要“伪随机”?
大家好,我是老张,在数字IC这行摸爬滚打十多年了。今天想和大家聊聊一个听起来很“玄学”,但在芯片设计里却无处不在的玩意儿——伪随机序列。你有没有想过,在那些高速通信、数据加密的芯片里,那些看起来毫无规律、像雪花点一样的“0”和“1”是怎么来的?难道芯片里也内置了一个骰子吗?
当然不是。真正的物理随机数生成在硬件里成本很高,而且很多时候我们并不需要“真随机”,我们需要的是一种可以预测、可以重复,但看起来又足够随机的序列。这就是“伪随机”的精髓。想象一下,你和朋友约定了一个只有你们俩知道的秘密暗号规则,每次见面都按这个规则生成一串新暗号。对外人来说,这串暗号每次都不一样,毫无规律;但对你们俩来说,只要知道初始的“种子”和规则,就能完全复现。伪随机序列在芯片里干的就是这个活儿。
而实现这个功能的核心硬件,就是我们今天的主角:线性反馈移位寄存器,英文简称 LFSR。它结构简单到令人惊讶——就是几个D触发器(可以理解为一排能存“0”或“1”的小盒子)加上几个异或门(XOR,相同出0,不同出1),却能产生周期极长、统计特性极好的序列。在通信里用它做加扰和解扰,让数据看起来更“白”,减少连续0或1对时钟恢复的干扰;在测试里用它生成激励,去“撞”出芯片的潜在bug;甚至在早期的游戏机里,用它来生成看似随机的敌人和道具。
接下来,我就带你从零开始,彻底搞懂LFSR的两种经典架构,并用Verilog手把手实现它,让你不仅能看懂,更能自己写出来、仿真出来。
2. 庖丁解牛:深入理解LFSR的两种核心架构
LFSR主要有两种实现方式,名字听起来挺唬人:斐波那契型和伽罗瓦型。别被名字吓到,咱们用大白话和电路图把它讲明白。它们的核心区别,就在于“反馈”这根线是怎么接的。
2.1 斐波那契LFSR:集中反馈,多点汇聚
斐波那契LFSR,也叫外反馈型或多到一型。这个名字很形象:“多到一”,意思是多个触发器的输出,经过异或运算后,共同反馈给最前面的那一个触发器。
咱们来看一个最简单的3级LFSR例子,它的反馈多项式是 f(x) = x^3 + x^2 + 1。这个多项式里的“次方”代表触发器的编号(通常从1开始,对应最低位或最左边),x^3和x^2表示第3级和第2级触发器的输出是“抽头”,要参与反馈计算。
电路是怎么工作的呢?假设我们有三个D触发器,从左到右叫Q1, Q2, Q3(Q3是最高位,也是输出位)。在斐波那契结构里,每个时钟上升沿到来时:
- Q2的值移给Q1。
- Q3的值移给Q2。
- 新的Q3输入从哪里来?它来自一个异或门的输出,而这个异或门的输入,就是抽头位(这里是Q2和Q3)的值。也就是说,
Q3_next = Q2 ^ Q3(^表示异或)。
看出来了吗?反馈路径在触发器链的外部,像一个集中的“决策中心”,收集多个抽头位的信号,算出一个结果,然后只喂给最前端的那个触发器。这种结构非常直观,和我们从数学多项式推导出的逻辑表达式直接对应。
我画个简化的数据流图帮你理解:
时钟沿到来前: [Q1, Q2, Q3] = [A, B, C]
反馈计算: feedback = B ^ C
时钟沿到来后: [Q1, Q2, Q3] 变为 [B, C, feedback]
所以,整个寄存器像一个队列,每次整体向右移动一位,新的队首(Q3)由后面某几个队员(抽头)共同决定。
2.2 伽罗瓦LFSR:分布式反馈,逐级渗透
伽罗瓦LFSR,也叫内反馈型或一到多型。它的思路截然不同:“一到多”,意思是最后一个触发器的输出,会像涟漪一样向前扩散,与途中的多个触发器进行异或。
还是用同样的反馈多项式 f(x) = x^3 + x^2 + 1。在伽罗瓦结构里,电路连接变了:
- 最后一个触发器Q3的输出,会直接反馈回来。
- 这个反馈信号不是只给Q1,而是会“注入”到抽头所对应的触发器的前一级输入。对于抽头x^2(对应Q2),反馈信号会与Q1的输出异或,结果作为Q2的输入。
- 对于最高位抽头x^3(对应Q3),它的输入直接来自Q2的输出(或者,在某些定义中,如果多项式包含常数项1,则Q1的输出会经过一个异或门后作为Q3的输入,但在这个具体多项式里,我们按常见接法)。
更常见的描述是:将反馈路径插入到寄存器链之间。具体来说,最后一个寄存器的输出,会与所有抽头位对应的寄存器的前一级输出进行异或。听起来有点绕?看数据流:
时钟沿到来前: [Q1, Q2, Q3] = [A, B, C]
反馈信号 = C (最后一个寄存器的输出)
对于Q2(对应抽头x^2),它的下一个输入 = Q1 ^ 反馈信号 = A ^ C
对于Q3(对应抽头x^3),它的下一个输入 = Q2 = B
Q1的下一个输入 = 外部输入或0(通常就是简单的移位,输入为0或来自前级)
时钟沿到来后,新的状态可能是 [0, A^C, B] (取决于具体实现)
实际上,伽罗瓦结构更像是在移位路径上开了几个“小口”,让反馈信号在这些“小口”处与数据流进行混合。
2.3 双雄对决:斐波那契 vs. 伽罗瓦,我该选谁?
既然有两种结构,工程师最关心的问题来了:用哪个更好?这里我结合自己的项目经验,给大家做个实实在在的对比。


1万+

被折叠的 条评论
为什么被折叠?



