集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1049|回复: 0

axi_interface_slave.v

[复制链接]
fpga_feixiang 发表于 2022-3-8 18:12:41 | 显示全部楼层 |阅读模式
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2022/01/20 10:22:04
// Design Name:
// Module Name: axi_interface_slave
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////


module axi_interface_slave(
    input                   clk,
    input                   rst,
    input         [15:0]    axis_tdata,
    output                  axis_tready,
    input                   axis_tvalid,
   
        input                   data_re,
    output                  data_out_i,
    output                  data_out_q
    );

    reg [15:0] data_reg;
    reg        valid_reg;
    reg [8:0]  cnt512;
    reg [15:0] data_shift_i;
    reg [15:0] data_shift_q;
    reg        axis_tvalid_dly1;
    reg        data_1bit_valid;


    assign axis_tready = data_re;

    always @(posedge clk) begin
        if (rst) begin
            data_reg <= 16'd0;
        end
        else if (axis_tvalid && axis_tready) begin
            data_reg <= axis_tdata;
        end
        else begin
            data_reg <= data_reg;
        end
    end

    always @(posedge clk) begin
                if(rst)
                        valid_reg<=1'b0;
                else if( axis_tready && axis_tvalid)
                        valid_reg <=1'b1;
                else
                        valid_reg<=1'b0;       
    end

//--------------------parallel to serial---------------------------
    always @(posedge clk) begin
        if (rst) begin
            cnt512 <= 9'd0;
        end
        else if (valid_reg) begin
            cnt512 <= 9'd0;
        end
        else if (cnt512 == 9'd511) begin
            cnt512 <= cnt512;
        end
        else begin
            cnt512 <= cnt512 + 1'b1;
        end
    end

    always @(posedge clk) begin
        if (rst) begin
            data_shift_i <= 16'd0;
        end
        else if (valid_reg) begin
            data_shift_i <= data_reg;
        end
        else if (cnt512 == 9'd511) begin
            data_shift_i <= 16'd0;
        end
        else if (cnt512[4:0] == 5'd31) begin
            data_shift_i <= {data_shift_i[0],data_shift_i[15:1]};      // from low to high
        end
    end

    always @(posedge clk) begin
        if (rst) begin
            data_shift_q <= 16'd0;
        end
        else if (valid_reg) begin
            data_shift_q <= 16'd0;
        end
        else if (cnt512 == 9'd511) begin
            data_shift_q <= 16'd0;
        end
        else if (cnt512[4:0] == 5'd31) begin
            data_shift_q <= {data_shift_q[0],data_shift_q[15:1]};      // from low to high
        end
    end

    assign data_out_i = data_shift_i[0];
    assign data_out_q = data_shift_q[0];

endmodule

您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-16 03:35 , Processed in 0.063791 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表