generic(memory_type : string := "XILINX_16X"; --"DUAL_PORT_" "ALTERA_LPM";
log_file : string := "UNUSED";
ethernet : std_logic := '0';
- use_cache : std_logic := '0');
+ use_cache : std_logic := '0';
+ uart_prescaler : integer := 434);
port(clk : in std_logic;
reset : in std_logic;
data_read => ram_data_r);
u3_uart: uart
- generic map (log_file => log_file)
+ generic map (
+ log_file => log_file,
+ prescaler => uart_prescaler)
port map(
clk => clk,
reset => reset,
-- Software 'as is' without warranty. Author liable for nothing.
-- DESCRIPTION:
-- Implements the UART.
+--
+---------------------------------------------------------------------
+-- Baud-rate is determined by the "prescaler" generic parameter.
+-- <prescaler> = (<clk_freq> / <baud-rate>) - 1
---------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use work.mlite_pack.all;
entity uart is
- generic(log_file : string := "UNUSED");
+ generic(
+ log_file : string := "UNUSED";
+ prescaler : integer := 434);
port(clk : in std_logic;
reset : in std_logic;
enable_read : in std_logic;
begin
+ assert prescaler < 1024
+ report "Prescale value must be lower then 1024."
+ severity failure;
+
+
uart_proc: process(clk, reset, enable_read, enable_write, data_in,
data_write_reg, bits_write_reg, delay_write_reg,
data_read_reg, bits_read_reg, delay_read_reg,
data_save_reg, read_value_reg, uart_read2,
busy_write_sig, uart_read)
- constant COUNT_VALUE : std_logic_vector(9 downto 0) :=
--- "0100011110"; --33MHz/2/57600Hz = 0x11e
--- "1101100100"; --50MHz/57600Hz = 0x364
- "0110110010"; --25MHz/57600Hz = 0x1b2 -- Plasma IF uses div2
--- "0011011001"; --12.5MHz/57600Hz = 0xd9
--- "0000000100"; --for debug (shorten read_value_reg)
+
+ constant COUNT_VALUE : std_logic_vector(9 downto 0) :=
+ CONV_STD_LOGIC_VECTOR(prescaler, 10);
+
begin
uart_read2 <= read_value_reg(read_value_reg'length - 1);