1
0
mirror of https://github.com/pConst/basic_verilog.git synced 2025-01-28 07:02:55 +08:00
Konstantin Pavlov (pt) 40533743d7 Added altera cookbook
2015-12-15 22:44:58 +03:00

116 lines
5.6 KiB
Verilog

// Copyright 2007 Altera Corporation. All rights reserved.
// Altera products are protected under numerous U.S. and foreign patents,
// maskwork rights, copyrights and other intellectual property laws.
//
// This reference design file, and your use thereof, is subject to and governed
// by the terms and conditions of the applicable Altera Reference Design
// License Agreement (either as signed by you or found at www.altera.com). By
// using this reference design file, you indicate your acceptance of such terms
// and conditions between you and Altera Corporation. In the event that you do
// not agree with such terms and conditions, you may not use the reference
// design file and please promptly destroy any copies you have made.
//
// This reference design file is being provided on an "as-is" basis and as an
// accommodation and therefore all warranties, representations or guarantees of
// any kind (whether express, implied or statutory) including, without
// limitation, warranties of merchantability, non-infringement, or fitness for
// a particular purpose, are specifically disclaimed. By making this reference
// design file available, Altera expressly does not recommend, suggest or
// require that this reference design file be used in combination with any
// other product not provided by Altera.
/////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////
// 2 to 6 bit ECC encoder
//////////////////////////////////////////////
module ecc_encode_2bit (d,c);
input [1:0] d;
output [5:0] c;
wire [5:0] c;
assign c = {d[1],d[1],d[0],d[0],^d,^d};
endmodule
//////////////////////////////////////////////
// the error flag indicates
// [2] 2 or more bit error
// [1] 1 bit error (corrected)
// [0] no error
//////////////////////////////////////////////
module ecc_decode_2bit (c,d,err_flag);
input [5:0] c;
output [1:0] d;
output [2:0] err_flag;
reg [1:0] d;
reg [2:0] err_flag;
always @(c) begin
case (c)
// bit distance to codes 0 .. 3
6'h00 : {d,err_flag} = {2'b00, 3'b001}; // 0 4 4 4
6'h01 : {d,err_flag} = {2'b00, 3'b010}; // 1 3 3 5
6'h02 : {d,err_flag} = {2'b00, 3'b010}; // 1 3 3 5
6'h03 : {d,err_flag} = {2'b00, 3'b100}; // 2 2 2 6
6'h04 : {d,err_flag} = {2'b00, 3'b010}; // 1 3 5 3
6'h05 : {d,err_flag} = {2'b00, 3'b100}; // 2 2 4 4
6'h06 : {d,err_flag} = {2'b00, 3'b100}; // 2 2 4 4
6'h07 : {d,err_flag} = {2'b01, 3'b010}; // 3 1 3 5
6'h08 : {d,err_flag} = {2'b00, 3'b010}; // 1 3 5 3
6'h09 : {d,err_flag} = {2'b00, 3'b100}; // 2 2 4 4
6'h0a : {d,err_flag} = {2'b00, 3'b100}; // 2 2 4 4
6'h0b : {d,err_flag} = {2'b01, 3'b010}; // 3 1 3 5
6'h0c : {d,err_flag} = {2'b00, 3'b100}; // 2 2 6 2
6'h0d : {d,err_flag} = {2'b01, 3'b010}; // 3 1 5 3
6'h0e : {d,err_flag} = {2'b01, 3'b010}; // 3 1 5 3
6'h0f : {d,err_flag} = {2'b01, 3'b001}; // 4 0 4 4
6'h10 : {d,err_flag} = {2'b00, 3'b010}; // 1 5 3 3
6'h11 : {d,err_flag} = {2'b00, 3'b100}; // 2 4 2 4
6'h12 : {d,err_flag} = {2'b00, 3'b100}; // 2 4 2 4
6'h13 : {d,err_flag} = {2'b10, 3'b010}; // 3 3 1 5
6'h14 : {d,err_flag} = {2'b00, 3'b100}; // 2 4 4 2
6'h15 : {d,err_flag} = {2'b00, 3'b100}; // 3 3 3 3
6'h16 : {d,err_flag} = {2'b00, 3'b100}; // 3 3 3 3
6'h17 : {d,err_flag} = {2'b01, 3'b100}; // 4 2 2 4
6'h18 : {d,err_flag} = {2'b00, 3'b100}; // 2 4 4 2
6'h19 : {d,err_flag} = {2'b00, 3'b100}; // 3 3 3 3
6'h1a : {d,err_flag} = {2'b00, 3'b100}; // 3 3 3 3
6'h1b : {d,err_flag} = {2'b01, 3'b100}; // 4 2 2 4
6'h1c : {d,err_flag} = {2'b11, 3'b010}; // 3 3 5 1
6'h1d : {d,err_flag} = {2'b01, 3'b100}; // 4 2 4 2
6'h1e : {d,err_flag} = {2'b01, 3'b100}; // 4 2 4 2
6'h1f : {d,err_flag} = {2'b01, 3'b010}; // 5 1 3 3
6'h20 : {d,err_flag} = {2'b00, 3'b010}; // 1 5 3 3
6'h21 : {d,err_flag} = {2'b00, 3'b100}; // 2 4 2 4
6'h22 : {d,err_flag} = {2'b00, 3'b100}; // 2 4 2 4
6'h23 : {d,err_flag} = {2'b10, 3'b010}; // 3 3 1 5
6'h24 : {d,err_flag} = {2'b00, 3'b100}; // 2 4 4 2
6'h25 : {d,err_flag} = {2'b00, 3'b100}; // 3 3 3 3
6'h26 : {d,err_flag} = {2'b00, 3'b100}; // 3 3 3 3
6'h27 : {d,err_flag} = {2'b01, 3'b100}; // 4 2 2 4
6'h28 : {d,err_flag} = {2'b00, 3'b100}; // 2 4 4 2
6'h29 : {d,err_flag} = {2'b00, 3'b100}; // 3 3 3 3
6'h2a : {d,err_flag} = {2'b00, 3'b100}; // 3 3 3 3
6'h2b : {d,err_flag} = {2'b01, 3'b100}; // 4 2 2 4
6'h2c : {d,err_flag} = {2'b11, 3'b010}; // 3 3 5 1
6'h2d : {d,err_flag} = {2'b01, 3'b100}; // 4 2 4 2
6'h2e : {d,err_flag} = {2'b01, 3'b100}; // 4 2 4 2
6'h2f : {d,err_flag} = {2'b01, 3'b010}; // 5 1 3 3
6'h30 : {d,err_flag} = {2'b00, 3'b100}; // 2 6 2 2
6'h31 : {d,err_flag} = {2'b10, 3'b010}; // 3 5 1 3
6'h32 : {d,err_flag} = {2'b10, 3'b010}; // 3 5 1 3
6'h33 : {d,err_flag} = {2'b10, 3'b001}; // 4 4 0 4
6'h34 : {d,err_flag} = {2'b11, 3'b010}; // 3 5 3 1
6'h35 : {d,err_flag} = {2'b10, 3'b100}; // 4 4 2 2
6'h36 : {d,err_flag} = {2'b10, 3'b100}; // 4 4 2 2
6'h37 : {d,err_flag} = {2'b10, 3'b010}; // 5 3 1 3
6'h38 : {d,err_flag} = {2'b11, 3'b010}; // 3 5 3 1
6'h39 : {d,err_flag} = {2'b10, 3'b100}; // 4 4 2 2
6'h3a : {d,err_flag} = {2'b10, 3'b100}; // 4 4 2 2
6'h3b : {d,err_flag} = {2'b10, 3'b010}; // 5 3 1 3
6'h3c : {d,err_flag} = {2'b11, 3'b001}; // 4 4 4 0
6'h3d : {d,err_flag} = {2'b11, 3'b010}; // 5 3 3 1
6'h3e : {d,err_flag} = {2'b11, 3'b010}; // 5 3 3 1
6'h3f : {d,err_flag} = {2'b01, 3'b100}; // 6 2 2 2
endcase
end
endmodule