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 ...
随机推荐
- 常用jQuery代码02
一.each函数拿到每个元素的宽度 setTimeout(function () { $(".sticker_list img").each(function () { var W ...
- js判断input为空校验
突然发现最近js发现的问题比较多,更发现我怎么快成了前端开发了?不能够啊!我后台怎么不出问题呢?我的后台是太简单了吗?mybatis-dao-service-controller返回给前台...... ...
- Java学习-017-EXCEL 文件读取实例源代码
众所周知,EXCEL 也是软件测试开发过程中,常用的数据文件导入导出时的类型文件之一,此文主要讲述如何通过 EXCEL 文件中 Sheet 的索引(index)或者 Sheet 名称获取文件中对应 S ...
- std::map的clear()没有用?
昨天晚上,我徒弟跑过来讲,他的程序的内存占用居高不下,愿意是std::map的clear()没有效果.于是我让他用erase(begin,end); 试试也不行. 代码如下: void release ...
- imx6 uboot lcd
本文记录imx6 uboot中关于lcd初始化的过程. uboot中相关的文件: cpu/arm_cortexa8/start.S lib_arm/board.c board/freescale/mx ...
- linux命令之echo
echo可以用来输出显示变量和常量,还可以用来写文件. 最简单的方式:使用 echo 命令 #echo abcbedf>>a.txt 将abcdef追加到a.txt文件末尾 往文件中写入内 ...
- JQuery: 基本知识了解
一.介绍:jQuery 是一个 JavaScript函数库.它极大地简化了 JavaScript 编程.jQuery 库可以通过一行简单的标记被添加到网页中.jQuery 是一个轻量级的"写 ...
- disable jboss JMXInvokerServlet .
jboss 默认有几个控制台,都是可能存在漏洞被黑客利用,除了web console .jmx console. 还有JMXInvokerServlet,访问路径是ip/invoker/JMXInvo ...
- [BS-09] UITabBarController简单介绍
iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...
- Android --Android Stuido混淆签名打包
参考博客:Android studio 使用心得(五)—代码混淆和破解apk 参考博客:Android studio 使用心得(四)---android studio 多渠道打包 参考博客:Andro ...