| sysfs | 制御回路 端子 |
プロセッサから見た 入出力方向 | FPGAから見た 入出力方向 |
FPGAの 物理端子名 |
|---|---|---|---|---|
| /sys/class/gpio/CON9_17 | PE | 入力 | 出力 | P68 |
| /sys/class/gpio/CON9_18 | DE | 出力 | 入力 | P67 |
| /sys/class/gpio/CON9_21 | ST | 出力 | 入力 | P78 |
| /sys/class/gpio/CON9_22 | KY | 出力 | 入力 | P78 |
| /sys/class/gpio/CON9_23 | SO | 入力 | 出力 | P84 |
| /sys/class/gpio/CON9_24 | SI | 出力 | 入力 | P95 |
| /sys/class/gpio/CON9_25 | CK | 出力 | 入力 | P95 |
| /sys/class/gpio/CON9_26 | RS | 出力 | 入力 | P95 |
#! /usr/bin/perl
$key = "0001001111001011011100111011111110100001110000011110110001011011";
$str = "0101010001100101011100110111010001010100011001010111001101110100";
&io_init;
print "key transfer: ";
$old_key = &key_trans( $key );
printf "Parity error:%s\n", ($pe)?"detect":"none";
# print "Old key=$old_key\n";
print "string transfer\n";
print "in str.=$str\n";
$st = &str_trans( $str );
print "encrypt";
&io_enc;
$st = &str_trans( $str );
print "=$st\n";
print "string transfer\n";
print "in str.=$st\n";
$st = &str_trans( $st );
print "decrypt";
&io_dec;
$st = &str_trans( $st );
print "=$st\n";
&io_close;
sub key_trans {
local( $key_in ) = @_;
my $key_out = "";
&io_key( "1" );
for( my $i=0 ; $i<64 ; $i=$i+1 ) {
&io_si( substr( $key_in, 63-$i, 1 ) );
&io_clk;
$key_out = &io_so . $key_out;
}
&io_key( "0" );
$pe = &io_pe;
return $key_out;
}
sub str_trans {
local( $str_in ) = @_;
my $str_out = "";
&io_str( "1" );
for( my $i=0 ; $i<64 ; $i=$i+1 ) {
&io_si( substr( $str_in, 63-$i, 1 ) );
&io_clk;
$str_out = &io_so . $str_out;
}
&io_str( "0" );
return $str_out;
}
sub io_enc {
&io_de( "0" ); # encrypt
&io_clk;
}
sub io_dec {
&io_de( "1" ); # decrypt
&io_clk;
&io_de( "0" );
}
sub io_de {
local( $value ) = @_;
syswrite( F_DE, $value, 1 );
}
sub io_str {
local( $value ) = @_;
syswrite( F_ST, $value, 1 );
}
sub io_key {
local( $value ) = @_;
syswrite( F_KY, $value, 1 );
}
sub io_pe {
my $pe;
read( F_PE, $pe, 1 );
seek( F_PE, 0, 0 ); # rewind
return $pe;
}
sub io_so {
my $ch;
read( F_SO, $ch, 1 );
seek( F_SO, 0, 0 ); # rewind
return $ch;
}
sub io_si {
local( $value ) = @_;
syswrite( F_SI, $value, 1 );
}
sub io_clk {
syswrite( F_CK, "1", 1 );
syswrite( F_CK, "0", 1 );
}
sub io_init {
my $f;
$D_PE="/sys/class/gpio/CON9_17";
$D_DE="/sys/class/gpio/CON9_18";
$D_ST="/sys/class/gpio/CON9_21";
$D_KY="/sys/class/gpio/CON9_22";
$D_SO="/sys/class/gpio/CON9_23";
$D_SI="/sys/class/gpio/CON9_24";
$D_CK="/sys/class/gpio/CON9_25";
$D_RS="/sys/class/gpio/CON9_26";
foreach $f ( $D_PE, $D_SO ) {
open FP, ">$f/direction";
syswrite( FP, "in", 2 );
close FP;
}
foreach $f ( $D_DE, $D_ST, $D_KY, $D_SI, $D_CK, $D_RS ) {
open FP, ">$f/direction";
syswrite( FP, "out", 3 );
close FP;
}
open F_PE,"<$D_PE/value"; # open for input
open F_SO,"<$D_SO/value";
open F_DE,">$D_DE/value"; # open for output
open F_ST,">$D_ST/value";
open F_KY,">$D_KY/value";
open F_SI,">$D_SI/value";
open F_CK,">$D_CK/value";
open F_RS,">$D_RS/value";
syswrite( F_DE, "0", 1 );
syswrite( F_SI, "0", 1 );
syswrite( F_ST, "0", 1 );
syswrite( F_KY, "0", 1 );
syswrite( F_CK, "0", 1 );
syswrite( F_RS, "1", 1 ); # reset
syswrite( F_RS, "0", 1 );
}
sub io_close {
close F_PE;
close F_SO;
close F_DE;
close F_ST;
close F_KY;
close F_SI;
close F_CK;
close F_RS;
}
jjpc10302:~/usr/Sample# ./desif.pl key transfer: Parity error:none string transfer in str.=0101010001100101011100110111010001010100011001010111001101110100 encrypt=0000111111001011110011101010101110100010101011111000000000100010 string transfer in str.=0000111111001011110011101010101110100010101011111000000000100010 decrypt=0101010001100101011100110111010001010100011001010111001101110100 jjpc10302:~/usr/Sample#