VHDL高手近來幫幫忙吧@@
LIBRARY ieee;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ss1 is
Port(
CLK: in STD_LOGIC;
RESET: in STD_LOGIC;
CE,LOAD,DIR: in STD_LOGIC;
DIN: in STD_LOGIC_VECTOR(3 downto 0);
count: inout STD_LOGIC_VECTOR(3 downto 0)
);
end ss1;
architecture Behavioral of ss1 is
begin
process (CLK,RESET)
begin
if RESET='1' then
count<="0000";
elsif CLK='1' and CLK'event then
if LOAD='1' then
count<= DIN;
else
if CE='1' then
if DIR='1' then
count<= count+1;
else
count<=count-1;
end if;
end if;
end if;
end if;
end process;
end Behavioral;
他設定count: inout STD_LOGIC_VECTOR(3 downto 0)
的INOUT是甚麼意思呢~我在模擬波形圖的時候~會有兩組COUNT出現ㄟ@@
我改成OUT程式又會出錯~能麻煩高手幫忙解答嗎@@?
那要如何改成OUT就好呢~我改成OUT程式會出現錯誤@@
麻煩一下哩>"<
2 個解答
- ?Lv 61 0 年前最佳解答
因為COUNT這一根信號,出現過在 <= 符號的右邊,而 COUNT 也在 Entity 中出現過,所以編譯器會以為這是具有 IN 的屬性;而且 COUNT 出現過在 <= 符號的左邊,而 COUNT 也在 Entity 中出現過,所以編譯器會以為這是具有 OUT 的屬性;所以你寫 INOUT 的屬性編譯器可以譯器成功。但是這結果,會看起來比較奇怪,COUNT 我們會是期望它是 OUT 啊!
就 counter 的工作特性而言,它本來就是把結果抓回來加一或減一,再放回到 Register內,週而復始。又, counter 內部信號到輸出腳之間,其實還有一層 Buffer,只是 VHDL 合成器或是 Place & Route 軟體,幫你自動做掉了!
所以我建議的作法是,如果是一個信號同時出現在 <= 符號的左右邊而且也出現在 Entity 中,應該先取一個內部的信號名稱,全部的內部運算,都用此內部的信號名稱,一直到要輸出時,再把此內部信號倒引到 entity 的 port 針腳上。
以下是依上述的說法改寫過的,新增了一個信號叫 CNTX,那我門的加減載入就在此 CNTX信號上完成,在倒數第二行的地方再利用 COUNT<=CNTX; 把結果倒引到輸出 Port 去。
就這樣子了,請參考!
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity ss1 is
Port(
CLK : in STD_LOGIC;
RESET : in STD_LOGIC;
CE : in STD_LOGIC;
LOAD : in STD_LOGIC;
DIR : in STD_LOGIC;
DIN : in STD_LOGIC_VECTOR(3 downto 0);
COUNT : out STD_LOGIC_VECTOR(3 downto 0)
);
end entity ss1;
architecture ss1_arch of ss1 is
signal CNTX : STD_LOGIC_VECTOR(3 downto 0);
begin
p_cntx : process (CLK,RESET)
begin
if (RESET='1') then
CNTX<=(others=>'0');
elsif rising_edge(CLK) then
if (LOAD='1') then
CNTX <= DIN;
else
if (CE='1') then
if (DIR='1') then
CNTX<= CNTX + '1';
else
CNTX <=CNTX - '1';
end if;
end if;
end if;
end if;
end process p_cntx;
COUNT <= CNTX;
end architecture ss1_arch;
2007-05-19 22:42:57 補充:
註:如果把知識+的表列直接拷貝到 Text Editor 內,空白、加號等必需先整理過一次,否則可能會有錯誤!
- 1 0 年前
你把它設為 count: inout STD_LOGIC_VECTOR(3 downto 0)
所以模擬撥型圖會出現一個 count 與 count_result 的
則各代表ㄉ意義為 count (為要輸入的波形) count_result (為經程式跑出來的輸出波形)
參考資料: 自己