2014-11-21 199 views
-4

我得到的警告类似于50 MHz到64KHz频率

警告:Xst:647-从不使用输入。如果该端口属于顶层块或属于子块并保留该子块的层次结构,则该端口将被保留并保持不连接状态。 警告:Xst:647 - 从不使用输入。如果该端口属于顶层块或属于子块并保留该子块的层次结构,则该端口将被保留并保持不连接状态。 警告:Xst:647 - 从不使用输入。如果该端口属于顶层块或属于子块并保留该子块的层次结构,则该端口将被保留并保持不连接状态。 警告:Xst:647 - 从不使用输入。如果该端口属于顶层块或属于子块并保留该子块的层次结构,则该端口将被保留并保持不连接状态。 警告:Xst:647 - 从不使用输入。如果该端口属于顶层块或属于子块并保留该子块的层次结构,则该端口将被保留并保持不连接状态。 警告:Xst:1290 - 分块在块中未连接。 它将从设计中删除。 警告:Xst:1290 - 分块在块中未连接。 它将从设计中删除。 警告:Xst:1290 - 分块在块中未连接。 它将从设计中删除。 警告:Xst:524 - 块的实例的所有输出都在块中未连接。 此实例将与设计一起从所有基础逻辑中删除 警告:Xst:2677 - 顺序类型的节点在块中未连接。 警告:Xst:1710 - FF/Latch(无初始值)在块中具有常数值0。这个FF/Latch将在优化过程中被修剪。 警告:Xst:1895 - 由于其他FF/Latch修剪,FF/Latch(无初始值)在块中具有恒定值0。这个FF/Latch将在优化过程中被修剪。 警告:Xst:1895 - 由于其他FF/Latch修剪,FF/Latch(无初始值)在块中具有恒定值0。这个FF/Latch将在优化过程中被修剪。 警告:Xst:1895 - 由于其他FF/Latch修剪,FF/Latch(无初始值)在块中具有恒定值0。这个FF/Latch将在优化过程中被修剪。 警告:Xst:1895 - 由于其他FF/Latch修剪,FF/Latch(无初始值)在块中具有恒定值0。这个FF/Latch将在优化过程中被修剪。 警告:Xst:1895 - 由于其他FF/Latch修剪,FF/Latch(无初始值)在块中具有恒定值0。这个FF/Latch将在优化过程中被修剪。

