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 ...
随机推荐
- Java实验五报告——TCP传输及加解密
一.实验内容 1.运行教材上TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代码,一人加密后通过TCP发送: 注:加密使用AES或者D ...
- UIPickerView 循环滚动(一种假象)
因为网上没有查到相关方法,故而采用一种假象的方法来实现,选项循环滚动 - (void)viewDidLoad { [super viewDidLoad]; /** UIPickerView 选择器 * ...
- A股市场各行业龙头股一览表
A股市场各行业龙头股一览表 一.指标股: 工商银行.中国银行.中国石化.中国国航.宝钢股份. 中国神华.建设银行.招商银行.华能国际.中国联通. 长江电力.中国人寿.中国石油 二.金融: 招商银行.浦 ...
- saltstack之(五)数据系统Grains和Pillar
一.grains 1.什么是grainsgrains:存储minion端的信息,包括一些网络.硬件等信息,保存在minion端.一般为静态信息,非经常变化的数据. 2.grains的使用:获取mini ...
- Linux中的元字符和转义符 单引号 硬引号 双引号 软引号
Linux中的元字符和转义符 单引号 硬引号 双引号 软引号 Linux就这个范儿 Linux就这个范儿 P182单引号:硬引号,所有元字符特殊意义都会关掉双引号:软引号,只允许出现特定元字符 ...
- 磁盘空间已满导致rabbitmq无法启动
rabbitmq-server 启动问题 今天遇到一个挺奇怪的 rabbitmq-server 的启动问题. 在内部使用的 openstack 环境上,rabbitmq-server突然就关掉了,无法 ...
- zookeeper节点数与watch的性能测试
zookeeper中节点数量理论上仅受限于内存,但一个节点下的子节点数量受限于request/response 1M数据 (size of data / number of znodes) zooke ...
- VMWare ESXi 5.5安装及配置
VMWare ESXi 5.5安装大概过程如下:制作虚拟化ESXi系统的USB启动盘,安装ESXi系统到USB,用USB启动ESXi系统.比较难理解,下面图解过程. 下载UNetbootin (下 ...
- VisualStudio如何以源码文本方式打开rc文件
视图 >> 解决方案资源管理器 >> 右击XXX.rc >> 打开方式 >> 源代码(文本)编辑器
- InitializingBean afterPropertiesSet
package org.test.InitializingBean; import org.springframework.context.support.ClassPathXmlApplicatio ...