verilog基本电路设计(包括:时钟域同步、无缝切换、异步fifo、去抖滤波)).docx

verilog基本电路设计(包括:时钟域同步、无缝切换、异步fifo、去抖滤波)).docx

Verilog 基本电路设计(包括:时钟域同步、无缝切换、 异 步 FIFO 、去抖滤波)) Verilog 基本电路设计共包括四部分: 单 bit 跨时钟域同步时钟无缝切换异步 FIFO 去抖滤波 Verilog 基本电路设计之一 : 单 bit 跨时钟域同步(帖子链接: /thread-605419-1-1.html )看到坛子里不少朋友, 对于基本数字电路存在这样那样的疑惑,本人决定开贴,介 绍数字电路最常见的模块单元,希望给初学者带来帮助,也 欢迎大佬们前来拍砖。如果想要做数字设计,下面这些电路 是一定会碰到的,也是所有大型 IP , SOC 设计必不可少的 基础,主要包括异步信号的同步处理, 同步 FIFO ,异步 FIFO , 时钟无缝切换,信号滤波 debounce 等等,后面会根据大家 反馈情况再介绍新电路。 首先介绍异步信号的跨时钟域同步问题。一般分为单 bit 的控制信号同步,以及多 bit 的数据信号同步。多 bit 的信号同步会使用异步 FIFO 完成,而单 bit 的信号同步, 又是时钟无 缝切换电路以及异步 FIFO 电路的设计基础,这里先介绍单 bit 信号同步处理。 clka 域下的信号 signal_a,向异步的 clkb 域传递时, 会产生 亚稳态问题。所有的亚稳态,归根结底就是 setup/hold 时间不满足导致。在同一个时钟域下的信号,综合以及布线工具 可以在 data 路径或者 clock 路径上插入 buffer 使得每一个 DFF 的 setup/hold 时间都满足;但是当 signal_a 在 clkb 域 下使用时,由于 clka 与 clkb 异步,它们的相位关系不确定,那么在 clkb 的时钟沿到来时, 无法确定 signal_a此时是否处于稳定无变化状态,也即 setup/hold 时间无法确定,从而产生亚稳态。这种异步信号在前后端 流程里面是无法做时序分 析的,也就是静态时序分析里常说的 false_path。 消除亚稳态,就是采用多级 DFF 来采样来自另一个时钟域的信号,级数越多,同步过来的信号越稳定。对于频率很高的 设计,建议至少用三级 DFF ,而两级 DFF 同步则是所有异 步信号处理的最基本要求。 单 bit 的信号跨时钟域同步,又分成电平信号同步以及脉冲 信号同步。 电平信号, 就是说 clka 下的信号 signal_a在 clkb 看来,是一个很宽的信号,会保持多个 clkb 的时钟周期,一定能被 clkb 采到。这种情况,只需要使用 clkb 用至少两级 DFF 连续抓 signal_a即可, 特别需要强调的是, 此时 signal_a 必须是 clka 下的寄存器信号,如果 signal_a 是 clka 下的组合逻辑信号,一定要先在 clka 下用 DFF 抓一拍,再使用两 级 DFF 向 clkb 传递。这是因为 clka 下的组合逻辑信号会有毛刺,在 clka 下使用时会由 setup/hold 时间保证毛刺不会被 clka 采到,但由于异步相位不确定,组合逻辑的毛刺却极有 可能被 clkb 采到。电平信号的同步处理, 一般用于知道确定的时钟频率大小关系或者极慢时钟下的信号向极快时钟域 传递时使用,简单处理如下: always @ (posedge clkb or negedge rst_n)begin if (!rst_n) begin levl_b_d1 levl_b_d2 levl_b_d3 end else begin puls_b_pos=levl_b_d2 puls_b_pos = levl_b_d2 puls_b_neg = levl_b_d3 (~levl_b_d3);assign (~levl_b_d2); assign levl_b_out= levl_b_d2; 上面三个输出分别是经过同步之后, clkb 下可以使用的 0 变 1 脉冲信号, 1 变 0 脉冲信号以及电平信号。再次强调: levl_a_in 必须是 clka 的 DFF 信号!下面是更常见的, clka 下的脉冲信号,同步到 clkb 时钟域下,它对于 clka 与 clkb 的时钟频率关系没有任何限制,快到慢,慢到快都没问题。 其主要原理就是先把脉冲信号在 clka 下展宽,变成电平信号,再向 clkb 传递,当确认 clkb 已经“看见”信号同步过去之后,再清掉 clka 下的电平信号。 脉冲信号同步处理电路, 有两个地方使用了上面的电平信号同步处理原则,请仔细揣摩原因。 详细见下面的 RTL ,其中省略了信号定义声明: module sync_pulse ( // input

文档评论(0)

1亿VIP精品文档

相关文档