上传PL工程
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
`timescale 1 ns / 1 ps
|
||||
|
||||
module trigger_detection
|
||||
(
|
||||
input clk ,
|
||||
input rst_n ,
|
||||
|
||||
input [32-1:0] trigger_in ,
|
||||
|
||||
output reg [32-1:0] trigger_tdata ,
|
||||
output reg trigger_tvalid
|
||||
);
|
||||
|
||||
//*****************************************************************************
|
||||
|
||||
always @ ( posedge clk or negedge rst_n ) begin
|
||||
if ( !rst_n ) begin
|
||||
trigger_tdata <= 0;
|
||||
trigger_tvalid <= 1'b0;
|
||||
end else if (trigger_tdata != trigger_in) begin
|
||||
trigger_tdata <= trigger_in;
|
||||
trigger_tvalid <= 1'b1;
|
||||
end else begin
|
||||
trigger_tvalid <= 1'b0;
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,183 @@
|
||||
`timescale 1 ns / 1 ps
|
||||
|
||||
module trigger_top#
|
||||
(
|
||||
parameter CLK_PERIOD = 10
|
||||
)
|
||||
(
|
||||
input clk ,
|
||||
input rst_n ,
|
||||
|
||||
input trigger_reset ,
|
||||
|
||||
input [32-1:0] trigger_in_int ,
|
||||
input [32-1:0] trigger_in_ext ,
|
||||
|
||||
output [32-1:0] m_trigger_tdata ,
|
||||
output m_trigger_tvalid ,
|
||||
input m_trigger_tready ,
|
||||
|
||||
output reg error_overflow
|
||||
);
|
||||
|
||||
//*****************************************************************************
|
||||
// localparam definition
|
||||
//*****************************************************************************
|
||||
localparam CLKS = 10 ;
|
||||
|
||||
//*****************************************************************************
|
||||
// Internal register and wire declarations
|
||||
//*****************************************************************************
|
||||
wire [32-1:0] trigger_in_ext_t ;
|
||||
|
||||
wire trigger_1_tvalid ;
|
||||
wire [32-1:0] trigger_1_tdata ;
|
||||
wire trigger_2_tvalid ;
|
||||
wire [32-1:0] trigger_2_tdata ;
|
||||
|
||||
reg trigger_1_tvalid_r ;
|
||||
reg [32-1:0] trigger_1_tdata_r ;
|
||||
reg trigger_2_tvalid_r ;
|
||||
reg [32-1:0] trigger_2_tdata_r ;
|
||||
reg trigger_2_tvalid_rr ;
|
||||
reg [32-1:0] trigger_2_tdata_rr ;
|
||||
|
||||
reg [32-1:0] trigger_collect_tdata ;
|
||||
reg trigger_collect_tvalid ;
|
||||
wire trigger_collect_tready ;
|
||||
|
||||
reg [ 8-1:0] clk_cnt ;
|
||||
reg s_axis_aresetn ;
|
||||
|
||||
//*****************************************************************************
|
||||
// Instantiation
|
||||
//*****************************************************************************
|
||||
debouncing#
|
||||
(
|
||||
.CLK_PERIOD ( CLK_PERIOD ),
|
||||
.DATA_WIDTH ( 32 ),
|
||||
.DELAY1_US ( 30 ),
|
||||
.DELAY2_US ( 50 )
|
||||
)
|
||||
u_debouncing_ext
|
||||
(
|
||||
.clk ( clk ),
|
||||
.rst_n ( rst_n ),
|
||||
|
||||
.data_in ( trigger_in_ext ),
|
||||
.data_out ( trigger_in_ext_t )
|
||||
);
|
||||
|
||||
trigger_detection u_trigger_detection_int
|
||||
(
|
||||
.clk ( clk ),
|
||||
.rst_n ( rst_n ),
|
||||
|
||||
.trigger_in ( trigger_in_int ),
|
||||
|
||||
.trigger_tdata ( trigger_1_tdata ),
|
||||
.trigger_tvalid ( trigger_1_tvalid )
|
||||
);
|
||||
|
||||
trigger_detection u_trigger_detection_ext
|
||||
(
|
||||
.clk ( clk ),
|
||||
.rst_n ( rst_n ),
|
||||
|
||||
.trigger_in ( trigger_in_ext_t ),
|
||||
|
||||
.trigger_tdata ( trigger_2_tdata ),
|
||||
.trigger_tvalid ( trigger_2_tvalid )
|
||||
);
|
||||
|
||||
axis_data_fifo_w32_d16 u_trigger_fifo
|
||||
(
|
||||
.s_axis_aresetn ( s_axis_aresetn ),
|
||||
.s_axis_aclk ( clk ),
|
||||
|
||||
.s_axis_tvalid ( trigger_collect_tvalid),
|
||||
.s_axis_tready ( trigger_collect_tready),
|
||||
.s_axis_tdata ( trigger_collect_tdata ),
|
||||
|
||||
.m_axis_tvalid ( m_trigger_tvalid ),
|
||||
.m_axis_tready ( m_trigger_tready ),
|
||||
.m_axis_tdata ( m_trigger_tdata )
|
||||
);
|
||||
|
||||
//*****************************************************************************
|
||||
always @ ( posedge clk or negedge rst_n ) begin
|
||||
if( !rst_n ) begin
|
||||
trigger_1_tvalid_r <= 1'b0;
|
||||
trigger_1_tdata_r <= 0;
|
||||
trigger_2_tvalid_r <= 1'b0;
|
||||
trigger_2_tdata_r <= 0;
|
||||
end else begin
|
||||
trigger_1_tvalid_r <= trigger_1_tvalid;
|
||||
trigger_1_tdata_r <= trigger_1_tdata;
|
||||
trigger_2_tvalid_r <= trigger_2_tvalid;
|
||||
trigger_2_tdata_r <= trigger_2_tdata;
|
||||
end
|
||||
end
|
||||
|
||||
always @ ( posedge clk or negedge rst_n ) begin
|
||||
if( !rst_n ) begin
|
||||
trigger_2_tvalid_rr <= 1'b0;
|
||||
trigger_2_tdata_rr <= 0;
|
||||
end else if (trigger_1_tvalid_r && trigger_2_tvalid_r) begin
|
||||
trigger_2_tvalid_rr <= trigger_2_tvalid_r;
|
||||
trigger_2_tdata_rr <= trigger_2_tdata_r;
|
||||
end else begin
|
||||
trigger_2_tvalid_rr <= 1'b0;
|
||||
trigger_2_tdata_rr <= 0;
|
||||
end
|
||||
end
|
||||
|
||||
always @ ( posedge clk or negedge rst_n ) begin
|
||||
if( !rst_n ) begin
|
||||
trigger_collect_tvalid <= 1'b0;
|
||||
trigger_collect_tdata <= 0;
|
||||
end else if (trigger_1_tvalid_r || trigger_2_tvalid_r || trigger_2_tvalid_rr) begin
|
||||
trigger_collect_tvalid <= 1'b1;
|
||||
trigger_collect_tdata <= trigger_1_tvalid_r? trigger_1_tdata_r:
|
||||
(trigger_2_tvalid_r? trigger_2_tdata_r:
|
||||
(trigger_2_tvalid_rr? trigger_2_tdata_rr:
|
||||
trigger_collect_tdata));
|
||||
end else
|
||||
trigger_collect_tvalid <= 1'b0;
|
||||
end
|
||||
|
||||
//trigger clear
|
||||
always @ ( posedge clk or negedge rst_n ) begin
|
||||
if( !rst_n )
|
||||
clk_cnt <= 0;
|
||||
else if (clk_cnt != CLKS)
|
||||
clk_cnt = clk_cnt + 1'b1;
|
||||
else if (trigger_reset)
|
||||
clk_cnt <= 0;
|
||||
end
|
||||
|
||||
always @ ( posedge clk or negedge rst_n ) begin
|
||||
if( !rst_n )
|
||||
s_axis_aresetn <= 1'b1;
|
||||
else if (clk_cnt != CLKS)
|
||||
s_axis_aresetn <= 1'b0;
|
||||
else
|
||||
s_axis_aresetn <= 1'b1;
|
||||
end
|
||||
|
||||
//error: trigger overflow
|
||||
always @ ( posedge clk or negedge rst_n ) begin
|
||||
if( !rst_n )
|
||||
error_overflow <= 1'b0;
|
||||
else if (trigger_collect_tvalid && ~trigger_collect_tready)
|
||||
error_overflow <= 1'b1;
|
||||
else
|
||||
error_overflow <= 1'b0;
|
||||
end
|
||||
|
||||
//*****************************************************************************
|
||||
// Wire assignment
|
||||
//*****************************************************************************
|
||||
|
||||
|
||||
endmodule
|
||||
@@ -0,0 +1,76 @@
|
||||
`timescale 1ns/1ps
|
||||
|
||||
module trigger_top_tb();
|
||||
|
||||
//*****************************************************************************
|
||||
// Parameter definition
|
||||
//*****************************************************************************
|
||||
localparam T_CLK = 10 ; //ns
|
||||
|
||||
localparam DATA_WIDTH = 64 ;
|
||||
|
||||
//*****************************************************************************
|
||||
// Internal register and wire declarations
|
||||
//*****************************************************************************
|
||||
reg clk ;
|
||||
reg rst_n ;
|
||||
|
||||
reg [32-1:0] trigger_in_int ;
|
||||
reg [32-1:0] trigger_in_ext ;
|
||||
|
||||
wire [32-1:0] trigger_tdata ;
|
||||
wire trigger_tvalid ;
|
||||
|
||||
//*****************************************************************************
|
||||
// Instantiation
|
||||
//*****************************************************************************
|
||||
trigger_top#
|
||||
(
|
||||
.CLK_PERIOD ( T_CLK )
|
||||
)
|
||||
DUT
|
||||
(
|
||||
.clk ( clk ),
|
||||
.rst_n ( rst_n ),
|
||||
|
||||
.trigger_in_int ( trigger_in_int ),
|
||||
.trigger_in_ext ( trigger_in_ext ),
|
||||
|
||||
.trigger_tdata ( trigger_tdata ),
|
||||
.trigger_tvalid ( trigger_tvalid )
|
||||
);
|
||||
|
||||
//*****************************************************************************
|
||||
// Wire assignment
|
||||
//*****************************************************************************
|
||||
always #( T_CLK/2.0 ) clk = !clk;
|
||||
|
||||
initial begin
|
||||
Initial();
|
||||
#100 rst_n = 0;
|
||||
#100 rst_n = 1;
|
||||
#100
|
||||
|
||||
while (1) begin
|
||||
trigger_in_ext <= trigger_in_ext + 1'b1;
|
||||
#80_060;
|
||||
trigger_in_int <= trigger_in_int + 1'b1;
|
||||
#20_000;
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
//*****************************************************************************
|
||||
// Task
|
||||
//*****************************************************************************
|
||||
task Initial;
|
||||
begin
|
||||
clk <= 1'b0 ;
|
||||
rst_n <= 1'b0 ;
|
||||
|
||||
trigger_in_int <= 32'h123;
|
||||
trigger_in_ext <= 0;
|
||||
end
|
||||
endtask
|
||||
|
||||
endmodule
|
||||
Reference in New Issue
Block a user