私はXULA2を持っており、いくつかのチュートリアルの後にLEDフラッシュをオン/オフすることに成功しました。今私は前進し、ステートマシンを実装しようとしています(基本的には同じことを行う - 今のところ)。いくつかの警告を受けて、最終的にビルドが出力ファイルを生成しません。VHDL - 有限状態マシンXULA
WARNING:Xst:1710 - FF/Latch <wait_time_msec_7> (without init value) has a constant value of 0 in block <BigDisplayMain>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1710 - FF/Latch <wait_time_msec_8> (without init value) has a constant value of 0 in block <BigDisplayMain>. This FF/Latch will be trimmed during the optimization process...
WARNING:Xst:1710 - FF/Latch <wait_time_msec_15> (without init value) has a constant value of 0 in block <BigDisplayMain>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1293 - FF/Latch <fsm_display_1> has a constant value of 0 in block <BigDisplayMain>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1293 - FF/Latch <fsm_display_0> has a constant value of 0 in block <BigDisplayMain>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1293 - FF/Latch <cntr_time_delay_19> has a constant value of 0 in block <BigDisplayMain>. This FF/Latch will be trimmed during the optimization process....
WARNING:Xst:1293 - FF/Latch <cntr_time_delay_0> has a constant value of 0 in block <BigDisplayMain>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1710 - FF/Latch <wait_time_msec_9> (without init value) has a constant value of 0 in block <BigDisplayMain>. This FF/Latch will be trimmed during the optimization process....
WARNING:Xst:1710 - FF/Latch <wait_time_msec_0> (without init value) has a constant value of 0 in block <BigDisplayMain>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <blinker_o> (without init value) has a constant value of 0 in block <BigDisplayMain>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1898 - Due to constant pushing, FF/Latch <return_state_0> is unconnected in block <BigDisplayMain>.
:
エラーフォーム(いくつかの同様の警告が明確にするために除去される)です。
私は未使用の値がそれらが私を気にしないように、いくつかは、フリップフロップをトリミング発生する可能性がある理由ラフ理解している...多くの(私はこれについて疑問を持っていますが、私の主な問題が解決され、後にした後)
私のコードを簡単に説明すると、それは4状態の状態マシン - INIT, START0, START1 and DELAY
です。私がしたいのは、デバイスがINIT
で始まり、START0
からDELAY
からSTART1
からDELAY
までのループに進み、START0
などに戻り、途中でLEDに信号を切り替えます(blinker_o
経由)。確かに、これはLEDを点滅させるのに必要以上に複雑な方法ですが、DELAY
状態を中心に、より洗練された作業を行う方法を学ぶにつれて学問的な練習です。
とにかく、コンパイラはblinker_o
が '0'(WARNING:Xst:1895
)にハードワイヤードされていると結論付けました。もちろん、これは私が好きなものではありません!
私はあなたの時間と支援が評価されて
(信号を「リセット」に残すこと以外の)問題を説明するために同じくらい私はできる限り自分のコードをストリップダウンしました!この設計をシミュレートしているようにあなたが表示されません
----------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.NUMERIC_STD.ALL;
library UNISIM;
use UNISIM.VComponents.all;
entity BigDisplayMain is
port ( clk_i : in std_logic;
blinker_o : out std_logic
);
end BigDisplayMain;
architecture Behavioral of BigDisplayMain is
signal clk_1MHZ : std_logic;
signal reset : std_logic := '0';
signal wait_time_msec : natural range 0 to 1_000_000;
signal cntr_time_delay : natural range 0 to 1_000_000;
type fsmA is (
FSM_INIT, FSM_STATE_DISPLAY_START0, FSM_STATE_DISPLAY_START1, FSM_STATE_DELAY
);
signal fsm_display : fsmA;
signal return_state : fsmA;
begin
-- DCM_CLKGEN: Frequency Aligned Digital Clock Manager
-- Spartan-6
-- Xilinx HDL Language Template, version 14.7
reset <= '0';
DCM_CLKGEN_inst : DCM_SP
generic map (
CLKFX_DIVIDE => 24, -- Divide value - D - (1-256)
CLKFX_MULTIPLY => 2 -- Multiply value - M - (2-256)
)
port map (
CLKFX => clk_1MHZ, -- 1-bit output: Generated clock output
CLKIN => clk_i, -- 1-bit input: Input clock
RST => '0' -- 1-bit input: Reset input pin
);
-- End of DCM_CLKGEN_inst instantiation
process(clk_1MHz, reset) is
begin
if reset = '1' then
cntr_time_delay <= 0;
fsm_display <= FSM_INIT;
wait_time_msec <= 0;
blinker_o <= '0';
elsif rising_edge(clk_1MHZ) then
case fsm_display is
when FSM_INIT =>
cntr_time_delay <= 0;
wait_time_msec <= 0;
return_state <= FSM_STATE_DISPLAY_START0;
when FSM_STATE_DISPLAY_INIT_START0 =>
blinker_o <= '0';
wait_time_msec <= 1_000_000;
return_state <= FSM_STATE_DISPLAY_START1;
fsm_display <= FSM_STATE_DELAY;
when FSM_STATE_DISPLAY_INIT_START1 =>
blinker_o <= '1';
wait_time_msec <= 999_999;
return_state <= FSM_STATE_DISPLAY_START0;
fsm_display <= FSM_STATE_DELAY;
when FSM_STATE_DELAY =>
if cntr_time_delay >= wait_time_msec then
fsm_display <= return_state;
cntr_time_delay <= 0;
else
cntr_time_delay <= cntr_time_delay + 1;
fsm_display <= FSM_STATE_DELAY;
end if;
when others =>
null;
end case;
end if;
end process;
end Behavioral;
あなたはエラーを投稿していません。警告は(通常)無視することができます。この場合、生成されるロジックの量を削減するすべての最適化です。デザインがあなたがシミュレーションで望むものをやったとすれば、それは正常で何か間違ったことを示すものではありません。 –