CDC设计实例

加速器

假设要处理一项业务比如图像处理,有两种方向,第一种选择一些通用的处理器CPU\GPU\DSP等通用的处理器,第二种是将算法映射成IP,直接使用IP进行处理图像处理等专门的业务就是加速器。加速器是挂接到总线上的,类似于DMA,需要CPU派发一些任务给加速器执行。

软件配置

C代码--》编译成二进制文件--》二进制文件存放在RAM中--》CPU通过I-Cache读入二进制文件进行执行

CPU动态切换时钟,不能出现glitch



以三个时钟为例,有一个2bit的选择信号,DFT模式下选择Clk_scan进行输出;首先clk的enable信号经过几级寄存器打拍操作,然后输入到ICG中,滤除毛刺;ICG使用的是打过几拍之后的信号,ICG的enable是高电平有效的

如果选择clk1信号,select信号选择clk1会从0到1进行拉高,同时clk1到ICG的enable信号会被拉低,但是经过三级打拍之后,会延迟3个周期enable信号才会被拉低,在延迟的3个周期内,让clk2和clk3的enable失效,即使此时clk2和clk3的select信号拉高,但是不能用,形成一个真空区域(在这个时间内,没有时钟可用),经过三个周期之后,再输出选择的时钟

通过mux实现二选1得时钟,毛刺出现在时钟切换的过程中,通过硬件实现时钟切换,就是在切换时钟的过程中,产生一个真空地带,在这个区域中不会出现任何时钟,输出一直是低电平,经过这个地带之后,输出选择的稳定的时钟信号

CPU时钟切换的代码

