URL
https://opencores.org/ocsvn/des/des/trunk
Subversion Repositories des
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 4 to Rev 5
- ↔ Reverse comparison
Rev 4 → Rev 5
/trunk/bench/verilog/des_test_po.v
0,0 → 1,217
///////////////////////////////////////////////////////////////////// |
//// //// |
//// DES TEST BENCH //// |
//// //// |
//// 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 test; |
|
reg clk; |
reg [191:0] x[128:0]; |
reg [191:0] tmp; |
reg [3:0] cnt; |
integer select; |
wire [63:0] desOut; |
wire [63:0] des_in; |
wire [63:0] exp_out_d; |
wire [55:0] key; |
reg [63:0] des_exp[0:17]; |
integer decrypt; |
|
integer i; |
|
always @(posedge clk) |
des_exp[0] <= #1 exp_out_d; |
|
always @(posedge clk) |
for(i=0;i<17;i=i+1) |
des_exp[i+1] <= #1 des_exp[i]; |
|
initial |
begin |
$display("\n\n"); |
$display("*********************************************************"); |
$display("* Performance Optimized DES core simulation started ... *"); |
$display("*********************************************************"); |
$display("\n"); |
|
`ifdef WAVES |
$shm_open("waves"); |
$shm_probe("AS",test,"AS"); |
$display("INFO: Signal dump enabled ...\n\n"); |
`endif |
clk=0; |
// Key Test data Out data |
x[00]=192'h8001010101010101_0000000000000000_95A8D72813DAA94D; |
x[01]=192'h4001010101010101_0000000000000000_0EEC1487DD8C26D5; |
x[02]=192'h2001010101010101_0000000000000000_7AD16FFB79C45926; |
x[03]=192'h1001010101010101_0000000000000000_D3746294CA6A6CF3; |
x[04]=192'h0801010101010101_0000000000000000_809F5F873C1FD761; |
x[05]=192'h0401010101010101_0000000000000000_C02FAFFEC989D1FC; |
x[06]=192'h0201010101010101_0000000000000000_4615AA1D33E72F10; |
x[07]=192'h0180010101010101_0000000000000000_2055123350C00858; |
x[08]=192'h0140010101010101_0000000000000000_DF3B99D6577397C8; |
x[09]=192'h0120010101010101_0000000000000000_31FE17369B5288C9; |
x[10]=192'h0110010101010101_0000000000000000_DFDD3CC64DAE1642; |
x[11]=192'h0108010101010101_0000000000000000_178C83CE2B399D94; |
x[12]=192'h0104010101010101_0000000000000000_50F636324A9B7F80; |
x[13]=192'h0102010101010101_0000000000000000_A8468EE3BC18F06D; |
x[14]=192'h0101800101010101_0000000000000000_A2DC9E92FD3CDE92; |
x[15]=192'h0101400101010101_0000000000000000_CAC09F797D031287; |
x[16]=192'h0101200101010101_0000000000000000_90BA680B22AEB525; |
x[17]=192'h0101100101010101_0000000000000000_CE7A24F350E280B6; |
x[18]=192'h0101080101010101_0000000000000000_882BFF0AA01A0B87; |
x[19]=192'h0101040101010101_0000000000000000_25610288924511C2; |
x[20]=192'h0101020101010101_0000000000000000_C71516C29C75D170; |
x[21]=192'h0101018001010101_0000000000000000_5199C29A52C9F059; |
x[22]=192'h0101014001010101_0000000000000000_C22F0A294A71F29F; |
x[23]=192'h0101012001010101_0000000000000000_EE371483714C02EA; |
x[24]=192'h0101011001010101_0000000000000000_A81FBD448F9E522F; |
x[25]=192'h0101010801010101_0000000000000000_4F644C92E192DFED; |
x[26]=192'h0101010401010101_0000000000000000_1AFA9A66A6DF92AE; |
x[27]=192'h0101010201010101_0000000000000000_B3C1CC715CB879D8; |
x[28]=192'h0101010180010101_0000000000000000_19D032E64AB0BD8B; |
x[29]=192'h0101010140010101_0000000000000000_3CFAA7A7DC8720DC; |
x[30]=192'h0101010120010101_0000000000000000_B7265F7F447AC6F3; |
x[31]=192'h0101010110010101_0000000000000000_9DB73B3C0D163F54; |
x[32]=192'h0101010108010101_0000000000000000_8181B65BABF4A975; |
x[33]=192'h0101010104010101_0000000000000000_93C9B64042EAA240; |
x[34]=192'h0101010102010101_0000000000000000_5570530829705592; |
x[35]=192'h0101010101800101_0000000000000000_8638809E878787A0; |
x[36]=192'h0101010101400101_0000000000000000_41B9A79AF79AC208; |
x[37]=192'h0101010101200101_0000000000000000_7A9BE42F2009A892; |
x[38]=192'h0101010101100101_0000000000000000_29038D56BA6D2745; |
x[39]=192'h0101010101080101_0000000000000000_5495C6ABF1E5DF51; |
x[40]=192'h0101010101040101_0000000000000000_AE13DBD561488933; |
x[41]=192'h0101010101020101_0000000000000000_024D1FFA8904E389; |
x[42]=192'h0101010101018001_0000000000000000_D1399712F99BF02E; |
x[43]=192'h0101010101014001_0000000000000000_14C1D7C1CFFEC79E; |
x[44]=192'h0101010101012001_0000000000000000_1DE5279DAE3BED6F; |
x[45]=192'h0101010101011001_0000000000000000_E941A33F85501303; |
x[46]=192'h0101010101010801_0000000000000000_DA99DBBC9A03F379; |
x[47]=192'h0101010101010401_0000000000000000_B7FC92F91D8E92E9; |
x[48]=192'h0101010101010201_0000000000000000_AE8E5CAA3CA04E85; |
x[49]=192'h0101010101010180_0000000000000000_9CC62DF43B6EED74; |
x[50]=192'h0101010101010140_0000000000000000_D863DBB5C59A91A0; |
x[51]=192'h0101010101010120_0000000000000000_A1AB2190545B91D7; |
x[52]=192'h0101010101010110_0000000000000000_0875041E64C570F7; |
x[53]=192'h0101010101010108_0000000000000000_5A594528BEBEF1CC; |
x[54]=192'h0101010101010104_0000000000000000_FCDB3291DE21F0C0; |
x[55]=192'h0101010101010102_0000000000000000_869EFD7F9F265A09; |
x[56]=192'h0000000000000000_0000000000000000_8CA64DE9C1B123A7; |
x[57]=192'hFFFFFFFFFFFFFFFF_FFFFFFFFFFFFFFFF_7359B2163E4EDC58; |
x[58]=192'h3000000000000000_1000000000000001_958E6E627A05557B; |
x[59]=192'h1111111111111111_1111111111111111_F40379AB9E0EC533; |
x[60]=192'h0123456789ABCDEF_1111111111111111_17668DFC7292532D; |
x[61]=192'h1111111111111111_0123456789ABCDEF_8A5AE1F81AB8F2DD; |
x[62]=192'h0000000000000000_0000000000000000_8CA64DE9C1B123A7; |
x[63]=192'hFEDCBA9876543210_0123456789ABCDEF_ED39D950FA74BCC4; |
x[64]=192'h7CA110454A1A6E57_01A1D6D039776742_690F5B0D9A26939B; |
x[65]=192'h0131D9619DC1376E_5CD54CA83DEF57DA_7A389D10354BD271; |
x[66]=192'h07A1133E4A0B2686_0248D43806F67172_868EBB51CAB4599A; |
x[67]=192'h3849674C2602319E_51454B582DDF440A_7178876E01F19B2A; |
x[68]=192'h04B915BA43FEB5B6_42FD443059577FA2_AF37FB421F8C4095; |
x[69]=192'h0113B970FD34F2CE_059B5E0851CF143A_86A560F10EC6D85B; |
x[70]=192'h0170F175468FB5E6_0756D8E0774761D2_0CD3DA020021DC09; |
x[71]=192'h43297FAD38E373FE_762514B829BF486A_EA676B2CB7DB2B7A; |
x[72]=192'h07A7137045DA2A16_3BDD119049372802_DFD64A815CAF1A0F; |
x[73]=192'h04689104C2FD3B2F_26955F6835AF609A_5C513C9C4886C088; |
x[74]=192'h37D06BB516CB7546_164D5E404F275232_0A2AEEAE3FF4AB77; |
x[75]=192'h1F08260D1AC2465E_6B056E18759F5CCA_EF1BF03E5DFA575A; |
x[76]=192'h584023641ABA6176_004BD6EF09176062_88BF0DB6D70DEE56; |
x[77]=192'h025816164629B007_480D39006EE762F2_A1F9915541020B56; |
x[78]=192'h49793EBC79B3258F_437540C8698F3CFA_6FBF1CAFCFFD0556; |
x[79]=192'h4FB05E1515AB73A7_072D43A077075292_2F22E49BAB7CA1AC; |
x[80]=192'h49E95D6D4CA229BF_02FE55778117F12A_5A6B612CC26CCE4A; |
x[81]=192'h018310DC409B26D6_1D9D5C5018F728C2_5F4C038ED12B2E41; |
x[82]=192'h1C587F1C13924FEF_305532286D6F295A_63FAC0D034D9F793; |
x[83]=192'h0101010101010101_0123456789ABCDEF_617B3A0CE8F07100; |
x[84]=192'h1F1F1F1F0E0E0E0E_0123456789ABCDEF_DB958605F8C8C606; |
x[85]=192'hE0FEE0FEF1FEF1FE_0123456789ABCDEF_EDBFD1C66C29CCC7; |
x[86]=192'h0000000000000000_FFFFFFFFFFFFFFFF_355550B2150E2451; |
x[87]=192'hFFFFFFFFFFFFFFFF_0000000000000000_CAAAAF4DEAF1DBAE; |
x[88]=192'h0123456789ABCDEF_0000000000000000_D5D44FF720683D0D; |
x[89]=192'hFEDCBA9876543210_FFFFFFFFFFFFFFFF_2A2BB008DF97C2F2; |
|
// Wait for clock edge |
decrypt = 0; |
@(posedge clk); |
|
$display(""); |
$display("**************************************"); |
$display("* Starting DES Test ... *"); |
$display("**************************************"); |
$display(""); |
|
for(decrypt=0;decrypt<2;decrypt=decrypt+1) |
begin |
if(decrypt) $display("Running Encrypt test ...\n"); |
else $display("Running Decrypt test ...\n"); |
// Begin for loop |
for(select=0;select<107;select=select+1) |
begin |
tmp=x[select]; |
@(posedge clk); |
if(select>16) |
if((des_exp[16] !== desOut) | (^des_exp[16]===1'bx) | (^desOut===1'bx)) |
$display("ERROR: (%0d) Expected %x Got %x", select-17, des_exp[16], desOut); |
//else |
// $display("PASS : (%0d) Expected %x Got %x", select-17, des_exp[16], desOut); |
end |
end |
|
$display(""); |
$display("**************************************"); |
$display("* DES Test done ... *"); |
$display("**************************************"); |
$display(""); |
|
|
$finish; |
end // end of initial |
|
// DES Clock |
always #50 clk=~clk; |
|
// Create the key w/o the parity bits |
assign #1 key = {tmp[191:185],tmp[183:177],tmp[175:169],tmp[167:161], |
tmp[159:153],tmp[151:145],tmp[143:137],tmp[135:129]}; |
assign #1 des_in = decrypt ? tmp[63:0] : tmp[127:64]; |
assign exp_out_d = decrypt ? tmp[127:64] : tmp[63:0]; |
|
// The DES instance |
des u0( .clk( clk ), |
.desOut( desOut ), |
.desIn( des_in ), |
.key( key ), |
.decrypt( decrypt[0] ) |
); |
|
endmodule |
/trunk/bench/verilog/des_test_ao.v
0,0 → 1,212
///////////////////////////////////////////////////////////////////// |
//// //// |
//// DES TEST BENCH //// |
//// //// |
//// 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 test; |
|
reg clk; |
reg [191:0] x[128:0]; |
|
reg [191:0] tmp; |
|
reg [3:0] cnt; |
integer select; |
integer decrypt; |
wire [63:0] desOut; |
wire [63:0] des_in; |
wire [63:0] exp_out; |
wire [55:0] key; |
|
initial |
begin |
$display("\n\n"); |
$display("*********************************************************"); |
$display("* Area Optimized DES core simulation started ... *"); |
$display("*********************************************************"); |
$display("\n"); |
|
`ifdef WAVES |
$shm_open("waves"); |
$shm_probe("AS",test,"AS"); |
$display("INFO: Signal dump enabled ...\n\n"); |
`endif |
|
clk=0; |
// Key Test data Out data |
x[00]=192'h8001010101010101_0000000000000000_95A8D72813DAA94D; |
x[01]=192'h4001010101010101_0000000000000000_0EEC1487DD8C26D5; |
x[02]=192'h2001010101010101_0000000000000000_7AD16FFB79C45926; |
x[03]=192'h1001010101010101_0000000000000000_D3746294CA6A6CF3; |
x[04]=192'h0801010101010101_0000000000000000_809F5F873C1FD761; |
x[05]=192'h0401010101010101_0000000000000000_C02FAFFEC989D1FC; |
x[06]=192'h0201010101010101_0000000000000000_4615AA1D33E72F10; |
x[07]=192'h0180010101010101_0000000000000000_2055123350C00858; |
x[08]=192'h0140010101010101_0000000000000000_DF3B99D6577397C8; |
x[09]=192'h0120010101010101_0000000000000000_31FE17369B5288C9; |
x[10]=192'h0110010101010101_0000000000000000_DFDD3CC64DAE1642; |
x[11]=192'h0108010101010101_0000000000000000_178C83CE2B399D94; |
x[12]=192'h0104010101010101_0000000000000000_50F636324A9B7F80; |
x[13]=192'h0102010101010101_0000000000000000_A8468EE3BC18F06D; |
x[14]=192'h0101800101010101_0000000000000000_A2DC9E92FD3CDE92; |
x[15]=192'h0101400101010101_0000000000000000_CAC09F797D031287; |
x[16]=192'h0101200101010101_0000000000000000_90BA680B22AEB525; |
x[17]=192'h0101100101010101_0000000000000000_CE7A24F350E280B6; |
x[18]=192'h0101080101010101_0000000000000000_882BFF0AA01A0B87; |
x[19]=192'h0101040101010101_0000000000000000_25610288924511C2; |
x[20]=192'h0101020101010101_0000000000000000_C71516C29C75D170; |
x[21]=192'h0101018001010101_0000000000000000_5199C29A52C9F059; |
x[22]=192'h0101014001010101_0000000000000000_C22F0A294A71F29F; |
x[23]=192'h0101012001010101_0000000000000000_EE371483714C02EA; |
x[24]=192'h0101011001010101_0000000000000000_A81FBD448F9E522F; |
x[25]=192'h0101010801010101_0000000000000000_4F644C92E192DFED; |
x[26]=192'h0101010401010101_0000000000000000_1AFA9A66A6DF92AE; |
x[27]=192'h0101010201010101_0000000000000000_B3C1CC715CB879D8; |
x[28]=192'h0101010180010101_0000000000000000_19D032E64AB0BD8B; |
x[29]=192'h0101010140010101_0000000000000000_3CFAA7A7DC8720DC; |
x[30]=192'h0101010120010101_0000000000000000_B7265F7F447AC6F3; |
x[31]=192'h0101010110010101_0000000000000000_9DB73B3C0D163F54; |
x[32]=192'h0101010108010101_0000000000000000_8181B65BABF4A975; |
x[33]=192'h0101010104010101_0000000000000000_93C9B64042EAA240; |
x[34]=192'h0101010102010101_0000000000000000_5570530829705592; |
x[35]=192'h0101010101800101_0000000000000000_8638809E878787A0; |
x[36]=192'h0101010101400101_0000000000000000_41B9A79AF79AC208; |
x[37]=192'h0101010101200101_0000000000000000_7A9BE42F2009A892; |
x[38]=192'h0101010101100101_0000000000000000_29038D56BA6D2745; |
x[39]=192'h0101010101080101_0000000000000000_5495C6ABF1E5DF51; |
x[40]=192'h0101010101040101_0000000000000000_AE13DBD561488933; |
x[41]=192'h0101010101020101_0000000000000000_024D1FFA8904E389; |
x[42]=192'h0101010101018001_0000000000000000_D1399712F99BF02E; |
x[43]=192'h0101010101014001_0000000000000000_14C1D7C1CFFEC79E; |
x[44]=192'h0101010101012001_0000000000000000_1DE5279DAE3BED6F; |
x[45]=192'h0101010101011001_0000000000000000_E941A33F85501303; |
x[46]=192'h0101010101010801_0000000000000000_DA99DBBC9A03F379; |
x[47]=192'h0101010101010401_0000000000000000_B7FC92F91D8E92E9; |
x[48]=192'h0101010101010201_0000000000000000_AE8E5CAA3CA04E85; |
x[49]=192'h0101010101010180_0000000000000000_9CC62DF43B6EED74; |
x[50]=192'h0101010101010140_0000000000000000_D863DBB5C59A91A0; |
x[51]=192'h0101010101010120_0000000000000000_A1AB2190545B91D7; |
x[52]=192'h0101010101010110_0000000000000000_0875041E64C570F7; |
x[53]=192'h0101010101010108_0000000000000000_5A594528BEBEF1CC; |
x[54]=192'h0101010101010104_0000000000000000_FCDB3291DE21F0C0; |
x[55]=192'h0101010101010102_0000000000000000_869EFD7F9F265A09; |
x[56]=192'h0000000000000000_0000000000000000_8CA64DE9C1B123A7; |
x[57]=192'hFFFFFFFFFFFFFFFF_FFFFFFFFFFFFFFFF_7359B2163E4EDC58; |
x[58]=192'h3000000000000000_1000000000000001_958E6E627A05557B; |
x[59]=192'h1111111111111111_1111111111111111_F40379AB9E0EC533; |
x[60]=192'h0123456789ABCDEF_1111111111111111_17668DFC7292532D; |
x[61]=192'h1111111111111111_0123456789ABCDEF_8A5AE1F81AB8F2DD; |
x[62]=192'h0000000000000000_0000000000000000_8CA64DE9C1B123A7; |
x[63]=192'hFEDCBA9876543210_0123456789ABCDEF_ED39D950FA74BCC4; |
x[64]=192'h7CA110454A1A6E57_01A1D6D039776742_690F5B0D9A26939B; |
x[65]=192'h0131D9619DC1376E_5CD54CA83DEF57DA_7A389D10354BD271; |
x[66]=192'h07A1133E4A0B2686_0248D43806F67172_868EBB51CAB4599A; |
x[67]=192'h3849674C2602319E_51454B582DDF440A_7178876E01F19B2A; |
x[68]=192'h04B915BA43FEB5B6_42FD443059577FA2_AF37FB421F8C4095; |
x[69]=192'h0113B970FD34F2CE_059B5E0851CF143A_86A560F10EC6D85B; |
x[70]=192'h0170F175468FB5E6_0756D8E0774761D2_0CD3DA020021DC09; |
x[71]=192'h43297FAD38E373FE_762514B829BF486A_EA676B2CB7DB2B7A; |
x[72]=192'h07A7137045DA2A16_3BDD119049372802_DFD64A815CAF1A0F; |
x[73]=192'h04689104C2FD3B2F_26955F6835AF609A_5C513C9C4886C088; |
x[74]=192'h37D06BB516CB7546_164D5E404F275232_0A2AEEAE3FF4AB77; |
x[75]=192'h1F08260D1AC2465E_6B056E18759F5CCA_EF1BF03E5DFA575A; |
x[76]=192'h584023641ABA6176_004BD6EF09176062_88BF0DB6D70DEE56; |
x[77]=192'h025816164629B007_480D39006EE762F2_A1F9915541020B56; |
x[78]=192'h49793EBC79B3258F_437540C8698F3CFA_6FBF1CAFCFFD0556; |
x[79]=192'h4FB05E1515AB73A7_072D43A077075292_2F22E49BAB7CA1AC; |
x[80]=192'h49E95D6D4CA229BF_02FE55778117F12A_5A6B612CC26CCE4A; |
x[81]=192'h018310DC409B26D6_1D9D5C5018F728C2_5F4C038ED12B2E41; |
x[82]=192'h1C587F1C13924FEF_305532286D6F295A_63FAC0D034D9F793; |
x[83]=192'h0101010101010101_0123456789ABCDEF_617B3A0CE8F07100; |
x[84]=192'h1F1F1F1F0E0E0E0E_0123456789ABCDEF_DB958605F8C8C606; |
x[85]=192'hE0FEE0FEF1FEF1FE_0123456789ABCDEF_EDBFD1C66C29CCC7; |
x[86]=192'h0000000000000000_FFFFFFFFFFFFFFFF_355550B2150E2451; |
x[87]=192'hFFFFFFFFFFFFFFFF_0000000000000000_CAAAAF4DEAF1DBAE; |
x[88]=192'h0123456789ABCDEF_0000000000000000_D5D44FF720683D0D; |
x[89]=192'hFEDCBA9876543210_FFFFFFFFFFFFFFFF_2A2BB008DF97C2F2; |
|
decrypt = 0; |
@(posedge clk); |
|
$display(""); |
$display("**************************************"); |
$display("* Starting DES Test ... *"); |
$display("**************************************"); |
$display(""); |
|
for(decrypt=0;decrypt<2;decrypt=decrypt+1) |
begin |
if(decrypt) $display("Running Encrypt test ...\n"); |
else $display("Running Decrypt test ...\n"); |
|
for(select=0;select<90;select=select+1) |
begin |
tmp=x[select]; |
for(cnt=0;cnt<15;cnt=cnt+1) @(posedge clk); |
|
#10; |
//if(desOut !== exp_out) |
if((exp_out !== desOut) | (^exp_out===1'bx) | (^desOut===1'bx)) |
|
$display("ERROR: (%0d) Expected %x Got %x", select, exp_out, desOut); |
//else |
// $display("PASS : (%0d) Expected %x Got %x", select, exp_out, desOut); |
|
@(posedge clk); |
end |
end |
|
$display(""); |
$display("**************************************"); |
$display("* DES Test done ... *"); |
$display("**************************************"); |
$display(""); |
|
$finish; |
end // end of innitial |
|
always #100 clk=~clk; |
|
assign #1 key = {tmp[191:185],tmp[183:177],tmp[175:169],tmp[167:161], |
tmp[159:153],tmp[151:145],tmp[143:137],tmp[135:129]}; |
|
assign #1 des_in = decrypt ? tmp[63:0] : tmp[127:64]; |
assign exp_out = decrypt ? tmp[127:64] : tmp[63:0]; |
|
des u0( .clk( clk ), |
.desOut( desOut ), |
.desIn( des_in ), |
.key( key ), |
.roundSel( cnt ), |
.decrypt( decrypt[0] ) |
); |
|
endmodule |
/trunk/rtl/verilog/common/sbox1.v
0,0 → 1,113
///////////////////////////////////////////////////////////////////// |
//// //// |
//// SBOX //// |
//// The SBOX is essentially a 64x4 ROM //// |
//// //// |
//// 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 sbox1(addr, dout); |
input [1:6] addr; |
output [1:4] dout; |
reg [1:4] dout; |
|
always @(addr) begin |
case ({addr[1], addr[6], addr[2:5]}) //synopsys full_case parallel_case |
0: dout = 14; |
1: dout = 4; |
2: dout = 13; |
3: dout = 1; |
4: dout = 2; |
5: dout = 15; |
6: dout = 11; |
7: dout = 8; |
8: dout = 3; |
9: dout = 10; |
10: dout = 6; |
11: dout = 12; |
12: dout = 5; |
13: dout = 9; |
14: dout = 0; |
15: dout = 7; |
|
16: dout = 0; |
17: dout = 15; |
18: dout = 7; |
19: dout = 4; |
20: dout = 14; |
21: dout = 2; |
22: dout = 13; |
23: dout = 1; |
24: dout = 10; |
25: dout = 6; |
26: dout = 12; |
27: dout = 11; |
28: dout = 9; |
29: dout = 5; |
30: dout = 3; |
31: dout = 8; |
|
32: dout = 4; |
33: dout = 1; |
34: dout = 14; |
35: dout = 8; |
36: dout = 13; |
37: dout = 6; |
38: dout = 2; |
39: dout = 11; |
40: dout = 15; |
41: dout = 12; |
42: dout = 9; |
43: dout = 7; |
44: dout = 3; |
45: dout = 10; |
46: dout = 5; |
47: dout = 0; |
|
48: dout = 15; |
49: dout = 12; |
50: dout = 8; |
51: dout = 2; |
52: dout = 4; |
53: dout = 9; |
54: dout = 1; |
55: dout = 7; |
56: dout = 5; |
57: dout = 11; |
58: dout = 3; |
59: dout = 14; |
60: dout = 10; |
61: dout = 0; |
62: dout = 6; |
63: dout = 13; |
|
endcase |
end |
|
endmodule |
/trunk/rtl/verilog/common/sbox2.v
0,0 → 1,113
///////////////////////////////////////////////////////////////////// |
//// //// |
//// SBOX //// |
//// The SBOX is essentially a 64x4 ROM //// |
//// //// |
//// 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 sbox2(addr, dout); |
input [1:6] addr; |
output [1:4] dout; |
reg [1:4] dout; |
|
always @(addr) begin |
case ({addr[1], addr[6], addr[2:5]}) //synopsys full_case parallel_case |
0: dout = 15; |
1: dout = 1; |
2: dout = 8; |
3: dout = 14; |
4: dout = 6; |
5: dout = 11; |
6: dout = 3; |
7: dout = 4; |
8: dout = 9; |
9: dout = 7; |
10: dout = 2; |
11: dout = 13; |
12: dout = 12; |
13: dout = 0; |
14: dout = 5; |
15: dout = 10; |
|
16: dout = 3; |
17: dout = 13; |
18: dout = 4; |
19: dout = 7; |
20: dout = 15; |
21: dout = 2; |
22: dout = 8; |
23: dout = 14; |
24: dout = 12; |
25: dout = 0; |
26: dout = 1; |
27: dout = 10; |
28: dout = 6; |
29: dout = 9; |
30: dout = 11; |
31: dout = 5; |
|
32: dout = 0; |
33: dout = 14; |
34: dout = 7; |
35: dout = 11; |
36: dout = 10; |
37: dout = 4; |
38: dout = 13; |
39: dout = 1; |
40: dout = 5; |
41: dout = 8; |
42: dout = 12; |
43: dout = 6; |
44: dout = 9; |
45: dout = 3; |
46: dout = 2; |
47: dout = 15; |
|
48: dout = 13; |
49: dout = 8; |
50: dout = 10; |
51: dout = 1; |
52: dout = 3; |
53: dout = 15; |
54: dout = 4; |
55: dout = 2; |
56: dout = 11; |
57: dout = 6; |
58: dout = 7; |
59: dout = 12; |
60: dout = 0; |
61: dout = 5; |
62: dout = 14; |
63: dout = 9; |
|
endcase |
end |
|
endmodule |
/trunk/rtl/verilog/common/sbox3.v
0,0 → 1,113
///////////////////////////////////////////////////////////////////// |
//// //// |
//// SBOX //// |
//// The SBOX is essentially a 64x4 ROM //// |
//// //// |
//// 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 sbox3(addr, dout); |
input [1:6] addr; |
output [1:4] dout; |
reg [1:4] dout; |
|
always @(addr) begin |
case ({addr[1], addr[6], addr[2:5]}) //synopsys full_case parallel_case |
0: dout = 10; |
1: dout = 0; |
2: dout = 9; |
3: dout = 14; |
4: dout = 6; |
5: dout = 3; |
6: dout = 15; |
7: dout = 5; |
8: dout = 1; |
9: dout = 13; |
10: dout = 12; |
11: dout = 7; |
12: dout = 11; |
13: dout = 4; |
14: dout = 2; |
15: dout = 8; |
|
16: dout = 13; |
17: dout = 7; |
18: dout = 0; |
19: dout = 9; |
20: dout = 3; |
21: dout = 4; |
22: dout = 6; |
23: dout = 10; |
24: dout = 2; |
25: dout = 8; |
26: dout = 5; |
27: dout = 14; |
28: dout = 12; |
29: dout = 11; |
30: dout = 15; |
31: dout = 1; |
|
32: dout = 13; |
33: dout = 6; |
34: dout = 4; |
35: dout = 9; |
36: dout = 8; |
37: dout = 15; |
38: dout = 3; |
39: dout = 0; |
40: dout = 11; |
41: dout = 1; |
42: dout = 2; |
43: dout = 12; |
44: dout = 5; |
45: dout = 10; |
46: dout = 14; |
47: dout = 7; |
|
48: dout = 1; |
49: dout = 10; |
50: dout = 13; |
51: dout = 0; |
52: dout = 6; |
53: dout = 9; |
54: dout = 8; |
55: dout = 7; |
56: dout = 4; |
57: dout = 15; |
58: dout = 14; |
59: dout = 3; |
60: dout = 11; |
61: dout = 5; |
62: dout = 2; |
63: dout = 12; |
|
endcase |
end |
|
endmodule |
/trunk/rtl/verilog/common/sbox4.v
0,0 → 1,113
///////////////////////////////////////////////////////////////////// |
//// //// |
//// SBOX //// |
//// The SBOX is essentially a 64x4 ROM //// |
//// //// |
//// 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 sbox4(addr, dout); |
input [1:6] addr; |
output [1:4] dout; |
reg [1:4] dout; |
|
always @(addr) begin |
case ({addr[1], addr[6], addr[2:5]}) //synopsys full_case parallel_case |
0: dout = 7; |
1: dout = 13; |
2: dout = 14; |
3: dout = 3; |
4: dout = 0; |
5: dout = 6; |
6: dout = 9; |
7: dout = 10; |
8: dout = 1; |
9: dout = 2; |
10: dout = 8; |
11: dout = 5; |
12: dout = 11; |
13: dout = 12; |
14: dout = 4; |
15: dout = 15; |
|
16: dout = 13; |
17: dout = 8; |
18: dout = 11; |
19: dout = 5; |
20: dout = 6; |
21: dout = 15; |
22: dout = 0; |
23: dout = 3; |
24: dout = 4; |
25: dout = 7; |
26: dout = 2; |
27: dout = 12; |
28: dout = 1; |
29: dout = 10; |
30: dout = 14; |
31: dout = 9; |
|
32: dout = 10; |
33: dout = 6; |
34: dout = 9; |
35: dout = 0; |
36: dout = 12; |
37: dout = 11; |
38: dout = 7; |
39: dout = 13; |
40: dout = 15; |
41: dout = 1; |
42: dout = 3; |
43: dout = 14; |
44: dout = 5; |
45: dout = 2; |
46: dout = 8; |
47: dout = 4; |
|
48: dout = 3; |
49: dout = 15; |
50: dout = 0; |
51: dout = 6; |
52: dout = 10; |
53: dout = 1; |
54: dout = 13; |
55: dout = 8; |
56: dout = 9; |
57: dout = 4; |
58: dout = 5; |
59: dout = 11; |
60: dout = 12; |
61: dout = 7; |
62: dout = 2; |
63: dout = 14; |
|
endcase |
end |
|
endmodule |
/trunk/rtl/verilog/common/sbox5.v
0,0 → 1,113
///////////////////////////////////////////////////////////////////// |
//// //// |
//// SBOX //// |
//// The SBOX is essentially a 64x4 ROM //// |
//// //// |
//// 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 sbox5(addr, dout); |
input [1:6] addr; |
output [1:4] dout; |
reg [1:4] dout; |
|
always @(addr) begin |
case ({addr[1], addr[6], addr[2:5]}) //synopsys full_case parallel_case |
0: dout = 2; |
1: dout = 12; |
2: dout = 4; |
3: dout = 1; |
4: dout = 7; |
5: dout = 10; |
6: dout = 11; |
7: dout = 6; |
8: dout = 8; |
9: dout = 5; |
10: dout = 3; |
11: dout = 15; |
12: dout = 13; |
13: dout = 0; |
14: dout = 14; |
15: dout = 9; |
|
16: dout = 14; |
17: dout = 11; |
18: dout = 2; |
19: dout = 12; |
20: dout = 4; |
21: dout = 7; |
22: dout = 13; |
23: dout = 1; |
24: dout = 5; |
25: dout = 0; |
26: dout = 15; |
27: dout = 10; |
28: dout = 3; |
29: dout = 9; |
30: dout = 8; |
31: dout = 6; |
|
32: dout = 4; |
33: dout = 2; |
34: dout = 1; |
35: dout = 11; |
36: dout = 10; |
37: dout = 13; |
38: dout = 7; |
39: dout = 8; |
40: dout = 15; |
41: dout = 9; |
42: dout = 12; |
43: dout = 5; |
44: dout = 6; |
45: dout = 3; |
46: dout = 0; |
47: dout = 14; |
|
48: dout = 11; |
49: dout = 8; |
50: dout = 12; |
51: dout = 7; |
52: dout = 1; |
53: dout = 14; |
54: dout = 2; |
55: dout = 13; |
56: dout = 6; |
57: dout = 15; |
58: dout = 0; |
59: dout = 9; |
60: dout = 10; |
61: dout = 4; |
62: dout = 5; |
63: dout = 3; |
|
endcase |
end |
|
endmodule |
/trunk/rtl/verilog/common/sbox6.v
0,0 → 1,113
///////////////////////////////////////////////////////////////////// |
//// //// |
//// SBOX //// |
//// The SBOX is essentially a 64x4 ROM //// |
//// //// |
//// 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 sbox6(addr, dout); |
input [1:6] addr; |
output [1:4] dout; |
reg [1:4] dout; |
|
always @(addr) begin |
case ({addr[1], addr[6], addr[2:5]}) //synopsys full_case parallel_case |
0: dout = 12; |
1: dout = 1; |
2: dout = 10; |
3: dout = 15; |
4: dout = 9; |
5: dout = 2; |
6: dout = 6; |
7: dout = 8; |
8: dout = 0; |
9: dout = 13; |
10: dout = 3; |
11: dout = 4; |
12: dout = 14; |
13: dout = 7; |
14: dout = 5; |
15: dout = 11; |
|
16: dout = 10; |
17: dout = 15; |
18: dout = 4; |
19: dout = 2; |
20: dout = 7; |
21: dout = 12; |
22: dout = 9; |
23: dout = 5; |
24: dout = 6; |
25: dout = 1; |
26: dout = 13; |
27: dout = 14; |
28: dout = 0; |
29: dout = 11; |
30: dout = 3; |
31: dout = 8; |
|
32: dout = 9; |
33: dout = 14; |
34: dout = 15; |
35: dout = 5; |
36: dout = 2; |
37: dout = 8; |
38: dout = 12; |
39: dout = 3; |
40: dout = 7; |
41: dout = 0; |
42: dout = 4; |
43: dout = 10; |
44: dout = 1; |
45: dout = 13; |
46: dout = 11; |
47: dout = 6; |
|
48: dout = 4; |
49: dout = 3; |
50: dout = 2; |
51: dout = 12; |
52: dout = 9; |
53: dout = 5; |
54: dout = 15; |
55: dout = 10; |
56: dout = 11; |
57: dout = 14; |
58: dout = 1; |
59: dout = 7; |
60: dout = 6; |
61: dout = 0; |
62: dout = 8; |
63: dout = 13; |
|
endcase |
end |
|
endmodule |
/trunk/rtl/verilog/common/sbox7.v
0,0 → 1,113
///////////////////////////////////////////////////////////////////// |
//// //// |
//// SBOX //// |
//// The SBOX is essentially a 64x4 ROM //// |
//// //// |
//// 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 sbox7(addr, dout); |
input [1:6] addr; |
output [1:4] dout; |
reg [1:4] dout; |
|
always @(addr) begin |
case ({addr[1], addr[6], addr[2:5]}) //synopsys full_case parallel_case |
0: dout = 4; |
1: dout = 11; |
2: dout = 2; |
3: dout = 14; |
4: dout = 15; |
5: dout = 0; |
6: dout = 8; |
7: dout = 13; |
8: dout = 3; |
9: dout = 12; |
10: dout = 9; |
11: dout = 7; |
12: dout = 5; |
13: dout = 10; |
14: dout = 6; |
15: dout = 1; |
|
16: dout = 13; |
17: dout = 0; |
18: dout = 11; |
19: dout = 7; |
20: dout = 4; |
21: dout = 9; |
22: dout = 1; |
23: dout = 10; |
24: dout = 14; |
25: dout = 3; |
26: dout = 5; |
27: dout = 12; |
28: dout = 2; |
29: dout = 15; |
30: dout = 8; |
31: dout = 6; |
|
32: dout = 1; |
33: dout = 4; |
34: dout = 11; |
35: dout = 13; |
36: dout = 12; |
37: dout = 3; |
38: dout = 7; |
39: dout = 14; |
40: dout = 10; |
41: dout = 15; |
42: dout = 6; |
43: dout = 8; |
44: dout = 0; |
45: dout = 5; |
46: dout = 9; |
47: dout = 2; |
|
48: dout = 6; |
49: dout = 11; |
50: dout = 13; |
51: dout = 8; |
52: dout = 1; |
53: dout = 4; |
54: dout = 10; |
55: dout = 7; |
56: dout = 9; |
57: dout = 5; |
58: dout = 0; |
59: dout = 15; |
60: dout = 14; |
61: dout = 2; |
62: dout = 3; |
63: dout = 12; |
|
endcase |
end |
|
endmodule |
/trunk/rtl/verilog/common/sbox8.v
0,0 → 1,113
///////////////////////////////////////////////////////////////////// |
//// //// |
//// SBOX //// |
//// The SBOX is essentially a 64x4 ROM //// |
//// //// |
//// 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 sbox8(addr, dout); |
input [1:6] addr; |
output [1:4] dout; |
reg [1:4] dout; |
|
always @(addr) begin |
case ({addr[1], addr[6], addr[2:5]}) //synopsys full_case parallel_case |
0: dout = 13; |
1: dout = 2; |
2: dout = 8; |
3: dout = 4; |
4: dout = 6; |
5: dout = 15; |
6: dout = 11; |
7: dout = 1; |
8: dout = 10; |
9: dout = 9; |
10: dout = 3; |
11: dout = 14; |
12: dout = 5; |
13: dout = 0; |
14: dout = 12; |
15: dout = 7; |
|
16: dout = 1; |
17: dout = 15; |
18: dout = 13; |
19: dout = 8; |
20: dout = 10; |
21: dout = 3; |
22: dout = 7; |
23: dout = 4; |
24: dout = 12; |
25: dout = 5; |
26: dout = 6; |
27: dout = 11; |
28: dout = 0; |
29: dout = 14; |
30: dout = 9; |
31: dout = 2; |
|
32: dout = 7; |
33: dout = 11; |
34: dout = 4; |
35: dout = 1; |
36: dout = 9; |
37: dout = 12; |
38: dout = 14; |
39: dout = 2; |
40: dout = 0; |
41: dout = 6; |
42: dout = 10; |
43: dout = 13; |
44: dout = 15; |
45: dout = 3; |
46: dout = 5; |
47: dout = 8; |
|
48: dout = 2; |
49: dout = 1; |
50: dout = 14; |
51: dout = 7; |
52: dout = 4; |
53: dout = 10; |
54: dout = 8; |
55: dout = 13; |
56: dout = 15; |
57: dout = 12; |
58: dout = 9; |
59: dout = 0; |
60: dout = 3; |
61: dout = 5; |
62: dout = 6; |
63: dout = 11; |
|
endcase |
end |
|
endmodule |
/trunk/rtl/verilog/common/crp.v
0,0 → 1,69
///////////////////////////////////////////////////////////////////// |
//// //// |
//// CRP //// |
//// DES Crypt Module //// |
//// //// |
//// 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 crp(P, R, K_sub); |
output [1:32] P; |
input [1:32] R; |
input [1:48] K_sub; |
|
wire [1:48] E; |
wire [1:48] X; |
wire [1:48] S; |
|
assign E[1:48] = { R[32], R[1], R[2], R[3], R[4], R[5], R[4], R[5], |
R[6], R[7], R[8], R[9], R[8], R[9], R[10], R[11], |
R[12], R[13], R[12], R[13], R[14], R[15], R[16], |
R[17], R[16], R[17], R[18], R[19], R[20], R[21], |
R[20], R[21], R[22], R[23], R[24], R[25], R[24], |
R[25], R[26], R[27], R[28], R[29], R[28], R[29], |
R[30], R[31], R[32], R[1]}; |
|
assign X = E ^ K_sub; |
|
sbox1 u0( .addr(X[01:06]), .dout(S[01:04]) ); |
sbox2 u1( .addr(X[07:12]), .dout(S[05:08]) ); |
sbox3 u2( .addr(X[13:18]), .dout(S[09:12]) ); |
sbox4 u3( .addr(X[19:24]), .dout(S[13:16]) ); |
sbox5 u4( .addr(X[25:30]), .dout(S[17:20]) ); |
sbox6 u5( .addr(X[31:36]), .dout(S[21:24]) ); |
sbox7 u6( .addr(X[37:42]), .dout(S[25:28]) ); |
sbox8 u7( .addr(X[43:48]), .dout(S[29:32]) ); |
|
assign P[1:32] = { S[16], S[7], S[20], S[21], S[29], S[12], S[28], |
S[17], S[1], S[15], S[23], S[26], S[5], S[18], |
S[31], S[10], S[2], S[8], S[24], S[14], S[32], |
S[27], S[3], S[9], S[19], S[13], S[30], S[6], |
S[22], S[11], S[4], S[25]}; |
|
endmodule |
/trunk/rtl/verilog/area_opt/des.v
0,0 → 1,95
///////////////////////////////////////////////////////////////////// |
//// //// |
//// DES //// |
//// DES Top Level module //// |
//// //// |
//// 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 des(desOut, desIn, key, decrypt, roundSel, clk); |
output [63:0] desOut; |
input [63:0] desIn; |
input [55:0] key; |
input decrypt; |
input [3:0] roundSel; |
input clk; |
|
wire [1:48] K_sub; |
wire [1:64] IP, FP; |
reg [1:32] L, R; |
wire [1:32] Xin; |
wire [1:32] Lout, Rout; |
wire [1:32] out; |
|
assign Lout = (roundSel == 0) ? IP[33:64] : R; |
assign Xin = (roundSel == 0) ? IP[01:32] : L; |
assign Rout = Xin ^ out; |
assign FP = { Rout, Lout}; |
|
crp u0( .P(out), .R(Lout), .K_sub(K_sub) ); |
|
always @(posedge clk) |
L <= #1 Lout; |
|
always @(posedge clk) |
R <= #1 Rout; |
|
// Select a subkey from key. |
key_sel u1( |
.K_sub( K_sub ), |
.K( key ), |
.roundSel( roundSel ), |
.decrypt( decrypt ) |
); |
|
// Perform initial permutation |
assign IP[1:64] = { desIn[06], desIn[14], desIn[22], desIn[30], desIn[38], desIn[46], |
desIn[54], desIn[62], desIn[04], desIn[12], desIn[20], desIn[28], |
desIn[36], desIn[44], desIn[52], desIn[60], desIn[02], desIn[10], |
desIn[18], desIn[26], desIn[34], desIn[42], desIn[50], desIn[58], |
desIn[00], desIn[08], desIn[16], desIn[24], desIn[32], desIn[40], |
desIn[48], desIn[56], desIn[07], desIn[15], desIn[23], desIn[31], |
desIn[39], desIn[47], desIn[55], desIn[63], desIn[05], desIn[13], |
desIn[21], desIn[29], desIn[37], desIn[45], desIn[53], desIn[61], |
desIn[03], desIn[11], desIn[19], desIn[27], desIn[35], desIn[43], |
desIn[51], desIn[59], desIn[01], desIn[09], desIn[17], desIn[25], |
desIn[33], desIn[41], desIn[49], desIn[57] }; |
|
// Perform final permutation |
assign desOut = { FP[40], FP[08], FP[48], FP[16], FP[56], FP[24], FP[64], FP[32], |
FP[39], FP[07], FP[47], FP[15], FP[55], FP[23], FP[63], FP[31], |
FP[38], FP[06], FP[46], FP[14], FP[54], FP[22], FP[62], FP[30], |
FP[37], FP[05], FP[45], FP[13], FP[53], FP[21], FP[61], FP[29], |
FP[36], FP[04], FP[44], FP[12], FP[52], FP[20], FP[60], FP[28], |
FP[35], FP[03], FP[43], FP[11], FP[51], FP[19], FP[59], FP[27], |
FP[34], FP[02], FP[42], FP[10], FP[50], FP[18], FP[58], FP[26], |
FP[33], FP[01], FP[41], FP[09], FP[49], FP[17], FP[57], FP[25] }; |
|
|
endmodule |
/trunk/rtl/verilog/area_opt/key_sel.v
0,0 → 1,851
///////////////////////////////////////////////////////////////////// |
//// //// |
//// 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]; |
assign K12[23] = decrypt ? K[32] : K[41]; |
assign K12[24] = decrypt ? K[12] : K[46]; |
assign K12[25] = decrypt ? K[30] : K[35]; |
assign K12[26] = decrypt ? K[21] : K[2]; |
assign K12[27] = decrypt ? K[15] : K[51]; |
assign K12[28] = decrypt ? K[2] : K[7]; |
assign K12[29] = decrypt ? K[45] : K[22]; |
assign K12[30] = decrypt ? K[42] : K[23]; |
assign K12[31] = decrypt ? K[8] : K[44]; |
assign K12[32] = decrypt ? K[23] : K[28]; |
assign K12[33] = decrypt ? K[14] : K[50]; |
assign K12[34] = decrypt ? K[31] : K[8]; |
assign K12[35] = decrypt ? K[29] : K[38]; |
assign K12[36] = decrypt ? K[52] : K[29]; |
assign K12[37] = decrypt ? K[51] : K[1]; |
assign K12[38] = decrypt ? K[0] : K[36]; |
assign K12[39] = decrypt ? K[16] : K[21]; |
assign K12[40] = decrypt ? K[49] : K[30]; |
assign K12[41] = decrypt ? K[36] : K[45]; |
assign K12[42] = decrypt ? K[28] : K[9]; |
assign K12[43] = decrypt ? K[38] : K[15]; |
assign K12[44] = decrypt ? K[37] : K[42]; |
assign K12[45] = decrypt ? K[7] : K[43]; |
assign K12[46] = decrypt ? K[50] : K[0]; |
assign K12[47] = decrypt ? K[1] : K[37]; |
assign K12[48] = decrypt ? K[22] : K[31]; |
|
assign K11[1] = decrypt ? K[53] : K[34]; |
assign K11[2] = decrypt ? K[17] : K[55]; |
assign K11[3] = decrypt ? K[32] : K[13]; |
assign K11[4] = decrypt ? K[41] : K[47]; |
assign K11[5] = decrypt ? K[19] : K[25]; |
assign K11[6] = decrypt ? K[47] : K[53]; |
assign K11[7] = decrypt ? K[33] : K[39]; |
assign K11[8] = decrypt ? K[12] : K[18]; |
assign K11[9] = decrypt ? K[3] : K[41]; |
assign K11[10] = decrypt ? K[54] : K[3]; |
assign K11[11] = decrypt ? K[20] : K[26]; |
assign K11[12] = decrypt ? K[25] : K[6]; |
assign K11[13] = decrypt ? K[34] : K[40]; |
assign K11[14] = decrypt ? K[6] : K[12]; |
assign K11[15] = decrypt ? K[39] : K[20]; |
assign K11[16] = decrypt ? K[40] : K[46]; |
assign K11[17] = decrypt ? K[55] : K[4]; |
assign K11[18] = decrypt ? K[11] : K[17]; |
assign K11[19] = decrypt ? K[10] : K[48]; |
assign K11[20] = decrypt ? K[4] : K[10]; |
assign K11[21] = decrypt ? K[5] : K[11]; |
assign K11[22] = decrypt ? K[13] : K[19]; |
assign K11[23] = decrypt ? K[46] : K[27]; |
assign K11[24] = decrypt ? K[26] : K[32]; |
assign K11[25] = decrypt ? K[44] : K[21]; |
assign K11[26] = decrypt ? K[35] : K[43]; |
assign K11[27] = decrypt ? K[29] : K[37]; |
assign K11[28] = decrypt ? K[16] : K[52]; |
assign K11[29] = decrypt ? K[0] : K[8]; |
assign K11[30] = decrypt ? K[1] : K[9]; |
assign K11[31] = decrypt ? K[22] : K[30]; |
assign K11[32] = decrypt ? K[37] : K[14]; |
assign K11[33] = decrypt ? K[28] : K[36]; |
assign K11[34] = decrypt ? K[45] : K[49]; |
assign K11[35] = decrypt ? K[43] : K[51]; |
assign K11[36] = decrypt ? K[7] : K[15]; |
assign K11[37] = decrypt ? K[38] : K[42]; |
assign K11[38] = decrypt ? K[14] : K[22]; |
assign K11[39] = decrypt ? K[30] : K[7]; |
assign K11[40] = decrypt ? K[8] : K[16]; |
assign K11[41] = decrypt ? K[50] : K[31]; |
assign K11[42] = decrypt ? K[42] : K[50]; |
assign K11[43] = decrypt ? K[52] : K[1]; |
assign K11[44] = decrypt ? K[51] : K[28]; |
assign K11[45] = decrypt ? K[21] : K[29]; |
assign K11[46] = decrypt ? K[9] : K[45]; |
assign K11[47] = decrypt ? K[15] : K[23]; |
assign K11[48] = decrypt ? K[36] : K[44]; |
|
assign K10[1] = decrypt ? K[10] : K[20]; |
assign K10[2] = decrypt ? K[6] : K[41]; |
assign K10[3] = decrypt ? K[46] : K[24]; |
assign K10[4] = decrypt ? K[55] : K[33]; |
assign K10[5] = decrypt ? K[33] : K[11]; |
assign K10[6] = decrypt ? K[4] : K[39]; |
assign K10[7] = decrypt ? K[47] : K[25]; |
assign K10[8] = decrypt ? K[26] : K[4]; |
assign K10[9] = decrypt ? K[17] : K[27]; |
assign K10[10] = decrypt ? K[11] : K[46]; |
assign K10[11] = decrypt ? K[34] : K[12]; |
assign K10[12] = decrypt ? K[39] : K[17]; |
assign K10[13] = decrypt ? K[48] : K[26]; |
assign K10[14] = decrypt ? K[20] : K[55]; |
assign K10[15] = decrypt ? K[53] : K[6]; |
assign K10[16] = decrypt ? K[54] : K[32]; |
assign K10[17] = decrypt ? K[12] : K[47]; |
assign K10[18] = decrypt ? K[25] : K[3]; |
assign K10[19] = decrypt ? K[24] : K[34]; |
assign K10[20] = decrypt ? K[18] : K[53]; |
assign K10[21] = decrypt ? K[19] : K[54]; |
assign K10[22] = decrypt ? K[27] : K[5]; |
assign K10[23] = decrypt ? K[3] : K[13]; |
assign K10[24] = decrypt ? K[40] : K[18]; |
assign K10[25] = decrypt ? K[31] : K[7]; |
assign K10[26] = decrypt ? K[49] : K[29]; |
assign K10[27] = decrypt ? K[43] : K[23]; |
assign K10[28] = decrypt ? K[30] : K[38]; |
assign K10[29] = decrypt ? K[14] : K[49]; |
assign K10[30] = decrypt ? K[15] : K[50]; |
assign K10[31] = decrypt ? K[36] : K[16]; |
assign K10[32] = decrypt ? K[51] : K[0]; |
assign K10[33] = decrypt ? K[42] : K[22]; |
assign K10[34] = decrypt ? K[0] : K[35]; |
assign K10[35] = decrypt ? K[2] : K[37]; |
assign K10[36] = decrypt ? K[21] : K[1]; |
assign K10[37] = decrypt ? K[52] : K[28]; |
assign K10[38] = decrypt ? K[28] : K[8]; |
assign K10[39] = decrypt ? K[44] : K[52]; |
assign K10[40] = decrypt ? K[22] : K[2]; |
assign K10[41] = decrypt ? K[9] : K[44]; |
assign K10[42] = decrypt ? K[1] : K[36]; |
assign K10[43] = decrypt ? K[7] : K[42]; |
assign K10[44] = decrypt ? K[38] : K[14]; |
assign K10[45] = decrypt ? K[35] : K[15]; |
assign K10[46] = decrypt ? K[23] : K[31]; |
assign K10[47] = decrypt ? K[29] : K[9]; |
assign K10[48] = decrypt ? K[50] : K[30]; |
|
assign K9[1] = decrypt ? K[24] : K[6]; |
assign K9[2] = decrypt ? K[20] : K[27]; |
assign K9[3] = decrypt ? K[3] : K[10]; |
assign K9[4] = decrypt ? K[12] : K[19]; |
assign K9[5] = decrypt ? K[47] : K[54]; |
assign K9[6] = decrypt ? K[18] : K[25]; |
assign K9[7] = decrypt ? K[4] : K[11]; |
assign K9[8] = decrypt ? K[40] : K[47]; |
assign K9[9] = decrypt ? K[6] : K[13]; |
assign K9[10] = decrypt ? K[25] : K[32]; |
assign K9[11] = decrypt ? K[48] : K[55]; |
assign K9[12] = decrypt ? K[53] : K[3]; |
assign K9[13] = decrypt ? K[5] : K[12]; |
assign K9[14] = decrypt ? K[34] : K[41]; |
assign K9[15] = decrypt ? K[10] : K[17]; |
assign K9[16] = decrypt ? K[11] : K[18]; |
assign K9[17] = decrypt ? K[26] : K[33]; |
assign K9[18] = decrypt ? K[39] : K[46]; |
assign K9[19] = decrypt ? K[13] : K[20]; |
assign K9[20] = decrypt ? K[32] : K[39]; |
assign K9[21] = decrypt ? K[33] : K[40]; |
assign K9[22] = decrypt ? K[41] : K[48]; |
assign K9[23] = decrypt ? K[17] : K[24]; |
assign K9[24] = decrypt ? K[54] : K[4]; |
assign K9[25] = decrypt ? K[45] : K[52]; |
assign K9[26] = decrypt ? K[8] : K[15]; |
assign K9[27] = decrypt ? K[2] : K[9]; |
assign K9[28] = decrypt ? K[44] : K[51]; |
assign K9[29] = decrypt ? K[28] : K[35]; |
assign K9[30] = decrypt ? K[29] : K[36]; |
assign K9[31] = decrypt ? K[50] : K[2]; |
assign K9[32] = decrypt ? K[38] : K[45]; |
assign K9[33] = decrypt ? K[1] : K[8]; |
assign K9[34] = decrypt ? K[14] : K[21]; |
assign K9[35] = decrypt ? K[16] : K[23]; |
assign K9[36] = decrypt ? K[35] : K[42]; |
assign K9[37] = decrypt ? K[7] : K[14]; |
assign K9[38] = decrypt ? K[42] : K[49]; |
assign K9[39] = decrypt ? K[31] : K[38]; |
assign K9[40] = decrypt ? K[36] : K[43]; |
assign K9[41] = decrypt ? K[23] : K[30]; |
assign K9[42] = decrypt ? K[15] : K[22]; |
assign K9[43] = decrypt ? K[21] : K[28]; |
assign K9[44] = decrypt ? K[52] : K[0]; |
assign K9[45] = decrypt ? K[49] : K[1]; |
assign K9[46] = decrypt ? K[37] : K[44]; |
assign K9[47] = decrypt ? K[43] : K[50]; |
assign K9[48] = decrypt ? K[9] : K[16]; |
|
assign K8[1] = decrypt ? K[6] : K[24]; |
assign K8[2] = decrypt ? K[27] : K[20]; |
assign K8[3] = decrypt ? K[10] : K[3]; |
assign K8[4] = decrypt ? K[19] : K[12]; |
assign K8[5] = decrypt ? K[54] : K[47]; |
assign K8[6] = decrypt ? K[25] : K[18]; |
assign K8[7] = decrypt ? K[11] : K[4]; |
assign K8[8] = decrypt ? K[47] : K[40]; |
assign K8[9] = decrypt ? K[13] : K[6]; |
assign K8[10] = decrypt ? K[32] : K[25]; |
assign K8[11] = decrypt ? K[55] : K[48]; |
assign K8[12] = decrypt ? K[3] : K[53]; |
assign K8[13] = decrypt ? K[12] : K[5]; |
assign K8[14] = decrypt ? K[41] : K[34]; |
assign K8[15] = decrypt ? K[17] : K[10]; |
assign K8[16] = decrypt ? K[18] : K[11]; |
assign K8[17] = decrypt ? K[33] : K[26]; |
assign K8[18] = decrypt ? K[46] : K[39]; |
assign K8[19] = decrypt ? K[20] : K[13]; |
assign K8[20] = decrypt ? K[39] : K[32]; |
assign K8[21] = decrypt ? K[40] : K[33]; |
assign K8[22] = decrypt ? K[48] : K[41]; |
assign K8[23] = decrypt ? K[24] : K[17]; |
assign K8[24] = decrypt ? K[4] : K[54]; |
assign K8[25] = decrypt ? K[52] : K[45]; |
assign K8[26] = decrypt ? K[15] : K[8]; |
assign K8[27] = decrypt ? K[9] : K[2]; |
assign K8[28] = decrypt ? K[51] : K[44]; |
assign K8[29] = decrypt ? K[35] : K[28]; |
assign K8[30] = decrypt ? K[36] : K[29]; |
assign K8[31] = decrypt ? K[2] : K[50]; |
assign K8[32] = decrypt ? K[45] : K[38]; |
assign K8[33] = decrypt ? K[8] : K[1]; |
assign K8[34] = decrypt ? K[21] : K[14]; |
assign K8[35] = decrypt ? K[23] : K[16]; |
assign K8[36] = decrypt ? K[42] : K[35]; |
assign K8[37] = decrypt ? K[14] : K[7]; |
assign K8[38] = decrypt ? K[49] : K[42]; |
assign K8[39] = decrypt ? K[38] : K[31]; |
assign K8[40] = decrypt ? K[43] : K[36]; |
assign K8[41] = decrypt ? K[30] : K[23]; |
assign K8[42] = decrypt ? K[22] : K[15]; |
assign K8[43] = decrypt ? K[28] : K[21]; |
assign K8[44] = decrypt ? K[0] : K[52]; |
assign K8[45] = decrypt ? K[1] : K[49]; |
assign K8[46] = decrypt ? K[44] : K[37]; |
assign K8[47] = decrypt ? K[50] : K[43]; |
assign K8[48] = decrypt ? K[16] : K[9]; |
|
assign K7[1] = decrypt ? K[20] : K[10]; |
assign K7[2] = decrypt ? K[41] : K[6]; |
assign K7[3] = decrypt ? K[24] : K[46]; |
assign K7[4] = decrypt ? K[33] : K[55]; |
assign K7[5] = decrypt ? K[11] : K[33]; |
assign K7[6] = decrypt ? K[39] : K[4]; |
assign K7[7] = decrypt ? K[25] : K[47]; |
assign K7[8] = decrypt ? K[4] : K[26]; |
assign K7[9] = decrypt ? K[27] : K[17]; |
assign K7[10] = decrypt ? K[46] : K[11]; |
assign K7[11] = decrypt ? K[12] : K[34]; |
assign K7[12] = decrypt ? K[17] : K[39]; |
assign K7[13] = decrypt ? K[26] : K[48]; |
assign K7[14] = decrypt ? K[55] : K[20]; |
assign K7[15] = decrypt ? K[6] : K[53]; |
assign K7[16] = decrypt ? K[32] : K[54]; |
assign K7[17] = decrypt ? K[47] : K[12]; |
assign K7[18] = decrypt ? K[3] : K[25]; |
assign K7[19] = decrypt ? K[34] : K[24]; |
assign K7[20] = decrypt ? K[53] : K[18]; |
assign K7[21] = decrypt ? K[54] : K[19]; |
assign K7[22] = decrypt ? K[5] : K[27]; |
assign K7[23] = decrypt ? K[13] : K[3]; |
assign K7[24] = decrypt ? K[18] : K[40]; |
assign K7[25] = decrypt ? K[7] : K[31]; |
assign K7[26] = decrypt ? K[29] : K[49]; |
assign K7[27] = decrypt ? K[23] : K[43]; |
assign K7[28] = decrypt ? K[38] : K[30]; |
assign K7[29] = decrypt ? K[49] : K[14]; |
assign K7[30] = decrypt ? K[50] : K[15]; |
assign K7[31] = decrypt ? K[16] : K[36]; |
assign K7[32] = decrypt ? K[0] : K[51]; |
assign K7[33] = decrypt ? K[22] : K[42]; |
assign K7[34] = decrypt ? K[35] : K[0]; |
assign K7[35] = decrypt ? K[37] : K[2]; |
assign K7[36] = decrypt ? K[1] : K[21]; |
assign K7[37] = decrypt ? K[28] : K[52]; |
assign K7[38] = decrypt ? K[8] : K[28]; |
assign K7[39] = decrypt ? K[52] : K[44]; |
assign K7[40] = decrypt ? K[2] : K[22]; |
assign K7[41] = decrypt ? K[44] : K[9]; |
assign K7[42] = decrypt ? K[36] : K[1]; |
assign K7[43] = decrypt ? K[42] : K[7]; |
assign K7[44] = decrypt ? K[14] : K[38]; |
assign K7[45] = decrypt ? K[15] : K[35]; |
assign K7[46] = decrypt ? K[31] : K[23]; |
assign K7[47] = decrypt ? K[9] : K[29]; |
assign K7[48] = decrypt ? K[30] : K[50]; |
|
assign K6[1] = decrypt ? K[34] : K[53]; |
assign K6[2] = decrypt ? K[55] : K[17]; |
assign K6[3] = decrypt ? K[13] : K[32]; |
assign K6[4] = decrypt ? K[47] : K[41]; |
assign K6[5] = decrypt ? K[25] : K[19]; |
assign K6[6] = decrypt ? K[53] : K[47]; |
assign K6[7] = decrypt ? K[39] : K[33]; |
assign K6[8] = decrypt ? K[18] : K[12]; |
assign K6[9] = decrypt ? K[41] : K[3]; |
assign K6[10] = decrypt ? K[3] : K[54]; |
assign K6[11] = decrypt ? K[26] : K[20]; |
assign K6[12] = decrypt ? K[6] : K[25]; |
assign K6[13] = decrypt ? K[40] : K[34]; |
assign K6[14] = decrypt ? K[12] : K[6]; |
assign K6[15] = decrypt ? K[20] : K[39]; |
assign K6[16] = decrypt ? K[46] : K[40]; |
assign K6[17] = decrypt ? K[4] : K[55]; |
assign K6[18] = decrypt ? K[17] : K[11]; |
assign K6[19] = decrypt ? K[48] : K[10]; |
assign K6[20] = decrypt ? K[10] : K[4]; |
assign K6[21] = decrypt ? K[11] : K[5]; |
assign K6[22] = decrypt ? K[19] : K[13]; |
assign K6[23] = decrypt ? K[27] : K[46]; |
assign K6[24] = decrypt ? K[32] : K[26]; |
assign K6[25] = decrypt ? K[21] : K[44]; |
assign K6[26] = decrypt ? K[43] : K[35]; |
assign K6[27] = decrypt ? K[37] : K[29]; |
assign K6[28] = decrypt ? K[52] : K[16]; |
assign K6[29] = decrypt ? K[8] : K[0]; |
assign K6[30] = decrypt ? K[9] : K[1]; |
assign K6[31] = decrypt ? K[30] : K[22]; |
assign K6[32] = decrypt ? K[14] : K[37]; |
assign K6[33] = decrypt ? K[36] : K[28]; |
assign K6[34] = decrypt ? K[49] : K[45]; |
assign K6[35] = decrypt ? K[51] : K[43]; |
assign K6[36] = decrypt ? K[15] : K[7]; |
assign K6[37] = decrypt ? K[42] : K[38]; |
assign K6[38] = decrypt ? K[22] : K[14]; |
assign K6[39] = decrypt ? K[7] : K[30]; |
assign K6[40] = decrypt ? K[16] : K[8]; |
assign K6[41] = decrypt ? K[31] : K[50]; |
assign K6[42] = decrypt ? K[50] : K[42]; |
assign K6[43] = decrypt ? K[1] : K[52]; |
assign K6[44] = decrypt ? K[28] : K[51]; |
assign K6[45] = decrypt ? K[29] : K[21]; |
assign K6[46] = decrypt ? K[45] : K[9]; |
assign K6[47] = decrypt ? K[23] : K[15]; |
assign K6[48] = decrypt ? K[44] : K[36]; |
|
assign K5[1] = decrypt ? K[48] : K[39]; |
assign K5[2] = decrypt ? K[12] : K[3]; |
assign K5[3] = decrypt ? K[27] : K[18]; |
assign K5[4] = decrypt ? K[4] : K[27]; |
assign K5[5] = decrypt ? K[39] : K[5]; |
assign K5[6] = decrypt ? K[10] : K[33]; |
assign K5[7] = decrypt ? K[53] : K[19]; |
assign K5[8] = decrypt ? K[32] : K[55]; |
assign K5[9] = decrypt ? K[55] : K[46]; |
assign K5[10] = decrypt ? K[17] : K[40]; |
assign K5[11] = decrypt ? K[40] : K[6]; |
assign K5[12] = decrypt ? K[20] : K[11]; |
assign K5[13] = decrypt ? K[54] : K[20]; |
assign K5[14] = decrypt ? K[26] : K[17]; |
assign K5[15] = decrypt ? K[34] : K[25]; |
assign K5[16] = decrypt ? K[3] : K[26]; |
assign K5[17] = decrypt ? K[18] : K[41]; |
assign K5[18] = decrypt ? K[6] : K[54]; |
assign K5[19] = decrypt ? K[5] : K[53]; |
assign K5[20] = decrypt ? K[24] : K[47]; |
assign K5[21] = decrypt ? K[25] : K[48]; |
assign K5[22] = decrypt ? K[33] : K[24]; |
assign K5[23] = decrypt ? K[41] : K[32]; |
assign K5[24] = decrypt ? K[46] : K[12]; |
assign K5[25] = decrypt ? K[35] : K[30]; |
assign K5[26] = decrypt ? K[2] : K[21]; |
assign K5[27] = decrypt ? K[51] : K[15]; |
assign K5[28] = decrypt ? K[7] : K[2]; |
assign K5[29] = decrypt ? K[22] : K[45]; |
assign K5[30] = decrypt ? K[23] : K[42]; |
assign K5[31] = decrypt ? K[44] : K[8]; |
assign K5[32] = decrypt ? K[28] : K[23]; |
assign K5[33] = decrypt ? K[50] : K[14]; |
assign K5[34] = decrypt ? K[8] : K[31]; |
assign K5[35] = decrypt ? K[38] : K[29]; |
assign K5[36] = decrypt ? K[29] : K[52]; |
assign K5[37] = decrypt ? K[1] : K[51]; |
assign K5[38] = decrypt ? K[36] : K[0]; |
assign K5[39] = decrypt ? K[21] : K[16]; |
assign K5[40] = decrypt ? K[30] : K[49]; |
assign K5[41] = decrypt ? K[45] : K[36]; |
assign K5[42] = decrypt ? K[9] : K[28]; |
assign K5[43] = decrypt ? K[15] : K[38]; |
assign K5[44] = decrypt ? K[42] : K[37]; |
assign K5[45] = decrypt ? K[43] : K[7]; |
assign K5[46] = decrypt ? K[0] : K[50]; |
assign K5[47] = decrypt ? K[37] : K[1]; |
assign K5[48] = decrypt ? K[31] : K[22]; |
|
assign K4[1] = decrypt ? K[5] : K[25]; |
assign K4[2] = decrypt ? K[26] : K[46]; |
assign K4[3] = decrypt ? K[41] : K[4]; |
assign K4[4] = decrypt ? K[18] : K[13]; |
assign K4[5] = decrypt ? K[53] : K[48]; |
assign K4[6] = decrypt ? K[24] : K[19]; |
assign K4[7] = decrypt ? K[10] : K[5]; |
assign K4[8] = decrypt ? K[46] : K[41]; |
assign K4[9] = decrypt ? K[12] : K[32]; |
assign K4[10] = decrypt ? K[6] : K[26]; |
assign K4[11] = decrypt ? K[54] : K[17]; |
assign K4[12] = decrypt ? K[34] : K[54]; |
assign K4[13] = decrypt ? K[11] : K[6]; |
assign K4[14] = decrypt ? K[40] : K[3]; |
assign K4[15] = decrypt ? K[48] : K[11]; |
assign K4[16] = decrypt ? K[17] : K[12]; |
assign K4[17] = decrypt ? K[32] : K[27]; |
assign K4[18] = decrypt ? K[20] : K[40]; |
assign K4[19] = decrypt ? K[19] : K[39]; |
assign K4[20] = decrypt ? K[13] : K[33]; |
assign K4[21] = decrypt ? K[39] : K[34]; |
assign K4[22] = decrypt ? K[47] : K[10]; |
assign K4[23] = decrypt ? K[55] : K[18]; |
assign K4[24] = decrypt ? K[3] : K[55]; |
assign K4[25] = decrypt ? K[49] : K[16]; |
assign K4[26] = decrypt ? K[16] : K[7]; |
assign K4[27] = decrypt ? K[38] : K[1]; |
assign K4[28] = decrypt ? K[21] : K[43]; |
assign K4[29] = decrypt ? K[36] : K[31]; |
assign K4[30] = decrypt ? K[37] : K[28]; |
assign K4[31] = decrypt ? K[31] : K[49]; |
assign K4[32] = decrypt ? K[42] : K[9]; |
assign K4[33] = decrypt ? K[9] : K[0]; |
assign K4[34] = decrypt ? K[22] : K[44]; |
assign K4[35] = decrypt ? K[52] : K[15]; |
assign K4[36] = decrypt ? K[43] : K[38]; |
assign K4[37] = decrypt ? K[15] : K[37]; |
assign K4[38] = decrypt ? K[50] : K[45]; |
assign K4[39] = decrypt ? K[35] : K[2]; |
assign K4[40] = decrypt ? K[44] : K[35]; |
assign K4[41] = decrypt ? K[0] : K[22]; |
assign K4[42] = decrypt ? K[23] : K[14]; |
assign K4[43] = decrypt ? K[29] : K[51]; |
assign K4[44] = decrypt ? K[1] : K[23]; |
assign K4[45] = decrypt ? K[2] : K[52]; |
assign K4[46] = decrypt ? K[14] : K[36]; |
assign K4[47] = decrypt ? K[51] : K[42]; |
assign K4[48] = decrypt ? K[45] : K[8]; |
|
assign K3[1] = decrypt ? K[19] : K[11]; |
assign K3[2] = decrypt ? K[40] : K[32]; |
assign K3[3] = decrypt ? K[55] : K[47]; |
assign K3[4] = decrypt ? K[32] : K[24]; |
assign K3[5] = decrypt ? K[10] : K[34]; |
assign K3[6] = decrypt ? K[13] : K[5]; |
assign K3[7] = decrypt ? K[24] : K[48]; |
assign K3[8] = decrypt ? K[3] : K[27]; |
assign K3[9] = decrypt ? K[26] : K[18]; |
assign K3[10] = decrypt ? K[20] : K[12]; |
assign K3[11] = decrypt ? K[11] : K[3]; |
assign K3[12] = decrypt ? K[48] : K[40]; |
assign K3[13] = decrypt ? K[25] : K[17]; |
assign K3[14] = decrypt ? K[54] : K[46]; |
assign K3[15] = decrypt ? K[5] : K[54]; |
assign K3[16] = decrypt ? K[6] : K[55]; |
assign K3[17] = decrypt ? K[46] : K[13]; |
assign K3[18] = decrypt ? K[34] : K[26]; |
assign K3[19] = decrypt ? K[33] : K[25]; |
assign K3[20] = decrypt ? K[27] : K[19]; |
assign K3[21] = decrypt ? K[53] : K[20]; |
assign K3[22] = decrypt ? K[4] : K[53]; |
assign K3[23] = decrypt ? K[12] : K[4]; |
assign K3[24] = decrypt ? K[17] : K[41]; |
assign K3[25] = decrypt ? K[8] : K[2]; |
assign K3[26] = decrypt ? K[30] : K[52]; |
assign K3[27] = decrypt ? K[52] : K[42]; |
assign K3[28] = decrypt ? K[35] : K[29]; |
assign K3[29] = decrypt ? K[50] : K[44]; |
assign K3[30] = decrypt ? K[51] : K[14]; |
assign K3[31] = decrypt ? K[45] : K[35]; |
assign K3[32] = decrypt ? K[1] : K[50]; |
assign K3[33] = decrypt ? K[23] : K[45]; |
assign K3[34] = decrypt ? K[36] : K[30]; |
assign K3[35] = decrypt ? K[7] : K[1]; |
assign K3[36] = decrypt ? K[2] : K[51]; |
assign K3[37] = decrypt ? K[29] : K[23]; |
assign K3[38] = decrypt ? K[9] : K[31]; |
assign K3[39] = decrypt ? K[49] : K[43]; |
assign K3[40] = decrypt ? K[31] : K[21]; |
assign K3[41] = decrypt ? K[14] : K[8]; |
assign K3[42] = decrypt ? K[37] : K[0]; |
assign K3[43] = decrypt ? K[43] : K[37]; |
assign K3[44] = decrypt ? K[15] : K[9]; |
assign K3[45] = decrypt ? K[16] : K[38]; |
assign K3[46] = decrypt ? K[28] : K[22]; |
assign K3[47] = decrypt ? K[38] : K[28]; |
assign K3[48] = decrypt ? K[0] : K[49]; |
|
assign K2[1] = decrypt ? K[33] : K[54]; |
assign K2[2] = decrypt ? K[54] : K[18]; |
assign K2[3] = decrypt ? K[12] : K[33]; |
assign K2[4] = decrypt ? K[46] : K[10]; |
assign K2[5] = decrypt ? K[24] : K[20]; |
assign K2[6] = decrypt ? K[27] : K[48]; |
assign K2[7] = decrypt ? K[13] : K[34]; |
assign K2[8] = decrypt ? K[17] : K[13]; |
assign K2[9] = decrypt ? K[40] : K[4]; |
assign K2[10] = decrypt ? K[34] : K[55]; |
assign K2[11] = decrypt ? K[25] : K[46]; |
assign K2[12] = decrypt ? K[5] : K[26]; |
assign K2[13] = decrypt ? K[39] : K[3]; |
assign K2[14] = decrypt ? K[11] : K[32]; |
assign K2[15] = decrypt ? K[19] : K[40]; |
assign K2[16] = decrypt ? K[20] : K[41]; |
assign K2[17] = decrypt ? K[3] : K[24]; |
assign K2[18] = decrypt ? K[48] : K[12]; |
assign K2[19] = decrypt ? K[47] : K[11]; |
assign K2[20] = decrypt ? K[41] : K[5]; |
assign K2[21] = decrypt ? K[10] : K[6]; |
assign K2[22] = decrypt ? K[18] : K[39]; |
assign K2[23] = decrypt ? K[26] : K[47]; |
assign K2[24] = decrypt ? K[6] : K[27]; |
assign K2[25] = decrypt ? K[22] : K[43]; |
assign K2[26] = decrypt ? K[44] : K[38]; |
assign K2[27] = decrypt ? K[7] : K[28]; |
assign K2[28] = decrypt ? K[49] : K[15]; |
assign K2[29] = decrypt ? K[9] : K[30]; |
assign K2[30] = decrypt ? K[38] : K[0]; |
assign K2[31] = decrypt ? K[0] : K[21]; |
assign K2[32] = decrypt ? K[15] : K[36]; |
assign K2[33] = decrypt ? K[37] : K[31]; |
assign K2[34] = decrypt ? K[50] : K[16]; |
assign K2[35] = decrypt ? K[21] : K[42]; |
assign K2[36] = decrypt ? K[16] : K[37]; |
assign K2[37] = decrypt ? K[43] : K[9]; |
assign K2[38] = decrypt ? K[23] : K[44]; |
assign K2[39] = decrypt ? K[8] : K[29]; |
assign K2[40] = decrypt ? K[45] : K[7]; |
assign K2[41] = decrypt ? K[28] : K[49]; |
assign K2[42] = decrypt ? K[51] : K[45]; |
assign K2[43] = decrypt ? K[2] : K[23]; |
assign K2[44] = decrypt ? K[29] : K[50]; |
assign K2[45] = decrypt ? K[30] : K[51]; |
assign K2[46] = decrypt ? K[42] : K[8]; |
assign K2[47] = decrypt ? K[52] : K[14]; |
assign K2[48] = decrypt ? K[14] : K[35]; |
|
assign K1[1] = decrypt ? K[40] : K[47]; |
assign K1[2] = decrypt ? K[4] : K[11]; |
assign K1[3] = decrypt ? K[19] : K[26]; |
assign K1[4] = decrypt ? K[53] : K[3]; |
assign K1[5] = decrypt ? K[6] : K[13]; |
assign K1[6] = decrypt ? K[34] : K[41]; |
assign K1[7] = decrypt ? K[20] : K[27]; |
assign K1[8] = decrypt ? K[24] : K[6]; |
assign K1[9] = decrypt ? K[47] : K[54]; |
assign K1[10] = decrypt ? K[41] : K[48]; |
assign K1[11] = decrypt ? K[32] : K[39]; |
assign K1[12] = decrypt ? K[12] : K[19]; |
assign K1[13] = decrypt ? K[46] : K[53]; |
assign K1[14] = decrypt ? K[18] : K[25]; |
assign K1[15] = decrypt ? K[26] : K[33]; |
assign K1[16] = decrypt ? K[27] : K[34]; |
assign K1[17] = decrypt ? K[10] : K[17]; |
assign K1[18] = decrypt ? K[55] : K[5]; |
assign K1[19] = decrypt ? K[54] : K[4]; |
assign K1[20] = decrypt ? K[48] : K[55]; |
assign K1[21] = decrypt ? K[17] : K[24]; |
assign K1[22] = decrypt ? K[25] : K[32]; |
assign K1[23] = decrypt ? K[33] : K[40]; |
assign K1[24] = decrypt ? K[13] : K[20]; |
assign K1[25] = decrypt ? K[29] : K[36]; |
assign K1[26] = decrypt ? K[51] : K[31]; |
assign K1[27] = decrypt ? K[14] : K[21]; |
assign K1[28] = decrypt ? K[1] : K[8]; |
assign K1[29] = decrypt ? K[16] : K[23]; |
assign K1[30] = decrypt ? K[45] : K[52]; |
assign K1[31] = decrypt ? K[7] : K[14]; |
assign K1[32] = decrypt ? K[22] : K[29]; |
assign K1[33] = decrypt ? K[44] : K[51]; |
assign K1[34] = decrypt ? K[2] : K[9]; |
assign K1[35] = decrypt ? K[28] : K[35]; |
assign K1[36] = decrypt ? K[23] : K[30]; |
assign K1[37] = decrypt ? K[50] : K[2]; |
assign K1[38] = decrypt ? K[30] : K[37]; |
assign K1[39] = decrypt ? K[15] : K[22]; |
assign K1[40] = decrypt ? K[52] : K[0]; |
assign K1[41] = decrypt ? K[35] : K[42]; |
assign K1[42] = decrypt ? K[31] : K[38]; |
assign K1[43] = decrypt ? K[9] : K[16]; |
assign K1[44] = decrypt ? K[36] : K[43]; |
assign K1[45] = decrypt ? K[37] : K[44]; |
assign K1[46] = decrypt ? K[49] : K[1]; |
assign K1[47] = decrypt ? K[0] : K[7]; |
assign K1[48] = decrypt ? K[21] : K[28]; |
|
endmodule |
/trunk/rtl/verilog/perf_opt/des.v
0,0 → 1,237
///////////////////////////////////////////////////////////////////// |
//// //// |
//// DES //// |
//// DES Top Level module //// |
//// //// |
//// 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 des(desOut, desIn, key, decrypt, clk); |
output [63:0] desOut; |
input [63:0] desIn; |
input [55:0] key; |
input decrypt; |
input clk; |
|
wire [1:64] IP, FP; |
reg [63:0] desIn_r; |
reg [55:0] key_r; |
reg [63:0] desOut; |
reg [1:32] L0, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15; |
reg [1:32] R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15; |
wire [1:32] out0, out1, out2, out3, out4, out5, out6, out7, out8, out9, out10, out11, out12, out13, out14, out15; |
wire [1:48] K1, K2, K3, K4, K5, K6, K7, K8, K9; |
wire [1:48] K10, K11, K12, K13, K14, K15, K16; |
|
// Register the 56 bit key |
always @(posedge clk) |
key_r <= #1 key; |
|
// Register the 64 bit input |
always @(posedge clk) |
desIn_r <= #1 desIn; |
|
// XOR 32 bit out15 with 32 bit L14 ( FP 1:32 ) |
// then concatinate the 32 bit R14 value ( FP 33:64 ) |
// This value ( FP 1:64 ) is then registered by the desOut[63:0] register |
assign FP = { (out15 ^ L14), R14}; |
|
// Key schedule provides a linear means of intermixing the 56 bit key to form a |
// different 48 bit key for each of the 16 bit rounds |
key_sel uk( |
.clk( clk ), |
.K( key_r ), |
.decrypt( decrypt ), |
.K1( K1 ), |
.K2( K2 ), |
.K3( K3 ), |
.K4( K4 ), |
.K5( K5 ), |
.K6( K6 ), |
.K7( K7 ), |
.K8( K8 ), |
.K9( K9 ), |
.K10( K10 ), |
.K11( K11 ), |
.K12( K12 ), |
.K13( K13 ), |
.K14( K14 ), |
.K15( K15 ), |
.K16( K16 ) |
); |
|
// 16 CRP blocks |
crp u0( .P(out0), .R(IP[33:64]), .K_sub(K1) ); |
crp u1( .P(out1), .R(R0), .K_sub(K2) ); |
crp u2( .P(out2), .R(R1), .K_sub(K3) ); |
crp u3( .P(out3), .R(R2), .K_sub(K4) ); |
crp u4( .P(out4), .R(R3), .K_sub(K5) ); |
crp u5( .P(out5), .R(R4), .K_sub(K6) ); |
crp u6( .P(out6), .R(R5), .K_sub(K7) ); |
crp u7( .P(out7), .R(R6), .K_sub(K8) ); |
crp u8( .P(out8), .R(R7), .K_sub(K9) ); |
crp u9( .P(out9), .R(R8), .K_sub(K10) ); |
crp u10( .P(out10), .R(R9), .K_sub(K11) ); |
crp u11( .P(out11), .R(R10), .K_sub(K12) ); |
crp u12( .P(out12), .R(R11), .K_sub(K13) ); |
crp u13( .P(out13), .R(R12), .K_sub(K14) ); |
crp u14( .P(out14), .R(R13), .K_sub(K15) ); |
crp u15( .P(out15), .R(R14), .K_sub(K16) ); |
|
// 32 bit L0 get upper 32 bits of IP |
always @(posedge clk) |
L0 <= #1 IP[33:64]; |
|
// 32 bit R0 gets lower 32 bits of IP XOR'd with 32 bit out0 |
always @(posedge clk) |
R0 <= #1 IP[01:32] ^ out0; |
|
// 32 bit L1 gets 32 bit R0 |
always @(posedge clk) |
L1 <= #1 R0; |
|
// 32 bit R1 gets 32 bit L0 XOR'd with 32 bit out1 |
always @(posedge clk) |
R1 <= #1 L0 ^ out1; |
|
// 32 bit L2 gets 32 bit R1 |
always @(posedge clk) |
L2 <= #1 R1; |
|
// 32 bit R2 gets 32 bit L1 XOR'd with 32 bit out2 |
always @(posedge clk) |
R2 <= #1 L1 ^ out2; |
|
always @(posedge clk) |
L3 <= #1 R2; |
|
always @(posedge clk) |
R3 <= #1 L2 ^ out3; |
|
always @(posedge clk) |
L4 <= #1 R3; |
|
always @(posedge clk) |
R4 <= #1 L3 ^ out4; |
|
always @(posedge clk) |
L5 <= #1 R4; |
|
always @(posedge clk) |
R5 <= #1 L4 ^ out5; |
|
always @(posedge clk) |
L6 <= #1 R5; |
|
always @(posedge clk) |
R6 <= #1 L5 ^ out6; |
|
always @(posedge clk) |
L7 <= #1 R6; |
|
always @(posedge clk) |
R7 <= #1 L6 ^ out7; |
|
always @(posedge clk) |
L8 <= #1 R7; |
|
always @(posedge clk) |
R8 <= #1 L7 ^ out8; |
|
always @(posedge clk) |
L9 <= #1 R8; |
|
always @(posedge clk) |
R9 <= #1 L8 ^ out9; |
|
always @(posedge clk) |
L10 <= #1 R9; |
|
always @(posedge clk) |
R10 <= #1 L9 ^ out10; |
|
always @(posedge clk) |
L11 <= #1 R10; |
|
always @(posedge clk) |
R11 <= #1 L10 ^ out11; |
|
always @(posedge clk) |
L12 <= #1 R11; |
|
always @(posedge clk) |
R12 <= #1 L11 ^ out12; |
|
always @(posedge clk) |
L13 <= #1 R12; |
|
always @(posedge clk) |
R13 <= #1 L12 ^ out13; |
|
always @(posedge clk) |
L14 <= #1 R13; |
|
always @(posedge clk) |
R14 <= #1 L13 ^ out14; |
|
// 32 bit L15 gets 32 bit R14 |
always @(posedge clk) |
L15 <= #1 R14; |
|
// 32 bit R15 gets 32 bit L14 XOR'd with 32 bit out15 |
always @(posedge clk) |
R15 <= #1 L14 ^ out15; |
|
|
// Perform the initial permutationi with the registerd desIn |
assign IP[1:64] = { desIn_r[06], desIn_r[14], desIn_r[22], desIn_r[30], desIn_r[38], desIn_r[46], |
desIn_r[54], desIn_r[62], desIn_r[04], desIn_r[12], desIn_r[20], desIn_r[28], |
desIn_r[36], desIn_r[44], desIn_r[52], desIn_r[60], desIn_r[02], desIn_r[10], |
desIn_r[18], desIn_r[26], desIn_r[34], desIn_r[42], desIn_r[50], desIn_r[58], |
desIn_r[00], desIn_r[08], desIn_r[16], desIn_r[24], desIn_r[32], desIn_r[40], |
desIn_r[48], desIn_r[56], desIn_r[07], desIn_r[15], desIn_r[23], desIn_r[31], |
desIn_r[39], desIn_r[47], desIn_r[55], desIn_r[63], desIn_r[05], desIn_r[13], |
desIn_r[21], desIn_r[29], desIn_r[37], desIn_r[45], desIn_r[53], desIn_r[61], |
desIn_r[03], desIn_r[11], desIn_r[19], desIn_r[27], desIn_r[35], desIn_r[43], |
desIn_r[51], desIn_r[59], desIn_r[01], desIn_r[09], desIn_r[17], desIn_r[25], |
desIn_r[33], desIn_r[41], desIn_r[49], desIn_r[57] }; |
|
// Perform the final permutation |
always @(posedge clk) |
desOut <= #1 { FP[40], FP[08], FP[48], FP[16], FP[56], FP[24], FP[64], FP[32], |
FP[39], FP[07], FP[47], FP[15], FP[55], FP[23], FP[63], FP[31], |
FP[38], FP[06], FP[46], FP[14], FP[54], FP[22], FP[62], FP[30], |
FP[37], FP[05], FP[45], FP[13], FP[53], FP[21], FP[61], FP[29], |
FP[36], FP[04], FP[44], FP[12], FP[52], FP[20], FP[60], FP[28], |
FP[35], FP[03], FP[43], FP[11], FP[51], FP[19], FP[59], FP[27], |
FP[34], FP[02], FP[42], FP[10], FP[50], FP[18], FP[58], FP[26], |
FP[33], FP[01], FP[41], FP[09], FP[49], FP[17], FP[57], FP[25] }; |
|
|
endmodule |
/trunk/rtl/verilog/perf_opt/key_sel.v
0,0 → 1,852
///////////////////////////////////////////////////////////////////// |
//// //// |
//// KEY_SEL //// |
//// Generate 16 pipelined sub-keys //// |
//// //// |
//// 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(clk, K, decrypt, K1, K2, K3, K4, K5, K6, K7, K8, K9, |
K10, K11, K12, K13, K14, K15, K16); |
input clk; |
input [55:0] K; |
input decrypt; |
output [1:48] K1, K2, K3, K4, K5, K6, K7, K8, K9; |
output [1:48] K10, K11, K12, K13, K14, K15, K16; |
|
wire [1:48] K1, K2, K3, K4, K5, K6, K7, K8, K9; |
wire [1:48] K10, K11, K12, K13, K14, K15, K16; |
reg [55:0] K_r0, K_r1, K_r2, K_r3, K_r4, K_r5, K_r6, K_r7; |
reg [55:0] K_r8, K_r9, K_r10, K_r11, K_r12, K_r13, K_r14; |
|
always @(posedge clk) |
begin |
K_r0 <= #1 K; |
K_r1 <= #1 K_r0; |
K_r2 <= #1 K_r1; |
K_r3 <= #1 K_r2; |
K_r4 <= #1 K_r3; |
K_r5 <= #1 K_r4; |
K_r6 <= #1 K_r5; |
K_r7 <= #1 K_r6; |
K_r8 <= #1 K_r7; |
K_r9 <= #1 K_r8; |
K_r10 <= #1 K_r9; |
K_r11 <= #1 K_r10; |
K_r12 <= #1 K_r11; |
K_r13 <= #1 K_r12; |
K_r14 <= #1 K_r13; |
end |
|
assign K16[1] = decrypt ? K_r14[47] : K_r14[40]; |
assign K16[2] = decrypt ? K_r14[11] : K_r14[4]; |
assign K16[3] = decrypt ? K_r14[26] : K_r14[19]; |
assign K16[4] = decrypt ? K_r14[3] : K_r14[53]; |
assign K16[5] = decrypt ? K_r14[13] : K_r14[6]; |
assign K16[6] = decrypt ? K_r14[41] : K_r14[34]; |
assign K16[7] = decrypt ? K_r14[27] : K_r14[20]; |
assign K16[8] = decrypt ? K_r14[6] : K_r14[24]; |
assign K16[9] = decrypt ? K_r14[54] : K_r14[47]; |
assign K16[10] = decrypt ? K_r14[48] : K_r14[41]; |
assign K16[11] = decrypt ? K_r14[39] : K_r14[32]; |
assign K16[12] = decrypt ? K_r14[19] : K_r14[12]; |
assign K16[13] = decrypt ? K_r14[53] : K_r14[46]; |
assign K16[14] = decrypt ? K_r14[25] : K_r14[18]; |
assign K16[15] = decrypt ? K_r14[33] : K_r14[26]; |
assign K16[16] = decrypt ? K_r14[34] : K_r14[27]; |
assign K16[17] = decrypt ? K_r14[17] : K_r14[10]; |
assign K16[18] = decrypt ? K_r14[5] : K_r14[55]; |
assign K16[19] = decrypt ? K_r14[4] : K_r14[54]; |
assign K16[20] = decrypt ? K_r14[55] : K_r14[48]; |
assign K16[21] = decrypt ? K_r14[24] : K_r14[17]; |
assign K16[22] = decrypt ? K_r14[32] : K_r14[25]; |
assign K16[23] = decrypt ? K_r14[40] : K_r14[33]; |
assign K16[24] = decrypt ? K_r14[20] : K_r14[13]; |
assign K16[25] = decrypt ? K_r14[36] : K_r14[29]; |
assign K16[26] = decrypt ? K_r14[31] : K_r14[51]; |
assign K16[27] = decrypt ? K_r14[21] : K_r14[14]; |
assign K16[28] = decrypt ? K_r14[8] : K_r14[1]; |
assign K16[29] = decrypt ? K_r14[23] : K_r14[16]; |
assign K16[30] = decrypt ? K_r14[52] : K_r14[45]; |
assign K16[31] = decrypt ? K_r14[14] : K_r14[7]; |
assign K16[32] = decrypt ? K_r14[29] : K_r14[22]; |
assign K16[33] = decrypt ? K_r14[51] : K_r14[44]; |
assign K16[34] = decrypt ? K_r14[9] : K_r14[2]; |
assign K16[35] = decrypt ? K_r14[35] : K_r14[28]; |
assign K16[36] = decrypt ? K_r14[30] : K_r14[23]; |
assign K16[37] = decrypt ? K_r14[2] : K_r14[50]; |
assign K16[38] = decrypt ? K_r14[37] : K_r14[30]; |
assign K16[39] = decrypt ? K_r14[22] : K_r14[15]; |
assign K16[40] = decrypt ? K_r14[0] : K_r14[52]; |
assign K16[41] = decrypt ? K_r14[42] : K_r14[35]; |
assign K16[42] = decrypt ? K_r14[38] : K_r14[31]; |
assign K16[43] = decrypt ? K_r14[16] : K_r14[9]; |
assign K16[44] = decrypt ? K_r14[43] : K_r14[36]; |
assign K16[45] = decrypt ? K_r14[44] : K_r14[37]; |
assign K16[46] = decrypt ? K_r14[1] : K_r14[49]; |
assign K16[47] = decrypt ? K_r14[7] : K_r14[0]; |
assign K16[48] = decrypt ? K_r14[28] : K_r14[21]; |
|
assign K15[1] = decrypt ? K_r13[54] : K_r13[33]; |
assign K15[2] = decrypt ? K_r13[18] : K_r13[54]; |
assign K15[3] = decrypt ? K_r13[33] : K_r13[12]; |
assign K15[4] = decrypt ? K_r13[10] : K_r13[46]; |
assign K15[5] = decrypt ? K_r13[20] : K_r13[24]; |
assign K15[6] = decrypt ? K_r13[48] : K_r13[27]; |
assign K15[7] = decrypt ? K_r13[34] : K_r13[13]; |
assign K15[8] = decrypt ? K_r13[13] : K_r13[17]; |
assign K15[9] = decrypt ? K_r13[4] : K_r13[40]; |
assign K15[10] = decrypt ? K_r13[55] : K_r13[34]; |
assign K15[11] = decrypt ? K_r13[46] : K_r13[25]; |
assign K15[12] = decrypt ? K_r13[26] : K_r13[5]; |
assign K15[13] = decrypt ? K_r13[3] : K_r13[39]; |
assign K15[14] = decrypt ? K_r13[32] : K_r13[11]; |
assign K15[15] = decrypt ? K_r13[40] : K_r13[19]; |
assign K15[16] = decrypt ? K_r13[41] : K_r13[20]; |
assign K15[17] = decrypt ? K_r13[24] : K_r13[3]; |
assign K15[18] = decrypt ? K_r13[12] : K_r13[48]; |
assign K15[19] = decrypt ? K_r13[11] : K_r13[47]; |
assign K15[20] = decrypt ? K_r13[5] : K_r13[41]; |
assign K15[21] = decrypt ? K_r13[6] : K_r13[10]; |
assign K15[22] = decrypt ? K_r13[39] : K_r13[18]; |
assign K15[23] = decrypt ? K_r13[47] : K_r13[26]; |
assign K15[24] = decrypt ? K_r13[27] : K_r13[6]; |
assign K15[25] = decrypt ? K_r13[43] : K_r13[22]; |
assign K15[26] = decrypt ? K_r13[38] : K_r13[44]; |
assign K15[27] = decrypt ? K_r13[28] : K_r13[7]; |
assign K15[28] = decrypt ? K_r13[15] : K_r13[49]; |
assign K15[29] = decrypt ? K_r13[30] : K_r13[9]; |
assign K15[30] = decrypt ? K_r13[0] : K_r13[38]; |
assign K15[31] = decrypt ? K_r13[21] : K_r13[0]; |
assign K15[32] = decrypt ? K_r13[36] : K_r13[15]; |
assign K15[33] = decrypt ? K_r13[31] : K_r13[37]; |
assign K15[34] = decrypt ? K_r13[16] : K_r13[50]; |
assign K15[35] = decrypt ? K_r13[42] : K_r13[21]; |
assign K15[36] = decrypt ? K_r13[37] : K_r13[16]; |
assign K15[37] = decrypt ? K_r13[9] : K_r13[43]; |
assign K15[38] = decrypt ? K_r13[44] : K_r13[23]; |
assign K15[39] = decrypt ? K_r13[29] : K_r13[8]; |
assign K15[40] = decrypt ? K_r13[7] : K_r13[45]; |
assign K15[41] = decrypt ? K_r13[49] : K_r13[28]; |
assign K15[42] = decrypt ? K_r13[45] : K_r13[51]; |
assign K15[43] = decrypt ? K_r13[23] : K_r13[2]; |
assign K15[44] = decrypt ? K_r13[50] : K_r13[29]; |
assign K15[45] = decrypt ? K_r13[51] : K_r13[30]; |
assign K15[46] = decrypt ? K_r13[8] : K_r13[42]; |
assign K15[47] = decrypt ? K_r13[14] : K_r13[52]; |
assign K15[48] = decrypt ? K_r13[35] : K_r13[14]; |
|
assign K14[1] = decrypt ? K_r12[11] : K_r12[19]; |
assign K14[2] = decrypt ? K_r12[32] : K_r12[40]; |
assign K14[3] = decrypt ? K_r12[47] : K_r12[55]; |
assign K14[4] = decrypt ? K_r12[24] : K_r12[32]; |
assign K14[5] = decrypt ? K_r12[34] : K_r12[10]; |
assign K14[6] = decrypt ? K_r12[5] : K_r12[13]; |
assign K14[7] = decrypt ? K_r12[48] : K_r12[24]; |
assign K14[8] = decrypt ? K_r12[27] : K_r12[3]; |
assign K14[9] = decrypt ? K_r12[18] : K_r12[26]; |
assign K14[10] = decrypt ? K_r12[12] : K_r12[20]; |
assign K14[11] = decrypt ? K_r12[3] : K_r12[11]; |
assign K14[12] = decrypt ? K_r12[40] : K_r12[48]; |
assign K14[13] = decrypt ? K_r12[17] : K_r12[25]; |
assign K14[14] = decrypt ? K_r12[46] : K_r12[54]; |
assign K14[15] = decrypt ? K_r12[54] : K_r12[5]; |
assign K14[16] = decrypt ? K_r12[55] : K_r12[6]; |
assign K14[17] = decrypt ? K_r12[13] : K_r12[46]; |
assign K14[18] = decrypt ? K_r12[26] : K_r12[34]; |
assign K14[19] = decrypt ? K_r12[25] : K_r12[33]; |
assign K14[20] = decrypt ? K_r12[19] : K_r12[27]; |
assign K14[21] = decrypt ? K_r12[20] : K_r12[53]; |
assign K14[22] = decrypt ? K_r12[53] : K_r12[4]; |
assign K14[23] = decrypt ? K_r12[4] : K_r12[12]; |
assign K14[24] = decrypt ? K_r12[41] : K_r12[17]; |
assign K14[25] = decrypt ? K_r12[2] : K_r12[8]; |
assign K14[26] = decrypt ? K_r12[52] : K_r12[30]; |
assign K14[27] = decrypt ? K_r12[42] : K_r12[52]; |
assign K14[28] = decrypt ? K_r12[29] : K_r12[35]; |
assign K14[29] = decrypt ? K_r12[44] : K_r12[50]; |
assign K14[30] = decrypt ? K_r12[14] : K_r12[51]; |
assign K14[31] = decrypt ? K_r12[35] : K_r12[45]; |
assign K14[32] = decrypt ? K_r12[50] : K_r12[1]; |
assign K14[33] = decrypt ? K_r12[45] : K_r12[23]; |
assign K14[34] = decrypt ? K_r12[30] : K_r12[36]; |
assign K14[35] = decrypt ? K_r12[1] : K_r12[7]; |
assign K14[36] = decrypt ? K_r12[51] : K_r12[2]; |
assign K14[37] = decrypt ? K_r12[23] : K_r12[29]; |
assign K14[38] = decrypt ? K_r12[31] : K_r12[9]; |
assign K14[39] = decrypt ? K_r12[43] : K_r12[49]; |
assign K14[40] = decrypt ? K_r12[21] : K_r12[31]; |
assign K14[41] = decrypt ? K_r12[8] : K_r12[14]; |
assign K14[42] = decrypt ? K_r12[0] : K_r12[37]; |
assign K14[43] = decrypt ? K_r12[37] : K_r12[43]; |
assign K14[44] = decrypt ? K_r12[9] : K_r12[15]; |
assign K14[45] = decrypt ? K_r12[38] : K_r12[16]; |
assign K14[46] = decrypt ? K_r12[22] : K_r12[28]; |
assign K14[47] = decrypt ? K_r12[28] : K_r12[38]; |
assign K14[48] = decrypt ? K_r12[49] : K_r12[0]; |
|
assign K13[1] = decrypt ? K_r11[25] : K_r11[5]; |
assign K13[2] = decrypt ? K_r11[46] : K_r11[26]; |
assign K13[3] = decrypt ? K_r11[4] : K_r11[41]; |
assign K13[4] = decrypt ? K_r11[13] : K_r11[18]; |
assign K13[5] = decrypt ? K_r11[48] : K_r11[53]; |
assign K13[6] = decrypt ? K_r11[19] : K_r11[24]; |
assign K13[7] = decrypt ? K_r11[5] : K_r11[10]; |
assign K13[8] = decrypt ? K_r11[41] : K_r11[46]; |
assign K13[9] = decrypt ? K_r11[32] : K_r11[12]; |
assign K13[10] = decrypt ? K_r11[26] : K_r11[6]; |
assign K13[11] = decrypt ? K_r11[17] : K_r11[54]; |
assign K13[12] = decrypt ? K_r11[54] : K_r11[34]; |
assign K13[13] = decrypt ? K_r11[6] : K_r11[11]; |
assign K13[14] = decrypt ? K_r11[3] : K_r11[40]; |
assign K13[15] = decrypt ? K_r11[11] : K_r11[48]; |
assign K13[16] = decrypt ? K_r11[12] : K_r11[17]; |
assign K13[17] = decrypt ? K_r11[27] : K_r11[32]; |
assign K13[18] = decrypt ? K_r11[40] : K_r11[20]; |
assign K13[19] = decrypt ? K_r11[39] : K_r11[19]; |
assign K13[20] = decrypt ? K_r11[33] : K_r11[13]; |
assign K13[21] = decrypt ? K_r11[34] : K_r11[39]; |
assign K13[22] = decrypt ? K_r11[10] : K_r11[47]; |
assign K13[23] = decrypt ? K_r11[18] : K_r11[55]; |
assign K13[24] = decrypt ? K_r11[55] : K_r11[3]; |
assign K13[25] = decrypt ? K_r11[16] : K_r11[49]; |
assign K13[26] = decrypt ? K_r11[7] : K_r11[16]; |
assign K13[27] = decrypt ? K_r11[1] : K_r11[38]; |
assign K13[28] = decrypt ? K_r11[43] : K_r11[21]; |
assign K13[29] = decrypt ? K_r11[31] : K_r11[36]; |
assign K13[30] = decrypt ? K_r11[28] : K_r11[37]; |
assign K13[31] = decrypt ? K_r11[49] : K_r11[31]; |
assign K13[32] = decrypt ? K_r11[9] : K_r11[42]; |
assign K13[33] = decrypt ? K_r11[0] : K_r11[9]; |
assign K13[34] = decrypt ? K_r11[44] : K_r11[22]; |
assign K13[35] = decrypt ? K_r11[15] : K_r11[52]; |
assign K13[36] = decrypt ? K_r11[38] : K_r11[43]; |
assign K13[37] = decrypt ? K_r11[37] : K_r11[15]; |
assign K13[38] = decrypt ? K_r11[45] : K_r11[50]; |
assign K13[39] = decrypt ? K_r11[2] : K_r11[35]; |
assign K13[40] = decrypt ? K_r11[35] : K_r11[44]; |
assign K13[41] = decrypt ? K_r11[22] : K_r11[0]; |
assign K13[42] = decrypt ? K_r11[14] : K_r11[23]; |
assign K13[43] = decrypt ? K_r11[51] : K_r11[29]; |
assign K13[44] = decrypt ? K_r11[23] : K_r11[1]; |
assign K13[45] = decrypt ? K_r11[52] : K_r11[2]; |
assign K13[46] = decrypt ? K_r11[36] : K_r11[14]; |
assign K13[47] = decrypt ? K_r11[42] : K_r11[51]; |
assign K13[48] = decrypt ? K_r11[8] : K_r11[45]; |
|
assign K12[1] = decrypt ? K_r10[39] : K_r10[48]; |
assign K12[2] = decrypt ? K_r10[3] : K_r10[12]; |
assign K12[3] = decrypt ? K_r10[18] : K_r10[27]; |
assign K12[4] = decrypt ? K_r10[27] : K_r10[4]; |
assign K12[5] = decrypt ? K_r10[5] : K_r10[39]; |
assign K12[6] = decrypt ? K_r10[33] : K_r10[10]; |
assign K12[7] = decrypt ? K_r10[19] : K_r10[53]; |
assign K12[8] = decrypt ? K_r10[55] : K_r10[32]; |
assign K12[9] = decrypt ? K_r10[46] : K_r10[55]; |
assign K12[10] = decrypt ? K_r10[40] : K_r10[17]; |
assign K12[11] = decrypt ? K_r10[6] : K_r10[40]; |
assign K12[12] = decrypt ? K_r10[11] : K_r10[20]; |
assign K12[13] = decrypt ? K_r10[20] : K_r10[54]; |
assign K12[14] = decrypt ? K_r10[17] : K_r10[26]; |
assign K12[15] = decrypt ? K_r10[25] : K_r10[34]; |
assign K12[16] = decrypt ? K_r10[26] : K_r10[3]; |
assign K12[17] = decrypt ? K_r10[41] : K_r10[18]; |
assign K12[18] = decrypt ? K_r10[54] : K_r10[6]; |
assign K12[19] = decrypt ? K_r10[53] : K_r10[5]; |
assign K12[20] = decrypt ? K_r10[47] : K_r10[24]; |
assign K12[21] = decrypt ? K_r10[48] : K_r10[25]; |
assign K12[22] = decrypt ? K_r10[24] : K_r10[33]; |
assign K12[23] = decrypt ? K_r10[32] : K_r10[41]; |
assign K12[24] = decrypt ? K_r10[12] : K_r10[46]; |
assign K12[25] = decrypt ? K_r10[30] : K_r10[35]; |
assign K12[26] = decrypt ? K_r10[21] : K_r10[2]; |
assign K12[27] = decrypt ? K_r10[15] : K_r10[51]; |
assign K12[28] = decrypt ? K_r10[2] : K_r10[7]; |
assign K12[29] = decrypt ? K_r10[45] : K_r10[22]; |
assign K12[30] = decrypt ? K_r10[42] : K_r10[23]; |
assign K12[31] = decrypt ? K_r10[8] : K_r10[44]; |
assign K12[32] = decrypt ? K_r10[23] : K_r10[28]; |
assign K12[33] = decrypt ? K_r10[14] : K_r10[50]; |
assign K12[34] = decrypt ? K_r10[31] : K_r10[8]; |
assign K12[35] = decrypt ? K_r10[29] : K_r10[38]; |
assign K12[36] = decrypt ? K_r10[52] : K_r10[29]; |
assign K12[37] = decrypt ? K_r10[51] : K_r10[1]; |
assign K12[38] = decrypt ? K_r10[0] : K_r10[36]; |
assign K12[39] = decrypt ? K_r10[16] : K_r10[21]; |
assign K12[40] = decrypt ? K_r10[49] : K_r10[30]; |
assign K12[41] = decrypt ? K_r10[36] : K_r10[45]; |
assign K12[42] = decrypt ? K_r10[28] : K_r10[9]; |
assign K12[43] = decrypt ? K_r10[38] : K_r10[15]; |
assign K12[44] = decrypt ? K_r10[37] : K_r10[42]; |
assign K12[45] = decrypt ? K_r10[7] : K_r10[43]; |
assign K12[46] = decrypt ? K_r10[50] : K_r10[0]; |
assign K12[47] = decrypt ? K_r10[1] : K_r10[37]; |
assign K12[48] = decrypt ? K_r10[22] : K_r10[31]; |
|
assign K11[1] = decrypt ? K_r9[53] : K_r9[34]; |
assign K11[2] = decrypt ? K_r9[17] : K_r9[55]; |
assign K11[3] = decrypt ? K_r9[32] : K_r9[13]; |
assign K11[4] = decrypt ? K_r9[41] : K_r9[47]; |
assign K11[5] = decrypt ? K_r9[19] : K_r9[25]; |
assign K11[6] = decrypt ? K_r9[47] : K_r9[53]; |
assign K11[7] = decrypt ? K_r9[33] : K_r9[39]; |
assign K11[8] = decrypt ? K_r9[12] : K_r9[18]; |
assign K11[9] = decrypt ? K_r9[3] : K_r9[41]; |
assign K11[10] = decrypt ? K_r9[54] : K_r9[3]; |
assign K11[11] = decrypt ? K_r9[20] : K_r9[26]; |
assign K11[12] = decrypt ? K_r9[25] : K_r9[6]; |
assign K11[13] = decrypt ? K_r9[34] : K_r9[40]; |
assign K11[14] = decrypt ? K_r9[6] : K_r9[12]; |
assign K11[15] = decrypt ? K_r9[39] : K_r9[20]; |
assign K11[16] = decrypt ? K_r9[40] : K_r9[46]; |
assign K11[17] = decrypt ? K_r9[55] : K_r9[4]; |
assign K11[18] = decrypt ? K_r9[11] : K_r9[17]; |
assign K11[19] = decrypt ? K_r9[10] : K_r9[48]; |
assign K11[20] = decrypt ? K_r9[4] : K_r9[10]; |
assign K11[21] = decrypt ? K_r9[5] : K_r9[11]; |
assign K11[22] = decrypt ? K_r9[13] : K_r9[19]; |
assign K11[23] = decrypt ? K_r9[46] : K_r9[27]; |
assign K11[24] = decrypt ? K_r9[26] : K_r9[32]; |
assign K11[25] = decrypt ? K_r9[44] : K_r9[21]; |
assign K11[26] = decrypt ? K_r9[35] : K_r9[43]; |
assign K11[27] = decrypt ? K_r9[29] : K_r9[37]; |
assign K11[28] = decrypt ? K_r9[16] : K_r9[52]; |
assign K11[29] = decrypt ? K_r9[0] : K_r9[8]; |
assign K11[30] = decrypt ? K_r9[1] : K_r9[9]; |
assign K11[31] = decrypt ? K_r9[22] : K_r9[30]; |
assign K11[32] = decrypt ? K_r9[37] : K_r9[14]; |
assign K11[33] = decrypt ? K_r9[28] : K_r9[36]; |
assign K11[34] = decrypt ? K_r9[45] : K_r9[49]; |
assign K11[35] = decrypt ? K_r9[43] : K_r9[51]; |
assign K11[36] = decrypt ? K_r9[7] : K_r9[15]; |
assign K11[37] = decrypt ? K_r9[38] : K_r9[42]; |
assign K11[38] = decrypt ? K_r9[14] : K_r9[22]; |
assign K11[39] = decrypt ? K_r9[30] : K_r9[7]; |
assign K11[40] = decrypt ? K_r9[8] : K_r9[16]; |
assign K11[41] = decrypt ? K_r9[50] : K_r9[31]; |
assign K11[42] = decrypt ? K_r9[42] : K_r9[50]; |
assign K11[43] = decrypt ? K_r9[52] : K_r9[1]; |
assign K11[44] = decrypt ? K_r9[51] : K_r9[28]; |
assign K11[45] = decrypt ? K_r9[21] : K_r9[29]; |
assign K11[46] = decrypt ? K_r9[9] : K_r9[45]; |
assign K11[47] = decrypt ? K_r9[15] : K_r9[23]; |
assign K11[48] = decrypt ? K_r9[36] : K_r9[44]; |
|
assign K10[1] = decrypt ? K_r8[10] : K_r8[20]; |
assign K10[2] = decrypt ? K_r8[6] : K_r8[41]; |
assign K10[3] = decrypt ? K_r8[46] : K_r8[24]; |
assign K10[4] = decrypt ? K_r8[55] : K_r8[33]; |
assign K10[5] = decrypt ? K_r8[33] : K_r8[11]; |
assign K10[6] = decrypt ? K_r8[4] : K_r8[39]; |
assign K10[7] = decrypt ? K_r8[47] : K_r8[25]; |
assign K10[8] = decrypt ? K_r8[26] : K_r8[4]; |
assign K10[9] = decrypt ? K_r8[17] : K_r8[27]; |
assign K10[10] = decrypt ? K_r8[11] : K_r8[46]; |
assign K10[11] = decrypt ? K_r8[34] : K_r8[12]; |
assign K10[12] = decrypt ? K_r8[39] : K_r8[17]; |
assign K10[13] = decrypt ? K_r8[48] : K_r8[26]; |
assign K10[14] = decrypt ? K_r8[20] : K_r8[55]; |
assign K10[15] = decrypt ? K_r8[53] : K_r8[6]; |
assign K10[16] = decrypt ? K_r8[54] : K_r8[32]; |
assign K10[17] = decrypt ? K_r8[12] : K_r8[47]; |
assign K10[18] = decrypt ? K_r8[25] : K_r8[3]; |
assign K10[19] = decrypt ? K_r8[24] : K_r8[34]; |
assign K10[20] = decrypt ? K_r8[18] : K_r8[53]; |
assign K10[21] = decrypt ? K_r8[19] : K_r8[54]; |
assign K10[22] = decrypt ? K_r8[27] : K_r8[5]; |
assign K10[23] = decrypt ? K_r8[3] : K_r8[13]; |
assign K10[24] = decrypt ? K_r8[40] : K_r8[18]; |
assign K10[25] = decrypt ? K_r8[31] : K_r8[7]; |
assign K10[26] = decrypt ? K_r8[49] : K_r8[29]; |
assign K10[27] = decrypt ? K_r8[43] : K_r8[23]; |
assign K10[28] = decrypt ? K_r8[30] : K_r8[38]; |
assign K10[29] = decrypt ? K_r8[14] : K_r8[49]; |
assign K10[30] = decrypt ? K_r8[15] : K_r8[50]; |
assign K10[31] = decrypt ? K_r8[36] : K_r8[16]; |
assign K10[32] = decrypt ? K_r8[51] : K_r8[0]; |
assign K10[33] = decrypt ? K_r8[42] : K_r8[22]; |
assign K10[34] = decrypt ? K_r8[0] : K_r8[35]; |
assign K10[35] = decrypt ? K_r8[2] : K_r8[37]; |
assign K10[36] = decrypt ? K_r8[21] : K_r8[1]; |
assign K10[37] = decrypt ? K_r8[52] : K_r8[28]; |
assign K10[38] = decrypt ? K_r8[28] : K_r8[8]; |
assign K10[39] = decrypt ? K_r8[44] : K_r8[52]; |
assign K10[40] = decrypt ? K_r8[22] : K_r8[2]; |
assign K10[41] = decrypt ? K_r8[9] : K_r8[44]; |
assign K10[42] = decrypt ? K_r8[1] : K_r8[36]; |
assign K10[43] = decrypt ? K_r8[7] : K_r8[42]; |
assign K10[44] = decrypt ? K_r8[38] : K_r8[14]; |
assign K10[45] = decrypt ? K_r8[35] : K_r8[15]; |
assign K10[46] = decrypt ? K_r8[23] : K_r8[31]; |
assign K10[47] = decrypt ? K_r8[29] : K_r8[9]; |
assign K10[48] = decrypt ? K_r8[50] : K_r8[30]; |
|
assign K9[1] = decrypt ? K_r7[24] : K_r7[6]; |
assign K9[2] = decrypt ? K_r7[20] : K_r7[27]; |
assign K9[3] = decrypt ? K_r7[3] : K_r7[10]; |
assign K9[4] = decrypt ? K_r7[12] : K_r7[19]; |
assign K9[5] = decrypt ? K_r7[47] : K_r7[54]; |
assign K9[6] = decrypt ? K_r7[18] : K_r7[25]; |
assign K9[7] = decrypt ? K_r7[4] : K_r7[11]; |
assign K9[8] = decrypt ? K_r7[40] : K_r7[47]; |
assign K9[9] = decrypt ? K_r7[6] : K_r7[13]; |
assign K9[10] = decrypt ? K_r7[25] : K_r7[32]; |
assign K9[11] = decrypt ? K_r7[48] : K_r7[55]; |
assign K9[12] = decrypt ? K_r7[53] : K_r7[3]; |
assign K9[13] = decrypt ? K_r7[5] : K_r7[12]; |
assign K9[14] = decrypt ? K_r7[34] : K_r7[41]; |
assign K9[15] = decrypt ? K_r7[10] : K_r7[17]; |
assign K9[16] = decrypt ? K_r7[11] : K_r7[18]; |
assign K9[17] = decrypt ? K_r7[26] : K_r7[33]; |
assign K9[18] = decrypt ? K_r7[39] : K_r7[46]; |
assign K9[19] = decrypt ? K_r7[13] : K_r7[20]; |
assign K9[20] = decrypt ? K_r7[32] : K_r7[39]; |
assign K9[21] = decrypt ? K_r7[33] : K_r7[40]; |
assign K9[22] = decrypt ? K_r7[41] : K_r7[48]; |
assign K9[23] = decrypt ? K_r7[17] : K_r7[24]; |
assign K9[24] = decrypt ? K_r7[54] : K_r7[4]; |
assign K9[25] = decrypt ? K_r7[45] : K_r7[52]; |
assign K9[26] = decrypt ? K_r7[8] : K_r7[15]; |
assign K9[27] = decrypt ? K_r7[2] : K_r7[9]; |
assign K9[28] = decrypt ? K_r7[44] : K_r7[51]; |
assign K9[29] = decrypt ? K_r7[28] : K_r7[35]; |
assign K9[30] = decrypt ? K_r7[29] : K_r7[36]; |
assign K9[31] = decrypt ? K_r7[50] : K_r7[2]; |
assign K9[32] = decrypt ? K_r7[38] : K_r7[45]; |
assign K9[33] = decrypt ? K_r7[1] : K_r7[8]; |
assign K9[34] = decrypt ? K_r7[14] : K_r7[21]; |
assign K9[35] = decrypt ? K_r7[16] : K_r7[23]; |
assign K9[36] = decrypt ? K_r7[35] : K_r7[42]; |
assign K9[37] = decrypt ? K_r7[7] : K_r7[14]; |
assign K9[38] = decrypt ? K_r7[42] : K_r7[49]; |
assign K9[39] = decrypt ? K_r7[31] : K_r7[38]; |
assign K9[40] = decrypt ? K_r7[36] : K_r7[43]; |
assign K9[41] = decrypt ? K_r7[23] : K_r7[30]; |
assign K9[42] = decrypt ? K_r7[15] : K_r7[22]; |
assign K9[43] = decrypt ? K_r7[21] : K_r7[28]; |
assign K9[44] = decrypt ? K_r7[52] : K_r7[0]; |
assign K9[45] = decrypt ? K_r7[49] : K_r7[1]; |
assign K9[46] = decrypt ? K_r7[37] : K_r7[44]; |
assign K9[47] = decrypt ? K_r7[43] : K_r7[50]; |
assign K9[48] = decrypt ? K_r7[9] : K_r7[16]; |
|
assign K8[1] = decrypt ? K_r6[6] : K_r6[24]; |
assign K8[2] = decrypt ? K_r6[27] : K_r6[20]; |
assign K8[3] = decrypt ? K_r6[10] : K_r6[3]; |
assign K8[4] = decrypt ? K_r6[19] : K_r6[12]; |
assign K8[5] = decrypt ? K_r6[54] : K_r6[47]; |
assign K8[6] = decrypt ? K_r6[25] : K_r6[18]; |
assign K8[7] = decrypt ? K_r6[11] : K_r6[4]; |
assign K8[8] = decrypt ? K_r6[47] : K_r6[40]; |
assign K8[9] = decrypt ? K_r6[13] : K_r6[6]; |
assign K8[10] = decrypt ? K_r6[32] : K_r6[25]; |
assign K8[11] = decrypt ? K_r6[55] : K_r6[48]; |
assign K8[12] = decrypt ? K_r6[3] : K_r6[53]; |
assign K8[13] = decrypt ? K_r6[12] : K_r6[5]; |
assign K8[14] = decrypt ? K_r6[41] : K_r6[34]; |
assign K8[15] = decrypt ? K_r6[17] : K_r6[10]; |
assign K8[16] = decrypt ? K_r6[18] : K_r6[11]; |
assign K8[17] = decrypt ? K_r6[33] : K_r6[26]; |
assign K8[18] = decrypt ? K_r6[46] : K_r6[39]; |
assign K8[19] = decrypt ? K_r6[20] : K_r6[13]; |
assign K8[20] = decrypt ? K_r6[39] : K_r6[32]; |
assign K8[21] = decrypt ? K_r6[40] : K_r6[33]; |
assign K8[22] = decrypt ? K_r6[48] : K_r6[41]; |
assign K8[23] = decrypt ? K_r6[24] : K_r6[17]; |
assign K8[24] = decrypt ? K_r6[4] : K_r6[54]; |
assign K8[25] = decrypt ? K_r6[52] : K_r6[45]; |
assign K8[26] = decrypt ? K_r6[15] : K_r6[8]; |
assign K8[27] = decrypt ? K_r6[9] : K_r6[2]; |
assign K8[28] = decrypt ? K_r6[51] : K_r6[44]; |
assign K8[29] = decrypt ? K_r6[35] : K_r6[28]; |
assign K8[30] = decrypt ? K_r6[36] : K_r6[29]; |
assign K8[31] = decrypt ? K_r6[2] : K_r6[50]; |
assign K8[32] = decrypt ? K_r6[45] : K_r6[38]; |
assign K8[33] = decrypt ? K_r6[8] : K_r6[1]; |
assign K8[34] = decrypt ? K_r6[21] : K_r6[14]; |
assign K8[35] = decrypt ? K_r6[23] : K_r6[16]; |
assign K8[36] = decrypt ? K_r6[42] : K_r6[35]; |
assign K8[37] = decrypt ? K_r6[14] : K_r6[7]; |
assign K8[38] = decrypt ? K_r6[49] : K_r6[42]; |
assign K8[39] = decrypt ? K_r6[38] : K_r6[31]; |
assign K8[40] = decrypt ? K_r6[43] : K_r6[36]; |
assign K8[41] = decrypt ? K_r6[30] : K_r6[23]; |
assign K8[42] = decrypt ? K_r6[22] : K_r6[15]; |
assign K8[43] = decrypt ? K_r6[28] : K_r6[21]; |
assign K8[44] = decrypt ? K_r6[0] : K_r6[52]; |
assign K8[45] = decrypt ? K_r6[1] : K_r6[49]; |
assign K8[46] = decrypt ? K_r6[44] : K_r6[37]; |
assign K8[47] = decrypt ? K_r6[50] : K_r6[43]; |
assign K8[48] = decrypt ? K_r6[16] : K_r6[9]; |
|
assign K7[1] = decrypt ? K_r5[20] : K_r5[10]; |
assign K7[2] = decrypt ? K_r5[41] : K_r5[6]; |
assign K7[3] = decrypt ? K_r5[24] : K_r5[46]; |
assign K7[4] = decrypt ? K_r5[33] : K_r5[55]; |
assign K7[5] = decrypt ? K_r5[11] : K_r5[33]; |
assign K7[6] = decrypt ? K_r5[39] : K_r5[4]; |
assign K7[7] = decrypt ? K_r5[25] : K_r5[47]; |
assign K7[8] = decrypt ? K_r5[4] : K_r5[26]; |
assign K7[9] = decrypt ? K_r5[27] : K_r5[17]; |
assign K7[10] = decrypt ? K_r5[46] : K_r5[11]; |
assign K7[11] = decrypt ? K_r5[12] : K_r5[34]; |
assign K7[12] = decrypt ? K_r5[17] : K_r5[39]; |
assign K7[13] = decrypt ? K_r5[26] : K_r5[48]; |
assign K7[14] = decrypt ? K_r5[55] : K_r5[20]; |
assign K7[15] = decrypt ? K_r5[6] : K_r5[53]; |
assign K7[16] = decrypt ? K_r5[32] : K_r5[54]; |
assign K7[17] = decrypt ? K_r5[47] : K_r5[12]; |
assign K7[18] = decrypt ? K_r5[3] : K_r5[25]; |
assign K7[19] = decrypt ? K_r5[34] : K_r5[24]; |
assign K7[20] = decrypt ? K_r5[53] : K_r5[18]; |
assign K7[21] = decrypt ? K_r5[54] : K_r5[19]; |
assign K7[22] = decrypt ? K_r5[5] : K_r5[27]; |
assign K7[23] = decrypt ? K_r5[13] : K_r5[3]; |
assign K7[24] = decrypt ? K_r5[18] : K_r5[40]; |
assign K7[25] = decrypt ? K_r5[7] : K_r5[31]; |
assign K7[26] = decrypt ? K_r5[29] : K_r5[49]; |
assign K7[27] = decrypt ? K_r5[23] : K_r5[43]; |
assign K7[28] = decrypt ? K_r5[38] : K_r5[30]; |
assign K7[29] = decrypt ? K_r5[49] : K_r5[14]; |
assign K7[30] = decrypt ? K_r5[50] : K_r5[15]; |
assign K7[31] = decrypt ? K_r5[16] : K_r5[36]; |
assign K7[32] = decrypt ? K_r5[0] : K_r5[51]; |
assign K7[33] = decrypt ? K_r5[22] : K_r5[42]; |
assign K7[34] = decrypt ? K_r5[35] : K_r5[0]; |
assign K7[35] = decrypt ? K_r5[37] : K_r5[2]; |
assign K7[36] = decrypt ? K_r5[1] : K_r5[21]; |
assign K7[37] = decrypt ? K_r5[28] : K_r5[52]; |
assign K7[38] = decrypt ? K_r5[8] : K_r5[28]; |
assign K7[39] = decrypt ? K_r5[52] : K_r5[44]; |
assign K7[40] = decrypt ? K_r5[2] : K_r5[22]; |
assign K7[41] = decrypt ? K_r5[44] : K_r5[9]; |
assign K7[42] = decrypt ? K_r5[36] : K_r5[1]; |
assign K7[43] = decrypt ? K_r5[42] : K_r5[7]; |
assign K7[44] = decrypt ? K_r5[14] : K_r5[38]; |
assign K7[45] = decrypt ? K_r5[15] : K_r5[35]; |
assign K7[46] = decrypt ? K_r5[31] : K_r5[23]; |
assign K7[47] = decrypt ? K_r5[9] : K_r5[29]; |
assign K7[48] = decrypt ? K_r5[30] : K_r5[50]; |
|
assign K6[1] = decrypt ? K_r4[34] : K_r4[53]; |
assign K6[2] = decrypt ? K_r4[55] : K_r4[17]; |
assign K6[3] = decrypt ? K_r4[13] : K_r4[32]; |
assign K6[4] = decrypt ? K_r4[47] : K_r4[41]; |
assign K6[5] = decrypt ? K_r4[25] : K_r4[19]; |
assign K6[6] = decrypt ? K_r4[53] : K_r4[47]; |
assign K6[7] = decrypt ? K_r4[39] : K_r4[33]; |
assign K6[8] = decrypt ? K_r4[18] : K_r4[12]; |
assign K6[9] = decrypt ? K_r4[41] : K_r4[3]; |
assign K6[10] = decrypt ? K_r4[3] : K_r4[54]; |
assign K6[11] = decrypt ? K_r4[26] : K_r4[20]; |
assign K6[12] = decrypt ? K_r4[6] : K_r4[25]; |
assign K6[13] = decrypt ? K_r4[40] : K_r4[34]; |
assign K6[14] = decrypt ? K_r4[12] : K_r4[6]; |
assign K6[15] = decrypt ? K_r4[20] : K_r4[39]; |
assign K6[16] = decrypt ? K_r4[46] : K_r4[40]; |
assign K6[17] = decrypt ? K_r4[4] : K_r4[55]; |
assign K6[18] = decrypt ? K_r4[17] : K_r4[11]; |
assign K6[19] = decrypt ? K_r4[48] : K_r4[10]; |
assign K6[20] = decrypt ? K_r4[10] : K_r4[4]; |
assign K6[21] = decrypt ? K_r4[11] : K_r4[5]; |
assign K6[22] = decrypt ? K_r4[19] : K_r4[13]; |
assign K6[23] = decrypt ? K_r4[27] : K_r4[46]; |
assign K6[24] = decrypt ? K_r4[32] : K_r4[26]; |
assign K6[25] = decrypt ? K_r4[21] : K_r4[44]; |
assign K6[26] = decrypt ? K_r4[43] : K_r4[35]; |
assign K6[27] = decrypt ? K_r4[37] : K_r4[29]; |
assign K6[28] = decrypt ? K_r4[52] : K_r4[16]; |
assign K6[29] = decrypt ? K_r4[8] : K_r4[0]; |
assign K6[30] = decrypt ? K_r4[9] : K_r4[1]; |
assign K6[31] = decrypt ? K_r4[30] : K_r4[22]; |
assign K6[32] = decrypt ? K_r4[14] : K_r4[37]; |
assign K6[33] = decrypt ? K_r4[36] : K_r4[28]; |
assign K6[34] = decrypt ? K_r4[49] : K_r4[45]; |
assign K6[35] = decrypt ? K_r4[51] : K_r4[43]; |
assign K6[36] = decrypt ? K_r4[15] : K_r4[7]; |
assign K6[37] = decrypt ? K_r4[42] : K_r4[38]; |
assign K6[38] = decrypt ? K_r4[22] : K_r4[14]; |
assign K6[39] = decrypt ? K_r4[7] : K_r4[30]; |
assign K6[40] = decrypt ? K_r4[16] : K_r4[8]; |
assign K6[41] = decrypt ? K_r4[31] : K_r4[50]; |
assign K6[42] = decrypt ? K_r4[50] : K_r4[42]; |
assign K6[43] = decrypt ? K_r4[1] : K_r4[52]; |
assign K6[44] = decrypt ? K_r4[28] : K_r4[51]; |
assign K6[45] = decrypt ? K_r4[29] : K_r4[21]; |
assign K6[46] = decrypt ? K_r4[45] : K_r4[9]; |
assign K6[47] = decrypt ? K_r4[23] : K_r4[15]; |
assign K6[48] = decrypt ? K_r4[44] : K_r4[36]; |
|
assign K5[1] = decrypt ? K_r3[48] : K_r3[39]; |
assign K5[2] = decrypt ? K_r3[12] : K_r3[3]; |
assign K5[3] = decrypt ? K_r3[27] : K_r3[18]; |
assign K5[4] = decrypt ? K_r3[4] : K_r3[27]; |
assign K5[5] = decrypt ? K_r3[39] : K_r3[5]; |
assign K5[6] = decrypt ? K_r3[10] : K_r3[33]; |
assign K5[7] = decrypt ? K_r3[53] : K_r3[19]; |
assign K5[8] = decrypt ? K_r3[32] : K_r3[55]; |
assign K5[9] = decrypt ? K_r3[55] : K_r3[46]; |
assign K5[10] = decrypt ? K_r3[17] : K_r3[40]; |
assign K5[11] = decrypt ? K_r3[40] : K_r3[6]; |
assign K5[12] = decrypt ? K_r3[20] : K_r3[11]; |
assign K5[13] = decrypt ? K_r3[54] : K_r3[20]; |
assign K5[14] = decrypt ? K_r3[26] : K_r3[17]; |
assign K5[15] = decrypt ? K_r3[34] : K_r3[25]; |
assign K5[16] = decrypt ? K_r3[3] : K_r3[26]; |
assign K5[17] = decrypt ? K_r3[18] : K_r3[41]; |
assign K5[18] = decrypt ? K_r3[6] : K_r3[54]; |
assign K5[19] = decrypt ? K_r3[5] : K_r3[53]; |
assign K5[20] = decrypt ? K_r3[24] : K_r3[47]; |
assign K5[21] = decrypt ? K_r3[25] : K_r3[48]; |
assign K5[22] = decrypt ? K_r3[33] : K_r3[24]; |
assign K5[23] = decrypt ? K_r3[41] : K_r3[32]; |
assign K5[24] = decrypt ? K_r3[46] : K_r3[12]; |
assign K5[25] = decrypt ? K_r3[35] : K_r3[30]; |
assign K5[26] = decrypt ? K_r3[2] : K_r3[21]; |
assign K5[27] = decrypt ? K_r3[51] : K_r3[15]; |
assign K5[28] = decrypt ? K_r3[7] : K_r3[2]; |
assign K5[29] = decrypt ? K_r3[22] : K_r3[45]; |
assign K5[30] = decrypt ? K_r3[23] : K_r3[42]; |
assign K5[31] = decrypt ? K_r3[44] : K_r3[8]; |
assign K5[32] = decrypt ? K_r3[28] : K_r3[23]; |
assign K5[33] = decrypt ? K_r3[50] : K_r3[14]; |
assign K5[34] = decrypt ? K_r3[8] : K_r3[31]; |
assign K5[35] = decrypt ? K_r3[38] : K_r3[29]; |
assign K5[36] = decrypt ? K_r3[29] : K_r3[52]; |
assign K5[37] = decrypt ? K_r3[1] : K_r3[51]; |
assign K5[38] = decrypt ? K_r3[36] : K_r3[0]; |
assign K5[39] = decrypt ? K_r3[21] : K_r3[16]; |
assign K5[40] = decrypt ? K_r3[30] : K_r3[49]; |
assign K5[41] = decrypt ? K_r3[45] : K_r3[36]; |
assign K5[42] = decrypt ? K_r3[9] : K_r3[28]; |
assign K5[43] = decrypt ? K_r3[15] : K_r3[38]; |
assign K5[44] = decrypt ? K_r3[42] : K_r3[37]; |
assign K5[45] = decrypt ? K_r3[43] : K_r3[7]; |
assign K5[46] = decrypt ? K_r3[0] : K_r3[50]; |
assign K5[47] = decrypt ? K_r3[37] : K_r3[1]; |
assign K5[48] = decrypt ? K_r3[31] : K_r3[22]; |
|
assign K4[1] = decrypt ? K_r2[5] : K_r2[25]; |
assign K4[2] = decrypt ? K_r2[26] : K_r2[46]; |
assign K4[3] = decrypt ? K_r2[41] : K_r2[4]; |
assign K4[4] = decrypt ? K_r2[18] : K_r2[13]; |
assign K4[5] = decrypt ? K_r2[53] : K_r2[48]; |
assign K4[6] = decrypt ? K_r2[24] : K_r2[19]; |
assign K4[7] = decrypt ? K_r2[10] : K_r2[5]; |
assign K4[8] = decrypt ? K_r2[46] : K_r2[41]; |
assign K4[9] = decrypt ? K_r2[12] : K_r2[32]; |
assign K4[10] = decrypt ? K_r2[6] : K_r2[26]; |
assign K4[11] = decrypt ? K_r2[54] : K_r2[17]; |
assign K4[12] = decrypt ? K_r2[34] : K_r2[54]; |
assign K4[13] = decrypt ? K_r2[11] : K_r2[6]; |
assign K4[14] = decrypt ? K_r2[40] : K_r2[3]; |
assign K4[15] = decrypt ? K_r2[48] : K_r2[11]; |
assign K4[16] = decrypt ? K_r2[17] : K_r2[12]; |
assign K4[17] = decrypt ? K_r2[32] : K_r2[27]; |
assign K4[18] = decrypt ? K_r2[20] : K_r2[40]; |
assign K4[19] = decrypt ? K_r2[19] : K_r2[39]; |
assign K4[20] = decrypt ? K_r2[13] : K_r2[33]; |
assign K4[21] = decrypt ? K_r2[39] : K_r2[34]; |
assign K4[22] = decrypt ? K_r2[47] : K_r2[10]; |
assign K4[23] = decrypt ? K_r2[55] : K_r2[18]; |
assign K4[24] = decrypt ? K_r2[3] : K_r2[55]; |
assign K4[25] = decrypt ? K_r2[49] : K_r2[16]; |
assign K4[26] = decrypt ? K_r2[16] : K_r2[7]; |
assign K4[27] = decrypt ? K_r2[38] : K_r2[1]; |
assign K4[28] = decrypt ? K_r2[21] : K_r2[43]; |
assign K4[29] = decrypt ? K_r2[36] : K_r2[31]; |
assign K4[30] = decrypt ? K_r2[37] : K_r2[28]; |
assign K4[31] = decrypt ? K_r2[31] : K_r2[49]; |
assign K4[32] = decrypt ? K_r2[42] : K_r2[9]; |
assign K4[33] = decrypt ? K_r2[9] : K_r2[0]; |
assign K4[34] = decrypt ? K_r2[22] : K_r2[44]; |
assign K4[35] = decrypt ? K_r2[52] : K_r2[15]; |
assign K4[36] = decrypt ? K_r2[43] : K_r2[38]; |
assign K4[37] = decrypt ? K_r2[15] : K_r2[37]; |
assign K4[38] = decrypt ? K_r2[50] : K_r2[45]; |
assign K4[39] = decrypt ? K_r2[35] : K_r2[2]; |
assign K4[40] = decrypt ? K_r2[44] : K_r2[35]; |
assign K4[41] = decrypt ? K_r2[0] : K_r2[22]; |
assign K4[42] = decrypt ? K_r2[23] : K_r2[14]; |
assign K4[43] = decrypt ? K_r2[29] : K_r2[51]; |
assign K4[44] = decrypt ? K_r2[1] : K_r2[23]; |
assign K4[45] = decrypt ? K_r2[2] : K_r2[52]; |
assign K4[46] = decrypt ? K_r2[14] : K_r2[36]; |
assign K4[47] = decrypt ? K_r2[51] : K_r2[42]; |
assign K4[48] = decrypt ? K_r2[45] : K_r2[8]; |
|
assign K3[1] = decrypt ? K_r1[19] : K_r1[11]; |
assign K3[2] = decrypt ? K_r1[40] : K_r1[32]; |
assign K3[3] = decrypt ? K_r1[55] : K_r1[47]; |
assign K3[4] = decrypt ? K_r1[32] : K_r1[24]; |
assign K3[5] = decrypt ? K_r1[10] : K_r1[34]; |
assign K3[6] = decrypt ? K_r1[13] : K_r1[5]; |
assign K3[7] = decrypt ? K_r1[24] : K_r1[48]; |
assign K3[8] = decrypt ? K_r1[3] : K_r1[27]; |
assign K3[9] = decrypt ? K_r1[26] : K_r1[18]; |
assign K3[10] = decrypt ? K_r1[20] : K_r1[12]; |
assign K3[11] = decrypt ? K_r1[11] : K_r1[3]; |
assign K3[12] = decrypt ? K_r1[48] : K_r1[40]; |
assign K3[13] = decrypt ? K_r1[25] : K_r1[17]; |
assign K3[14] = decrypt ? K_r1[54] : K_r1[46]; |
assign K3[15] = decrypt ? K_r1[5] : K_r1[54]; |
assign K3[16] = decrypt ? K_r1[6] : K_r1[55]; |
assign K3[17] = decrypt ? K_r1[46] : K_r1[13]; |
assign K3[18] = decrypt ? K_r1[34] : K_r1[26]; |
assign K3[19] = decrypt ? K_r1[33] : K_r1[25]; |
assign K3[20] = decrypt ? K_r1[27] : K_r1[19]; |
assign K3[21] = decrypt ? K_r1[53] : K_r1[20]; |
assign K3[22] = decrypt ? K_r1[4] : K_r1[53]; |
assign K3[23] = decrypt ? K_r1[12] : K_r1[4]; |
assign K3[24] = decrypt ? K_r1[17] : K_r1[41]; |
assign K3[25] = decrypt ? K_r1[8] : K_r1[2]; |
assign K3[26] = decrypt ? K_r1[30] : K_r1[52]; |
assign K3[27] = decrypt ? K_r1[52] : K_r1[42]; |
assign K3[28] = decrypt ? K_r1[35] : K_r1[29]; |
assign K3[29] = decrypt ? K_r1[50] : K_r1[44]; |
assign K3[30] = decrypt ? K_r1[51] : K_r1[14]; |
assign K3[31] = decrypt ? K_r1[45] : K_r1[35]; |
assign K3[32] = decrypt ? K_r1[1] : K_r1[50]; |
assign K3[33] = decrypt ? K_r1[23] : K_r1[45]; |
assign K3[34] = decrypt ? K_r1[36] : K_r1[30]; |
assign K3[35] = decrypt ? K_r1[7] : K_r1[1]; |
assign K3[36] = decrypt ? K_r1[2] : K_r1[51]; |
assign K3[37] = decrypt ? K_r1[29] : K_r1[23]; |
assign K3[38] = decrypt ? K_r1[9] : K_r1[31]; |
assign K3[39] = decrypt ? K_r1[49] : K_r1[43]; |
assign K3[40] = decrypt ? K_r1[31] : K_r1[21]; |
assign K3[41] = decrypt ? K_r1[14] : K_r1[8]; |
assign K3[42] = decrypt ? K_r1[37] : K_r1[0]; |
assign K3[43] = decrypt ? K_r1[43] : K_r1[37]; |
assign K3[44] = decrypt ? K_r1[15] : K_r1[9]; |
assign K3[45] = decrypt ? K_r1[16] : K_r1[38]; |
assign K3[46] = decrypt ? K_r1[28] : K_r1[22]; |
assign K3[47] = decrypt ? K_r1[38] : K_r1[28]; |
assign K3[48] = decrypt ? K_r1[0] : K_r1[49]; |
|
assign K2[1] = decrypt ? K_r0[33] : K_r0[54]; |
assign K2[2] = decrypt ? K_r0[54] : K_r0[18]; |
assign K2[3] = decrypt ? K_r0[12] : K_r0[33]; |
assign K2[4] = decrypt ? K_r0[46] : K_r0[10]; |
assign K2[5] = decrypt ? K_r0[24] : K_r0[20]; |
assign K2[6] = decrypt ? K_r0[27] : K_r0[48]; |
assign K2[7] = decrypt ? K_r0[13] : K_r0[34]; |
assign K2[8] = decrypt ? K_r0[17] : K_r0[13]; |
assign K2[9] = decrypt ? K_r0[40] : K_r0[4]; |
assign K2[10] = decrypt ? K_r0[34] : K_r0[55]; |
assign K2[11] = decrypt ? K_r0[25] : K_r0[46]; |
assign K2[12] = decrypt ? K_r0[5] : K_r0[26]; |
assign K2[13] = decrypt ? K_r0[39] : K_r0[3]; |
assign K2[14] = decrypt ? K_r0[11] : K_r0[32]; |
assign K2[15] = decrypt ? K_r0[19] : K_r0[40]; |
assign K2[16] = decrypt ? K_r0[20] : K_r0[41]; |
assign K2[17] = decrypt ? K_r0[3] : K_r0[24]; |
assign K2[18] = decrypt ? K_r0[48] : K_r0[12]; |
assign K2[19] = decrypt ? K_r0[47] : K_r0[11]; |
assign K2[20] = decrypt ? K_r0[41] : K_r0[5]; |
assign K2[21] = decrypt ? K_r0[10] : K_r0[6]; |
assign K2[22] = decrypt ? K_r0[18] : K_r0[39]; |
assign K2[23] = decrypt ? K_r0[26] : K_r0[47]; |
assign K2[24] = decrypt ? K_r0[6] : K_r0[27]; |
assign K2[25] = decrypt ? K_r0[22] : K_r0[43]; |
assign K2[26] = decrypt ? K_r0[44] : K_r0[38]; |
assign K2[27] = decrypt ? K_r0[7] : K_r0[28]; |
assign K2[28] = decrypt ? K_r0[49] : K_r0[15]; |
assign K2[29] = decrypt ? K_r0[9] : K_r0[30]; |
assign K2[30] = decrypt ? K_r0[38] : K_r0[0]; |
assign K2[31] = decrypt ? K_r0[0] : K_r0[21]; |
assign K2[32] = decrypt ? K_r0[15] : K_r0[36]; |
assign K2[33] = decrypt ? K_r0[37] : K_r0[31]; |
assign K2[34] = decrypt ? K_r0[50] : K_r0[16]; |
assign K2[35] = decrypt ? K_r0[21] : K_r0[42]; |
assign K2[36] = decrypt ? K_r0[16] : K_r0[37]; |
assign K2[37] = decrypt ? K_r0[43] : K_r0[9]; |
assign K2[38] = decrypt ? K_r0[23] : K_r0[44]; |
assign K2[39] = decrypt ? K_r0[8] : K_r0[29]; |
assign K2[40] = decrypt ? K_r0[45] : K_r0[7]; |
assign K2[41] = decrypt ? K_r0[28] : K_r0[49]; |
assign K2[42] = decrypt ? K_r0[51] : K_r0[45]; |
assign K2[43] = decrypt ? K_r0[2] : K_r0[23]; |
assign K2[44] = decrypt ? K_r0[29] : K_r0[50]; |
assign K2[45] = decrypt ? K_r0[30] : K_r0[51]; |
assign K2[46] = decrypt ? K_r0[42] : K_r0[8]; |
assign K2[47] = decrypt ? K_r0[52] : K_r0[14]; |
assign K2[48] = decrypt ? K_r0[14] : K_r0[35]; |
|
assign K1[1] = decrypt ? K[40] : K[47]; |
assign K1[2] = decrypt ? K[4] : K[11]; |
assign K1[3] = decrypt ? K[19] : K[26]; |
assign K1[4] = decrypt ? K[53] : K[3]; |
assign K1[5] = decrypt ? K[6] : K[13]; |
assign K1[6] = decrypt ? K[34] : K[41]; |
assign K1[7] = decrypt ? K[20] : K[27]; |
assign K1[8] = decrypt ? K[24] : K[6]; |
assign K1[9] = decrypt ? K[47] : K[54]; |
assign K1[10] = decrypt ? K[41] : K[48]; |
assign K1[11] = decrypt ? K[32] : K[39]; |
assign K1[12] = decrypt ? K[12] : K[19]; |
assign K1[13] = decrypt ? K[46] : K[53]; |
assign K1[14] = decrypt ? K[18] : K[25]; |
assign K1[15] = decrypt ? K[26] : K[33]; |
assign K1[16] = decrypt ? K[27] : K[34]; |
assign K1[17] = decrypt ? K[10] : K[17]; |
assign K1[18] = decrypt ? K[55] : K[5]; |
assign K1[19] = decrypt ? K[54] : K[4]; |
assign K1[20] = decrypt ? K[48] : K[55]; |
assign K1[21] = decrypt ? K[17] : K[24]; |
assign K1[22] = decrypt ? K[25] : K[32]; |
assign K1[23] = decrypt ? K[33] : K[40]; |
assign K1[24] = decrypt ? K[13] : K[20]; |
assign K1[25] = decrypt ? K[29] : K[36]; |
assign K1[26] = decrypt ? K[51] : K[31]; |
assign K1[27] = decrypt ? K[14] : K[21]; |
assign K1[28] = decrypt ? K[1] : K[8]; |
assign K1[29] = decrypt ? K[16] : K[23]; |
assign K1[30] = decrypt ? K[45] : K[52]; |
assign K1[31] = decrypt ? K[7] : K[14]; |
assign K1[32] = decrypt ? K[22] : K[29]; |
assign K1[33] = decrypt ? K[44] : K[51]; |
assign K1[34] = decrypt ? K[2] : K[9]; |
assign K1[35] = decrypt ? K[28] : K[35]; |
assign K1[36] = decrypt ? K[23] : K[30]; |
assign K1[37] = decrypt ? K[50] : K[2]; |
assign K1[38] = decrypt ? K[30] : K[37]; |
assign K1[39] = decrypt ? K[15] : K[22]; |
assign K1[40] = decrypt ? K[52] : K[0]; |
assign K1[41] = decrypt ? K[35] : K[42]; |
assign K1[42] = decrypt ? K[31] : K[38]; |
assign K1[43] = decrypt ? K[9] : K[16]; |
assign K1[44] = decrypt ? K[36] : K[43]; |
assign K1[45] = decrypt ? K[37] : K[44]; |
assign K1[46] = decrypt ? K[49] : K[1]; |
assign K1[47] = decrypt ? K[0] : K[7]; |
assign K1[48] = decrypt ? K[21] : K[28]; |
|
endmodule |
/trunk/sim/rtl_sim/bin/Makefile
0,0 → 1,91
|
all: simpo |
SHELL = /bin/sh |
|
########################################################################## |
# |
# DUT Sources |
# |
########################################################################## |
DUT_SRC_DIR=../../../rtl/verilog |
_TARGETS_COM_= $(DUT_SRC_DIR)/common/crp.v \ |
$(DUT_SRC_DIR)/common/sbox1.v \ |
$(DUT_SRC_DIR)/common/sbox2.v \ |
$(DUT_SRC_DIR)/common/sbox3.v \ |
$(DUT_SRC_DIR)/common/sbox4.v \ |
$(DUT_SRC_DIR)/common/sbox5.v \ |
$(DUT_SRC_DIR)/common/sbox6.v \ |
$(DUT_SRC_DIR)/common/sbox7.v \ |
$(DUT_SRC_DIR)/common/sbox8.v |
|
_TARGETS_AO_= $(DUT_SRC_DIR)/area_opt/des.v \ |
$(DUT_SRC_DIR)/area_opt/key_sel.v |
|
_TARGETS_PO_= $(DUT_SRC_DIR)/perf_opt/des.v \ |
$(DUT_SRC_DIR)/perf_opt/key_sel.v |
|
########################################################################## |
# |
# Test Bench Sources |
# |
########################################################################## |
TB_SRC_DIR=../../../bench/verilog |
|
_TB_PO_= $(TB_SRC_DIR)/des_test_po.v |
|
_TB_AO_= $(TB_SRC_DIR)/des_test_ao.v |
|
|
########################################################################## |
# |
# Misc Variables |
# |
########################################################################## |
|
_TOP_=test |
INCDIR=+incdir+./$(DUT_SRC_DIR)/ +incdir+./$(TB_SRC_DIR)/ |
LOGF=-l .nclog |
|
########################################################################## |
# |
# Make Targets |
# |
########################################################################## |
|
ss: |
signalscan -do waves/waves.do -waves waves/waves.trn & |
|
simpow: |
@$(MAKE) simpo WAVES="+access+r +define+WAVES " |
|
simpo: |
@echo "" |
@echo "----- Running NCVLOG ... ----------" |
ncverilog \ |
$(LOGF) \ |
$(WAVES) \ |
$(INCDIR) \ |
$(_TARGETS_COM_) $(_TARGETS_PO_) \ |
$(_TB_PO_) |
|
|
simaow: |
@$(MAKE) simao WAVES="+define+WAVES +access+r " |
|
simao: |
@echo "" |
@echo "----- Running NCVLOG ... ----------" |
ncverilog \ |
$(LOGF) \ |
$(WAVES) \ |
$(INCDIR) \ |
$(_TARGETS_COM_) $(_TARGETS_AO_) \ |
$(_TB_AO_) |
|
|
clean: |
rm -rf ./waves/*.dsn ./waves/*.trn \ |
INCA* \ |
./verilog.* .nclog hal.log |
|
|
/trunk/syn/bin/read_ao.dc
0,0 → 1,66
############################################################################### |
# |
# Pre Synthesis Script |
# |
# This script only reads in the design and saves it in a DB file |
# |
# Author: Rudolf Usselmann |
# rudi@asics.ws |
# |
# Revision: |
# 3/7/01 RU Initial Sript |
# |
# |
############################################################################### |
|
# ============================================== |
# Setup Design Parameters |
source ../bin/design_spec_ao.dc |
|
# ============================================== |
# Setup Libraries |
source ../bin/lib_spec.dc |
|
# ============================================== |
# Setup IO Files |
|
append log_file ../log/$active_design "_pre.log" |
append pre_comp_db_file ../out/$design_name "_pre.db" |
|
sh rm -f $log_file |
|
# ============================================== |
# Setup Misc Variables |
|
set hdlin_enable_vpp true ;# Important - this enables 'ifdefs |
|
# ============================================== |
# Read Design |
|
echo "+++++++++ Analyzing all design files ..." >> $log_file |
|
foreach module $design_files { |
echo "+++++++++ Reading: $module" >> $log_file |
echo +++++++++ Reading: $module |
set module_file_name "" |
append module_file_name $module ".v" |
analyze -f verilog $module_file_name >> $log_file |
elaborate $module >> $log_file |
} |
|
current_design $active_design |
|
echo "+++++++++ Linking Design ..." >> $log_file |
link >> $log_file |
|
echo "+++++++++ Uniquifying Design ..." >> $log_file |
uniquify >> $log_file |
|
echo "+++++++++ Checking Design ..." >> $log_file |
check_design >> $log_file |
|
# ============================================== |
# Save Design |
echo "+++++++++ Saving Design ..." >> $log_file |
write_file -hierarchy -format db -output $pre_comp_db_file |
|
/trunk/syn/bin/comp_po.dc
0,0 → 1,110
############################################################################### |
# |
# Actual Synthesis Script |
# |
# This script does the actual synthesis |
# |
# Author: Rudolf Usselmann |
# rudi@asics.ws |
# |
# Revision: |
# 3/7/01 RU Initial Sript |
# |
# |
############################################################################### |
|
# ============================================== |
# Setup Design Parameters |
source ../bin/design_spec_po.dc |
|
# ============================================== |
# Setup Libraries |
source ../bin/lib_spec.dc |
|
# ============================================== |
# Setup IO Files |
|
append log_file ../log/$active_design "_cmp.log" |
append pre_comp_db_file ../out/$design_name "_pre.db" |
append post_comp_db_file ../out/$design_name ".db" |
append post_syn_verilog_file ../out/$design_name "_ps.v" |
set junk_file /dev/null |
|
sh rm -f $log_file |
|
# ============================================== |
# Setup Misc Variables |
|
set hdlin_enable_vpp true ;# Important - this enables 'ifdefs |
|
# ============================================== |
# Read Design |
|
echo "+++++++++ Reading Design ..." >> $log_file |
read_file $pre_comp_db_file >> $log_file |
|
# ============================================== |
# Operating conditions |
|
echo "+++++++++ Setting up Operation Conditions ..." >> $log_file |
current_design $design_name |
set_operating_conditions WORST >> $log_file |
|
# ============================================== |
# Setup Clocks and Resets |
|
echo "+++++++++ Setting up Clocks ..." >> $log_file |
|
set_drive 0 [find port {*clk*}] |
|
set wb_clk_period 3.0 |
create_clock clk -period $wb_clk_period |
set_clock_skew -uncertainty 0.1 clk |
set_clock_transition 0.2 clk |
set_dont_touch_network clk |
|
# ============================================== |
# Setup IOs |
|
echo "+++++++++ Setting up IOs ..." >> $log_file |
|
# Need to spell out external IOs |
set_driving_cell -cell NAND2D2 -pin Z [all_inputs] >> $junk_file |
set_load 0.2 [all_outputs] |
|
set_input_delay 2.0 -clock clk [all_inputs] |
set_output_delay 2.0 -clock clk [all_outputs] |
|
# ============================================== |
# Specify Multi Cycle Paths |
|
# ============================================== |
# Setup Area Constrains |
set_max_area 0.0 |
set compile_sequential_area_recovery true |
|
# ============================================== |
# Force Ultra |
set_ultra_optimization -f |
|
# ============================================== |
# Compile Design |
|
echo "+++++++++ Starting Compile ..." >> $log_file |
compile -map_effort low -area_effort low >> $log_file |
#compile -map_effort high -area_effort high -boundary_optimization -auto_ungroup >> $log_file |
|
# ============================================== |
# Write Out the optimized design |
|
echo "+++++++++ Saving Optimized Design ..." >> $log_file |
write_file -hierarchy -format verilog -output $post_syn_verilog_file |
write_file -hierarchy -format db -output $post_comp_db_file |
|
# ============================================== |
# Create Some Basic Reports |
|
echo "+++++++++ Reporting Final Results ..." >> $log_file |
report_timing -nworst 10 >> $log_file |
report_area >> $log_file |
|
/trunk/syn/bin/comp_ao.dc
0,0 → 1,110
############################################################################### |
# |
# Actual Synthesis Script |
# |
# This script does the actual synthesis |
# |
# Author: Rudolf Usselmann |
# rudi@asics.ws |
# |
# Revision: |
# 3/7/01 RU Initial Sript |
# |
# |
############################################################################### |
|
# ============================================== |
# Setup Design Parameters |
source ../bin/design_spec_ao.dc |
|
# ============================================== |
# Setup Libraries |
source ../bin/lib_spec.dc |
|
# ============================================== |
# Setup IO Files |
|
append log_file ../log/$active_design "_cmp.log" |
append pre_comp_db_file ../out/$design_name "_pre.db" |
append post_comp_db_file ../out/$design_name ".db" |
append post_syn_verilog_file ../out/$design_name "_ps.v" |
set junk_file /dev/null |
|
sh rm -f $log_file |
|
# ============================================== |
# Setup Misc Variables |
|
set hdlin_enable_vpp true ;# Important - this enables 'ifdefs |
|
# ============================================== |
# Read Design |
|
echo "+++++++++ Reading Design ..." >> $log_file |
read_file $pre_comp_db_file >> $log_file |
|
# ============================================== |
# Operating conditions |
|
echo "+++++++++ Setting up Operation Conditions ..." >> $log_file |
current_design $design_name |
set_operating_conditions WORST >> $log_file |
|
# ============================================== |
# Setup Clocks and Resets |
|
echo "+++++++++ Setting up Clocks ..." >> $log_file |
|
set_drive 0 [find port {*clk*}] |
|
set wb_clk_period 5.0 |
create_clock clk -period $wb_clk_period |
set_clock_skew -uncertainty 0.1 clk |
set_clock_transition 0.2 clk |
set_dont_touch_network clk |
|
# ============================================== |
# Setup IOs |
|
echo "+++++++++ Setting up IOs ..." >> $log_file |
|
# Need to spell out external IOs |
set_driving_cell -cell NAND2D2 -pin Z [all_inputs] >> $junk_file |
set_load 0.2 [all_outputs] |
|
set_input_delay 2.0 -clock clk [all_inputs] |
set_output_delay 2.0 -clock clk [all_outputs] |
|
# ============================================== |
# Specify Multi Cycle Paths |
|
# ============================================== |
# Setup Area Constrains |
set_max_area 0.0 |
set compile_sequential_area_recovery true |
|
# ============================================== |
# Force Ultra |
set_ultra_optimization -f |
|
# ============================================== |
# Compile Design |
|
echo "+++++++++ Starting Compile ..." >> $log_file |
compile -map_effort low -area_effort low >> $log_file |
#compile -map_effort high -area_effort high -boundary_optimization -auto_ungroup >> $log_file |
|
# ============================================== |
# Write Out the optimized design |
|
echo "+++++++++ Saving Optimized Design ..." >> $log_file |
write_file -hierarchy -format verilog -output $post_syn_verilog_file |
write_file -hierarchy -format db -output $post_comp_db_file |
|
# ============================================== |
# Create Some Basic Reports |
|
echo "+++++++++ Reporting Final Results ..." >> $log_file |
report_timing -nworst 10 >> $log_file |
report_area >> $log_file |
|
/trunk/syn/bin/lib_spec.dc
0,0 → 1,36
############################################################################### |
# |
# Library Specification |
# |
# Author: Rudolf Usselmann |
# rudi@asics.ws |
# |
# Revision: |
# 3/7/01 RU Initial Sript |
# |
# |
############################################################################### |
|
# ============================================== |
# Setup Libraries |
|
set search_path [list $search_path . \ |
/tools/dc_libraries/virtual_silicon/UMCL18U250D2_2.2/design_compiler/ \ |
$hdl_src_dir] |
|
set snps [getenv "SYNOPSYS"] |
|
set synthetic_library "" |
append synthetic_library $snps "/libraries/syn/dw01.sldb " |
append synthetic_library $snps "/libraries/syn/dw02.sldb " |
append synthetic_library $snps "/libraries/syn/dw03.sldb " |
append synthetic_library $snps "/libraries/syn/dw04.sldb " |
append synthetic_library $snps "/libraries/syn/dw05.sldb " |
append synthetic_library $snps "/libraries/syn/dw06.sldb " |
append synthetic_library $snps "/libraries/syn/dw07.sldb " |
|
set target_library { umcl18u250t2_typ.db } |
set link_library "" |
append link_library $target_library " " $synthetic_library |
set symbol_library { umcl18u250t2.sdb } |
|
/trunk/syn/bin/design_spec_po.dc
0,0 → 1,26
############################################################################### |
# |
# Design Specification |
# |
# Author: Rudolf Usselmann |
# rudi@asics.ws |
# |
# Revision: |
# 5/10/01 RU Initial Sript |
# |
# |
############################################################################### |
|
# ============================================== |
# Setup Design Parameters |
|
set design_files {sbox2 sbox4 sbox6 sbox8 sbox1 sbox3 sbox5 sbox7 crp key_sel des} |
|
set design_name des |
set active_design des |
|
# Next Statement defines all clocks and resets in the design |
set special_net {clk} |
|
set hdl_src_dir {../../rtl/verilog/common ../../rtl/verilog/perf_opt} |
|
/trunk/syn/bin/design_spec_ao.dc
0,0 → 1,26
############################################################################### |
# |
# Design Specification |
# |
# Author: Rudolf Usselmann |
# rudi@asics.ws |
# |
# Revision: |
# 5/10/01 RU Initial Sript |
# |
# |
############################################################################### |
|
# ============================================== |
# Setup Design Parameters |
|
set design_files {sbox2 sbox4 sbox6 sbox8 sbox1 sbox3 sbox5 sbox7 crp key_sel des} |
|
set design_name des |
set active_design des |
|
# Next Statement defines all clocks and resets in the design |
set special_net {clk} |
|
set hdl_src_dir {../../rtl/verilog/common ../../rtl/verilog/area_opt} |
|
/trunk/syn/bin/read_po.dc
0,0 → 1,66
############################################################################### |
# |
# Pre Synthesis Script |
# |
# This script only reads in the design and saves it in a DB file |
# |
# Author: Rudolf Usselmann |
# rudi@asics.ws |
# |
# Revision: |
# 3/7/01 RU Initial Sript |
# |
# |
############################################################################### |
|
# ============================================== |
# Setup Design Parameters |
source ../bin/design_spec_po.dc |
|
# ============================================== |
# Setup Libraries |
source ../bin/lib_spec.dc |
|
# ============================================== |
# Setup IO Files |
|
append log_file ../log/$active_design "_pre.log" |
append pre_comp_db_file ../out/$design_name "_pre.db" |
|
sh rm -f $log_file |
|
# ============================================== |
# Setup Misc Variables |
|
set hdlin_enable_vpp true ;# Important - this enables 'ifdefs |
|
# ============================================== |
# Read Design |
|
echo "+++++++++ Analyzing all design files ..." >> $log_file |
|
foreach module $design_files { |
echo "+++++++++ Reading: $module" >> $log_file |
echo +++++++++ Reading: $module |
set module_file_name "" |
append module_file_name $module ".v" |
analyze -f verilog $module_file_name >> $log_file |
elaborate $module >> $log_file |
} |
|
current_design $active_design |
|
echo "+++++++++ Linking Design ..." >> $log_file |
link >> $log_file |
|
echo "+++++++++ Uniquifying Design ..." >> $log_file |
uniquify >> $log_file |
|
echo "+++++++++ Checking Design ..." >> $log_file |
check_design >> $log_file |
|
# ============================================== |
# Save Design |
echo "+++++++++ Saving Design ..." >> $log_file |
write_file -hierarchy -format db -output $pre_comp_db_file |
|