⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart1.vhd

📁 nois 2cpu 硬件实现编程
💻 VHD
📖 第 1 页 / 共 4 页
字号:
                 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 + -