module glitch_free(
clk_out,
cgm_sel,
clk_in0,
clk_in1,
clk_in2,
rst_clk_n,
scan_dc_mode,
icg_scan_mode,
clk_scan
); output clk_out;
input [1:0] cgm_sel; // 时钟选择信号2bit
input clk_in0;
input clk_in1;
input clk_in2;
input rst_clk_n;
input icg_scan_mode; // scan mode
input scan_dc_mode;
input clk_scan; // dft使用的时钟 // 定义三组打三拍的寄存器,9个register reg in0_en_sync1,in0_en_sync2,in0_en_sync3;
reg in1_en_sync1,in1_en_sync2,in1_en_sync3;
reg in2_en_sync1,in2_en_sync2,in2_en_sync3; // 判断是不是scan mode,如果是scan mode会将时钟切换为clk_scan
assign clk_in0_scan = scan_dc_mode ? clk_sacn : clk_in0;
assign clk_in1_scan = scan_dc_mode ? clk_sacn : clk_in1;
assign clk_in2_scan = scan_dc_mode ? clk_sacn : clk_in2; // 选择信号,三个enable信号
assign in0_sel = (cgm_sel [1:0] == 2'b00)
assign in1_sel = (cgm_sel [1:0] == 2'b01)
assign in2_sel = (cgm_sel [1:0] == 2'b10) // 三个时钟信号可用的标识,in0_en可用的所有可能情况
assign in0_used = in0_sel | in0_en_sync1 | in0_en_sync2 | in0_en_sync3;
assign in1_used = in1_sel | in1_en_sync1 | in1_en_sync2 | in1_en_sync3;
assign in2_used = in2_sel | in2_en_sync1 | in2_en_sync2 | in2_en_sync3; // en信号(与其他时钟相斥)
assign in0_en = ~in1_used & ~in2_used;
assign in1_en = ~in0_used & ~in2_used;
assign in2_en = ~in0_used & ~in1_used; always @(posedge clk_in0_sacn or negedge rst_clk_n) begin
// 复位信号,将寄存器输出置0
if(!rst_clk_n) begin
in0_en_sync1 <= 1'b0;
in0_en_sync2 <= 1'b0;
in0_en_sync3 <= 1'b0;
end
else begin
// 不是复位信号,进行三级寄存器打拍
in0_en_sync1 <= in0_en;
in0_en_sync2 <= in0_en_sync1;
in0_en_sync3 <= in0_en_sync2;
end
end always @(posedge clk_in1_sacn or negedge rst_clk_n) begin
// 复位信号,将寄存器输出置0
if(!rst_clk_n) begin
in1_en_sync1 <= 1'b0;
in1_en_sync2 <= 1'b0;
in1_en_sync3 <= 1'b0;
end
else begin
// 不是复位信号,进行三级寄存器打拍
in1_en_sync1 <= in1_en;
in1_en_sync2 <= in1_en_sync1;
in1_en_sync3 <= in1_en_sync2;
end
end always @(posedge clk_in2_sacn or negedge rst_clk_n) begin
// 复位信号,将寄存器输出置0
if(!rst_clk_n) begin
in2_en_sync1 <= 1'b0;
in2_en_sync2 <= 1'b0;
in2_en_sync3 <= 1'b0;
end
else begin
// 不是复位信号,进行三级寄存器打拍
in2_en_sync1 <= in2_en;
in2_en_sync2 <= in2_en_sync1;
in2_en_sync3 <= in2_en_sync2;
end
end
// 经过三级打拍的信号生成时钟门控信号
assign ind_in0 = in0_en_sync2; // generate the enable signal from the second stage synchronizer
assign ind_in1 = in1_en_sync2;
assign ind_in2 = in2_en_sync2; // 例化门控单元
cell_clock_gating u_clk_gate_out0 (
.TE (icg_scan_mode), // DFT:test mode
.E (ind_in0),
.CP (clk_in0),
.Q (clk_ou0)
); assign ind_in1_scan = ~scan_dc_mode & ind_in1; // 例化门控单元
cell_clock_gating u_clk_gate_out1 (
.TE (icg_scan_mode), // DFT:test mode
.E (ind_in1),
.CP (clk_in1),
.Q (clk_out1)
); assign ind_in2_scan = ~scan_dc_mode & ind_in2; // 例化门控单元
cell_clock_gating u_clk_gate_out2 (
.TE (icg_scan_mode), // DFT:test mode
.E (ind_in2),
.CP (clk_in2),
.Q (clk_out2)
); assign clk_out = clk_out0 | clk_out1 | clk_out2; endmodule

CDC设计实例-02的更多相关文章

  1. 分立元件封装尺寸及PCB板材工艺与设计实例

    分立元件封装尺寸 inch mm (L)mm (w)mm (t)mm (a)mm (b)mm 0201 0603 0.6±0.05 0.30±0.05 0.23±0.05 0.10±0.05 0.60 ...

  2. 推荐35个新鲜出炉的响应式 Web 设计实例

    响应式设计的准则在于根据用户使用的屏幕的分辨率来改变网站的的布局.因此,视频或图像的大小和文本的数量,可以被视为是一个明显的变化.让你即使从智能手机浏览一个网站的时候能轻松地看到网站上的重要内容.今天 ...

  3. [原创]obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用

    原文链接:obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用 我们在第16和第17篇中分别介绍了obj-c的KVC与KVO特性,当时举的例子比较fun,太抽象,貌似和实际不沾边哦.那么 ...

  4. obj-c编程15[Cocoa实例02]:KVC和KVO的实际运用

    我们在第16和第17篇中分别介绍了obj-c的KVC与KVO特性,当时举的例子比较fun,太抽象,貌似和实际不沾边哦.那么下面我们就用一个实际中的例子来看看KVC与KVO是如何运用的吧. 该例中用到了 ...

  5. 最新Dashboard设计实例、技巧和资源集锦,视觉和功能两不误,妥妥的!

    Dashboard设计,尽管设计师们叫法各不相同(例如:“数据面板设计”, “控制面板设计”, “仪表盘设计”或“后台界面设计”等等).但,此类设计的最终目都是力求以最直观.最简洁的方式呈现各种信息和 ...

  6. App启动页设计实例与技巧

    App启动页,也称闪屏页,最初是为缓解用户等待Web/iOS/Android App数据加载的焦虑情绪而出现,后被设计师巧妙用于品牌文化展示,服务特色介绍以及功能界面熟悉等平台进行设计,被赋予了更加丰 ...

  7. Oracle数据库设计实例-实时生产效率系统数据库设计

    Oracle数据库设计实例-实时生产效率系统数据库设计 引言 1.1 设计前提 某部门经理要求IT部门设计一个流水线实时生产效率系统,用来统计实时的生产量和效率.流水线有数百条,实时间隔为1min. ...

  8. LeetCode初级算法--设计问题02:最小栈

    LeetCode初级算法--设计问题02:最小栈 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...

  9. 邵国际: C 语言对象化设计实例 —— 命令解析器

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 邵国际 来源: 微信公众号linux阅码场(id: linuxdev) 内容简介 单片机工程师常常疑惑为什么 ...

  10. # RESTful登录(基于token鉴权)的设计实例

    使用场景 现在很多基于restful的api接口都有个登录的设计,也就是在发起正式的请求之前先通过一个登录的请求接口,申请一个叫做token的东西.申请成功后,后面其他的支付请求都要带上这个token ...

随机推荐

  1. 华企盾DSC防泄密软件造成VS启动报目录错误

    解决方法:找到安装路径下的Privateregistry.bin文件解密即可

  2. 数字孪生与GIS结合,为智慧交通带来的改变

    在当代社会,交通问题已经成为城市发展中的一个重要挑战.交通拥堵.安全隐患.环境污染等问题给人们的出行带来了许多不便和困扰.然而,随着数字孪生技术与地理信息系统(GIS)的融合,我们迎来了智慧交通的新时 ...

  3. 如何使用Redisson实现分布式锁?

    在分布式系统中,当多个线程(或进程)同时操作同一个资源时,为了保证数据一致性问题,所以就需要一种机制来确保在同一时间只有一个线程(或进程)能够对资源进行修改,这就是分布式锁的作用. 分布式锁是一种在分 ...

  4. 在Linux上部署.net Core 步骤以及遇到的一些问题

    Linux安装部署手册 一.安装.NET Core SDK centos 7 系统命令为: sudo rpm -Uvh https://packages.microsoft.com/config/ce ...

  5. Java 将Excel工作簿按工作表拆分为多个文档

    本文介绍在Java代码环境中如何将Excel工作簿按工作表拆分为多个Excel文档,即:把Excel工作簿中的每一个工作表单独保存为一个Excel工作簿文件. 思路及方法:通过将源文档中的每个工作表通 ...

  6. GaussDB(DWS)案例丨MERGE场景下语句不下推引起的性能瓶颈问题

    本文分享自华为云社区<GaussDB(DWS)性能调优:MERGE场景下语句不下推引起的性能瓶颈问题案例>,作者:O泡果奶~. 1.[问题描述] 语句执行时间过长,且该语句performa ...

  7. 云图说丨DDoS防护解决方案:DDoS大流量攻击防得住

    摘要:华为云安全服务打造DDoS防护解决方案,助您防患于未然,筑牢业务安全防线. 本文分享自华为云社区<[云图说]第255期 DDoS防护解决方案:DDoS大流量攻击防得住>,作者:阅识风 ...

  8. 华为云发布ModelBox AI应用开发框架

    摘要:华为云ModelBox AI应用开发框架,打通端边云边界,助力开发者实现AI应用一次开发,全场景部署. 近日,以"因聚而生,为你所能"为主题的华为伙伴暨开发者大会 2022隆 ...

  9. 火山引擎DataTester上线「集成工作台」功能,助力企业打造专属AB平台

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 AB测试不仅是做增长的"利器",也是企业优化效率.增加决策精确度的有效工具.随着国内企业服务市 ...

  10. 在 SDXL 上用 T2I-Adapter 实现高效可控的文生图

    T2I-Adapter 是一种高效的即插即用模型,其能对冻结的预训练大型文生图模型提供额外引导.T2I-Adapter 将 T2I 模型中的内部知识与外部控制信号结合起来.我们可以根据不同的情况训练各 ...