📄 cmp_data_16bit.v
字号:
`timescale 1ns/100ps
module cmp_data_16bit(
clk,
data_valid,
lfsr_data,
read_data,
rst,
led_error_output,
data_valid_out
);
input clk;
input data_valid;
input [31:0]lfsr_data/* synthesis syn_keep=1 */;
input [31:0]read_data;
input rst;
output led_error_output;
output data_valid_out;
//attribute syn_keep : boolean; -- Using Syn_Keep Derictive
reg led_state;
reg valid;
wire error;
wire [15:0]lfsr_0;
wire [15:0]lfsr_1;
wire [15:0]data_0;
wire [15:0]data_1;
reg[1:0] byte_err;
reg[1:0] byte_err1;
reg valid_1;
reg val_reg;
reg [31:0]read_data_reg;
//attribute syn_keep of lfsr_data : signal is true;
always @ (posedge clk)
begin
if (rst == 1'b1)
read_data_reg <= 32'd0;
else
read_data_reg <= read_data;
end
always @ (posedge clk)
begin
if (rst == 1'b1)
begin
valid <= 1'b0;
end
else
begin
valid <= data_valid;
end
end
assign data_valid_out = valid;
assign data_0 = read_data_reg[15:0];
assign data_1 = read_data_reg[31:16];
assign lfsr_0 = lfsr_data[15:0];
assign lfsr_1 = lfsr_data[31:16];
always @ (posedge clk)
begin
if (rst == 1'b1)
begin
byte_err <= 2'b00;
byte_err1 <= 2'b00;
val_reg <= 1'b0;
end
else
begin
val_reg <= valid;
byte_err[0] <= (data_0[7:0] != lfsr_0[7:0]);
byte_err[1] <= (data_1[7:0] != lfsr_1[7:0]);
byte_err1[0] <= (data_0[15:8] != lfsr_0[15:8]);
byte_err1[1] <= (data_1[15:8] != lfsr_1[15:8]);
end
end // always @ (posedge clk)
assign error = ((|(byte_err[1:0])) || (|(byte_err1[1:0]))) && val_reg;
// LED error output
always @ (posedge clk)
begin
if (rst == 1'b1)
led_state <= 1'b0; // no error
else
begin
case(led_state)
1'b0 : begin
if (error == 1'b1)
begin
led_state <= 1'b1; // Error
$display($time, " ### LED_ERROR : byte_err[0]= %b , byte_err[0]= %b ###",byte_err[0],byte_err[1]);
$finish;
end
else
led_state <= 1'b0; // No Error
end
1'b1 : led_state <= 1'b1;
default : led_state <= 1'b0;
endcase
end
end
assign led_error_output = (led_state == 1'b1) ? 1'b1 : 1'b0;
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -