debug_detect_peakvalue.vhd

来自「VHDLfullCODEforCAcodeGenerator.rar为CA码发生」· VHDL 代码 · 共 104 行

VHD
104
字号
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity Debug_Detect_Peakvalue is
    Port ( SampleClk          : in  std_logic;
           Enable_Detect      : in  std_logic;
----       Sum_I_Tracking     : in  std_logic_vector(15 downto 0);
		     Sum_I_Prompt		: in  std_logic_vector(15 downto 0);
----		  Sum_Q_Tracking	: in  std_logic_vector(15 downto 0);
		     Sum_Q_Prompt   	: in  std_logic_vector(15 downto 0);
		     Detect             : out std_logic;
		     CodeOfSlew         : out std_logic_vector(10 downto 0)
		 );
end Debug_Detect_Peakvalue;

architecture rtl of Debug_Detect_Peakvalue is

    signal   IP_Square       : signed( 31 downto 0);
    signal   QP_Square       : signed( 31 downto 0);
    signal   ResultOfTemp    : signed( 32 downto 0);
    signal   Result          : std_logic_vector(32 downto 0);
    signal   FlagOfDetect    : std_logic_vector(33 downto 0);
    constant Th_Peak         : std_logic_vector(32 downto 0)
                          -----:= "000000000000010101011001010000001";    ----//// The Temp Threshold;
										 := "000000000000000000011111111111111";	  ---- 1*10^6;
    signal   FlagOfCompute   : std_logic;
    signal   CountOfCompute  : integer range  0 to 7;
    signal   FgOfAcquisition : std_logic;
	 signal   FlagOfGetCodeSlew : std_logic;
    signal   Temp_CodeOfSlew : std_logic_vector(10 downto 0);
   

begin

    process(SampleClk)	
    begin
       if SampleClk'event and SampleClk='1' then
	           if Enable_Detect ='1' then
		                FlagOfCompute <= '1';
              end if;
		        if FlagOfCompute ='1' then
		              if CountOfCompute= 4 then
		                    CountOfCompute <= 0;
                    else
		                    CountOfCompute <= CountOfCompute + 1;
                    end if;
              end if;
		        if CountOfCompute = 4 then
		                FlagOfCompute <= '0';
		        end if;
        end if;
    end process;
    	 -----/// every 6 clock cycles calculate a result -----
    Result        <= std_logic_vector(ResultOfTemp);

    process(SampleClk)
    begin
       if SampleClk'event and SampleClk='1' then

           IP_Square     <= signed(Sum_I_Prompt)*signed(Sum_I_Prompt);
           QP_Square     <= signed(Sum_Q_Prompt)*signed(Sum_Q_Prompt);
           ResultOfTemp  <= (IP_Square(IP_Square'high)&IP_Square)
                          + (QP_Square(QP_Square'high)&QP_Square);

	      if  CountOfCompute = 2  then
               FlagOfDetect  <= (Result(Result'high)&Result) - (Th_Peak(Th_Peak'high)&Th_Peak);
           end if;

		 if  CountOfCompute = 3  then		     
		     if  FlagOfDetect(FlagOfDetect'high)='0' then
			            FgOfAcquisition <= '1';
               else
			            FgOfAcquisition	<= '0';
               end if;
           else
		               FgOfAcquisition <= '0';
           end if;

		 if  CountOfCompute = 4 then
		     if  FgOfAcquisition = '0' then
-------///////		             Temp_CodeOfSlew   <= Temp_CodeOfSlew + 1;
		             Temp_CodeOfSlew   <= "00000000001";
				   FlagOfGetCodeSlew <= '0';
               else
			    if FlagOfGetCodeSlew='0' then
-------///////		          Temp_CodeOfSlew   <= Temp_CodeOfSlew - 1;
				   Temp_CodeOfSlew   <=  (others=>'0') ;
				   FlagOfGetCodeSlew <= '1';
                   end if;
               end if;
           end if;
       end if;
    end process;

    Detect     <= FgOfAcquisition;   
    CodeOfSlew <= Temp_CodeOfSlew;	    	              


end rtl;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?