一个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的更多相关文章

  1. clock

    Prime Time中的clock分析包括: 1)Multiple clocks,clock from port/pin,virtual clock. 2)Clock network delay an ...

  2. STM8S——Clock control(CLK)

    1.主时钟源 有四种时钟源可以用做主时钟: (1)1-24MHz高速外部晶体振荡器(HSE) (2)最大24MHz高速外部时钟信号(HSE user-ext) (3)16MHz高速内部RC振荡器(HS ...

  3. 详解树莓派Model B+控制蜂鸣器演奏乐曲

    步进电机以及无源蜂鸣器这些都需要脉冲信号才能够驱动,这里将用GPIO的PWM接口驱动无源蜂鸣器弹奏乐曲,本文基于树莓派Mode B+,其他版本树莓派实现时需参照相关资料进行修改! 1 预备知识 1.1 ...

  4. CE STEPLDR

    作用:初始化CPU.内存.Flash,复制EBoot到内存并跳入EBoot中运行. 原理:S3C2416有 8-KB 的steppingstone(暂时翻译为垫脚石),在Nand启动模式下可把Nand ...

  5. PIC32MZ tutorial -- OC Interrupt

    In my previous blog "PIC32MZ tutorial -- Output Compare", I shows how to apply Output Comp ...

  6. PIC32MZ tutorial -- External Interrupt

    In my older blog "PIC32MZ tutorial -- Key Debounce", I shows how to acheive key debounce w ...

  7. Cotex-M3内核LPC17xx系列时钟及其配置方法

    一.背景: 最近正在接手一个项目,核心芯片既是LPC17XX系列MCU,内核为ARM的Cotex-M3内核. 想要玩转一个MCU,就一定得搞定其时钟! 时钟对MCU而言,就好比人类的心脏.由其给AHB ...

  8. sja1000芯片can驱动程序

    应用层使用socketCan的方法:http://pan.baidu.com/s/1ntsvbb7#path=%252Floongson1%252Ftools%252Fcan 功能:对can驱动程序的 ...

  9. PIC32MZ tutorial -- Output Compare

    Output Compare is a powerful feature of embedded world. The PIC32 Output Compare module compares the ...

随机推荐

  1. Processes vs Threads

    A process is an executing instance of an application. What does that mean? Well, for example, when y ...

  2. Windows-004-显示文件的扩展名

    此文主要讲述 Windows 7 下如何显示文件的扩展名,敬请亲们参阅.若有不足之处,敬请大神指正,不胜感激! 通常安装好 Win7 后,文件的扩展名默认是不显示的,如下所示: 点击工具栏中的 组织, ...

  3. iOS初级数据持久化 沙盒机制 归档与反归档

    数据持久化就是数据保存成文件,存储到程序中的沙盒中. 沙盒构成 Document 存储用户数据,需要备份的信息 Caches 缓存文件, 程序专用的支持文件 Temp 临时文件 通过代码查找程序沙盒的 ...

  4. 24C02 Twr

    连续写24C02,只有第一次能够成功,后面写都失败了.这次调整写的时间间隔.调成了5ms,才成功. 查看datasheet,发现有一个tWR参数.表示写的最小时间间隔.这个时间应该是内部写入所需要的时 ...

  5. ubuntu12.04 安装 setuptools

    ubuntu 12.04 安装django时,提示缺少setuptools. 转载自: http://blog.csdn.net/xudongtiankong/article/details/8180 ...

  6. Oracle中的数据类型和数据类型之间的转换

    Oracle中的数据类型 /* ORACLE 中的数据类型: char 长度固定 范围:1-2000 VARCHAR2 长度可变 范围:1-4000 LONG 长度可变 最大的范围2gb 长字符类型 ...

  7. 用MFC时,如果程序崩溃,检查内存,然后注意GDI数量,在任务管理器里选项-查看列-GDI数量

    用MFC时,如果程序崩溃,检查内存,然后注意GDI数量,在任务管理器里选项-查看列-GDI数量

  8. linux查看防火墙状态及开启关闭命令(转)

    存在以下两种方式: 一.service方式 查看防火墙状态: [root@centos6 ~]# service iptables status iptables:未运行防火墙. 开启防火墙: [ro ...

  9. thinkphp扩展 根据前端批量建立字段

    /*批量添加字段辅助*/ function add_colum($tabel){ foreach ($_POST as $key=>$value){ $array[] = "add & ...

  10. WinForm数字小键盘/WPF数字小键盘

    模仿原本的WinForm触摸屏小键盘制作WPF触摸屏小键盘 原WinForm触摸屏小键盘样式(WinForm采用Krypton系列控件)如下图: Designer代码如下: // // BtnNum1 ...