📄 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 + -