打印

maxplus 仿真的奇怪现象,求解!

[复制链接]
1862|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
goldsunking|  楼主 | 2007-8-21 14:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是个CPLD的新手,用maxplus写了一个计数器小程序。代码如下:
Timertest.vhd
library    ieee;
use ieee.std_logic_1164.all;

ENTITY TimerTest IS
    PORT(
        Reset            :    in    std_logic;
        Clk                :    in    std_logic;
        nWR                :    in    std_logic;
        Data            :    in    std_logic_vector(7 downto 0);
        Tout            :    out std_logic
    );
END TimerTest ;
ARCHITECTURE a OF TimerTest IS
    signal    TSet:    std_logic_vector(7 downto 0);
    signal    EnClk:    std_logic;
    COMPONENT TimerSet
        PORT(
            Reset    :    in    std_logic;
            Data    :    in    std_logic_vector(7 downto 0);
            nWR        :    in    std_logic;
            EnClk    :    out std_logic
        );
    END COMPONENT;
    
    COMPONENT Timer
        port(
            Reset    :    in        std_logic;
            Clk        :    in        std_logic;
            Tout    :    out        std_logic;
            EnClk    :     in        std_logic
        );
    end component;
begin
    myTimer    :Timer
    port map (
        Reset        =>    Reset,
        Clk            =>    Clk,
        Tout        =>    Tout,
        EnClk        =>    EnClk,
    );
    myTimerSet:    TimerSet
    port map(
        Reset    =>    Reset,
        Data    =>    Data,
        nWR        =>    nWR,
        EnClk    =>    EnClk,    
    );
END a;

Timer.vhd

library    ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

ENTITY Timer IS
        port(
            Reset    :    in        std_logic;
            Clk        :    in        std_logic;
            Tout    :    out    std_logic;
            EnClk    :    in        std_logic
                    );
END Timer;

ARCHITECTURE a OF Timer IS
signal TCounter    :std_logic_vector(7 downto 0);
signal    TT        :std_logic;
BEGIN
    Tout<=TT;
    process(Clk)
    begin
        if(Reset='0') then
            TCounter<=X"1f";
            TT<='1';
        elsif rising_edge(Clk) then
            if(EnClk='1') then
                if(TCounter=X"00") then
                    TCounter <=X"1f";
                    TT    <= not TT;
                else
                    TCounter <=    TCounter - 1;
                end if;
            end if;
        end if;
    end process;
END a;


TimerSet.vhd

library    ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

ENTITY TimerSet IS
        PORT(
            Reset    :   in  std_logic;
            Data    :    in    std_logic_vector(7 downto 0);
            nWR        :    in    std_logic;
            EnClk    :    out    std_logic
        );
END TimerSet;

ARCHITECTURE a OF TimerSet IS
BEGIN
    process(Reset,nWR,Data)
    begin
        if(Reset='0')then
            EnClk <='0';
        elsif(nWR='0') then
            EnClk    <='1';
        end if;
    end process;
END a;

仿真的结果Tout是正确的。
可是察看 TCounter 的值变化是不规律的。

请各位高人 给与指点。 谢谢!

相关帖子

沙发
dadong| | 2007-8-25 09:40 | 只看该作者

re

 if(TCounter=X"00") then
                    TCounter <=X"1f";
                    TT    <= not TT;
                else
                    TCounter <=    TCounter - 1;
                end if;
????????、TCounter=X"00"为什么有双引号?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

172

帖子

3

粉丝