-- ///////// 50MHz to 64KHz /////////// 
    library IEEE; 
    use IEEE.STD_LOGIC_1164.ALL; 
    use ieee.numeric_std.all; 
    use ieee.std_logic_arith.all; 
    use ieee.std_logic_unsigned.all; 

    entity clk64kHz is -- input freq 50MHz and output is 64MHz 
     Port (
      clk : in STD_LOGIC; 
      reset : in STD_LOGIC; 
      clk_out: out STD_LOGIC 
     ); 
    end clk64kHz; 

    architecture Behavioral of clk64kHz is 
     signal temporal: STD_LOGIC := '0'; 
     signal counter : STD_LOGIC_VECTOR (8 downto 0) := "000000000"; 
    begin 
     freq_divider: process (reset, clk) begin 
      if (reset = '1') then 
       temporal <= '0'; 
       counter <= "000000000"; 
      elsif rising_edge(clk) then 
       if (counter = "110000110") then -- conuter 50MHz/64KHz = 790/2 = 110000110 50% duty cycle 
        temporal <= NOT(temporal); 
        counter <= "000000000"; 
       else 
        counter <= counter + 1; 
       end if; 
      end if; 
     end process; 

     clk_out <= temporal; 
    end Behavioral; 

    -- /////////////// time period of 10ms ////////////////// 
    library IEEE; 
    use IEEE.STD_LOGIC_1164.ALL; 
    use IEEE.NUMERIC_STD.ALL; 
    use ieee.std_logic_arith.all; 
    use ieee.std_logic_unsigned.all; 


    entity counter_10ms is 
     Port (clk_out : in STD_LOGIC := '0'; 
       reset : in STD_LOGIC; 
       counter_out : out STD_LOGIC_vector(9 downto 0) := "0000000000"); 
    end counter_10ms; 


    architecture Behavioral of counter_10ms is 

     signal cnt : std_logic_vector (9 downto 0) := "0000000000"; 
      -- Counter, from 0 to 640 (10msx64Khz=1010000000) 
    begin 

     counter: process (clk_out,reset) 
     begin 
      if (reset = '1') then 
       cnt <= "0000000000"; 
      elsif rising_edge(clk_out) then 
        if (cnt = "1010000000") then 
         cnt <= ("0000000000"); 
       else 
        cnt <= cnt + 1; 
       end if; 
      end if; 
     end process; 
    counter_out <= cnt; 
    end Behavioral; 

    --//////////////////////////////////// decoder///////////////////////////////////////////// 

    library IEEE; 
    use IEEE.STD_LOGIC_1164.ALL; 


    entity decoder_4to10 is 
     Port (clk_out :in std_logic; 
       data_in : in STD_LOGIC_VECTOR (3 downto 0); 
       data_out : out STD_LOGIC_VECTOR (9 downto 0)); 
    end decoder_4to10; 

    architecture Behavioral of decoder_4to10 is 
    -- signal clk_out : std_logic := '0'; 
    begin 

    decoder_process : process (data_in,clk_out) 
    begin 

    case (data_in) is 

       when "0000" => data_out <= "0001000000"; 
       when "0001" => data_out <= "0010000000"; 
       when "0010" => data_out <= "0011000000"; 
       when "0011" => data_out <= "0100000000"; 
       when "0100" => data_out <= "0101000000"; 
       when "0101" => data_out <= "0110000000"; 
       when "0110" => data_out <= "0111000000"; 
       when "0111" => data_out <= "1000000000"; 
       when "1000" => data_out <= "1001000000"; 
       when "1001" => data_out <= "1010000000"; 
       when others => data_out <= "0000000000"; 
    end case; 
    end process decoder_process; 

    end Behavioral; 

    -- ////////////////// comparator //////////////////////// 
    library IEEE; 
    use IEEE.STD_LOGIC_1164.ALL; 


    entity comparator is 
     Port (data_in : in STD_LOGIC_VECTOR (3 downto 0); 
        reset : in STD_LOGIC; 
        clk : in std_logic :='0'; 
        pwm_out : out STD_LOGIC); 

    end comparator; 

    architecture Behavioral of comparator is 

    signal counter_out : std_logic_vector (9 downto 0):= "0000000000"; 
    -- signal data_in : std_logic_vector (3 downto 0); 
    -- signal clk: std_logic :=0; 

    begin 

    my_process : process (clk,reset,data_in) 

    begin 

    if rising_edge(clk) then 

      if reset ='1' then 
     pwm_out <= '0'; 

    elsif counter_out < data_in then 

    pwm_out <= '1'; 

    else 

    pwm_out <= '0'; 
    end if; 
      end if; 
    end process; 

    end Behavioral; 

    -- //////////// top module ////////////////// 

    library IEEE; 
    use IEEE.STD_LOGIC_1164.ALL; 
    use ieee.numeric_std.all; 
    use ieee.std_logic_arith.all; 
    use ieee.std_logic_unsigned.all; 

    entity pwm_10ms is 
     Port (
       clk: in std_logic; 
       reset : in STD_LOGIC; 
       data_in : in STD_LOGIC_VECTOR(3 downto 0); 
       pwm_out : out STD_LOGIC); 
    end pwm_10ms; 

    architecture Behavioral of pwm_10ms is 

    component clk64kHz is -- input freq 50MHz and output is 64MHz 
     Port (
      clk : in STD_LOGIC; 
      reset : in STD_LOGIC; 
      clk_out: out STD_LOGIC); 
    end component; 

    component counter_10ms is 
     Port (clk_out : in STD_LOGIC := '0'; 
       reset : in STD_LOGIC; 
       counter_out : out STD_LOGIC_VECTOR (9 downto 0)); 
    end component; 

    component decoder_4to10 is 
     Port (clk_out :in std_logic; 
     data_in : in STD_LOGIC_VECTOR (3 downto 0); 
       data_out : out STD_LOGIC_VECTOR (9 downto 0)); 
    end component; 

    component comparator is 
     Port (data_in : in STD_LOGIC_VECTOR (3 downto 0); 
        reset : in STD_LOGIC; 
        clk : in std_logic :='0'; 
        pwm_out : out STD_LOGIC); 

    end component; 

    -- signal clk :std_logic := '0'; 
    signal clk_out : std_logic:= '0'; 
    signal counter_out :std_logic_vector (9 downto 0):= "0000000000"; 
    signal data_out : std_logic_vector(9 downto 0) := "0000000000"; 
    -- signal data_in : std_logic_vector (3 downto 0) := "0000"; 

    begin 

    clk64KHz_map : clk64KHz PORT MAP(clk,reset,clk_out); 
    counter_map  : counter_10ms PORT MAP(clk_out,reset,counter_out); 
    decoder_map  : decoder_4to10 PORT MAP(clk_out,data_in,data_out); 
    comparator_map : comparator PORT MAP (data_in,reset,clk_out,pwm_out); 

    end Behavioral; 
    -- /////////////////////////////////////////// end of top module/////////////////////////////////// 

你好plz帮助我得到正确的输出。我需要一个可变的占空比,使用一个频率为50Mhz到64KHz的变频器,使用10毫秒的rferesh周期的解码器。我得到v坏警告和错误

+0

你能更详细地了解一下*错误的警告和错误*吗? – Filburt 2014-11-21 00:27:00

+0

输入从不使用。如果该端口属于顶层块或属于子块并保留该子块的层次结构,则该端口将被保留并保持不连接状态。 警告:Xst:647 - 从不使用输入。如果该端口属于顶层块或属于子块并保留该子块的层次结构,则该端口将被保留并保持不连接状态。 警告:Xst:647 - 从不使用输入。如果该端口属于顶层块或属于子块,则该端口将保留并保持不连接状态 – nsh 2014-11-21 11:23:30

回答

0

在模块比较器中:(data_in)和(counter_out)的大小不相等。在my_process中,他们进行了比较。在体系结构中的(开始)语句之后分配信号(counter_out)也会更好一些;

模块解码器:输入(clk_out)从不使用。你为什么宣布?只是删除它。

在模块pwm_10ms中:只需在端口列表中声明信号(counter_out)和(data_out),并从体系结构中删除相同的信号;