私はこのVHDLコードを2日間デバッグしようとしていましたが、どこにエラーがあるのか分かりません。信号と定数の警告のための1ビットラッチが見つかりました
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity SSDDriver is
Port (cp : in std_logic;
iin : in std_logic;
an : buffer std_logic_vector (3 downto 0);
--7=a, 6=b ...
segments: out std_logic_vector (7 downto 0));
end SSDDriver;
architecture Behavioral of SSDDriver is
signal cpo : std_logic;
--broj BCD znamenki
constant BCD_NUMBERS : integer := 4;
--broj bitova ulaznog broja
constant BITS : integer := 14;
--broj kodiran BCD-om
signal BCDNumber : std_logic_vector (BCD_NUMBERS*4-1 downto 0) := (others => '0');
signal BCDForDecoder: std_logic_vector (3 downto 0);
signal number: integer range 0 to 9999;
begin
decoder: entity BCDToSSD port map (bcd => BCDForDecoder, segm => segments (7 downto 1));
counter: entity djelitelj generic map (COUNTTO => 25000) port map (cpIn => cp, CpOut=> cpo);
--tocka je uvijek ugasena
segments(0) <= '1';
process (iin)
begin
if iin='1' then
number<=3245;
else
number<=1111;
end if;
end process;
SwitchDisplay: process (cpo)
begin
if rising_edge(cpo) then
if an="0111" then
an<="1011";
BCDForDecoder<=BCDNumber(11 downto 8);
elsif an="1011" then
an<="1101";
BCDForDecoder<=BCDNumber(7 downto 4);
elsif an="1101" then
an<="1110";
BCDForDecoder<=BCDNumber(3 downto 0);
else
an<="0111";
BCDForDecoder<=BCDNumber(15 downto 12);
end if;
end if;
end process SwitchDisplay;
DoubleDabble: process (number)
variable num : std_logic_vector (BITS-1 downto 0);
variable bcd : std_logic_vector (BCD_NUMBERS*4-1 downto 0) := (others => '0');
variable old_number: integer range 0 to 9999;
begin
if number/= old_number then
num := conv_std_logic_vector(number, BITS);
for i in 0 to BITS-1 loop
bcd(BCD_NUMBERS*4-1 downto 1) := bcd(BCD_NUMBERS*4-2 downto 0);
bcd(0) := num(BITS-1);
num(BITS-1 downto 1) := num(BITS-2 downto 0);
num(0) :='0';
if(i < BITS-1 and bcd(3 downto 0) > "0100") then
bcd(3 downto 0) := bcd(3 downto 0) + "0011";
end if;
if(i < BITS-1 and bcd(7 downto 4) > "0100") then
bcd(7 downto 4) := bcd(7 downto 4) + "0011";
end if;
if(i < BITS-1 and bcd(11 downto 8) > "0100") then
bcd(11 downto 8) := bcd(11 downto 8) + "0011";
end if;
if(i < BITS-1 and bcd(15 downto 12) > "0100") then
bcd(15 downto 12) := bcd(15 downto 12) + "0011";
end if;
end loop;
BCDNumber <= bcd;
else
end if;
old_number := number;
end process DoubleDabble;
end Behavioral;
そして、ここでは、生成された警告:
警告:XSTで:ここにコードがある2734 - プロパティ "USE_DSP48" この 技術には適用されません。警告:Xst:1780 - 信号>が使用されていないか、 が割り当てられています。警告:Xst:737 - 信号の1ビットラッチが見つかりました。 警告:Xst:737 - 信号用の1ビットラッチが見つかりました。 警告:Xst:737 - 信号用の1ビットラッチが見つかりました。 警告:Xst:737 - 信号用の1ビットラッチが見つかりました。 警告:Xst:737 - 信号用の1ビットラッチが見つかりました。 警告:Xst:737 - 信号用の1ビットラッチが見つかりました。 警告:Xst:737 - 信号用の1ビットラッチが見つかりました。 警告:Xst:737 - 信号用の1ビットラッチが見つかりました。 警告:Xst:737 - 信号用の1ビットラッチが見つかりました。 警告:Xst:737 - 信号用の1ビットラッチが見つかりました。 警告:Xst:737 - 信号用の16ビットラッチが見つかりました。 警告:Xst:737 - 信号用の1ビットラッチが見つかりました。 警告:Xst:737 - 信号用の1ビットラッチが見つかりました。 警告:Xst:737 - 信号用の1ビットラッチが見つかりました。 警告:Xst:737 - 信号用の1ビットラッチが見つかりました。 警告:Xst:737 - 信号用の1ビットラッチが見つかりました。 警告:Xst:2734 - プロパティ "use_dsp48"はこの テクノロジには適用されません。警告:Xst:1426 - FF /ラッチbcd_0の値init は、ブロックSSDDriverの定数クリーニングを妨げます。警告:Xst:1293 - FF /ラッチのブロック内の定数値は0です。警告:Xst:1293 - FF /ラッチのブロック内に一定値の があります。警告:Xst:1293 - ブロック内のFF /ラッチの値が0である です。警告:Xst:1293 - FF /ラッチ のブロック内の定数値は0です。 警告:Xst:1293 - ブロックでFF /ラッチの定数値が0になっています。警告:Xst:1293 - ブロック内のFF /ラッチの定数は です。警告:Xst:1293 - FF /ラッチ のブロック内の定数値は0です。警告:Xst:1293 - FF /ラッチのブロック内の定数値は0です。 警告:Xst:1293 - ブロックでFF /ラッチの定数値が0になっています。警告:Xst:1293 - ブロック内のFF /ラッチの定数は です。警告:Xst:1293 - FF /ラッチ のブロック内の定数値は0です。警告:Xst:1293 - FF /ラッチのブロック内の定数値は0です。 警告:Xst:1293 - ブロックでFF /ラッチの定数値が0になっています。警告:Xst:1293 - ブロック内のFF /ラッチの値が0である です。警告:Xst:1293 - FF /ラッチ のブロック内の定数値は0です。 警告:Xst:1293 - ブロックでFF /ラッチの定数値が0になっています。警告:XSTで:1710 - FF /ラッチ
のように...
は、これらの警告の結果、唯一の0000は4 7セグメントディスプレイに表示され、私はそのモジュールを実装したときに、私が取得します。
このVHDLコードは整数変数(0〜9999の範囲)を取り、4個の7セグメント表示を使用してその番号を表示する必要があります...
私は一番外側のif文を削除しましたが、今実装することができますし、ちょっと動作します:)最後の数字は正しく動作しますが(1つは数字を表す)、他のものは正しく動作します3は急速に変化しています。また、私はbcdシグナルがコンビナトリアルループであることを私に伝える「コンビナトリアルループを形成する次のシグナル」という警告を得る。なぜそれがどのようなアイデアと私はそれを解決することができますか?ありがとう:) – xx77aBs
おそらく、あなたは決して知られている値に設定していないので、forループを開始します。シンセサイザーは、前のサイクルの結果を持ち越したいと考えています。 –
OMG!私はこれが問題だとは信じられません:)あなたが私に言ったように、意味があります:)私はこれを "bcd:=(others => '0'); forループの前にそれが動作します。どうもありがとうございました !!!! – xx77aBs