打拍优化时序{转载}

关于打拍优化时序你真的全面了解吗?-电子发烧友网 (elecfans.com)

Forward Registered

2d2f1292-a67f-11eb-aece-12bb97331649.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

  1. 复位条件

    if (rst_n == 1'b0)

    这个条件检查异步复位信号 rst_n 是否激活(低电平)。如果是,它将 valid_dstpayload_dst 信号重置为初始状态。

  2. 有效信号同步

    else if (valid_src == 1'b1) valid_dst <= #`DLY 1'b1; else if (ready_dst == 1'b1) valid_dst <= #`DLY 1'b0;

    这些行管理 valid_dst 信号,该信号表示是否有数据可供传输。# 符号前的 DLY 表示延迟,由 DLY 参数定义。这可能用于模拟时钟周期延迟或特定时间延迟。

    • 如果 valid_src(源有效信号)为高,valid_dst 在延迟后被置为高。
    • 如果 ready_dst(目标就绪信号)为高,它表示目标已准备好接受新数据,因此 valid_dst 在延迟后被清除。
  3. 负载传输

    else if (valid_src == 1'b1 && ready_src == 1'b1) payload_dst <= #`DLY payload_src;

    此条件检查 valid_srcready_src(源就绪信号)是否都为高,这表示是时候传输数据了。然后 payload_src 在定义的延迟后被赋值给 payload_dst

  4. 就绪信号生成

    ready_src = (~valid_dst) | ready_dst;

    这行计算 ready_src 信号。它由 valid_dst 的非值和 ready_dst 的逻辑或产生。这意味着如果 valid_dst 不高(数据已被接受且当前无效)或 ready_dst 为高(目标已准备好接受更多数据),ready_src 将为高。

需要注意的是,代码中使用了 1'b01'b1 来明确定义0和1的位级常量,这是Verilog中避免任何歧义的常见做法。

always @(posedge clk or negedge rst_n) 块表示块内的行为应在 clk 信号的正边沿或 rst_n 信号的负边沿时执行。

# 运算符用于延迟,这可能表示时钟周期延迟或根据仿真设置或综合指令的特定时间延迟。

2e3ed10e-a67f-11eb-aece-12bb97331649.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.

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

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

  • 23
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值