select_clk.vhd
来自「ISE7.1」· VHDL 代码 · 共 127 行
VHD
127 行
--------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 15:02:17 10/18/06
-- Design Name:
-- Module Name: select_clk - Behavioral
-- Project Name:
-- Target Device:
-- Tool versions:
-- Description: 本进程同时完成ADC的clk选择,以及fifo输入的选择功能
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
--------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity select_clk is
Port ( baud_clk:in std_logic;--------------晶振时钟。修改为了baud时钟,原来为20mhz,由于ready信号宽度限制,最后删掉
delay_in :in std_logic_vector(20 downto 0);--总共有21条delay line
com_select_clk:in std_logic; ---recready信号做进程敏感信号。即此信号为高后,根据接收寄存器判断选择哪个clk
com_from_serial_receiverrbuf:in std_logic_vector(7 downto 0);----接收到recready后,根据rbuf判断选择哪个clk
reset:in std_logic;
selected_delay_clk:out std_logic-----最终选择的时钟
) ;
end select_clk;
architecture Behavioral of select_clk is
signal command:std_logic_vector(7 downto 0);
begin
-- process(com_select_clk,reset,delay_in)
-- begin
-- if(reset='0')then
-- command<=(others=>'0');
-- selected_delay_clk<='0';
-- elsif(rising_edge(com_select_clk))then
-- command<=com_from_serial_receiverrbuf;
-- if (command(7 downto 5)="000")then
-- case command(4 downto 0) is
-- when "00000"=>selected_delay_clk<=delay_in(0);------没有延迟
-- when "00001"=>selected_delay_clk<=delay_in(1);------延迟8ns
-- when "00010"=>selected_delay_clk<=delay_in(2);------延迟10ns
-- when "00011"=>selected_delay_clk<=delay_in(3);------延迟12ns
-- when "00100"=>selected_delay_clk<=delay_in(4);------延迟14ns
-- when "00101"=>selected_delay_clk<=delay_in(5);------延迟16ns
-- when "00110"=>selected_delay_clk<=delay_in(6);------延迟18ns
-- when "00111"=>selected_delay_clk<=delay_in(7);------延迟20ns
-- when "01000"=>selected_delay_clk<=delay_in(8);------延迟22ns
-- when "01001"=>selected_delay_clk<=delay_in(9);------延迟24ns
-- when "01010"=>selected_delay_clk<=delay_in(10);-----延迟26ns
-- when "01011"=>selected_delay_clk<=delay_in(11);-----延迟28ns
-- when "01100"=>selected_delay_clk<=delay_in(12);-----延迟30ns
-- when "01101"=>selected_delay_clk<=delay_in(13);-----延迟32ns
-- when "01110"=>selected_delay_clk<=delay_in(14);-----延迟34ns
-- when "01111"=>selected_delay_clk<=delay_in(15);-----延迟36ns
-- when "10000"=>selected_delay_clk<=delay_in(16);-----延迟38ns
-- when "10001"=>selected_delay_clk<=delay_in(17);-----延迟40ns
-- when "10010"=>selected_delay_clk<=delay_in(18);-----延迟42ns
-- when "10011"=>selected_delay_clk<=delay_in(19);-----延迟44ns
-- when "10100"=>selected_delay_clk<=delay_in(20);-----延迟46ns
-- when others=>selected_delay_clk<=delay_in(2);-------延迟10ns
-- end case;
-- end if;
-- end if;
--end process;
process(reset,baud_clk)
begin
if(reset='0')then
command<=(others=>'0');
elsif(rising_edge(baud_clk))then
if com_select_clk='1' then
command<=com_from_serial_receiverrbuf;
end if;
end if;
end process;
process(reset,command(4 downto 0),delay_in)
begin
if(reset='0')then
selected_delay_clk<='0';
else
case command(4 downto 0) is
when "00000"=>selected_delay_clk<=delay_in(0);------没有延迟
when "00001"=>selected_delay_clk<=delay_in(1);------延迟8ns
when "00010"=>selected_delay_clk<=delay_in(2);------延迟10ns
when "00011"=>selected_delay_clk<=delay_in(3);------延迟12ns
when "00100"=>selected_delay_clk<=delay_in(4);------延迟14ns
when "00101"=>selected_delay_clk<=delay_in(5);------延迟16ns
when "00110"=>selected_delay_clk<=delay_in(6);------延迟18ns
when "00111"=>selected_delay_clk<=delay_in(7);------延迟20ns
when "01000"=>selected_delay_clk<=delay_in(8);------延迟22ns
when "01001"=>selected_delay_clk<=delay_in(9);------延迟24ns
when "01010"=>selected_delay_clk<=delay_in(10);-----延迟26ns
when "01011"=>selected_delay_clk<=delay_in(11);-----延迟28ns
when "01100"=>selected_delay_clk<=delay_in(12);-----延迟30ns
when "01101"=>selected_delay_clk<=delay_in(13);-----延迟32ns
when "01110"=>selected_delay_clk<=delay_in(14);-----延迟34ns
when "01111"=>selected_delay_clk<=delay_in(15);-----延迟36ns
when "10000"=>selected_delay_clk<=delay_in(16);-----延迟38ns
when "10001"=>selected_delay_clk<=delay_in(17);-----延迟40ns
when "10010"=>selected_delay_clk<=delay_in(18);-----延迟42ns
when "10011"=>selected_delay_clk<=delay_in(19);-----延迟44ns
when "10100"=>selected_delay_clk<=delay_in(20);-----延迟46ns
when others =>selected_delay_clk<=delay_in(0);-------延迟10ns
end case;
end if;
end process;
end Behavioral;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?