📄 uart1.vhd
字号:
control_reg <= writedata(9 DOWNTO 0);
end if;
end if;
end process;
baud_divisor <= divisor_constant;
cts_status_bit <= std_logic'('0');
dcts_status_bit <= std_logic'('0');
(do_force_break, ie_any_error, ie_rx_char_ready, ie_tx_ready, ie_tx_shift_empty, ie_tx_overrun, ie_rx_overrun, ie_break_detect, ie_framing_error, ie_parity_error) <= control_reg;
any_error <= (((tx_overrun OR rx_overrun) OR parity_error) OR framing_error) OR break_detect;
status_reg <= Std_Logic_Vector'(A_ToStdLogicVector(eop_status_bit) & A_ToStdLogicVector(cts_status_bit) & A_ToStdLogicVector(dcts_status_bit) & A_ToStdLogicVector(std_logic'('0')) & A_ToStdLogicVector(any_error) & A_ToStdLogicVector(rx_char_ready) & A_ToStdLogicVector(tx_ready) & A_ToStdLogicVector(tx_shift_empty) & A_ToStdLogicVector(tx_overrun) & A_ToStdLogicVector(rx_overrun) & A_ToStdLogicVector(break_detect) & A_ToStdLogicVector(framing_error) & A_ToStdLogicVector(parity_error));
process (clk, reset_n)
begin
if reset_n = '0' then
d1_rx_char_ready <= std_logic'('0');
elsif clk'event and clk = '1' then
if std_logic'(clk_en) = '1' then
d1_rx_char_ready <= rx_char_ready;
end if;
end if;
end process;
process (clk, reset_n)
begin
if reset_n = '0' then
d1_tx_ready <= std_logic'('0');
elsif clk'event and clk = '1' then
if std_logic'(clk_en) = '1' then
d1_tx_ready <= tx_ready;
end if;
end if;
end process;
dataavailable <= d1_rx_char_ready;
readyfordata <= d1_tx_ready;
eop_status_bit <= std_logic'('0');
selected_read_data <= ((((A_REP(to_std_logic(((address = std_logic_vector'("000")))), 16) AND (std_logic_vector'("00000000") & (rx_data)))) OR ((A_REP(to_std_logic(((address = std_logic_vector'("001")))), 16) AND (std_logic_vector'("00000000") & (internal_tx_data))))) OR ((A_REP(to_std_logic(((address = std_logic_vector'("010")))), 16) AND (std_logic_vector'("000") & (status_reg))))) OR ((A_REP(to_std_logic(((address = std_logic_vector'("011")))), 16) AND (std_logic_vector'("000000") & (control_reg))));
qualified_irq <= (((((((((ie_any_error AND any_error)) OR ((ie_tx_shift_empty AND tx_shift_empty))) OR ((ie_tx_overrun AND tx_overrun))) OR ((ie_rx_overrun AND rx_overrun))) OR ((ie_break_detect AND break_detect))) OR ((ie_framing_error AND framing_error))) OR ((ie_parity_error AND parity_error))) OR ((ie_rx_char_ready AND rx_char_ready))) OR ((ie_tx_ready AND tx_ready));
--vhdl renameroo for output signals
tx_data <= internal_tx_data;
--vhdl renameroo for output signals
tx_wr_strobe <= internal_tx_wr_strobe;
--exemplar translate_off
--delayed_unxtx_readyxx4, which is an e_register
process (clk, reset_n)
begin
if reset_n = '0' then
delayed_unxtx_readyxx4 <= std_logic'('0');
elsif clk'event and clk = '1' then
if std_logic'(clk_en) = '1' then
delayed_unxtx_readyxx4 <= tx_ready;
end if;
end if;
end process;
do_write_char <= (tx_ready) AND NOT (delayed_unxtx_readyxx4);
process (clk)
VARIABLE write_line : line;
begin
if clk'event and clk = '1' then
if std_logic'(do_write_char) = '1' then
write(write_line, character'val(CONV_INTEGER(internal_tx_data)));
write(write_line, string'(""));
write(output, write_line.all);
deallocate (write_line);
end if;
end if;
end process;
divisor_constant <= std_logic_vector'("000000100");
--exemplar translate_on
--synthesis read_comments_as_HDL on
-- divisor_constant <= std_logic_vector'("110110010");
--synthesis read_comments_as_HDL off
end europa;
library altera_vhdl_support;
use altera_vhdl_support.altera_vhdl_support_lib.all;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity uart1 is
port (
-- inputs:
signal address : IN STD_LOGIC_VECTOR (2 DOWNTO 0);
signal begintransfer : IN STD_LOGIC;
signal chipselect : IN STD_LOGIC;
signal clk : IN STD_LOGIC;
signal read_n : IN STD_LOGIC;
signal reset_n : IN STD_LOGIC;
signal rxd : IN STD_LOGIC;
signal write_n : IN STD_LOGIC;
signal writedata : IN STD_LOGIC_VECTOR (15 DOWNTO 0);
-- outputs:
signal dataavailable : OUT STD_LOGIC;
signal irq : OUT STD_LOGIC;
signal readdata : OUT STD_LOGIC_VECTOR (15 DOWNTO 0);
signal readyfordata : OUT STD_LOGIC;
signal txd : OUT STD_LOGIC
);
end entity uart1;
architecture europa of uart1 is
component uart1_tx is
port (
-- inputs:
signal baud_divisor : IN STD_LOGIC_VECTOR (8 DOWNTO 0);
signal begintransfer : IN STD_LOGIC;
signal clk : IN STD_LOGIC;
signal clk_en : IN STD_LOGIC;
signal do_force_break : IN STD_LOGIC;
signal reset_n : IN STD_LOGIC;
signal status_wr_strobe : IN STD_LOGIC;
signal tx_data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
signal tx_wr_strobe : IN STD_LOGIC;
-- outputs:
signal tx_overrun : OUT STD_LOGIC;
signal tx_ready : OUT STD_LOGIC;
signal tx_shift_empty : OUT STD_LOGIC;
signal txd : OUT STD_LOGIC
);
end component uart1_tx;
component uart1_rx is
port (
-- inputs:
signal baud_divisor : IN STD_LOGIC_VECTOR (8 DOWNTO 0);
signal begintransfer : IN STD_LOGIC;
signal clk : IN STD_LOGIC;
signal clk_en : IN STD_LOGIC;
signal reset_n : IN STD_LOGIC;
signal rx_rd_strobe : IN STD_LOGIC;
signal rxd : IN STD_LOGIC;
signal status_wr_strobe : IN STD_LOGIC;
-- outputs:
signal break_detect : OUT STD_LOGIC;
signal framing_error : OUT STD_LOGIC;
signal parity_error : OUT STD_LOGIC;
signal rx_char_ready : OUT STD_LOGIC;
signal rx_data : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
signal rx_overrun : OUT STD_LOGIC
);
end component uart1_rx;
component uart1_regs is
port (
-- inputs:
signal address : IN STD_LOGIC_VECTOR (2 DOWNTO 0);
signal break_detect : IN STD_LOGIC;
signal chipselect : IN STD_LOGIC;
signal clk : IN STD_LOGIC;
signal clk_en : IN STD_LOGIC;
signal framing_error : IN STD_LOGIC;
signal parity_error : IN STD_LOGIC;
signal read_n : IN STD_LOGIC;
signal reset_n : IN STD_LOGIC;
signal rx_char_ready : IN STD_LOGIC;
signal rx_data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
signal rx_overrun : IN STD_LOGIC;
signal tx_overrun : IN STD_LOGIC;
signal tx_ready : IN STD_LOGIC;
signal tx_shift_empty : IN STD_LOGIC;
signal write_n : IN STD_LOGIC;
signal writedata : IN STD_LOGIC_VECTOR (15 DOWNTO 0);
-- outputs:
signal baud_divisor : OUT STD_LOGIC_VECTOR (8 DOWNTO 0);
signal dataavailable : OUT STD_LOGIC;
signal do_force_break : OUT STD_LOGIC;
signal irq : OUT STD_LOGIC;
signal readdata : OUT STD_LOGIC_VECTOR (15 DOWNTO 0);
signal readyfordata : OUT STD_LOGIC;
signal rx_rd_strobe : OUT STD_LOGIC;
signal status_wr_strobe : OUT STD_LOGIC;
signal tx_data : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
signal tx_wr_strobe : OUT STD_LOGIC
);
end component uart1_regs;
--exemplar translate_off
component uart1_log_module is
port (
-- inputs:
signal clk : IN STD_LOGIC;
signal data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
signal strobe : IN STD_LOGIC;
signal valid : IN STD_LOGIC
);
end component uart1_log_module;
--exemplar translate_on
signal baud_divisor : STD_LOGIC_VECTOR (8 DOWNTO 0);
signal break_detect : STD_LOGIC;
signal clk_en : STD_LOGIC;
signal do_force_break : STD_LOGIC;
signal framing_error : STD_LOGIC;
signal internal_dataavailable : STD_LOGIC;
signal internal_irq : STD_LOGIC;
signal internal_readdata : STD_LOGIC_VECTOR (15 DOWNTO 0);
signal internal_readyfordata : STD_LOGIC;
signal internal_txd : STD_LOGIC;
signal module_input : STD_LOGIC;
signal parity_error : STD_LOGIC;
signal rx_char_ready : STD_LOGIC;
signal rx_data : STD_LOGIC_VECTOR (7 DOWNTO 0);
signal rx_overrun : STD_LOGIC;
signal rx_rd_strobe : STD_LOGIC;
signal status_wr_strobe : STD_LOGIC;
signal tx_data : STD_LOGIC_VECTOR (7 DOWNTO 0);
signal tx_overrun : STD_LOGIC;
signal tx_ready : STD_LOGIC;
signal tx_shift_empty : STD_LOGIC;
signal tx_wr_strobe : STD_LOGIC;
begin
clk_en <= std_logic'('1');
the_uart1_tx : uart1_tx
port map(
tx_overrun => tx_overrun,
tx_ready => tx_ready,
tx_shift_empty => tx_shift_empty,
txd => internal_txd,
baud_divisor => baud_divisor,
begintransfer => begintransfer,
clk => clk,
clk_en => clk_en,
do_force_break => do_force_break,
reset_n => reset_n,
status_wr_strobe => status_wr_strobe,
tx_data => tx_data,
tx_wr_strobe => tx_wr_strobe
);
the_uart1_rx : uart1_rx
port map(
break_detect => break_detect,
framing_error => framing_error,
parity_error => parity_error,
rx_char_ready => rx_char_ready,
rx_data => rx_data,
rx_overrun => rx_overrun,
baud_divisor => baud_divisor,
begintransfer => begintransfer,
clk => clk,
clk_en => clk_en,
reset_n => reset_n,
rx_rd_strobe => rx_rd_strobe,
rxd => rxd,
status_wr_strobe => status_wr_strobe
);
the_uart1_regs : uart1_regs
port map(
baud_divisor => baud_divisor,
dataavailable => internal_dataavailable,
do_force_break => do_force_break,
irq => internal_irq,
readdata => internal_readdata,
readyfordata => internal_readyfordata,
rx_rd_strobe => rx_rd_strobe,
status_wr_strobe => status_wr_strobe,
tx_data => tx_data,
tx_wr_strobe => tx_wr_strobe,
address => address,
break_detect => break_detect,
chipselect => chipselect,
clk => clk,
clk_en => clk_en,
framing_error => framing_error,
parity_error => parity_error,
read_n => read_n,
reset_n => reset_n,
rx_char_ready => rx_char_ready,
rx_data => rx_data,
rx_overrun => rx_overrun,
tx_overrun => tx_overrun,
tx_ready => tx_ready,
tx_shift_empty => tx_shift_empty,
write_n => write_n,
writedata => writedata
);
--vhdl renameroo for output signals
dataavailable <= internal_dataavailable;
--vhdl renameroo for output signals
irq <= internal_irq;
--vhdl renameroo for output signals
readdata <= internal_readdata;
--vhdl renameroo for output signals
readyfordata <= internal_readyfordata;
--vhdl renameroo for output signals
txd <= internal_txd;
--exemplar translate_off
uart1_log : uart1_log_module
port map(
clk => clk,
data => tx_data,
strobe => tx_wr_strobe,
valid => module_input
);
module_input <= NOT tx_ready;
--exemplar translate_on
end europa;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -