⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmp_data_24bit.v

📁 XILINX memory interface generator. XILINX的外部存储器接口。
💻 V
字号:
  `timescale 1ns/100ps
module    cmp_data_24bit(    
     clk,            
     data_valid,     
     lfsr_data,      
     read_data,      
     rst,            
     led_error_output, 
     data_valid_out 
     );

input  clk;
input  data_valid;
input  [47:0]lfsr_data/* synthesis syn_keep=1 */; 
input  [47: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]    lfsr_2;

   wire[15:0]    data_0;
   wire[15:0]    data_1;
   wire[15:0]    data_2;

   reg[2:0]      byte_err/* synthesis syn_preserve = 1 */;
   reg[2:0]      byte_err1/* synthesis syn_preserve = 1 */;
   reg           valid_1;
   reg           val_reg;
reg [47:0]read_data_reg;

//attribute syn_keep of lfsr_data : signal is true;


always @ (posedge clk)
begin
  if (rst == 1'b1)
    read_data_reg <= 48'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 data_2         = read_data_reg[47:32];
			
assign lfsr_0         = lfsr_data[15:0];
assign lfsr_1         = lfsr_data[31:16];
assign lfsr_2         = lfsr_data[47:32];


always @ (posedge clk)
begin
   if (rst == 1'b1)
     begin
        byte_err <= 3'b000;
	byte_err1 <= 3'b000;
	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_err[2] <= (data_2[7:0] != lfsr_2[7:0]);
	byte_err1[0] <= (data_0[15:8] != lfsr_0[15:8]);
	byte_err1[1] <= (data_1[15:8] != lfsr_1[15:8]);
	byte_err1[2] <= (data_2[15:8] != lfsr_2[15:8]);
     end
end // always @ (posedge clk)
   
   assign error = ((|(byte_err[2:0])) || (|(byte_err1[2: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 + -