module LM_search ( CLOCK_27,// 27 MHz KEY, // Pushbutton[3:0] SW, // Toggle Switch[17:0] HEX0, // Seven Segment Digit 0 HEX1, // Seven Segment Digit 1 HEX2, // Seven Segment Digit 2 HEX3, // Seven Segment Digit 3 HEX4, // Seven Segment Digit 4 HEX5, // Seven Segment Digit 5 HEX6, // Seven Segment Digit 6 HEX7, // Seven Segment Digit 7 //////////////////// LCD Module 16X2 //////////////// LCD_ON, // LCD Power ON/OFF LCD_BLON,// LCD Back Light ON/OFF LCD_RW, // LCD Read/Write Select, 0 = Write, 1 = Read LCD_EN, // LCD Enable LCD_RS, // LCD Command/Data Select, 0 = Command, 1 = Data LCD_DATA,// LCD Data bus 8 bits //////////////////// USB JTAG link //////////////////// TDI, // CPLD -> FPGA (data in) TCK, // CPLD -> FPGA (clk) TCS, // CPLD -> FPGA (CS) TDO, // FPGA -> CPLD (data out) TD_RESET// TV Decoder Reset ); input CLOCK_27; // 27 MHz input [3:0] KEY; // Pushbutton[3:0] input [17:0] SW; // Toggle Switch[17:0] output [6:0] HEX0; // Seven Segment Digit 0 output [6:0] HEX1; // Seven Segment Digit 1 output [6:0] HEX2; // Seven Segment Digit 2 output [6:0] HEX3; // Seven Segment Digit 3 output [6:0] HEX4; // Seven Segment Digit 4 output [6:0] HEX5; // Seven Segment Digit 5 output [6:0] HEX6; // Seven Segment Digit 6 output [6:0] HEX7; // Seven Segment Digit 7 inout [7:0] LCD_DATA; // LCD Data bus 8 bits output LCD_ON; // LCD Power ON/OFF output LCD_BLON; // LCD Back Light ON/OFF output LCD_RW; // LCD Read/Write Select, 0 = Write, 1 = Read output LCD_EN; // LCD Enable output LCD_RS; // LCD Command/Data Select, 0 = Command, 1 = Data input TDI; // CPLD -> FPGA (data in) input TCK; // CPLD -> FPGA (clk) input TCS; // CPLD -> FPGA (CS) output TDO; // FPGA -> CPLD (data out) output TD_RESET; // TV Decoder Reset // Turn off all HEX assign HEX0 = 7'hFF; assign HEX1 = 7'hFF; assign HEX2 = 7'hFF; assign HEX3 = 7'hFF; assign HEX4 = 7'hFF; assign HEX5 = 7'hFF; assign HEX6 = 7'hFF; assign HEX7 = 7'hFF; // Turn on LCD assign LCD_ON = 1'b1; assign LCD_BLON = 1'b1; //Activate the 27MHz oscillator assign TD_RESET = 1'b1; wire [63:0] hash; //hash to look forwire [55:0] plain_txt; //the decoded key!!! wire [63:0] key[39:0]; // wires distributing the generated keys wire [63:0] data; //constant data for DES: KGS!@#$% wire [39:0] match; //individual match signals from each DES unit wire [39:0] done; //done signal from each DES unit wire sys_clk,sys_rst; //clk & rst for DES wire signal_done; wire signal_next; //start next calculation wire signal_match; //indicate that key has been FOUND assign signal_done = &done; // AND all the bits of done assign signal_match = | match; assign data = {8'h4B,8'h47,8'h53,8'h21, // KGS!@#$% 8'h40,8'h23,8'h24,8'h25}; assign sys_clk=CLOCK_27; //Main Controller & LCD Driver controller u1(CLOCK_27,~(SW[17]& ~KEY[0]),LCD_DATA,LCD_RW,LCD_EN,LCD_RS, KEY[3:0],SW[0],hash,plain_txt,signal_match,sys_rst); //SW[17] & ~KEY[0] is LCD reset //Key Generator key_gen40 key_gen40(sys_clk,sys_rst,signal_done,signal_next, match, plain_txt, key[0],key[1],key[2],key[3],key[4],key[5],key[6],key[7],key[8],key[9], key[10],key[11],key[12],key[13],key[14],key[15],key[16],key[17],key[18],key[19], key[20],key[21],key[22],key[23],key[24],key[25],key[26],key[27],key[28],key[29], key[30],key[31],key[32],key[33],key[34],key[35],key[36],key[37],key[38],key[39]); //DES--40 Instances DES crypto0(key[0],data,sys_clk,sys_rst,hash,match[0],done[0],signal_next); DES crypto1(key[1],data,sys_clk,sys_rst,hash,match[1],done[1],signal_next); DES crypto2(key[2],data,sys_clk,sys_rst,hash,match[2],done[2],signal_next); DES crypto3(key[3],data,sys_clk,sys_rst,hash,match[3],done[3],signal_next); DES crypto4(key[4],data,sys_clk,sys_rst,hash,match[4],done[4],signal_next); DES crypto5(key[5],data,sys_clk,sys_rst,hash,match[5],done[5],signal_next); DES crypto6(key[6],data,sys_clk,sys_rst,hash,match[6],done[6],signal_next); DES crypto7(key[7],data,sys_clk,sys_rst,hash,match[7],done[7],signal_next); DES crypto8(key[8],data,sys_clk,sys_rst,hash,match[8],done[8],signal_next); DES crypto9(key[9],data,sys_clk,sys_rst,hash,match[9],done[9],signal_next); DES crypto10(key[10],data,sys_clk,sys_rst,hash,match[10],done[10],signal_next); DES crypto11(key[11],data,sys_clk,sys_rst,hash,match[11],done[11],signal_next); DES crypto12(key[12],data,sys_clk,sys_rst,hash,match[12],done[12],signal_next); DES crypto13(key[13],data,sys_clk,sys_rst,hash,match[13],done[13],signal_next); DES crypto14(key[14],data,sys_clk,sys_rst,hash,match[14],done[14],signal_next); DES crypto15(key[15],data,sys_clk,sys_rst,hash,match[15],done[15],signal_next); DES crypto16(key[16],data,sys_clk,sys_rst,hash,match[16],done[16],signal_next); DES crypto17(key[17],data,sys_clk,sys_rst,hash,match[17],done[17],signal_next); DES crypto18(key[18],data,sys_clk,sys_rst,hash,match[18],done[18],signal_next); DES crypto19(key[19],data,sys_clk,sys_rst,hash,match[19],done[19],signal_next); DES crypto20(key[20],data,sys_clk,sys_rst,hash,match[20],done[20],signal_next); DES crypto21(key[21],data,sys_clk,sys_rst,hash,match[21],done[21],signal_next); DES crypto22(key[22],data,sys_clk,sys_rst,hash,match[22],done[22],signal_next); DES crypto23(key[23],data,sys_clk,sys_rst,hash,match[23],done[23],signal_next); DES crypto24(key[24],data,sys_clk,sys_rst,hash,match[24],done[24],signal_next); DES crypto25(key[25],data,sys_clk,sys_rst,hash,match[25],done[25],signal_next); DES crypto26(key[26],data,sys_clk,sys_rst,hash,match[26],done[26],signal_next); DES crypto27(key[27],data,sys_clk,sys_rst,hash,match[27],done[27],signal_next); DES crypto28(key[28],data,sys_clk,sys_rst,hash,match[28],done[28],signal_next); DES crypto29(key[29],data,sys_clk,sys_rst,hash,match[29],done[29],signal_next); DES crypto30(key[30],data,sys_clk,sys_rst,hash,match[30],done[30],signal_next); DES crypto31(key[31],data,sys_clk,sys_rst,hash,match[31],done[31],signal_next); DES crypto32(key[32],data,sys_clk,sys_rst,hash,match[32],done[32],signal_next); DES crypto33(key[33],data,sys_clk,sys_rst,hash,match[33],done[33],signal_next); DES crypto34(key[34],data,sys_clk,sys_rst,hash,match[34],done[34],signal_next); DES crypto35(key[35],data,sys_clk,sys_rst,hash,match[35],done[35],signal_next); DES crypto36(key[36],data,sys_clk,sys_rst,hash,match[36],done[36],signal_next); DES crypto37(key[37],data,sys_clk,sys_rst,hash,match[37],done[37],signal_next); DES crypto38(key[38],data,sys_clk,sys_rst,hash,match[38],done[38],signal_next); DES crypto39(key[39],data,sys_clk,sys_rst,hash,match[39],done[39],signal_next); endmodule