VHDL / vivado语法错误

时间:2018-11-07 06:41:25

标签: vhdl vivado

  

编写用于并行输入,并行输出右移的VHDL模块   图的寄存器(附加),但添加一个低电平有效异步   清除信号ClrN。不要在代码中使用单独的触发器。   模拟模块以获得类似于图2的时序图   (附加)。

     

请使用下面列出的参数生成波形。

     

-在3.5个时钟周期内将ClrN设置为1,在下一个半时钟周期内将其设置为0,在其余的测试中将其设置为1。

     

-在5个时钟周期内将L设置为1,在接下来的3个时钟周期内将其设置为0,在其余测试中将设置为1

     

-set SI = 1

     

-set D = 0101

     

-在一个时钟周期内将Sh设置为0,在接下来的5个时钟周期内将Sh设置为1,在其余测试中将其设置为0

     

提交模拟波形,演示您的操作   代码。

我收到错误[Synth 8-1789] cannot update 'in' object dout

我尝试了以下操作:

library ieee;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;

entity insertname is
port (
    SI, Clk, ClrN, Sh, L : in std_logic;
    Din : in std_logic_vector (3 downto 0);
    SO : out std_logic;
    Dout : std_logic_vector (3 downto 0)
);
end entity insertname;

architecture behavioral of insertname is
    signal temp: std_logic_vector (3 downto 0) := "0000";
begin
    process (Clk, ClrN)
    begin
        if ClrN = '0' then
            temp <= x"0";
        elsif Clk'event and Clk = '1' and Sh = '1' then
            temp <= SI & temp(3 downto 1);
            SO <= temp(0);
        elsif Clk'event and Clk = '1' and Sh = '0' and L = '1' then
            temp <= Din;
        elsif Clk'event and Clk='1' and Sh='0' and L='0' then
            temp <= temp;
        end if;
    end process;
Dout <= temp;
end behavioral;

Figures mentioned above

1 个答案:

答案 0 :(得分:4)

要解决语法错误,请检查实体声明中的端口列表:Dout信号应定义为out,如下所示:

Dout : out std_logic_vector (3 downto 0)

如user1155120所述, IEEE Std 1076-2008,6.5.2接口对象声明指出:

  

如果没有模式   在接口以外的接口声明中明确给出   文件声明,假定为模式。