握手协议打拍

在芯片中常常用到握手协议中vaild或者ready延迟过大,此时需要对握手协议进行打拍。但打拍不能简单的拿寄存器打一拍。

前向打拍

如果对valid和数据打拍,那么就是前向打拍

复制代码
module cmm_streamPipeForward(
input clk,
input rst_n,
input slv_rvalid,
output slv_ready,
input [1:0] data,

output mst_valid,
output [1:0] mst_data,
input  mst_ready);

reg pipe_valid;
reg [1:0] pipe_data;

always@(posedge clk or negedge rst_n)
  begin
  if(~rst_n)
    begin
    pipe_valid <= 1'b0;
    pipe_data  <= 2'b0;
    end
  else
    begin
    if(slv_ready)
      begin
      pipe_valid <= slv_valid;
      pipe_data <= slv_data;
      end
    end
  end


assign mst_valid = pipe_valid;
assign mst_data = pipe_data;
assign slv_ready = pipe_valid ? mst_ready :1'b1;



endmodule 

后向打拍

后向打拍主要针对ready打拍。因为ready打拍,延迟一拍,所以内部也要缓存一笔数据。

复制代码
module cmm_straemPipeBackward(
  input  clk,
  input rst_n,
  input slv_valid,
  output slv_ready,
  input [1:0] data,
  output mst_valid,
  output [1:0] mst_data,
  input  mst_ready
);

reg pipe_ready;
reg pipe_data

always@(posedge clk or negedge rst_n)
  begin
  if(!rst_n)
    begin
    pipe_ready <=1'b1;
    pipe_data <=2'b0;
    end
  else
   begin
   if(slv_valid)
     begin
     pipe_ready <= 1'b0; 
     end
   if(mst_ready)
     begin
     pipe_ready <= 1'b1;
     end
    
   if(slv_ready)
     begin
     pipe_data <=slv_data;
     end
   end
  end


assign slv_ready = pipe_ready;
assign mst_valid = slv_valid ||(!pipe_ready);
assign mst_data = pipe_data;




endmodule

如果双边都要打拍,那么就需要加一个前向然后再加一个后向,组合起来。

相关推荐
2603_969579285 小时前
备份最常用的三个软件是什么软件
网络
缓慢更新6 小时前
表单引擎的存储建模:宽表与文档库的取舍
运维·服务器·网络·数据库·低代码·oracle·适配器模式
Data_Journal6 小时前
如何绕过 Cloudflare:网页抓取的最佳方法
网络·python
续写烂尾7 小时前
贴片 SD NAND、eMMC、TF 卡规格怎么定?硬件工程师选型清单
运维·服务器·网络
重生之高冷汉堡包7 小时前
移动代理 VS 住宅代理IP:性能成本对比与选择
网络
迪康妍妍7 小时前
终端管控实操:封堵网盘与IM外发通道的落地思路
运维·网络·安全·架构·安全性测试
科技小E7 小时前
监控设备品牌杂乱无法互通?EasyGBS打通孤岛,统一汇聚视频
服务器·网络·音视频
YH_Analytics7 小时前
2026-2032 食品吸液垫行业市场规模与增长预测
大数据·网络·人工智能
Data analyse4568 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
注塑机数据采集联网8 小时前
注塑机数据采集网关对接MES系统数字化技术方案
大数据·网络·数据库·物联网·数据挖掘·数据分析