【发布时间】:2013-12-05 22:29:32
【问题描述】:
我用 VHDL 编写了这个程序,所有语法都很好,我尝试仔细检查所有端口映射,但我收到一些警告,导致程序无法工作,即使它可以生成位文件。 . 有人可以帮忙吗??
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity topMain is
port( clk : in std_logic;
alarm : in std_logic_vector (1 downto 0);
d_open : in std_logic_vector (1 downto 0);
d_closed : in std_logic_vector(1 downto 0);
d_out : out std_logic_vector (1 downto 0));
end topMain;
architecture Behavioral of topMain is
type state_type is (S0,S1,S3);
signal NS, Current_State : state_type;
begin
process (clk, alarm)
begin
if alarm ="11" then
Current_State <= S3; --
elsif rising_edge (clk) then
Current_State <= NS; -- state change
end if;
end process;
--------------------------------
process(Current_State,d_open, d_closed, clk)
begin
case Current_State is
----
when S3 => d_out <= "11";
if (d_open = "10") then
NS <= S3;
elsif (d_closed = "01") then
NS <= S3;
elsif (d_closed = "00") then
NS <= S3;
end if;
----
when S0 => d_out <= "10"; -- open door
if ( d_open = "10" ) then
NS <= S0;
elsif (d_closed= "01") then
NS <= S1;
elsif (d_closed = "10") then
NS <= S0;
else
NS <= S0;
end if;
when S1 => d_out <= "01"; -- open door
if ( d_closed = "01" ) then
NS <= S1;
elsif (d_open <= "10") then
NS <= S0;
elsif (d_open <= "01") then
NS <= S1;
else
NS <= S1;
end if;
end case;
end process;
end Behavioral;
如果有人可以看一下,这就是完整的项目。 它是一个简单的程序,包含一个具有 3 个变化的有限状态机,用于模拟防盗警报。 警报关闭时,您可以打开和关闭门,但如果它打开,您将无能为力。至少这就是我想要做的,虽然我是新手。给您带来的不便请见谅。
我现在收到的警告:
WARNING:Xst:819 - “C:/Xilinx/OP/BAlarm/topMain.vhd”第 36 行:过程敏感度列表中缺少一个或多个信号。为了启用 FPGA/CPLD 硬件的合成,XST 将假定所有必要的信号都存在于灵敏度列表中。请注意,综合结果可能与初始设计规范不同。缺失的信号是: 警告:Xst:737 - 找到信号的 3 位锁存器。不完整的 case 或 if 语句可能会生成锁存器。我们不建议在 FPGA/CPLD 设计中使用锁存器,因为它们可能会导致时序问题。 警告:Xst:647 - 从不使用输入。如果该端口属于顶级块或属于子块并且该子块的层次结构被保留,则该端口将被保留并保持未连接。 警告:PhysDesignRules:372 - 门控时钟。时钟网顶/NS_not0001 来源 通过组合引脚。这不是好的设计实践。使用 CE 引脚 控制数据加载到触发器中。 WARNING:Route:455 - CLK Net:top/NS_not0001 可能有过度倾斜,因为
【问题讨论】:
-
您收到的警告到底是什么?当你说它“不起作用”时,你到底是什么意思?您是否尝试过运行模拟?如果您希望我们帮助您,您必须帮助我们。
-
我已经添加了到目前为止我在问题中得到的所有警告..
标签: error-handling vhdl