發問時間: 電腦與網際網路其他:電腦 · 1 0 年前

請問ahdl或vhdl程式高手

請問我想做小綠人程式,現在我有一個紅綠燈控制電路,該如何再加入以兩顆LED燈閃爍代替小綠人,倒數時LED以1秒閃爍,最後倒數十秒時以0.5秒閃爍。

我是用quartusII做的,最好能教我怎麼寫或幫我寫,程式做出來後電路現該怎接呢?

請描述越詳細越好~

1 個解答

評分
  • ?
    Lv 6
    1 0 年前
    最佳解答

    你好,

    因為大大已經做好一組的紅綠燈了,所以小綠人的部份可以由紅綠燈的燈號來取得。就如同紅綠燈,小綠人也是兩組對稱的,所以只要設計一組,然後呼叫兩次就好了!

    一組的小綠人,輸入信號計有:CLK : 1hZ的時鐘信號、R : 對方的紅燈指示、RT : 小綠人的秒數、GM : 小綠人燈號輸出。

    當對邊的紅燈亮起時,這時小綠人的計數器啟動倒數,倒數的秒數由計數器(gmcnt)完成。當倒數時,以計數器的LSB決定是否燈亮,如此是1HZ的閃爍,到了最後10秒鐘,以CLK控制燈亮,如此是0.5HZ的閃爍。

    一組小綠人的完整程式如下,請參考!

    library ieee;

    use ieee.std_logic_1164.all;

    use ieee.std_logic_arith.all;

    use ieee.std_logic_unsigned.all;

    entity greenman is Port (

    CLK : in std_logic;--clock 1hz

    R : in std_logic;--opposite Red

    RT : in std_logic_vector(7 downto 0);--period

    GM : out std_logic);--green man

    end greenman;

    architecture arch of greenman is

    signal gmcnt : std_logic_vector(7 downto 0);--Time counter

    begin

    process(CLK)

    begin

    if CLK'event and CLK='1' then

    if (R='0') then

    gmcnt<=RT;

    else

    gmcnt<=gmcnt-'1';

    end if;

    end if;

    end process;

    process(gmcnt,R,CLK)

    begin

    if ((R='1' and gmcnt(0)='1' and gmcnt>="00001010") or

    (R='1' and CLK='1' and gmcnt<"00001010")) then

    GM<='1';

    else

    GM<='0';

    end if;

    end process;

    end arch;

還有問題?馬上發問,尋求解答。