Verilog设计_握手信号

文章介绍了握手机制在上游master和下游slave通信中的作用,确保数据传输的稳定可靠。通过三种情况详细说明握手机制的工作过程,并提供了Verilog代码实现,包括数据传输和valid、ready信号的交互。测试波形验证了一种特定情况下的握手流程。
摘要由CSDN通过智能技术生成

一个简单的握手机制的设计。

目录

一、握手机制概述

二、代码实现


一、握手机制概述

握手机制是很常见的一种机制,尤其是在各种各样的总线协议中会经常使用。对于面向连接的场景,无论哪一方向另一方发送数据之前,都必须先建立双方的连接,而握手机制的意义就是提供稳定可靠的连接。

考虑一种上游master和下游slave通信的场景,可能有三种情况:

(1)上游master的数据已经准备好,拉高valid信号,但是下游slave没有准备好则一直等待,直到slave返回ready信号,完成握手,数据传输出去。

(2)下游slave已经准备好,ready拉高,上游master没有准备好,则一直等待,直到master准备好之后拉高valid,完成握手,数据传输出去。

(3)上游master和下游slave同时准备好,同时拉高valid和ready,完成握手,数据传输出去。

二、代码实现

上代码:

module shake_hand(
    input clk,rst_n,
    input [7:0] data_i,
    input valid_i,
    output ready_o,   

    output [7:0] data_o,
    output valid_o,
    input ready_i
);

    reg [7:0] data_o_r;
    reg valid_o_r;
    assign ready_o = ready_i;   // slave对master返回的ready信号


    always@(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
            data_o_r <= 8'b0;
        end
        else if(ready_i && valid_i)begin
	        data_o_r <= data_i * 2;
        end
        else begin
            data_o_r <= data_o_r;
        end
    end


    always@(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
	        valid_o_r <= 0;
        end
        else if(ready_i)begin
	        valid_o_r <= valid_i;
        end
        else begin
            valid_o_r <= valid_o_r;
        end
    end

    assign data_o  = data_o_r;
    assign valid_o = valid_o_r;

endmodule

测试波形:

我这个测试比较简单,只测试了其中一种情况,感兴趣的朋友可以自行去测试其他几种情况。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clock_926

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值