clock divider
一个clock的产生:
1) Clock source的选择:
cgm_mux5(.clk_out,
.clk_in0,
.clk_in1,
.clk_in2,
.clk_in3,
.clk_in4,
.sel_in,
.ptest_scan_dc_mode );
在dc_scan mode下,选择某一个clock freq。
Sel_in_scan = {3{~ptest_scan_dc_mode}} & sel_in[2:0]
将所有的mux做成2x1的。5选1的mux,可以先进行4x1的选择,再进行2x1的选择,4选1的mux,可以分为三个2x1的选择。
Z_i0 = S0 ? I1 : I0;
Z_i1 = S0 ? I3 : I2;
Z = S1 ? Z_I1 : Z_I0;
2) Clock div的处理:
u_cgm_divn_clk_sim0(
.clk_div (clk_sim0_gen),
.div_ratio (cgm_ratio_sim0),
.cgm_busy (cgm_busy_sim0),
.clk_in (clk_sim0_mux),
.rst_clk_in (rst_clk_n),
.cgm_div (cgm_sim0_div_ac[2:0]),
.cgm_en (cgm_sim0_en_ac),
.ptest_scan_dc_mode (ptest_scan_dc_mode),
.ptest_icg_mode (ptest_icg_mode),
.clk_scan (clk_scan_occ), );
首先在clk_in与clk_scan之间进行mux,产生clock,clk_in_scan(该clk只用在cgm_en的同步)。
再次基于clk_in_scan进行cgm_en的sync处理。这时的rst可能并没有进行同步释放处理。
再次cgm_active = cgm_en_sync | ~cnt_zero。(cnt_zero无效时,clock为低电平允许进行gate操作)
再次加入clock_gate
clk_gate u_clk_gate_in(
.genp (cgm_active),
.lclkp (clk_In),
.testmodep (ptest_icg_mode),
.gclkp (clk_in_gate));
再次加入mux,在clk_scan和clk_in_gate之间进行选择。Selcet信号ptest_scan_dc_mode,产生clk_in_gate_scan
再次进行Counter Divider
Always @(posedge clk_in_gate_scan or negedge rst_clk_n)
If(~rst_clk_n) div_cnt < = WIDTH{1’b0}
else if(cnt_zero) div_cnt <= cgm_div[WIDTH-1:0]
else div_cnt <= div_cnt[WIDTH-1:0] – 1’b1;
再次cnt_zero和cnt_half的组合逻辑。
assign cnt_zero = (div_cnt[WIDTH:0] == {WIDTH{1’h0}} ) ? 1’b1 : 1’b0;
assign cnt_half = (div_cnt[WIDTH-1:0] == (cgm_div[WIDTH-1:1] + cgm_div[0])) ? 1’b1 : 1’b0;
再次generated clock
Always @(posedge clk_in_gate or negedge rst_clk_n)
If(~rst_clk_n) clk_div_gen = 1’b0;
else if(div_sel == 1’b0) clk_div_gen = 1’b0;
else if(cnt_zero) clk_div_gen = 1’b1;
else if(cnt_half) clk_div_gen = 1’b0;
else clk_div_gen = clk_div_gen;
3) 最终mux选择。
Assign div_sel = (cgm_div[WIDTH-1:0] == {WIDTH{1’b0}}) ? 1’b0 : 1’b1;
Assign div_sel_scan = ~ptest_scan_dc_mode & div_sel;
Mux2x1 u_mux2_clk_div(
.in1 (clk_in_gate),
.in2 (clk_div_gen),
.c (div_sel_scan),
.out (clk_div)
);
Assign div_ratio = cgm_active & cnt_zero;
Assign cgm_busy = cgm_en | cgm_en_sync | ~cnt_zero
clock divider的更多相关文章
- clock
Prime Time中的clock分析包括: 1)Multiple clocks,clock from port/pin,virtual clock. 2)Clock network delay an ...
- STM8S——Clock control(CLK)
1.主时钟源 有四种时钟源可以用做主时钟: (1)1-24MHz高速外部晶体振荡器(HSE) (2)最大24MHz高速外部时钟信号(HSE user-ext) (3)16MHz高速内部RC振荡器(HS ...
- 详解树莓派Model B+控制蜂鸣器演奏乐曲
步进电机以及无源蜂鸣器这些都需要脉冲信号才能够驱动,这里将用GPIO的PWM接口驱动无源蜂鸣器弹奏乐曲,本文基于树莓派Mode B+,其他版本树莓派实现时需参照相关资料进行修改! 1 预备知识 1.1 ...
- CE STEPLDR
作用:初始化CPU.内存.Flash,复制EBoot到内存并跳入EBoot中运行. 原理:S3C2416有 8-KB 的steppingstone(暂时翻译为垫脚石),在Nand启动模式下可把Nand ...
- PIC32MZ tutorial -- OC Interrupt
In my previous blog "PIC32MZ tutorial -- Output Compare", I shows how to apply Output Comp ...
- PIC32MZ tutorial -- External Interrupt
In my older blog "PIC32MZ tutorial -- Key Debounce", I shows how to acheive key debounce w ...
- Cotex-M3内核LPC17xx系列时钟及其配置方法
一.背景: 最近正在接手一个项目,核心芯片既是LPC17XX系列MCU,内核为ARM的Cotex-M3内核. 想要玩转一个MCU,就一定得搞定其时钟! 时钟对MCU而言,就好比人类的心脏.由其给AHB ...
- sja1000芯片can驱动程序
应用层使用socketCan的方法:http://pan.baidu.com/s/1ntsvbb7#path=%252Floongson1%252Ftools%252Fcan 功能:对can驱动程序的 ...
- PIC32MZ tutorial -- Output Compare
Output Compare is a powerful feature of embedded world. The PIC32 Output Compare module compares the ...
随机推荐
- 逻辑运算符——逻辑与&&、逻辑或||
一直以来,都是认为逻辑运算符返回的是布尔值,却突然发现:并不是这样. 对于||来说,如果条件判断结果为true就返回第一个操作数的值,如果为false就返回第二个操作数的值. &&则相 ...
- CSS弹性盒布局
<html> <head> <meta charset="utf-8"/> <title></title> <st ...
- about eclipse
导出javadoc command选择bin下的javadoc.exe 配置编码和文字 英文:-locale en_US -encoding UTF-8 -charset UTF-8 中文:-loca ...
- socketserve及其应用
1.cmd命令 利用socket socket服务端 import socket import subprocess s = socket.socket() s.bind(("127.0.0 ...
- iOS 并发编程之 Operation Queues
现如今移动设备也早已经进入了多核心 CPU 时代,并且随着时间的推移,CPU 的核心数只会增加不会减少.而作为软件开发者,我们需要做的就是尽可能地提高应用的并发性,来充分利用这些多核心 CPU 的性能 ...
- SET Statements for SQLServer
SET SHOWPLAN_ALL { ON | OFF } It will not execute the TSQL statements. It cannot be specified inside ...
- cat 命令(转)
cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1.命令格式: cat [选项] [文件] ...
- Android 使用PullToRefresh实现下拉刷新和上拉加载(ExpandableListView)
PullToRefresh是一套实现非常好的下拉刷新库,它支持: 1.ListView 2.ExpandableListView 3.GridView 4.WebView 等多种常用的需要刷新的Vie ...
- Siri开源了,33%的开发者持疑虑态度,你呢?
33%的中国开发者对Siri 开放持疑虑态度? 目前来说在iOS 10中,Siri API仅仅支持六类应用程序:打车,通讯,照片搜索,支付,网络电话和锻炼.另外还有一个面向汽车制造商的特殊使用案例,让 ...
- [BS-13] 创建和注册UITableViewCell及Storyboard和Xib区别
创建和注册UITableViewCell及Storyboard和Xib区别 // 界面创建完成被调用 - (void)viewDidLoad { [super viewDidLoad]; /** 如果 ...