逻辑stream一阶的实现

module pipe_stage_1 #(
    parameter integer             DATA_WIDTH = 32
) (
    input  logic                  clk,
    input  logic                  rst_n,

    output logic                  in_ready,
    input  logic                  in_valid,
    input  logic [DATA_WIDTH-1:0] in_data,

    input  logic                  out_ready,
    output logic                  out_valid,
    output logic [DATA_WIDTH-1:0] out_data
);

// -------------------------------------------

logic reg_flag;
logic pre_to_nxt;
logic enable_to_nxt;

assign in_ready = ~reg_flag;
assign enable_to_nxt = ~{&{~out_ready, out_valid}};
assign pre_to_nxt = &{|{in_valid, reg_flag}, enable_to_nxt};

always_ff@(posedge clk `ifdef ASYNC_RST or negedge rst_n `endif) begin
    if(!rst_n) begin
        reg_flag <= 1'b0;
        out_valid <= 1'b0;
    end else begin
        reg_flag <= (reg_flag) ? (~enable_to_nxt) : (&{in_valid, ~enable_to_nxt});
        out_valid <= (enable_to_nxt) ? pre_to_nxt : out_valid;
    end
end

logic [DATA_WIDTH-1:0] reg_data;

always_ff @ (posedge clk) begin
    reg_data <= (reg_flag) ? reg_data : in_data;
    out_data <= (~enable_to_nxt) ? out_data : ((reg_flag) ? reg_data : in_data);
end

// -------------------------------------------
    
endmodule

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值