私は vhdl (ISE プロジェクト ナビゲーターを使用) が初めてで、このプログラム (sequence.vhd) を合成するのに少し問題があります。
LIBRARY ieee ;
USE ieee.std_logic_1164.all;
PACKAGE mypack IS
VARIABLE counter: STD_LOGIC := '0' ;
VARIABLE simultaneous : STD_LOGIC := '0' ;
END PACKAGE mypack;
LIBRARY ieee ;
USE ieee.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
--library work;
USE WORK.mypack.ALL;
ENTITY secuencia IS
PORT(
polh : IN STD_LOGIC; --uno
polv : IN STD_LOGIC; --cero
seq : OUT std_logic_vector(8 downto 0):= (others => 'Z')
);
END secuencia;
ARCHITECTURE registro OF secuencia IS
SIGNAL stack : std_logic_vector(1000 downto 0);
BEGIN
PROCESS(polh, polv)
BEGIN
IF (polh'event) and (polh='1') and (polv='0')THEN
stack(counter) <= '1';
counter := counter +1;
ELSE IF (polv'event) and (polv='1') and (polh='0')THEN
stack(counter) <= '0';
counter := counter +1;
ELSE IF (polh'event) and (polh='1') and (polv'event) and
(polv='1') THEN
simultaneous := simultaneous+1;
END IF;
END PROCESS;
END registro;
これらは最初の 2 つのエラーです。
行 5. ここでは SHARED 変数のみを宣言できます。
行 6. ここでは SHARED 変数のみを宣言できます。
したがって、問題は宣言された変数にあります...目的は、アーキテクチャでそれらを使用することです。初心者の問題だと確信していますが、解決策がわかりません。ありがとう!
PD: コードを正しくフォーマットできませんでした。申し訳ありません
アップデート:
@Martin Thompsonを助けてくれてありがとう。私はあなたが提案したことをしましたが、今は別のタイプまたは問題を抱えています. 調べてみましたが、原因はいろいろあるようです。これがコードです
ENTITY secuencia IS
PORT(
polh : IN STD_LOGIC; --uno
polv : IN STD_LOGIC; --cero
Pedido : IN STD_LOGIC;
DatoListo : OUT STD_LOGIC;
seq : OUT std_logic_vector(1000 downto 0):= (others => 'Z')
);
END secuencia;
ARCHITECTURE registro OF secuencia IS
SIGNAL stack : std_logic_vector(1000 downto 0);
BEGIN
PROCESS(polh, polv, Pedido)
variable counteria : natural;
variable Listo : integer;
variable simultaneo : integer;
BEGIN
IF (counteria < 1000) THEN
IF (polh'event AND polh='1' AND polv='0') THEN
--IF (polh='1' AND polv='0') THEN
stack(counteria) <= '1';
counteria := counteria +1;
ELSIF (polv'event AND polv='1' AND polh='0') THEN
--ELSIF (polv='1' AND polh='0') THEN
stack(counteria) <= '0';
counteria := counteria +1;
ELSIF (polh'event AND polh='1' AND polv'event AND polv='1') THEN
simultaneo := simultaneo+1;
END IF;
ELSIF (counteria = 1000)THEN
DatoListo <='1';
IF (Pedido='1')THEN
Seq <= stack;
counteria := 0;
DatoListo <='0';
END IF;
END IF;
END PROCESS;
END registro;
そして、それはこのエラーを与えます
25行目:シグナルスタック>合成できません、同期記述が悪いです。同期要素 (レジスタ、メモリなど) の記述に使用している記述スタイルは、現在のソフトウェア リリースではサポートされていません。
更新 2:
私はいくつかの変更を加え、プログラムの一部にコメントを付けました。それは合成します:
PROCESS(polh, polv, Pedido)
variable counteria : natural := 0;
variable Listo : integer;
variable simultaneo : integer;
BEGIN
IF (counteria < 1000) THEN
IF rising_edge(polh) THEN
IF (polv='0') THEN
stack(counteria) <= '1';
counteria := counteria + 1;
END IF;
-- ELSIF rising_edge(polv) THEN
-- IF (polh='0') THEN
-- stack(counteria) <= '0';
-- counteria := counteria +1;
-- END IF;
-- END IF;
ELSIF (counteria = 1000)THEN
DatoListo <='1';
IF (Pedido='1')THEN
Seq <= stack;
counteria := 0;
DatoListo <='0';
ENDIF;
END IF;
END PROCESS;
END registro;
この合成。ただし、その部分のコメントを外すとELSIF rising_edge(polv) THEN
、同じ問題が発生します。Signal stack<counteria<9:0>> cannot be synthesized...