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

Subversion Repositories hight

[/] [hight/] [trunk/] [rtl/] [RF.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 truemind
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
////  Round function of main datapath for HIGHT Crypto Core       ////
4
////                                                              ////
5
////  This file is part of the HIGHT Crypto Core project          ////
6
////  http://github.com/OpenSoCPlus/hight_crypto_core             ////
7
////  http://www.opencores.org/project,hight                      ////
8
////                                                              ////
9
////  Description                                                 ////
10
////  __description__                                             ////
11
////                                                              ////
12
////  Author(s):                                                  ////
13
////      - JoonSoo Ha, json.ha@gmail.com                         ////
14
////      - Younjoo Kim, younjookim.kr@gmail.com                  ////
15
////                                                              ////
16
//////////////////////////////////////////////////////////////////////
17
////                                                              ////
18
//// Copyright (C) 2015 Authors, OpenSoCPlus and OPENCORES.ORG    ////
19
////                                                              ////
20
//// This source file may be used and distributed without         ////
21
//// restriction provided that this copyright statement is not    ////
22
//// removed from the file and that any derivative work contains  ////
23
//// the original copyright notice and the associated disclaimer. ////
24
////                                                              ////
25
//// This source file is free software; you can redistribute it   ////
26
//// and/or modify it under the terms of the GNU Lesser General   ////
27
//// Public License as published by the Free Software Foundation; ////
28
//// either version 2.1 of the License, or (at your option) any   ////
29
//// later version.                                               ////
30
////                                                              ////
31
//// This source is distributed in the hope that it will be       ////
32
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
33
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
34
//// PURPOSE.  See the GNU Lesser General Public License for more ////
35
//// details.                                                     ////
36
////                                                              ////
37
//// You should have received a copy of the GNU Lesser General    ////
38
//// Public License along with this source; if not, download it   ////
39
//// from http://www.opencores.org/lgpl.shtml                     ////
40
////                                                              ////
41
//////////////////////////////////////////////////////////////////////
42
 
43
module RF(
44
        i_op             ,
45
 
46
        i_rsk            ,
47
 
48
        i_rf_in          ,
49
 
50
        i_rf_final       ,
51
 
52
        o_rf_out
53
);
54
 
55
 
56
//=====================================
57
//
58
//          PARAMETERS 
59
//
60
//=====================================
61
 
62
 
63
//=====================================
64
//
65
//          I/O PORTS 
66
//
67
//=====================================
68
input        i_op           ;
69
 
70
input[31:0]  i_rsk          ;
71
 
72
input[63:0]  i_rf_in        ;
73
 
74
input        i_rf_final     ;
75
 
76
output[63:0] o_rf_out       ;
77
 
78
 
79
//=====================================
80
//
81
//          REGISTERS
82
//
83
//=====================================
84
 
85
 
86
//=====================================
87
//
88
//          WIRES
89
//
90
//=====================================
91
// w_rf_out
92
wire[63:0]  w_rf_out     ;
93
// w_rf_out (7 ~ 0)
94
wire[7:0]  w_rf_out7     ;
95
wire[7:0]  w_rf_out6     ;
96
wire[7:0]  w_rf_out5     ;
97
wire[7:0]  w_rf_out4     ;
98
wire[7:0]  w_rf_out3     ;
99
wire[7:0]  w_rf_out2     ;
100
wire[7:0]  w_rf_out1     ;
101
wire[7:0]  w_rf_out0     ;
102
// w_f_function 
103
wire[7:0] w_f0_6   ;
104
wire[7:0] w_f1_4   ;
105
wire[7:0] w_f0_2   ;
106
wire[7:0] w_f1_0   ;
107
// w_rf_median_value
108
wire[7:0] w_rf_mv[0:3];
109
//=====================================
110
//
111
//          MAIN
112
//
113
//=====================================
114
 
115
assign w_f0_6 = {i_rf_in[54:48],i_rf_in[55]}    ^
116
                {i_rf_in[53:48],i_rf_in[55:54]} ^
117
                {i_rf_in[48]   ,i_rf_in[55:49]};
118
assign w_f1_4 = {i_rf_in[36:32],i_rf_in[39:37]} ^
119
                {i_rf_in[35:32],i_rf_in[39:36]} ^
120
                {i_rf_in[33:32],i_rf_in[39:34]};
121
assign w_f0_2 = {i_rf_in[22:16],i_rf_in[23]}    ^
122
                {i_rf_in[21:16],i_rf_in[23:22]} ^
123
                {i_rf_in[16]   ,i_rf_in[23:17]};
124
assign w_f1_0 = {i_rf_in[4:0]  ,i_rf_in[7:5]} ^
125
                {i_rf_in[3:0]  ,i_rf_in[7:4]} ^
126
                {i_rf_in[1:0]  ,i_rf_in[7:2]};
127
 
128
assign w_rf_mv[3] = (i_op == 0) ? i_rf_in[63:56] ^ (w_f0_6 + i_rsk[31:24]):
129
                                  i_rf_in[63:56] ^ (w_f0_6 + i_rsk[7:0]);
130
 
131
assign w_rf_mv[2] = (i_op == 0) ? i_rf_in[47:40] + (w_f1_4 ^ i_rsk[23:16]):
132
                                  i_rf_in[47:40] - (w_f1_4 ^ i_rsk[15:8]);
133
 
134
assign w_rf_mv[1] = (i_op == 0) ? i_rf_in[31:24] ^ (w_f0_2 + i_rsk[15:8]):
135
                                  i_rf_in[31:24] ^ (w_f0_2 + i_rsk[23:16]);
136
 
137
assign w_rf_mv[0] = (i_op == 0) ? i_rf_in[15:8] + (w_f1_0 ^ i_rsk[7:0]):
138
                                  i_rf_in[15:8] - (w_f1_0 ^ i_rsk[31:24]);
139
 
140
assign w_rf_out7 = (i_rf_final == 1) ? w_rf_mv[3] :
141
                                      (i_op == 0) ? i_rf_in[55:48] :
142
                                                    i_rf_in[7:0];
143
assign w_rf_out6 = (i_rf_final == 1) ? i_rf_in[55:48] :
144
                                      (i_op == 0) ? w_rf_mv[2] :
145
                                                    w_rf_mv[3];
146
assign w_rf_out5 = (i_rf_final == 1) ? w_rf_mv[2] :
147
                                      (i_op == 0) ? i_rf_in[39:32] :
148
                                                    i_rf_in[55:48];
149
assign w_rf_out4 = (i_rf_final == 1) ? i_rf_in[39:32] :
150
                                      (i_op == 0) ? w_rf_mv[1] :
151
                                                    w_rf_mv[2];
152
assign w_rf_out3 = (i_rf_final == 1) ? w_rf_mv[1] :
153
                                      (i_op == 0) ? i_rf_in[23:16] :
154
                                                    i_rf_in[39:32];
155
assign w_rf_out2 = (i_rf_final == 1) ? i_rf_in[23:16] :
156
                                      (i_op == 0) ? w_rf_mv[0] :
157
                                                    w_rf_mv[1];
158
 
159
assign w_rf_out1 = (i_rf_final == 1) ? w_rf_mv[0] :
160
                                      (i_op == 0) ? i_rf_in[7:0] :
161
                                                    i_rf_in[23:16];
162
 
163
assign w_rf_out0 = (i_rf_final == 1) ? i_rf_in[7:0] :
164
                                      (i_op == 0) ? w_rf_mv[3] :
165
                                                    w_rf_mv[0];
166
 
167
assign w_rf_out = {w_rf_out7, w_rf_out6, w_rf_out5, w_rf_out4, w_rf_out3, w_rf_out2, w_rf_out1, w_rf_out0};
168
assign o_rf_out = w_rf_out;
169
 
170
 
171
endmodule
172
 
173
 

powered by: WebSVN 2.1.0

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