【问题标题】:50 MHz to 64KHz frequency50 MHz 至 64KHz 频率
【发布时间】:2014-11-21 00:24:01
【问题描述】:

我收到类似警告

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

你好请帮助我获得正确的输出。我需要一个可变占空比,使用 rferesh 周期为 10 ms 的解码器,使用从 50Mhz 到 64KHz 的频率转换器。我收到了错误的警告和错误

【问题讨论】:

  • 您能否更具体地了解一下错误警告和错误
  • 输入 从未使用过。如果该端口属于顶级块或属于子块并且该子块的层次结构被保留,则该端口将被保留并保持未连接状态。警告:Xst:647 - 输入 从未使用过。如果该端口属于顶级块或属于子块并且该子块的层次结构被保留,则该端口将被保留并保持未连接状态。警告:Xst:647 - 输入 从未使用过。如果该端口属于顶级块或属于子块,则该端口将被保留并保持未连接状态

标签: vhdl


【解决方案1】:

模块内比较器:(data_in) 和 (counter_out) 的大小不相等。在 my_process 中对它们进行了比较。此外,最好在架构中的 (begin) 语句之后分配信号 (counter_out);

在模块解码器中:输入 (clk_out) 从未使用过。为什么要申报???删除它。

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

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 2018-07-04
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2021-08-28
    • 2020-06-17
    相关资源
    最近更新 更多