?? uart_core.vhd
字號:
-- 庫聲明library IEEE;use IEEE.STD_LOGIC_1164.all;use WORK.UART_PACKAGE.all;entity uart_core is generic ( -- 數據位個數 DATA_BIT : integer := 8; -- 總數據個數 TOTAL_BIT : integer := 10; -- 奇偶校驗規則 PARITY_RULE : PARITY := NONE ); port ( -- 時鐘和復位信號 clk : in std_logic; reset_n : in std_logic; -- 和信號監測器的接口信號 new_data : in std_logic; reset_dt : out std_logic; -- 復位、使能子模塊的信號 reset_parts : out std_logic; ce_parts : out std_logic; -- 和移位寄存器的接口信號 send_si : out std_logic; sel_si : out std_logic; regs : in std_logic_vector(TOTAL_BIT-1 downto 0); -- 計數器時鐘選擇信號和計數器計數到達上閾的指示信號 sel_clk : out std_logic; overflow : in std_logic; -- 和奇偶校驗器的接口信號 sel_pv : out std_logic; parity : in std_logic; -- 輸出選擇信號 sel_out : out std_logic; -- 提供給CPU的接口信號 send : in std_logic; send_bus : in std_logic_vector(DATA_BIT-1 downto 0); send_over : out std_logic; recv : out std_logic; recv_bus : out std_logic_vector(DATA_BIT-1 downto 0); error : out std_logic; send_buf : inout std_logic_vector(TOTAL_BIT-1 downto 0) ); end uart_core;architecture uart_core of uart_core is-- 誆啃藕?signal state : UART_STATE := UART_IDLE;--signal send_buf : std_logic_vector(TOTAL_BIT-1 downto 0);signal si_count : integer range 0 to 15 := 0;begin -- 主過程 main: process(clk, reset_n) begin if reset_n = '0' then -- 信號監測器復位信號 reset_dt <= '1'; -- 其他模塊的復位和使能信號 reset_parts <= '0'; ce_parts <= '0'; -- 移位寄存器輸入 sel_si <= '0'; -- 波特率發生器和計數器的時鐘選擇信號 sel_clk <= '0'; -- 奇偶校驗器的輸入 sel_pv <= '0'; -- 選擇TxD涑? sel_out <= '0'; -- 與CPU之間的接口信號 send_over <= '0'; recv <= '0'; error <= '0'; recv_bus <= (others => '0'); -- 狀態機 state <= UART_IDLE; -- 串行加載的計數 si_count <= 0; elsif rising_edge(clk) then case state is -- 空閑狀態 when UART_IDLE => -- 當信號監測器監測到數據時,new_data變為'1' if new_data = '1' then -- 復位子模塊 reset_parts <= '0'; -- 子模塊使能無效 ce_parts <= '0'; -- 選擇移位寄存器串行輸入為RxD sel_si <= '1'; -- 選擇移位寄存器的時鐘為波特率始終 -- 選擇數的敝游
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -