| 信号名 | 入出力 | 動作 |
|---|---|---|
| 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