module handshack
(
    input clk,
    input rst_n,
    input req,
    input [7:0] datain,
    output ack,
    output [7:0] dataout
);

reg reqr1,reqr2,reqr3;
reg [7:0] dataoutr;
reg ackr;

always @ (posedge clk,negedge rst_n)
if(!rst_n)
    {reqr3,reqr2,reqr1} <= 3'b111;
else
    {reqr3,reqr2,reqr1} <= {reqr2,reqr1,req};

wire pos_req1 =reqr1 & ~reqr2;
wire pos_req2 =reqr2 & ~reqr3;
assign dataout = dataoutr;
assign ack =ackr;

always @ (posedge clk,negedge rst_n)
if(!rst_n)
    dataoutr <= 8'h00;
else if(pos_req1) 
    dataoutr<= datain;

always @ (posedge clk,negedge rst_n)
if(!rst_n)
    ackr <= 1'b0;
else if(pos_req2)
    ackr <= 1'b1;
else if(!req)
    ackr <= 1'b0;
endmodule 

相关文章:

  • 2021-05-30
  • 2021-10-03
  • 2021-11-26
  • 2021-12-28
  • 2021-04-15
  • 2021-07-05
  • 2022-12-23
  • 2021-08-10
猜你喜欢
  • 2022-12-23
  • 2021-06-15
  • 2022-02-01
  • 2021-12-24
  • 2022-12-23
  • 2021-11-26
  • 2022-01-07
相关资源
相似解决方案