0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

setup/hold的概念

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-07-25 10:09 次阅读

如果你参加过IC校招面试,自然会被问到“setup/hold的概念,以及setup/hold违例怎么办?”

这时候,你肯定会立马在脑海中从打拍或者插buffer两个答案中选一个。但是在实际项目中,往往没有这么简单。举一个实际的场景:

5bf7b42c-0ae6-11ed-ba43-dac502259ad0.png

AXI master和AXI slave这一簇信号出现setup时序违例怎么办?

1、从AXI master 到AXI slave 出现setup违例;

2、从AXI slave 到AXI master出现setup违例;

3、两者都出现setup时序违例。

所以AXI master和AXI slave之间的打拍会存在4中模式:

Forward Registered :对valid和payload路打拍

Backward Registered :对ready路打拍

Fully Registered :同时对valid/payload路和ready路打拍

Pass Through Mode:Bypass,均不打拍

这个问题没那么容易或者说不能够直接打拍,是因为这一簇信号遵循valid-ready协议,需要打拍的信号间存在时序的耦合

所以问题就简化成如何在遵循valid -ready协议的master和slave 之间完成“打拍”,或者说在打拍的同时处理valid-ready协议。

Forward Registered

5c140fc8-0ae6-11ed-ba43-dac502259ad0.png

