📄 cmp_data_8bit.v
字号:
`timescale 1ns/100ps
module cmp_data_8bit(
clk,
data_valid,
lfsr_data,
read_data,
rst,
led_error_output,
data_valid_out
);
input clk;
input data_valid;
input [15:0]lfsr_data/* synthesis syn_keep=1 */;
input [15: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 [7:0]lfsr_0;
wire [7:0]lfsr_1;
wire [7:0]data_0;
wire [7:0]data_1;
reg byte_err;
reg byte_err1;
reg valid_1;
reg val_reg;
reg [15:0]read_data_reg;
//attribute syn_keep of lfsr_data : signal is true;
always @ (posedge clk)
begin
if (rst == 1'b1)
read_data_reg <= 16'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[7:0];
assign data_1 = read_data_reg[15:8];
assign lfsr_0 = lfsr_data[7:0];
assign lfsr_1 = lfsr_data[15:8];
always @ (posedge clk)
begin
if (rst == 1'b1)
begin
byte_err <= 1'b0;
byte_err1 <= 1'b0;
val_reg <= 1'b0;
end
else
begin
val_reg <= valid;
byte_err <= (data_0[7:0] != lfsr_0[7:0]);
byte_err1 <= (data_1[7:0] != lfsr_1[7:0]);
end
end
assign error = (byte_err || byte_err1) && 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= %b , byte_err1= %b ###",byte_err,byte_err1);
$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 + -