gpt4 book ai didi

error-handling - VHDL错误,语法还可以

转载 作者:行者123 更新时间:2023-12-03 08:14:06 24 4
gpt4 key购买 nike

我已经用VHDL编写了该程序,所有语法都很好,我试图仔细检查所有端口映射,但是我收到了som警告,导致该程序无法正常工作,甚至很难生成位文件。谁能帮忙?我疯了!!!

    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个变化的有限状态机,可模拟防盗警报。
警报关闭时,您可以打开门然后将其关闭,但是如果警报打开,您将无能为力。至少那是我想做的,尽管我是新手。如果给您带来不便,请原谅我。

http://www.abmy.dk/BAlarm.zip

我现在得到的警告是:

警告: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针
控制将数据加载到触发器中。
警告:路由:455-CLK Net:top/NS_not0001可能存在过多的偏斜,因为

最佳答案

没有在组合过程的所有分支中分配NS信号process(Current_State, d_open, d_closed, clk),将推断出锁存器;另请参见https://stackoverflow.com/a/20394822/2352082https://stackoverflow.com/a/20411227/2352082

编码:

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;

没有 else,因此,如果以上两个条件都没有
为TRUE,则未分配 NS,这将导致由
合成。

您可以通过添加带有正确分配的 elseNS来解决此问题,例如:
           ...
else
ns <= S0; -- TBD[S0 is only example; use correct value]
end if;

我在过程敏感度列表中没有看到任何信号缺失,但是 clk
由于此过程实现了组合设计,因此在最后一篇中已包含但并非必需。

关于error-handling - VHDL错误,语法还可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20412148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com