📄 em_uart.pl
字号:
#Copyright (C)2001-2003 Altera Corporation
#Any megafunction design, and related net list (encrypted or decrypted),
#support information, device programming or simulation file, and any other
#associated documentation or information provided by Altera or a partner
#under Altera's Megafunction Partnership Program may be used only to
#program PLD devices (but not masked PLD devices) from Altera. Any other
#use of such megafunction design, net list, support information, device
#programming or simulation file, or any other related documentation or
#information is prohibited for any other purpose, including, but not
#limited to modification, reverse engineering, de-compiling, or use with
#any other silicon devices, unless such use is explicitly licensed under
#a separate agreement with Altera or a megafunction partner. Title to
#the intellectual property, including patents, copyrights, trademarks,
#trade secrets, or maskworks, embodied in any such megafunction design,
#net list, support information, device programming or simulation file, or
#any other related documentation or information provided by Altera or a
#megafunction partner, remains with Altera, the megafunction partner, or
#their respective licensors. No other licenses, including any licenses
#needed under any third party's intellectual property, are provided herein.
#Copying or modifying any file, or portion thereof, to which this notice
#is attached violates this copyright.
use filename_utils; # This is for to Perlcopy 'uart.pl'
use europa_all; # This imports the entire Eurpoa object-library.
use strict; # This spanks you when you're naughty. That's
my $project = e_project->new(@ARGV);
my $SBI = ©_of_hash($project->SBI("s1"));
&make_uart ($project);
$project->output() unless $project->_software_only();
sub Validate_Uart_Options
{
my ($Options, $project) = (@_);
&validate_parameter ({hash => $Options,
name => "fixed_baud",
type => "boolean",
default => 1,
});
&validate_parameter ({hash => $Options,
name => "use_cts_rts",
type => "boolean",
default => 0,
});
&validate_parameter ({hash => $Options,
name => "use_eop_register",
type => "boolean",
default => 0,
});
# modified to allow the number 10
&validate_parameter ({hash => $Options,
name => "data_bits",
type => "integer",
allowed => [7, 8, 9, 10],
default => 8,
});
&validate_parameter ({hash => $Options,
name => "stop_bits",
type => "integer",
allowed => [1, 2],
default => 2,
});
&validate_parameter ({hash => $Options,
name => "parity",
type => "string",
allowed => ["S0", "S1", "E", "O", "N"],
default => "N",
});
&validate_parameter ({hash => $Options,
name => "baud",
type => "integer",
allowed => [ 300,
1200,
2400,
4800,
9600,
14400,
19200,
28800,
38400,
57600,
115200,],
default => 115200,
severity => "warning",
});
&validate_parameter ({hash => $Options,
name => "baud",
type => "integer",
});
&validate_parameter ({hash => $Options,
name => "clock_freq",
type => "integer",
});
&validate_parameter ({hash => $Options,
name => "sim_true_baud",
type => "boolean",
default => "0",
});
&validate_parameter ({hash => $Options,
name => "use_fifo",
type => "boolean",
default => "0",
});
&validate_parameter ({hash => $Options,
name => "fifo_size",
type => "integer",
allowed => [ 4,
8,
16,
32,
64,
128,
256,
512,
1024,
2048,
4096,
8192,],
default => 16,
severity => "warning",
});
&validate_parameter ({hash => $Options,
name => "fifo_export_used",
type => "boolean",
default => "0",
});
$Options->{baud_divisor_constant} =
int ( ($Options->{clock_freq} / $Options->{baud}) + 0.5);
$Options->{divisor_bits} =
&Bits_To_Encode ($Options->{baud_divisor_constant});
if (!$Options->{fixed_baud}) {
$Options->{divisor_bits} = max ($Options->{divisor_bits}, 16);
}
&validate_parameter ({hash => $Options,
name => "divisor_bits",
type => "integer",
range => [1,16],
message => "cannot make desired baud rate from clock",
});
$Options->{num_control_reg_bits} =
($Options->{use_cts_rts} | $Options->{use_eop_register}) ? 13 : 10 ;
$Options->{num_status_reg_bits} = 13;
return 1;
}
sub Setup_Input_Stream
{
my ($Options, $project) = (@_);
if (($Options->{sim_char_file} ne "") &&
($Options->{sim_char_stream} ne "")) {
&ribbit
("Cannot set 'sim_char_stream' parameter when using 'sim_char_file'");
}
my $char_stream = $Options->{sim_char_stream};
if ($Options->{sim_char_file} ne "") {
$char_stream = "";
open (CHARFILE, "< $Options->{sim_char_file}")
or &ribbit ("Cannot open input-file $Options->{sim_char_file} ($!)");
while (<CHARFILE>) {
$char_stream .= $_;
}
close CHARFILE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -