| 
 
| 我是个CPLD的新手,用maxplus写了一个计数器小程序。代码如下:<br />Timertest.vhd<br />library    ieee;<br />use ieee.std_logic_1164.all;<br /><br />ENTITY TimerTest IS<br />    PORT(<br />        Reset            :    in    std_logic;<br />        Clk                :    in    std_logic;<br />        nWR                :    in    std_logic;<br />        Data            :    in    std_logic_vector(7 downto 0);<br />        Tout            :    out std_logic<br />    );<br />END TimerTest ;<br />ARCHITECTURE a OF TimerTest IS<br />    signal    TSet:    std_logic_vector(7 downto 0);<br />    signal    EnClk:    std_logic;<br />    COMPONENT TimerSet<br />        PORT(<br />            Reset    :    in    std_logic;<br />            Data    :    in    std_logic_vector(7 downto 0);<br />            nWR        :    in    std_logic;<br />            EnClk    :    out std_logic<br />        );<br />    END COMPONENT;<br />    <br />    COMPONENT Timer<br />        port(<br />            Reset    :    in        std_logic;<br />            Clk        :    in        std_logic;<br />            Tout    :    out        std_logic;<br />            EnClk    :     in        std_logic<br />        );<br />    end component;<br />begin<br />    myTimer    :Timer<br />    port map (<br />        Reset        =>    Reset,<br />        Clk            =>    Clk,<br />        Tout        =>    Tout,<br />        EnClk        =>    EnClk,<br />    );<br />    myTimerSet:    TimerSet<br />    port map(<br />        Reset    =>    Reset,<br />        Data    =>    Data,<br />        nWR        =>    nWR,<br />        EnClk    =>    EnClk,    <br />    );<br />END a;<br /><br />Timer.vhd<br /><br />library    ieee;<br />use ieee.std_logic_1164.all;<br />use ieee.std_logic_unsigned.all;<br /><br />ENTITY Timer IS<br />        port(<br />            Reset    :    in        std_logic;<br />            Clk        :    in        std_logic;<br />            Tout    :    out    std_logic;<br />            EnClk    :    in        std_logic<br />                    );<br />END Timer;<br /><br />ARCHITECTURE a OF Timer IS<br />signal TCounter    :std_logic_vector(7 downto 0);<br />signal    TT        :std_logic;<br />BEGIN<br />    Tout<=TT;<br />    process(Clk)<br />    begin<br />        if(Reset='0') then<br />            TCounter<=X"1f";<br />            TT<='1';<br />        elsif rising_edge(Clk) then<br />            if(EnClk='1') then<br />                if(TCounter=X"00") then<br />                    TCounter <=X"1f";<br />                    TT    <= not TT;<br />                else<br />                    TCounter <=    TCounter - 1;<br />                end if;<br />            end if;<br />        end if;<br />    end process;<br />END a;<br /><br /><br />TimerSet.vhd<br /><br />library    ieee;<br />use ieee.std_logic_1164.all;<br />use ieee.std_logic_unsigned.all;<br /><br />ENTITY TimerSet IS<br />        PORT(<br />            Reset    :   in  std_logic;<br />            Data    :    in    std_logic_vector(7 downto 0);<br />            nWR        :    in    std_logic;<br />            EnClk    :    out    std_logic<br />        );<br />END TimerSet;<br /><br />ARCHITECTURE a OF TimerSet IS<br />BEGIN<br />    process(Reset,nWR,Data)<br />    begin<br />        if(Reset='0')then<br />            EnClk <='0';<br />        elsif(nWR='0') then<br />            EnClk    <='1';<br />        end if;<br />    end process;<br />END a;<br /><br />仿真的结果Tout是正确的。<br />可是察看 TCounter 的值变化是不规律的。<br /><br />请各位高人 给与指点。 谢谢!  | 
 |