📄 baud_div.vhd
字号:
--/*****************************************************************************-- * 源文件: baud_div.vhd-- * 模块: 波特率时钟发生器-- * 版权:-- * Copyright(C) 北京联华众科科技有限公司-- * www.lianhua-zhongke.com.cn-- * 版本: Version 1.0-- * -- * 功能说明:-- * 为串口发送产生工作时钟,产生的时钟的频率为波特率的 2倍。-- *-- * 参数说明:-- * 输出-- * baudrate_clock - 波特率的 2倍时钟-- *-- * 输入-- * baudrate - 选择不同波特率的外部配置数据-- * clock - 时钟输入,如 24MHz-- * reset - 复位信号,低电平有效-- *-- * 参数-- *-- * 变更记录: -- * 2006.01.28, 新建-- *-- *****************************************************************************/LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;ENTITY baud_div IS PORT ( baudrate_clock : BUFFER STD_LOGIC;--baudrate*2, for instance, when baudrate is 9600, baudrate_clock is 9600*2 baudrate : IN STD_LOGIC_VECTOR(3 downto 0); clock : IN STD_LOGIC;--24M reset : IN STD_LOGIC );END baud_div;ARCHITECTURE baud_div_architecture OF baud_div IS BEGIN PROCESS(clock) VARIABLE delay_counter: INTEGER RANGE 0 TO 220000; VARIABLE divisor : INTEGER RANGE 0 TO 220000; BEGIN IF ( reset = '0') THEN baudrate_clock <= '1'; delay_counter := 0; ELSIF(clock = '1' AND clock'EVENT) THEN CASE baudrate IS--(24M/baudrate)/2 WHEN "0000" => divisor := 109091;--110 WHEN "0001" => divisor := 40000;--300 WHEN "0010" => divisor := 10000;--1200 WHEN "0011" => divisor := 5000;--2400 WHEN "0100" => divisor := 2500;--4800 WHEN "0101" => divisor := 1250;--9600 WHEN "0110" => divisor := 625;--19200 WHEN "0111" => divisor := 312;--38400 WHEN "1000" => divisor := 208;--57600 WHEN "1001" => divisor := 104;--115200 WHEN "1010" => divisor := 72;--230400 WHEN "1011" => divisor := 36;--460800 WHEN "1100" => divisor := 18;--921600 WHEN OTHERS => divisor := 1250;--9600 END CASE; IF (delay_counter = divisor/2-1) THEN delay_counter := 0; baudrate_clock <= NOT baudrate_clock; ELSE delay_counter := delay_counter+1; END IF; END IF; END PROCESS;END baud_div_architecture;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -