📄 key_sel.v
字号:
/////////////////////////////////////////////////////////////////////
//// ////
//// KEY_SEL ////
//// Select one of 16 sub-keys for round ////
//// ////
//// Author: Rudolf Usselmann ////
//// rudi@asics.ws ////
//// ////
/////////////////////////////////////////////////////////////////////
//// ////
//// Copyright (C) 2001 Rudolf Usselmann ////
//// rudi@asics.ws ////
//// ////
//// This source file may be used and distributed without ////
//// restriction provided that this copyright statement is not ////
//// removed from the file and that any derivative work contains ////
//// the original copyright notice and the associated disclaimer.////
//// ////
//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
//// POSSIBILITY OF SUCH DAMAGE. ////
//// ////
/////////////////////////////////////////////////////////////////////
module key_sel(K_sub, K, roundSel, decrypt);
output [1:48] K_sub;
input [55:0] K;
input [3:0] roundSel;
input decrypt;
reg [1:48] K_sub;
wire [1:48] K1, K2, K3, K4, K5, K6, K7, K8, K9;
wire [1:48] K10, K11, K12, K13, K14, K15, K16;
always @(K1 or K2 or K3 or K4 or K5 or K6 or K7 or K8 or K9 or K10
or K11 or K12 or K13 or K14 or K15 or K16 or roundSel)
case (roundSel) // synopsys full_case parallel_case
0: K_sub = K1;
1: K_sub = K2;
2: K_sub = K3;
3: K_sub = K4;
4: K_sub = K5;
5: K_sub = K6;
6: K_sub = K7;
7: K_sub = K8;
8: K_sub = K9;
9: K_sub = K10;
10: K_sub = K11;
11: K_sub = K12;
12: K_sub = K13;
13: K_sub = K14;
14: K_sub = K15;
15: K_sub = K16;
endcase
assign K16[1] = decrypt ? K[47] : K[40];
assign K16[2] = decrypt ? K[11] : K[4];
assign K16[3] = decrypt ? K[26] : K[19];
assign K16[4] = decrypt ? K[3] : K[53];
assign K16[5] = decrypt ? K[13] : K[6];
assign K16[6] = decrypt ? K[41] : K[34];
assign K16[7] = decrypt ? K[27] : K[20];
assign K16[8] = decrypt ? K[6] : K[24];
assign K16[9] = decrypt ? K[54] : K[47];
assign K16[10] = decrypt ? K[48] : K[41];
assign K16[11] = decrypt ? K[39] : K[32];
assign K16[12] = decrypt ? K[19] : K[12];
assign K16[13] = decrypt ? K[53] : K[46];
assign K16[14] = decrypt ? K[25] : K[18];
assign K16[15] = decrypt ? K[33] : K[26];
assign K16[16] = decrypt ? K[34] : K[27];
assign K16[17] = decrypt ? K[17] : K[10];
assign K16[18] = decrypt ? K[5] : K[55];
assign K16[19] = decrypt ? K[4] : K[54];
assign K16[20] = decrypt ? K[55] : K[48];
assign K16[21] = decrypt ? K[24] : K[17];
assign K16[22] = decrypt ? K[32] : K[25];
assign K16[23] = decrypt ? K[40] : K[33];
assign K16[24] = decrypt ? K[20] : K[13];
assign K16[25] = decrypt ? K[36] : K[29];
assign K16[26] = decrypt ? K[31] : K[51];
assign K16[27] = decrypt ? K[21] : K[14];
assign K16[28] = decrypt ? K[8] : K[1];
assign K16[29] = decrypt ? K[23] : K[16];
assign K16[30] = decrypt ? K[52] : K[45];
assign K16[31] = decrypt ? K[14] : K[7];
assign K16[32] = decrypt ? K[29] : K[22];
assign K16[33] = decrypt ? K[51] : K[44];
assign K16[34] = decrypt ? K[9] : K[2];
assign K16[35] = decrypt ? K[35] : K[28];
assign K16[36] = decrypt ? K[30] : K[23];
assign K16[37] = decrypt ? K[2] : K[50];
assign K16[38] = decrypt ? K[37] : K[30];
assign K16[39] = decrypt ? K[22] : K[15];
assign K16[40] = decrypt ? K[0] : K[52];
assign K16[41] = decrypt ? K[42] : K[35];
assign K16[42] = decrypt ? K[38] : K[31];
assign K16[43] = decrypt ? K[16] : K[9];
assign K16[44] = decrypt ? K[43] : K[36];
assign K16[45] = decrypt ? K[44] : K[37];
assign K16[46] = decrypt ? K[1] : K[49];
assign K16[47] = decrypt ? K[7] : K[0];
assign K16[48] = decrypt ? K[28] : K[21];
assign K15[1] = decrypt ? K[54] : K[33];
assign K15[2] = decrypt ? K[18] : K[54];
assign K15[3] = decrypt ? K[33] : K[12];
assign K15[4] = decrypt ? K[10] : K[46];
assign K15[5] = decrypt ? K[20] : K[24];
assign K15[6] = decrypt ? K[48] : K[27];
assign K15[7] = decrypt ? K[34] : K[13];
assign K15[8] = decrypt ? K[13] : K[17];
assign K15[9] = decrypt ? K[4] : K[40];
assign K15[10] = decrypt ? K[55] : K[34];
assign K15[11] = decrypt ? K[46] : K[25];
assign K15[12] = decrypt ? K[26] : K[5];
assign K15[13] = decrypt ? K[3] : K[39];
assign K15[14] = decrypt ? K[32] : K[11];
assign K15[15] = decrypt ? K[40] : K[19];
assign K15[16] = decrypt ? K[41] : K[20];
assign K15[17] = decrypt ? K[24] : K[3];
assign K15[18] = decrypt ? K[12] : K[48];
assign K15[19] = decrypt ? K[11] : K[47];
assign K15[20] = decrypt ? K[5] : K[41];
assign K15[21] = decrypt ? K[6] : K[10];
assign K15[22] = decrypt ? K[39] : K[18];
assign K15[23] = decrypt ? K[47] : K[26];
assign K15[24] = decrypt ? K[27] : K[6];
assign K15[25] = decrypt ? K[43] : K[22];
assign K15[26] = decrypt ? K[38] : K[44];
assign K15[27] = decrypt ? K[28] : K[7];
assign K15[28] = decrypt ? K[15] : K[49];
assign K15[29] = decrypt ? K[30] : K[9];
assign K15[30] = decrypt ? K[0] : K[38];
assign K15[31] = decrypt ? K[21] : K[0];
assign K15[32] = decrypt ? K[36] : K[15];
assign K15[33] = decrypt ? K[31] : K[37];
assign K15[34] = decrypt ? K[16] : K[50];
assign K15[35] = decrypt ? K[42] : K[21];
assign K15[36] = decrypt ? K[37] : K[16];
assign K15[37] = decrypt ? K[9] : K[43];
assign K15[38] = decrypt ? K[44] : K[23];
assign K15[39] = decrypt ? K[29] : K[8];
assign K15[40] = decrypt ? K[7] : K[45];
assign K15[41] = decrypt ? K[49] : K[28];
assign K15[42] = decrypt ? K[45] : K[51];
assign K15[43] = decrypt ? K[23] : K[2];
assign K15[44] = decrypt ? K[50] : K[29];
assign K15[45] = decrypt ? K[51] : K[30];
assign K15[46] = decrypt ? K[8] : K[42];
assign K15[47] = decrypt ? K[14] : K[52];
assign K15[48] = decrypt ? K[35] : K[14];
assign K14[1] = decrypt ? K[11] : K[19];
assign K14[2] = decrypt ? K[32] : K[40];
assign K14[3] = decrypt ? K[47] : K[55];
assign K14[4] = decrypt ? K[24] : K[32];
assign K14[5] = decrypt ? K[34] : K[10];
assign K14[6] = decrypt ? K[5] : K[13];
assign K14[7] = decrypt ? K[48] : K[24];
assign K14[8] = decrypt ? K[27] : K[3];
assign K14[9] = decrypt ? K[18] : K[26];
assign K14[10] = decrypt ? K[12] : K[20];
assign K14[11] = decrypt ? K[3] : K[11];
assign K14[12] = decrypt ? K[40] : K[48];
assign K14[13] = decrypt ? K[17] : K[25];
assign K14[14] = decrypt ? K[46] : K[54];
assign K14[15] = decrypt ? K[54] : K[5];
assign K14[16] = decrypt ? K[55] : K[6];
assign K14[17] = decrypt ? K[13] : K[46];
assign K14[18] = decrypt ? K[26] : K[34];
assign K14[19] = decrypt ? K[25] : K[33];
assign K14[20] = decrypt ? K[19] : K[27];
assign K14[21] = decrypt ? K[20] : K[53];
assign K14[22] = decrypt ? K[53] : K[4];
assign K14[23] = decrypt ? K[4] : K[12];
assign K14[24] = decrypt ? K[41] : K[17];
assign K14[25] = decrypt ? K[2] : K[8];
assign K14[26] = decrypt ? K[52] : K[30];
assign K14[27] = decrypt ? K[42] : K[52];
assign K14[28] = decrypt ? K[29] : K[35];
assign K14[29] = decrypt ? K[44] : K[50];
assign K14[30] = decrypt ? K[14] : K[51];
assign K14[31] = decrypt ? K[35] : K[45];
assign K14[32] = decrypt ? K[50] : K[1];
assign K14[33] = decrypt ? K[45] : K[23];
assign K14[34] = decrypt ? K[30] : K[36];
assign K14[35] = decrypt ? K[1] : K[7];
assign K14[36] = decrypt ? K[51] : K[2];
assign K14[37] = decrypt ? K[23] : K[29];
assign K14[38] = decrypt ? K[31] : K[9];
assign K14[39] = decrypt ? K[43] : K[49];
assign K14[40] = decrypt ? K[21] : K[31];
assign K14[41] = decrypt ? K[8] : K[14];
assign K14[42] = decrypt ? K[0] : K[37];
assign K14[43] = decrypt ? K[37] : K[43];
assign K14[44] = decrypt ? K[9] : K[15];
assign K14[45] = decrypt ? K[38] : K[16];
assign K14[46] = decrypt ? K[22] : K[28];
assign K14[47] = decrypt ? K[28] : K[38];
assign K14[48] = decrypt ? K[49] : K[0];
assign K13[1] = decrypt ? K[25] : K[5];
assign K13[2] = decrypt ? K[46] : K[26];
assign K13[3] = decrypt ? K[4] : K[41];
assign K13[4] = decrypt ? K[13] : K[18];
assign K13[5] = decrypt ? K[48] : K[53];
assign K13[6] = decrypt ? K[19] : K[24];
assign K13[7] = decrypt ? K[5] : K[10];
assign K13[8] = decrypt ? K[41] : K[46];
assign K13[9] = decrypt ? K[32] : K[12];
assign K13[10] = decrypt ? K[26] : K[6];
assign K13[11] = decrypt ? K[17] : K[54];
assign K13[12] = decrypt ? K[54] : K[34];
assign K13[13] = decrypt ? K[6] : K[11];
assign K13[14] = decrypt ? K[3] : K[40];
assign K13[15] = decrypt ? K[11] : K[48];
assign K13[16] = decrypt ? K[12] : K[17];
assign K13[17] = decrypt ? K[27] : K[32];
assign K13[18] = decrypt ? K[40] : K[20];
assign K13[19] = decrypt ? K[39] : K[19];
assign K13[20] = decrypt ? K[33] : K[13];
assign K13[21] = decrypt ? K[34] : K[39];
assign K13[22] = decrypt ? K[10] : K[47];
assign K13[23] = decrypt ? K[18] : K[55];
assign K13[24] = decrypt ? K[55] : K[3];
assign K13[25] = decrypt ? K[16] : K[49];
assign K13[26] = decrypt ? K[7] : K[16];
assign K13[27] = decrypt ? K[1] : K[38];
assign K13[28] = decrypt ? K[43] : K[21];
assign K13[29] = decrypt ? K[31] : K[36];
assign K13[30] = decrypt ? K[28] : K[37];
assign K13[31] = decrypt ? K[49] : K[31];
assign K13[32] = decrypt ? K[9] : K[42];
assign K13[33] = decrypt ? K[0] : K[9];
assign K13[34] = decrypt ? K[44] : K[22];
assign K13[35] = decrypt ? K[15] : K[52];
assign K13[36] = decrypt ? K[38] : K[43];
assign K13[37] = decrypt ? K[37] : K[15];
assign K13[38] = decrypt ? K[45] : K[50];
assign K13[39] = decrypt ? K[2] : K[35];
assign K13[40] = decrypt ? K[35] : K[44];
assign K13[41] = decrypt ? K[22] : K[0];
assign K13[42] = decrypt ? K[14] : K[23];
assign K13[43] = decrypt ? K[51] : K[29];
assign K13[44] = decrypt ? K[23] : K[1];
assign K13[45] = decrypt ? K[52] : K[2];
assign K13[46] = decrypt ? K[36] : K[14];
assign K13[47] = decrypt ? K[42] : K[51];
assign K13[48] = decrypt ? K[8] : K[45];
assign K12[1] = decrypt ? K[39] : K[48];
assign K12[2] = decrypt ? K[3] : K[12];
assign K12[3] = decrypt ? K[18] : K[27];
assign K12[4] = decrypt ? K[27] : K[4];
assign K12[5] = decrypt ? K[5] : K[39];
assign K12[6] = decrypt ? K[33] : K[10];
assign K12[7] = decrypt ? K[19] : K[53];
assign K12[8] = decrypt ? K[55] : K[32];
assign K12[9] = decrypt ? K[46] : K[55];
assign K12[10] = decrypt ? K[40] : K[17];
assign K12[11] = decrypt ? K[6] : K[40];
assign K12[12] = decrypt ? K[11] : K[20];
assign K12[13] = decrypt ? K[20] : K[54];
assign K12[14] = decrypt ? K[17] : K[26];
assign K12[15] = decrypt ? K[25] : K[34];
assign K12[16] = decrypt ? K[26] : K[3];
assign K12[17] = decrypt ? K[41] : K[18];
assign K12[18] = decrypt ? K[54] : K[6];
assign K12[19] = decrypt ? K[53] : K[5];
assign K12[20] = decrypt ? K[47] : K[24];
assign K12[21] = decrypt ? K[48] : K[25];
assign K12[22] = decrypt ? K[24] : K[33];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -