【数字IC手撕代码】Verilog半整数分频|题目|原理|设计|仿真
芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 |
---|
四社区联合力荐!近500篇数字IC精品文章收录! |
【数字IC精品文章收录】学习路线·基础知识·总线·脚本语言·芯片求职·EDA工具·低功耗设计Verilog·STA·设计·验证·FPGA·架构·AMBA·书籍 |
Verilog半整数分频
- 一、前言
- 二、半整数分频题目
- 三、半整数分频原理
- 四、RTL设计
- 五、半整数分频的Testbench
- 六、结果分析
一、前言
本系列旨在提供100%准确的数字IC设计/验证手撕代码环节的题目,原理,RTL设计,Testbench和参考仿真波形,每篇文章的内容都经过仿真核对。快速导航链接如下:
1.奇数分频
2.偶数分频
3.半整数分批
4.小数/分数分频
5.序列检测器
6.模三检测器
7.饮料机
8.异步复位,同步释放
9.边沿检测(上升沿,下降沿,双边沿)
10.全加器,半加器
11.格雷码转二进制
12.单bit跨时钟域(打两拍,边沿同步,脉冲同步)
13.奇偶校验
14.伪随机数生成器[线性反馈移位寄存器]
15.同步FIFO
16.无毛刺时钟切换电路
应当说,手撕代码环节是面试流程中既重要又简单的一个环节,跟软件类的岗位相比起来,数字IC的手撕代码题目固定,数量有限,属于整个面试中必得分的一个环节,在这个系列以外,笔者同样推荐数字IC求职者使用“HdlBits”进行代码的训练
链接如下
HDLBits — Verilog Practice
二、半整数分频题目
- 用verilog实现3.5分频电路
- 用verilog实现N.5分频电路
三、半整数分频原理
在第四章,我们实现了小数分频和分数分频,正常已经涵盖了半整数分频的部分,那么我们为什么现在还要来单独强调半整数分频呢?
理由有二
1、虽然说第四章的小说分频可以用来实现半整数分频,但是正对于半个周期的特殊分频,我们可以使用更为有效的电路结构来缩小实现所需的面积,优化面积的价值,就是单独讨论半整数分频的意义之一。
2、对于使用小数分频法得到的,以3.5分频为例,需要使用一个四分频和一个三分频,七个周期内,输出两个1,这个平均概念使clock jitter很大,时钟信号的质量得不到保证,用新的方法得到的分频信号可以做出每一个周期都是3.5T的效果,时钟抖动为零,信号的质量更好,以下提出的设计方法主要是因为这个优点
半整数分频可以实现50%占空比吗?
很困难
对于3.5分频来说,需要1.75个时钟周期进行一次翻转,这种存在1/4周期的翻转很难仅仅通过数字电路/Verilog取实现,因此我们不将占空比作为关注的重点,仅仅考量3.5分频的电路结构
具体原理
用上升沿和下降沿各产生一个7分频的时钟信号,这两个信号的距离是3.5个时钟周期,用逻辑或的形式,即可产生无抖动3.5分频信号
四、RTL设计
module half_divide (clk,rst_n,clk_out);input clk;
input rst_n;
output clk_out;reg [3:0] p_cnt;
reg [3:0] n_cnt;wire p_out;
wire n_out;always@(posedge clk or negedge rst_n)
if(!rst_n)
p_cnt <= 4'd0;
else if(p_cnt < 4'd6)
p_cnt <= p_cnt + 1'b1;
else
p_cnt <= 4'd0;always@(negedge clk or negedge rst_n)
if(!rst_n)
n_cnt <= 4'd0;
else if(n_cnt < 4'd6)
n_cnt <= n_cnt + 1'b1;
else
n_cnt <= 4'd0;assign p_out = p_cnt == 4'd0 ? 1 : 0;
assign n_out = n_cnt == 4'd4 ? 1 : 0;assign clk_out = p_out || n_out;endmodule
五、半整数分频的Testbench
`timescale 1ns /1ps
module half_dividet_tb();
reg clk;
reg rst_n;
wire clk_out;half_divide u1(.clk(clk),.rst_n(rst_n),.clk_out(clk_out));always #5 clk = ~clk;initial
begin
clk = 0;
rst_n =1;#15 rst_n = 0;
#24 rst_n = 1;
#4000
$stop;endendmodule
六、结果分析
可以发现,当信号复位后,clk_out作为输出,的周期为35ns,即完成了3.5分频的目标
【数字IC手撕代码】Verilog半整数分频|题目|原理|设计|仿真相关推荐
- 数字IC手撕代码-兆易创新笔试真题
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码---百题斩
前言: 本篇导览目录,用来索引笔者写的其他手撕代码文章 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC ...
- 数字IC手撕代码--小米科技(除法器设计)
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-泰凌微笔试真题
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-分频器(任意偶数分频)
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-流水握手(利用握手解决流水线断流、反压问题)
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-乐鑫科技笔试真题(4倍频)
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-同步FIFO
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
- 数字IC手撕代码-边沿检测(上升沿、下降沿、双边沿)
前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...
最新文章
- OpenStack(Kilo版本)基础架构学习笔记
- PHP 7.3声称速度比PHP 5快3倍还多,值得更新了!
- 意法半导体STM32 ARM Cortex 32位微控制器
- 编程练习:Matlab 一个小任务(-)
- matlab fspeical,matlab的special函数用法
- Amazon S3和Swift鉴权机制分析
- 谷歌云计算机,google云计算的三大核心技术
- 提高文档翻译效率神器:VS Code 插件之 Translator Helper
- ZOJ1081 Points Within
- asp.net 生命周期中的时间流程
- Linux基础——操作系统框架
- 创建界面_《魔兽世界》智慧烈风buff延长 9.0版本角色创建界面改动
- Atitit.guice3 ioc 最佳实践 o9o
- 无限增益多路反馈有源滤波器
- 深度学习教程(3) | 浅层神经网络(吴恩达·完整版)
- 如何通俗理解泊松分布?
- Android studio的gradle教程整理
- 排列组合cn和an公式
- ios看html文件乱码,iOS webView 打开 TXT/PDF 文件乱码的问题
- java opencv 图片读取,边缘化,写出图片操作