always @(posedge clk or negedge rst_n)begin   if (rst_n == 1'd0)       valid_dst <= 1'd0;   else if (valid_src == 1'd1)       valid_dst <= #`DLY 1'd1;   else if (ready_dst == 1'd1)       valid_dst <= #`DLY 1'd0;end always @(posedge clk or negedge rst_n)begin   if (rst_n == 1'd0)       payload_dst <= 'd0;   else if (valid_src == 1'd1 && ready_src == 1'd1)       payload_dst <= #`DLY payload_src;end ready_src = (~valid_dst) | ready_dst

5c2e0ed2-0ae6-11ed-ba43-dac502259ad0.png

现在来分析下上述Forward Registered 打拍代码的几个输出端口

valid_dst:在master发请求(拉高valid_src)时拉高valid_dst,直到当前master没有valid请求并且slave可以接收请求(拉高ready_dst)时拉低valid_dst,表示一次传输完成。

payload_dst:在master发请求(拉高valid_src),并且前面没有请求、请求已经被接收或者正在被接收时将payload_src打拍赋给payload_dst。

其实master本身也会遵循valid-ready协议,payload_src和valid_src做同样处理就行,即也可以在(valid_src == 1'd1 && ready_src == 1'd0)时进行赋值,因为此时payload_src输入应该约束保持原始数据。

ready_src:register slice或者slave可以接收数据时拉高ready_src.

Backward Registered

5c4b1df6-0ae6-11ed-ba43-dac502259ad0.png

always @(posedge clk or negedge rst_n)begin   if (rst_n == 1'd0)       valid_tmp0 <= 1'd0;   else if (valid_src == 1'd1 && ready_dst == 1'd0 &&valid_tmp0 == 1'd0)       valid_tmp0 <= #`DLY 1'd1;   else if (ready_dst == 1'd1)       valid_tmp0 <= #`DLY 1'd0;end always @(posedge clk or negedge rst_n)begin    if (rst_n == 1'd0)       payload_tmp0 <= 'd0;   else if (valid_src == 1'd1 && ready_dst == 1'd0 &&valid_tmp0 == 1'd0)       payload_tmp0 <= #`DLY payload_src;end assign payload_dst = (valid_tmp0 == 1'd1) ?payload_tmp0 : payload_src; always @(posedge clk or negedge rst_n)begin   if (rst_n == 1'd0)       ready_src <= 1'd0;   else       ready_src <= #`DLY ready_dst;end

Backward Registered 打拍相比较Forward Registered 会复杂点,因为存在slave没有ready时master发来请求,需要暂存payload的场景。

5c5c301e-0ae6-11ed-ba43-dac502259ad0.png

现在来分析下上述Backward Registered打拍代码的几个输出端口:

ready_src:对ready通路直接进行打拍。

valid_dst:当slave没有ready,master发来请求时拉高标志位valid_tmp0,表示下一次slave准备好之后应该从register slice内暂存的payload拿数据

payload_dst:当slave没有ready,master发来请求时暂存payload到payload_tmp。最终的payload_dst根据标志位valid_tmp0从payload_tmp和payload_src之间选择

Fully Registered

类似于,简单理解就是个乒乓BUFFER,使用非空信号做valid_dst;payload的非满信号做ready_src

Pass Through Mode

直接相连

通过上述分析,可以使用register slice mode参数化的库,在后端要求AXI BUS打拍时直接调用,而无需重复造轮子。

原文标题:打拍优化时序不像听起来那么简单

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

审核编辑:彭静

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6512

    浏览量

    87601
  • 时序
    +关注

    关注

    5

    文章

    357

    浏览量

    36957
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66772
  • Setup
    +关注

    关注

    0

    文章

    30

    浏览量

    11835

原文标题:打拍优化时序不像听起来那么简单

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Setup/Hold Time Problem

    Setup/Hold Time ProblemConclusionIf the Setup/Hold time error happen on the Input Register (
    发表于 09-11 09:23

    【FPGA经典试题】电路模块的setup-time和hold-time是正值还是负值

    请问:a.对于一个D-FF 而言,它的setup-time 和hold-time 是正值还是负值?为什么?b.对于一个电路模块(包括多个组合逻辑子模块及时序逻辑子模块)而言,它
    发表于 03-15 10:41

    解释下setuphold time

    本帖最后由 gk320830 于 2015-3-5 18:27 编辑 setup/hold time 是测试芯片对输入信号和时钟信号之间的时间要求。建立时间是指触发器的时钟信号上升沿到来以前,数据稳定不变的时间。保持时间是指触发器的时钟信号上升沿到来以后,数据稳定不
    发表于 04-12 16:40

    请问AD80370中hold up time为负值是为什么?

    在AD80370的datasheet里面有SYSREF± Setup and Hold Timing 这个时序图,但是为什么图中标示的holdup time是负值,如果这样的话那device
    发表于 10-09 16:09

    什么是SetupHold时间

    什么是SetupHold时间?答:Setup/Hold Time 用于测试芯片对输入信号和时钟信号之间的时间要求。建立时间(Setup T
    发表于 12-21 07:39

    怎么解释setup time和hold time的定义和在时钟信号延迟时的变化呢?

    怎么解释setup time和hold time的定义和在时钟信号延迟时的变化呢?
    发表于 05-10 11:46

    Sample Hold Has Zero Droop and

    Sample Hold Has Zero Droop and Infinite Hold
    发表于 04-18 20:33 24次下载

    建立时间和保持时间(setup time 和 hold time)

    建立时间和保持时间贯穿了整个时序分析过程。只要涉及到同步时序电路,那么必然有上升沿、下降沿采样,那么无法避免setup-time 和 hold-time这两个概念。 1. 什么是setup
    发表于 02-08 14:48 5034次阅读

    关于打拍优化时序你真的全面了解吗?

    如果你参加过IC校招面试,自然会被问到“setup/hold概念,以及setup/hold违例怎么办?”
    的头像 发表于 04-27 14:15 3934次阅读
    关于打拍优化时序你真的全面了解吗?

    什么是Setup和Holdup时间?如何解决亚稳态?

    Setup/hold time 是测试芯片对输入信号和时钟信号之间的时间要求。
    的头像 发表于 06-21 15:13 1.1w次阅读
    什么是<b class='flag-5'>Setup</b>和Holdup时间?如何解决亚稳态?

    为什么setup检查下一个沿而hold检查当前沿

    做数字电路设计的可能都见过图一所示的setuphold时间检查,从图中可以明显看出,setup time检查下一个沿,而hold time检查同一个沿。那么这是为什么呢 ?
    的头像 发表于 11-21 10:30 2903次阅读

    怎么解决解决Hold Time违例的问题呢

    在Place Design之后再去看Hold Time,如果此时Hold Time的违例比较小(比如-0.05ns),还是不需要理会的
    的头像 发表于 01-11 09:05 2645次阅读

    通过解剖一个边沿触发器简要说明setuphold产生原因

    在后仿真过程中经常会遇到关于setuphold violation的问题,但是关于setuphold time的产生原因和由来很多人还比较朦胧,为此本文通过解剖一个边沿触发器简要说
    的头像 发表于 07-04 09:32 804次阅读
    通过解剖一个边沿触发器简要说明<b class='flag-5'>setup</b>和<b class='flag-5'>hold</b>产生原因

    什么是SetupHold时间?

    什么是SetupHold时间? SetupHold时间是数字电路中一种时序要求,用于确保稳定的数据传输和正确的电路操作。 在数字电路中,数据的传输需要遵循一定的时间要求。
    的头像 发表于 11-17 14:11 1278次阅读

    SOCV/POCV下寄存器的hold margin问题分析

    我们都知道,在做hold time检查的时候,是需要从lib中读取reg的hold requirement time,或者说hold margin。
    的头像 发表于 12-05 14:18 230次阅读