推 pupucar:把<=都改成=試看看 140.118.202.77 09/14
推 pupucar:剛剛發現是因為你的CNT少數一次 140.118.202.77 09/14
推 pupucar:第一推說錯了 140.118.202.77 09/14
> -------------------------------------------------------------------------- <
發信人: [email protected] (小書), 看板: Electronics
標 題: Re: VHDL問題
發信站: 清華資訊(楓橋驛站) (Wed Sep 14 08:54:00 2005)
轉信站: ptt!ctu-reader!ctu-peer!news.nctu!netnews.csie.nctu!news.cs.nthu!netne
※ 引述《cuckoo691210 (小書)》之銘言:
> 請問VHDL高手
> 一個程式想了很久,一直寫不出來,所以上來問一下怎樣寫才能辦到...
> ================================================
> 一輸入一輸出
> 輸入( 1 0 0 1 1 1 1 0 0...)
> 兩個兩個看,當出現10 或 01 就轉態
> 所以,波型應該要這樣...
> ___ ___ ___ ___ ___
> IN 1 0 0 1 1 1 1 0 0 0...
> OUT 0 0 1 1 0 0 0 0 1 1 1 1 ....
> ^ ^ ^
> ^ : 轉態
> ================================================
因為我這樣寫...結果是...
100100101
00111000111...
怎麼改都是這樣>"<
architecture Behavioral of abc is
signal reg : std_logic_vector(1 downto 0):="00";
signal sig : std_logic:='0';
signal cnt : std_logic_vector(1 downto 0):="00";
begin
process(CLK)
begin
if rising_edge(CLK) then
reg <= reg(0) & D;
if cnt = 2 then
if reg = "01" or reg="10" then
sig <= not sig;
end if;
reg<="00";
cnt<="00";
else
cnt <= cnt + "01";
end if;
end if;
end process;
D1<=sig;
end Behavioral;
--
※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: 210-58-6-204.cm.dynamic.apol.com.tw
> -------------------------------------------------------------------------- <
作者: luckyBF (耶?) 看板: Electronics
標題: Re: VHDL問題
時間: Wed Sep 14 11:33:37 2005
※ 引述《[email protected] (小書)》之銘言:
: ※ 引述《cuckoo691210 (小書)》之銘言:
: > 請問VHDL高手
: > 一個程式想了很久,一直寫不出來,所以上來問一下怎樣寫才能辦到...
: > ================================================
: > 一輸入一輸出
: > 輸入( 1 0 0 1 1 1 1 0 0...)
: > 兩個兩個看,當出現10 或 01 就轉態
: > 所以,波型應該要這樣...
: > ___ ___ ___ ___ ___
: > IN 1 0 0 1 1 1 1 0 0 0...
: > OUT 0 0 1 1 0 0 0 0 1 1 1 1 ....
: > ^ ^ ^
: > ^ : 轉態
: > ================================================
我很久沒寫了vhdl了~~
不過我覺得你換個思考模式會不會比較好寫?!
其實不過是01~~或者是10時~~~
其實都是輸入的那端有變化時~~才需要有轉態~~
所以~~應該可以輸出的結果~~
可以算是個「雙穩態」的形為模式吧~~
所以~~要不要試試看寫成~~讓他在輸入端的「正緣」及「負緣」時動作~~
這樣說不定就行了~~
不過我很久沒碰了啦~~
不清楚能不能這樣寫~~
只是我覺得這樣的想法就簡單多了才是XD
: 因為我這樣寫...結果是...
: 100100101
: 00111000111...
: 怎麼改都是這樣>"<
: architecture Behavioral of abc is
: signal reg : std_logic_vector(1 downto 0):="00";
: signal sig : std_logic:='0';
: signal cnt : std_logic_vector(1 downto 0):="00";
: begin
: process(CLK)
: begin
: if rising_edge(CLK) then
: reg <= reg(0) & D;
: if cnt = 2 then
: if reg = "01" or reg="10" then
: sig <= not sig;
: end if;
: reg<="00";
: cnt<="00";
: else
: cnt <= cnt + "01";
: end if;
: end if;
: end process;
: D1<=sig;
: end Behavioral;
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.118.202.74
> -------------------------------------------------------------------------- <
作者: pupucar (knock!knock!) 站內: Electronics
標題: Re: VHDL問題
時間: Wed Sep 14 12:03:12 2005
※ 引述《[email protected] (小書)》之銘言:
: ※ 引述《cuckoo691210 (小書)》之銘言:
: > 請問VHDL高手
: > 一個程式想了很久,一直寫不出來,所以上來問一下怎樣寫才能辦到...
: > ================================================
: > 一輸入一輸出
: > 輸入( 1 0 0 1 1 1 1 0 0...)
: > 兩個兩個看,當出現10 或 01 就轉態
: > 所以,波型應該要這樣...
: > ___ ___ ___ ___ ___
: > IN 1 0 0 1 1 1 1 0 0 0...
: > OUT 0 0 1 1 0 0 0 0 1 1 1 1 ....
: > ^ ^ ^
: > ^ : 轉態
: > ================================================
: 因為我這樣寫...結果是...
: 100100101
: 00111000111...
: 怎麼改都是這樣>"<
: architecture Behavioral of abc is
: signal reg : std_logic_vector(1 downto 0):="00";
: signal sig : std_logic:='0';
: signal cnt : std_logic_vector(1 downto 0):="00";
: begin
: process(CLK)
: begin
: if rising_edge(CLK) then
: reg <= reg(0) & D;
把大括號裡東西的移到這裡 因為你CNT=2的時候 那一行會沒作到
以致於有一次輸入而卻CNT沒加到 然後ELSE D掉
: if cnt = 2 then
: if reg = "01" or reg="10" then
: sig <= not sig;
: end if;
: reg<="00";
: cnt<="00";
: else
【cnt <= cnt + "01";】
: end if;
: end if;
: end process;
: D1<=sig;
: end Behavioral;
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.118.202.77
※ 編輯: pupucar 來自: 140.118.202.77 (09/14 12:04)