编写用于并行输入,并行输出右移的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;
答案 0 :(得分:4)
要解决语法错误,请检查实体声明中的端口列表:Dout
信号应定义为out
,如下所示:
Dout : out std_logic_vector (3 downto 0)
如user1155120所述, IEEE Std 1076-2008,6.5.2接口对象声明指出:
如果没有模式 在接口以外的接口声明中明确给出 文件声明,假定为模式。