调节
- Bang-bang 调节器。输入是目标值和实际值。误差为正,输出满挡向一边;误差为负,输出满挡向另一边。只有这两档。
- 带回差的调节器。误差很小的一段里输出保持不动,出了这段才加或减。你见过的列周期死区就是这个器件。
- PI 调节器。误差乘一个比例,再把误差按拍累加。输出是这两部分的和。
- PID 调节器。在 PI 上再加"这一拍误差减上一拍误差"。
- 脉宽调制器。输入一个占空比,输出一段固定周期的高低电平,高电平的长度跟着占空比走。
- 一位数模转换器。输入一个数字电压,输出一串高低电平。高电平越密,外面滤完之后的平均电压越高。
测量
- 比较器。两个数比大小,输出大、小或相等。
- 施密特触发器。带回差的比较器。向上过一个门限才变高,向下过另一个更低的门限才变低。
- 脉宽测量器。输入一根高低变化的线,输出高电平持续了多少拍。
- 周期测量器。输出相邻两个上升沿之间有多少拍。
- 频率计。在一段固定时间里数有多少个上升沿。
- 占空比测量器。同一段时间里,高电平拍数除以总拍数。
- 正交编码器。两根方波,相位差 90°。输出方向和走过的格数。码盘那一路就是这种器件。
- 鉴相器。两根时钟,输出谁领先、领先多少拍。
波形
- 分频器。输入时钟,每数到 N 拍输出翻转一次。
- 单稳态。输入一个上升沿,输出固定拍数的高电平,然后自己落下。
- 定时器。开始后每拍加 1,加到设定值给出一个脉冲,并可以清零重来。
- 看门狗。必须在数满之前收到一次"喂狗"。没收到,就输出复位脉冲。
- 数控振荡器。每拍给相位加一个步长。步长大,输出频率就高。可以用相位最高位当方波输出。
- 正弦发生器。相位去查一张正弦表,输出正弦的采样值。
滤波和运算
- 滑动平均器。始终保留最近 N 个数的和,新进来一个就加上,最旧的一个就减去。
- 有限冲激响应滤波器。最近 N 个采样各自乘一个系数,再加在一起。
- 无限冲激响应滤波器。这一拍的输出还要拿去影响后面几拍。PI 里的积分就是这种反馈。
- 峰值检测器。一段数据里找出最大值,以及它出现的位置。
- 直方图。每个到达的数对应一个箱子,那个箱子的计数加 1。
- 累加器。每拍加上输入的数。
- 定点乘加器。这一拍做"乘完再加到累加器上"。
- 除法器。输入被除数和除数,用若干拍算出商和余数。
以前常买芯片、现在用逻辑写的接口
- UART。一根线发出去,一根线收进来。按波特率把一个字节拆成起始位、数据位、停止位。
- SPI 主机。时钟、片选、主出从入、主入从出。主机产生时钟,按拍移出和移入。
- I2C 主机。时钟和数据线都是开漏。主机发出起始、地址、应答和停止。
- 校验器。数据流过时按一个多项式更新余数,最后余数就是校验结果。
- 扰码器。数据流过一个移位寄存器,按固定抽头异或,把长串的 0 或 1 打散。
传递数据
- 同步 FIFO。读写用同一个时钟。满了不能再写,空了不能再读。
- 异步 FIFO。写时钟和读时钟不同。用格雷码把写指针送到读这边,把读指针送到写这边。
- 双口 RAM。一边写,一边读,两边可以各用各的时钟。
- 跨时钟同步器。一根单 bit 信号换时钟域时,先连续打两拍再往下用。
- 仲裁器。几个人同时要用同一份资源,它决定这一拍给谁。
锁相
- 数字锁相环。鉴相器看本地时钟和外部时钟谁领先,环路滤波把这个误差收一收,再去改数控振荡器的步长。鉴相器用 bang-bang 时,领先就让本地时钟慢一档,落后就快一档。
- 延迟锁定环。不改频率,只改本地时钟经过的延迟拍数,直到边沿和外部时钟对齐。
测时间和产生时间
- 计数器。每拍加 1,到设定值清零或停住。
- 分频器。每数到 N 拍,输出翻转一次。
- 定时器。从 0 加到设定值,到了给一个脉冲。
- 看门狗。到时之前必须被清一次,否则输出复位。
- 单稳态。来一个上升沿,输出固定拍数的高电平,然后自己落下。
- 脉宽测量器。数一根线的高电平持续了多少拍。
- 周期测量器。数相邻两个上升沿之间有多少拍。
- 频率计。固定时间里数有多少个上升沿。
- 时间数字转换器。两下事件之间的时间变成一个数字。粗的部分用计数器,比一个时钟还细的部分用一串进位链,看沿停在第几级。你工程里的 TDC 就是这个器件,
tx_ref是被测的那一下反馈沿。
比相位、把频率锁住
- 异或鉴相器。两根方波相异或。相位差越大,输出高电平的时间越长。锁住时输出接近一半高、一半低。能看的相位差在 ±90° 以内。
- 边沿鉴相器。比的是两根时钟的上升沿。本地时钟落后,就打出"加快"脉冲;超前,就打出"减慢"脉冲。同时能看出频率谁高谁低,所以锁相环里多用它。
- Bang-bang 鉴相器。只回答早了还是晚了,不回答早了多少。高速串行收数据时最常见。
- 数字环路滤波器。把鉴相器那一串忽长忽短的误差收平滑。一种简单做法是可逆计数器:误差让它加,加满才输出一个"加快";误差让它减,减到 0 才输出一个"减慢"。小抖动到不了满或到 0,就不会去动振荡器。
- 数控振荡器。每拍给相位加一个步长。步长由上面的滤波器改。步长大,输出频率高。
- 全数字锁相环。上面三件放在一个环里:鉴相器看出本地时钟和外部时钟的差别,环路滤波器把差别收一收,数控振荡器按这个去改频率,直到两边对齐。时间数字转换器可以代替鉴相器,直接把相位差变成数字再送给滤波器。
- 延迟锁定环。不改频率,只改本地时钟经过几级延迟,直到边沿和外部时钟对齐。
调节
- Bang-bang 调节器。误差为正,输出满挡向一边;为负,满挡向另一边。只有这两档。
- 带回差的调节器。误差落在一小段里时输出不动,出了这段才加或减。
- PI 调节器。误差乘一个比例,再把误差按拍累加,两部分相加作为输出。
- PID 调节器。再加"这一拍误差减上一拍误差"。
- 脉宽调制器。固定周期里,高电平的长度跟着输入的数字走。
- 一位数模转换器。高电平越密,外面滤完之后的平均电压越高。
波形、滤波、运算
- 比较器。两个数比出大、小或相等。
- 施密特触发器。向上过一个门限才变高,向下过另一个更低的门限才变低。
- 滑动平均器。始终保留最近 N 个数的和。
- 有限冲激响应滤波器。最近 N 个采样各乘一个系数再相加。
- 无限冲激响应滤波器。这一拍的输出还要影响后面几拍。
- 峰值检测器。一段数里找出最大值和它所在的位置。
- 直方图。每个数对应一个箱子,落到哪个箱子,那个箱子加 1。
- 正弦发生器。相位累加之后去查正弦表。
- 定点乘加器。这一拍做完乘法,加进累加器。
- 除法器。若干拍算出商和余数。
接口。以前常是单独的芯片
- UART。一根线发出,一根线接收。一个字节拆成起始位、数据位、停止位。
- SPI 主机。主机发时钟,按拍把数据移出、把对方的数据移入。
- I2C 主机。时钟和数据两根线,发出起始、地址、应答和停止。
- 正交编码器。两根相位差 90° 的方波,输出方向和走过的格数。
- 校验器。数据流过时按一个多项式更新余数。
- 扰码器。用移位寄存器把长串的 0 或长串的 1 打散。
- 线路编码器。把 8 位数据编成 10 位,保证线上有足够的跳变,对方才能从数据里恢复时钟。
把数从一边送到另一边
- 同步 FIFO。读写同一个时钟。满了停写,空了停读。
- 异步 FIFO。读写各用各的时钟。读写指针用格雷码送到对面,保证跨时钟时只有一位在变。
- 跨时钟同步器。一根单 bit 信号换时钟时,连续打两拍再往下用。
- 仲裁器。几路同时要用同一份资源,决定这一拍给谁。
- 消抖器。电平稳定连续若干拍,才承认它变了。