OpenCores
URL https://opencores.org/ocsvn/rs_decoder_31_19_6/rs_decoder_31_19_6/trunk

Subversion Repositories rs_decoder_31_19_6

[/] [rs_decoder_31_19_6/] [trunk/] [common_modules.v] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 rud_dp
//******************************************************//
2
// This file contains definition of common modules used //
3
// by higher level modules in RS Decoder                //
4
//******************************************************//
5
 
6
//*************************//
7
// Multiplexer 2 to 1 5bit //
8
//*************************//
9
module mux2_to_1(in1, in2 , out, sel);
10
 
11
input [4:0] in1, in2;
12
input sel;
13
output [4:0] out;
14
reg [4:0] out;
15
 
16
always@(sel or in1 or in2)
17
begin
18
    case(sel)
19
 
20
        1   : out = in2;
21
        default: out = in1;
22
    endcase
23
end
24
endmodule
25
 
26
//**********************************************//
27
//Register 5 bit with synchronous load and hold //
28
//**********************************************//
29
module register5_wlh(datain, dataout, load, hold, clock);
30
 
31
input [4:0] datain;
32
input load, hold;
33
input clock;
34
output [4:0] dataout;
35
reg [4:0] out;
36
 
37
always @(posedge clock)
38
begin
39
    if(load)
40
       out <= datain;
41
    else if(hold)
42
       out <= out;
43
    else
44
       out <= 5'b0;
45
end
46
 
47
assign dataout = out;
48
 
49
endmodule
50
 
51
 
52
//**************************************//
53
// Register 5 bit with synchronous load //
54
//**************************************//
55
module register5_wl(datain, dataout, clock, load);
56
 
57
input [4:0] datain;
58
output [4:0] dataout;
59
input clock, load;
60
reg [4:0] dataout;
61
 
62
always@(posedge clock)
63
begin
64
    if(load)
65
       dataout <= datain;
66
    else
67
       dataout <= 5'b0;
68
end
69
 
70
endmodule
71
 
72
 
73
//**************//
74
//GF(2^5) Adder //
75
//**************//
76
module gfadder(in1, in2, out);
77
 
78
input [0:4] in1, in2;
79
output [0:4] out;
80
 
81
assign out[4] = in1[4] ^ in2[4];
82
assign out[3] = in1[3] ^ in2[3];
83
assign out[2] = in1[2] ^ in2[2];
84
assign out[1] = in1[1] ^ in2[1];
85
assign out[0] = in1[0] ^ in2[0];
86
 
87
endmodule
88
 
89
 
90
//*********************************************//
91
// GF(2^5) parallel multiplier is based on     //
92
// the design proposed by M. Anwar Hasan &     //
93
// A. Reyhani-Masoleh in their paper entitled  //
94
// "Low Complexity Bit Parallel Architectures  //
95
// for Polynomial Basis Multiplication over    //
96
// GF(2^m)" published in IEEE Transactions On  //
97
// Computer August 2004.                       //
98
//*********************************************//
99
module lcpmult(in1, in2, out);
100
 
101
   input [0:4] in1, in2; //in1[4] & in2[4] is MSB
102
   output [0:4] out;
103
 
104
   wire [4:0] intvald; //intermediate val d
105
   wire [3:0] intvale; //intermediate val e
106
   wire intvale_0ax; //intermediate val e'[0]
107
 
108
   assign intvald[0] = in1[0] & in2[0];
109
   assign intvald[1] = (in1[1] & in2[0]) ^ (in1[0] & in2[1]);
110
   assign intvald[2] = (in1[2] & in2[0]) ^ ((in1[1] & in2[1]) ^ (in1[0] & in2[2]));
111
   assign intvald[3] = ((in1[3] & in2[0]) ^ (in1[2] & in2[1])) ^ ((in1[1] & in2[2]) ^ (in1[0] & in2[3]));
112
   assign intvald[4] = (((in1[4] & in2[0]) ^ (in1[3] & in2[1])) ^ (in1[2] & in2[2]))
113
                        ^ ((in1[1] & in2[3]) ^ (in1[0] & in2[4]));
114
 
115
   assign intvale[0] = ((in1[4] & in2[1]) ^ (in1[3] & in2[2])) ^ ((in1[2] & in2[3]) ^ (in1[1] & in2[4]));
116
   assign intvale[1] = ((in1[4] & in2[2]) ^ (in1[3] & in2[3])) ^ (in1[2] & in2[4]);
117
   assign intvale[2] = (in1[4] & in2[3]) ^ (in1[3] & in2[4]);
118
   assign intvale[3] = in1[4] & in2[4];
119
 
120
   assign intvale_0ax = (intvale[0] ^ intvale[3]);
121
 
122
   assign out[0] = intvald[0] ^ intvale_0ax;
123
   assign out[1] = intvald[1] ^ intvale[1];
124
   assign out[2] = (intvald[2] ^ intvale[2]) ^ intvale_0ax;
125
   assign out[3] = (intvald[3] ^ intvale[1]) ^ intvale[3];
126
   assign out[4] = intvald[4] ^ intvale[2];
127
 
128
 endmodule
129
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.