Files
BSI-901-fpga-software/c64_pro.srcs/sources_1/rtl/rhs2116/stim_monitor.v
T
2024-10-28 13:14:49 +08:00

156 lines
5.5 KiB
Verilog

`timescale 1 ns / 1 ps
module stim_monitor#
(
parameter CLK_PERIOD = 10 ,
parameter CHECK_PERIOD_MS = 1000 // <=1000
)
(
input clk ,
input rst_n ,
input [64-1:0] stim_monitor_in ,
output [64-1:0] stim_monitor_rt ,
output reg [64-1:0] stim_monitor_latch
);
//*****************************************************************************
// localparam definition
//*****************************************************************************
localparam CLKS_OF_MS = 1000*1000/CLK_PERIOD;
//*****************************************************************************
// Internal register and wire declarations
//*****************************************************************************
reg [20-1:0] clk_cnt ;
reg pulse_ms ;
reg [12-1:0] latch_period ;
wire [64-1:0] monitor_in_map ;
reg [64-1:0] monitor_latch ;
//*****************************************************************************
// Instantiation
//*****************************************************************************
//*****************************************************************************
always @ ( posedge clk or negedge rst_n ) begin
if ( !rst_n )
clk_cnt <= 0;
else if ( clk_cnt == CLKS_OF_MS - 1 )
clk_cnt <= 0;
else
clk_cnt <= clk_cnt + 1'b1;
end
always @ ( posedge clk or negedge rst_n ) begin
if ( !rst_n )
pulse_ms <= 1'b0;
else if ( clk_cnt == CLKS_OF_MS - 1 )
pulse_ms <= 1'b1;
else
pulse_ms <= 1'b0;
end
always @ ( posedge clk or negedge rst_n ) begin
if ( !rst_n )
latch_period <= 0;
else if ( pulse_ms ) begin
if ( latch_period == CHECK_PERIOD_MS - 1 )
latch_period <= 0;
else
latch_period <= latch_period + 1'b1;
end
end
always @ ( posedge clk or negedge rst_n ) begin
if ( !rst_n )
monitor_latch <= 0;
else if ( pulse_ms && (latch_period == CHECK_PERIOD_MS - 1) )
monitor_latch <= 0;
else
monitor_latch = monitor_latch | monitor_in_map;
end
always @ ( posedge clk or negedge rst_n ) begin
if ( !rst_n )
stim_monitor_latch <= 0;
else if ( pulse_ms && (latch_period == CHECK_PERIOD_MS - 1) )
stim_monitor_latch <= monitor_latch;
end
//*****************************************************************************
// Wire assignment
//*****************************************************************************
assign monitor_in_map[ 0] = stim_monitor_in[55];
assign monitor_in_map[ 1] = stim_monitor_in[56];
assign monitor_in_map[ 2] = stim_monitor_in[54];
assign monitor_in_map[ 3] = stim_monitor_in[57];
assign monitor_in_map[ 4] = stim_monitor_in[34];
assign monitor_in_map[ 5] = stim_monitor_in[35];
assign monitor_in_map[ 6] = stim_monitor_in[32];
assign monitor_in_map[ 7] = stim_monitor_in[52];
assign monitor_in_map[ 8] = stim_monitor_in[38];
assign monitor_in_map[ 9] = stim_monitor_in[10];
assign monitor_in_map[10] = stim_monitor_in[11];
assign monitor_in_map[11] = stim_monitor_in[58];
assign monitor_in_map[12] = stim_monitor_in[59];
assign monitor_in_map[13] = stim_monitor_in[ 9];
assign monitor_in_map[14] = stim_monitor_in[15];
assign monitor_in_map[15] = stim_monitor_in[13];
assign monitor_in_map[16] = stim_monitor_in[30];
assign monitor_in_map[17] = stim_monitor_in[19];
assign monitor_in_map[18] = stim_monitor_in[48];
assign monitor_in_map[19] = stim_monitor_in[61];
assign monitor_in_map[20] = stim_monitor_in[49];
assign monitor_in_map[21] = stim_monitor_in[37];
assign monitor_in_map[22] = stim_monitor_in[60];
assign monitor_in_map[23] = stim_monitor_in[ 8];
assign monitor_in_map[24] = stim_monitor_in[36];
assign monitor_in_map[25] = stim_monitor_in[53];
assign monitor_in_map[26] = stim_monitor_in[33];
assign monitor_in_map[27] = stim_monitor_in[63];
assign monitor_in_map[28] = stim_monitor_in[51];
assign monitor_in_map[29] = stim_monitor_in[62];
assign monitor_in_map[30] = stim_monitor_in[39];
assign monitor_in_map[31] = stim_monitor_in[50];
assign monitor_in_map[32] = stim_monitor_in[28];
assign monitor_in_map[33] = stim_monitor_in[18];
assign monitor_in_map[34] = stim_monitor_in[29];
assign monitor_in_map[35] = stim_monitor_in[27];
assign monitor_in_map[36] = stim_monitor_in[17];
assign monitor_in_map[37] = stim_monitor_in[31];
assign monitor_in_map[38] = stim_monitor_in[26];
assign monitor_in_map[39] = stim_monitor_in[16];
assign monitor_in_map[40] = stim_monitor_in[24];
assign monitor_in_map[41] = stim_monitor_in[25];
assign monitor_in_map[42] = stim_monitor_in[22];
assign monitor_in_map[43] = stim_monitor_in[46];
assign monitor_in_map[44] = stim_monitor_in[44];
assign monitor_in_map[45] = stim_monitor_in[23];
assign monitor_in_map[46] = stim_monitor_in[20];
assign monitor_in_map[47] = stim_monitor_in[21];
assign monitor_in_map[48] = stim_monitor_in[ 6];
assign monitor_in_map[49] = stim_monitor_in[ 3];
assign monitor_in_map[50] = stim_monitor_in[ 4];
assign monitor_in_map[51] = stim_monitor_in[43];
assign monitor_in_map[52] = stim_monitor_in[ 2];
assign monitor_in_map[53] = stim_monitor_in[42];
assign monitor_in_map[54] = stim_monitor_in[14];
assign monitor_in_map[55] = stim_monitor_in[40];
assign monitor_in_map[56] = stim_monitor_in[12];
assign monitor_in_map[57] = stim_monitor_in[41];
assign monitor_in_map[58] = stim_monitor_in[ 0];
assign monitor_in_map[59] = stim_monitor_in[ 1];
assign monitor_in_map[60] = stim_monitor_in[47];
assign monitor_in_map[61] = stim_monitor_in[45];
assign monitor_in_map[62] = stim_monitor_in[ 7];
assign monitor_in_map[63] = stim_monitor_in[ 5];
assign stim_monitor_rt = monitor_in_map;
endmodule