1. 边沿检测电路
对于一个上升沿电路来说,假如用clk信号与寄存器进行采样,前一拍采到0,后一拍输入结果为1,那么通过组合逻辑的运算,前一拍用A表示,后一拍用B表示,“!A & B”就是上升沿检测。
同理,对于下降沿来说,前一拍采到1,后一拍输入结果为0,A&!B,就是我们需要的下降沿检测电路。
对于双边沿来说,输出是“!A & B + A&!B”,即 A^B 异或操作
2. 奇数分频电路
-
2.1 不需要满足50%占空比的分频电路
设置一个三位计数器0-1-2,每次遇到count=0或1的时候进行翻转,再加上复位信号 -
2.2 需要满足50%占空比的分频电路
设置一个上升沿计数器,一个下降沿计数器,计数的最大值都是2,计数器的值是1或2翻转信号clk,取两个信号的或
3. 偶数分频电路
- 3.1 寄存器级联法实现2^N的偶数分频,当时钟上升沿到来的时候输出结果进行翻转
- 3.2 计数器法实现任意偶数分频,clock=N/2-1时clock进行翻转实现N分频
4. 半整数分频
对于3.5分频来说,需要1.75个时钟周期进行一次翻转,这种存在1/4周期的翻转很难仅仅通过数字电路/Verilog取实现
用上升沿和下降沿各产生一个7分频的时钟信号,这两个信号的距离是3.5个时钟周期,用逻辑或的形式,即可产生无抖动3.5分频信号
5. 小数/分数分频
实现”a/b“ 的分频电路
T=43/5=8.6 86个输入上升沿对应10个输出上升沿
T = ( Ma+(M+1)b )/ a+b,使用了a个M分频和b个M+1分频的整数分频电路。
整数部分为8,因此选用8分频和9分频来进行合成
8a+9b=43,a+b=5,a=2,b=3
计数器从0计到4,当count=0,2,4的时候,执行9分频,当count=1,3的时候,执行8分频
将 2 次 8 分频平均的插入到 3 次 9 分频中
6. 序列检测器
检测序列1001,检测到的时候输出1,没检测到的时候输出0
采用状态机的方法进行设计 IDLE--S1-S2-S3-S4
当时钟上升沿到来时采到的信号为1001时,output输出为1
7. 模三检测器
判断输入序列能否被三整除,能的时候输出1,不能的时候输出0
余数来说只存在0、1、2,加上IDLE需要四个状态
输入序列一边移位,一边输入,结合当前状态和输入序列判断输出的mealy型状态机
8. 售卖饮料机
每瓶饮料1.5元,一次只能投入一个硬币,可投入0.5与1.0两种硬币,具有找零功能
$random可以产生一个有符号的32bit随机整数,
$random%b 产生 -(b-1):(b-1) 随机整数
{$random}%b 产生 0:(b-1) 随机整数
9.异步复位同步释放电路
异步复位:对为0的复位信号不做处理,让其正常异步复位
同步释放:对为1的复位信号打两拍,使其拉高时对齐时钟边沿,以此来避免亚稳态的发生
10.半加器、全加器
半加器:S = A^B;Cout = A&B
全加器:S = A^B^Cin;Cout = (A&B)|(A&Cin)|(B&Cin)
11.二进制转格雷码
4bit二进制输入的格雷码的转换
gray_code = binary_code ^ (binary_code >> 1);
12.单比特时钟域切换
单bit宽度为10ns的data信号由频率为周期为10ns的时钟域同步至周期为7ns的时钟域,(慢到快)
打两拍进行同步
13.奇偶检测
奇偶校验位有两种类型:偶校验位与奇校验位。
以偶校验位来说,如果一组给定数据位中1的个数是奇数,补一个bit为1,使得总的1的个数是偶数。即各位进行异或
以奇校验位来说,如果给定一组数据位中1的个数是奇数,补一个bit为0,使得总的1的个数是奇数。偶校验取反
0代表正确,1代表错误
14.伪随机数生成器.线性反馈移位寄存器
线性反馈移位寄存器(LSFR),具体可以细分为斐波那契LFSR,伽罗瓦LFSR
15.同步FIFO
设计同步FIFO,数据位宽为8位,FIFO深度为16,输入端口clk,rst_n(复位信号),write_en(写使能),read_en(读使能),data_in,输出端口为empty(空信号),full(满信号),data_out。
16.无毛刺时钟切换电路
有两个时钟,A为50Mhz,B为100Mhz,根据控制信号control,输出所需时钟信号。
控制信号采用下降沿触发防止毛刺