📄 uart1.vhd
字号:
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 entity uart1_regs;architecture europa of uart1_regs is signal any_error : STD_LOGIC; signal control_reg : STD_LOGIC_VECTOR (9 DOWNTO 0); signal control_wr_strobe : STD_LOGIC; signal cts_status_bit : STD_LOGIC; signal d1_rx_char_ready : STD_LOGIC; signal d1_tx_ready : STD_LOGIC; signal dcts_status_bit : STD_LOGIC; signal delayed_unxtx_readyxx4 : STD_LOGIC; signal divisor_constant : STD_LOGIC_VECTOR (9 DOWNTO 0); signal do_write_char : STD_LOGIC; signal eop_status_bit : STD_LOGIC; signal ie_any_error : STD_LOGIC; signal ie_break_detect : STD_LOGIC; signal ie_framing_error : STD_LOGIC; signal ie_parity_error : STD_LOGIC; signal ie_rx_char_ready : STD_LOGIC; signal ie_rx_overrun : STD_LOGIC; signal ie_tx_overrun : STD_LOGIC; signal ie_tx_ready : STD_LOGIC; signal ie_tx_shift_empty : STD_LOGIC; signal internal_tx_data : STD_LOGIC_VECTOR (7 DOWNTO 0); signal internal_tx_wr_strobe : STD_LOGIC; signal qualified_irq : STD_LOGIC; signal selected_read_data : STD_LOGIC_VECTOR (15 DOWNTO 0); signal status_reg : STD_LOGIC_VECTOR (12 DOWNTO 0);begin process (clk, reset_n) begin if reset_n = '0' then readdata <= std_logic_vector'("0000000000000000"); elsif clk'event and clk = '1' then if std_logic'(clk_en) = '1' then readdata <= selected_read_data; end if; end if; end process; process (clk, reset_n) begin if reset_n = '0' then irq <= std_logic'('0'); elsif clk'event and clk = '1' then if std_logic'(clk_en) = '1' then irq <= qualified_irq; end if; end if; end process; rx_rd_strobe <= (chipselect AND NOT read_n) AND to_std_logic(((address = std_logic_vector'("000")))); internal_tx_wr_strobe <= (chipselect AND NOT write_n) AND to_std_logic(((address = std_logic_vector'("001")))); status_wr_strobe <= (chipselect AND NOT write_n) AND to_std_logic(((address = std_logic_vector'("010")))); control_wr_strobe <= (chipselect AND NOT write_n) AND to_std_logic(((address = std_logic_vector'("011")))); process (clk, reset_n) begin if reset_n = '0' then internal_tx_data <= std_logic_vector'("00000000"); elsif clk'event and clk = '1' then if std_logic'(internal_tx_wr_strobe) = '1' then internal_tx_data <= writedata(7 DOWNTO 0); end if; end if; end process; process (clk, reset_n) begin if reset_n = '0' then control_reg <= std_logic_vector'("0000000000"); elsif clk'event and clk = '1' then if std_logic'(control_wr_strobe) = '1' then 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;--synthesis 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'("0000000100");--synthesis translate_on--synthesis read_comments_as_HDL on-- divisor_constant <= std_logic_vector'("1011100010");--synthesis read_comments_as_HDL offend europa;-- turn off superfluous VHDL processor warnings -- altera message_level Level1 -- altera message_off 10034 10035 10036 10037 10230 10240 10030 library altera;use altera.altera_europa_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 iscomponent uart1_tx is port ( -- inputs: signal baud_divisor : IN STD_LOGIC_VECTOR (9 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 (9 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 (9 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;--synthesis translate_offcomponent 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;--synthesis translate_on signal baud_divisor : STD_LOGIC_VECTOR (9 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, which is an e_instance 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, which is an e_instance 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, which is an e_instance 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 ); --s1, which is an e_avalon_slave --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;--synthesis translate_off --uart1_log, which is an e_log uart1_log : uart1_log_module port map( clk => clk, data => tx_data, strobe => tx_wr_strobe, valid => module_input ); module_input <= NOT tx_ready;--synthesis translate_onend europa;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -