122 lines
3.8 KiB
Verilog
122 lines
3.8 KiB
Verilog
`timescale 1ns / 1ns
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
// Company:
|
|
// Engineer:
|
|
//
|
|
// Create Date: 17:44 11/14/2019
|
|
// Design Name:
|
|
// Module Name: MF_Top
|
|
// Project Name:
|
|
// Target Devices:
|
|
// Tool versions:
|
|
// Description:
|
|
//
|
|
// Dependencies:
|
|
//
|
|
// Revision:
|
|
// Revision 0.01 - File Created
|
|
// Additional Comments:
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
module MF_Top (
|
|
input clk,
|
|
input rst,
|
|
|
|
input [11:0] dini,
|
|
input [11:0] dinq,
|
|
input start,
|
|
|
|
output reg [9:0] matchfilterout_i = 10'd0,
|
|
output reg [9:0] matchfilterout_q = 10'd0,
|
|
output reg MF_rdy,
|
|
output reg MF_rst
|
|
);
|
|
|
|
wire s_axis_data_tvalid_i;
|
|
wire s_axis_data_tready_i;
|
|
wire m_axis_data_tvalid_i;
|
|
wire [31:0] MF_m_axis_data_tdata_i;
|
|
|
|
assign s_axis_data_tvalid_i = start;
|
|
MF12p5_12bit MF12p5_12bit_i (
|
|
.aclk (clk), // input wire aclk
|
|
.s_axis_data_tvalid(s_axis_data_tvalid_i), // input wire s_axis_data_tvalid
|
|
.s_axis_data_tready(s_axis_data_tready_i), // output wire s_axis_data_tready
|
|
.s_axis_data_tdata ({4'd0, dini}), // input wire [15 : 0] s_axis_data_tdata
|
|
.m_axis_data_tvalid(m_axis_data_tvalid_i), // output wire m_axis_data_tvalid
|
|
.m_axis_data_tdata (MF_m_axis_data_tdata_i) // output wire [31 : 0] m_axis_data_tdata
|
|
);
|
|
|
|
wire s_axis_data_tvalid_q;
|
|
wire s_axis_data_tready_q;
|
|
wire m_axis_data_tvalid_q;
|
|
wire [31:0] MF_m_axis_data_tdata_q;
|
|
|
|
assign s_axis_data_tvalid_q = start;
|
|
MF12p5_12bit MF12p5_12bit_q (
|
|
.aclk (clk), // input wire aclk
|
|
.s_axis_data_tvalid(s_axis_data_tvalid_q), // input wire s_axis_data_tvalid
|
|
.s_axis_data_tready(s_axis_data_tready_q), // output wire s_axis_data_tready
|
|
.s_axis_data_tdata ({4'd0, dinq}), // input wire [15 : 0] s_axis_data_tdata
|
|
.m_axis_data_tvalid(m_axis_data_tvalid_q), // output wire m_axis_data_tvalid
|
|
.m_axis_data_tdata (MF_m_axis_data_tdata_q) // output wire [31 : 0] m_axis_data_tdata
|
|
);
|
|
|
|
//截位:结果为MF_m_axis_data_tdata_i/q[25:0]
|
|
//低位截位15bit,高位截位1bit,得10bit宽结果
|
|
always @(posedge clk) begin
|
|
if (MF_m_axis_data_tdata_i[25:24] == 2'b00 || MF_m_axis_data_tdata_i[25:24] == 2'b11) begin
|
|
matchfilterout_i <= MF_m_axis_data_tdata_i[24:15];
|
|
end
|
|
else begin
|
|
matchfilterout_i <= (MF_m_axis_data_tdata_i[25] == 1'b1) ? 10'b10_0000_0000 : 10'b01_1111_1111;
|
|
end
|
|
|
|
if (MF_m_axis_data_tdata_q[25:24] == 2'b00 || MF_m_axis_data_tdata_q[25:24] == 2'b11) begin
|
|
matchfilterout_q <= MF_m_axis_data_tdata_q[24:15];
|
|
end
|
|
else begin
|
|
matchfilterout_q <= (MF_m_axis_data_tdata_q[25] == 1'b1) ? 10'b10_0000_0000 : 10'b01_1111_1111;
|
|
end
|
|
end
|
|
|
|
reg MF_rdy_d1;
|
|
always @(posedge clk) begin
|
|
MF_rdy_d1 <= MF_rdy;
|
|
if (rst) begin
|
|
MF_rdy <= 1'b0;
|
|
MF_rst <= 1'b0;
|
|
end
|
|
else begin
|
|
MF_rdy <= start;
|
|
if ((MF_rdy == 1'b1) && (MF_rdy_d1 == 1'b0)) begin
|
|
MF_rst <= 1'b1;
|
|
end
|
|
else begin
|
|
MF_rst <= 1'b0;
|
|
end
|
|
end
|
|
end
|
|
|
|
//------DEBUG模块------//
|
|
`ifdef MF_debug
|
|
|
|
//ILA
|
|
/*ila_16x8 ila_MF_inst(
|
|
.clk(clk),
|
|
.probe0(dini),
|
|
.probe1(dinq),
|
|
.probe2(start),
|
|
.probe3(matchfilterout_i),
|
|
.probe4(matchfilterout_q),
|
|
.probe5(MF_rdy),
|
|
.probe6(8'b0),
|
|
.probe7(8'b0)
|
|
);*/
|
|
|
|
|
|
|
|
`endif
|
|
|
|
endmodule
|