信号名 | 入出力 | 動作 |
---|---|---|
CLK | 入力 | クロック、立上り動作 |
RST | 入力 | リセット、非同期、key, di, do, soレジスタを0に初期化 |
KEY | 入力 | KEY=1のときkey, soレジスタをシフト動作させる |
STR | 入力 | STR=1のときdi, do, soレジスタをシフト動作させる |
DE | 入力 | DE=0で暗号化、DE=1で復号化を指定する KEY=0,STR=0のときDEに応じ てdiレジスタの内容を暗号 化または復号化しdoレジス タに書込む |
SI | 入力 | シリアル入力 |
SO | 出力 | シリアル出力 |
PE | 出力 | keyのパリティエラー |
module desif ( CLK, RST, SI, KEY, STR, DE, SO, PE, LED ); input CLK; // Clock input RST; // Reset input SI; // Serial input input KEY; // Key register select input STR; // String register select input DE; // Decrypt=1/Encrypt=0 output SO; // Serial output output PE; // Key parity error (if 1, parity error detects) output LED; // On board LED (if 0, light on) reg ...; reg [1:64] ...; reg [1:64] ...; reg [1:64] ...; wire [1:64] ...; // Internal wire assign LED = ...; // if no parity error, light on. always @( posedge ... or posedge ... ) begin if( ... ) // if reset, all register is 0; begin ... <= ...; ... <= ...; ... <= ...; ... <= ...; end else if( ... ) // if key register selects, shift key register begin { ..., ... } <= { ..., ... }; end else if( ... ) // if string registers select, shift data registers begin { DO, SO } <= { DI[64], DO }; DI <= { SI, DI[1:63] }; end else begin // encrypt or decrypt data is written to DO register ... <= ...; SO <= 1'b0; end end des u_des ( .DI(DI), .DO( ... ), .KEY(KE), .MODE(DE), .PE(PE) ); endmodule