大家晚上好。我首先要说的是我对VHDL很新。我有一个项目要求我建模一个由摩托罗拉在VHDL中制作的更新计数器(对于任何好奇的人来说都是MC14510B)。
从数据表可以看出,如果输入PE(预置使能)切换为高电平,则输入引脚p4 ... p1处的4个预置值将直接传递到输出q4 ... q1。
由于某种原因,我的代码拒绝编译,抛出错误错误:COMP96_0143:MC14510B.vhd:(56,13):对象“p”无法写入。我正在使用Aldec作为编译器,不知道我做错了什么。我不想写入输入,我想用q中存储的值写入qtemp。
谁能看到我搞砸了什么?在进程语句中,主if-else中的else语句给出了我的问题(p< = qtemp行)。任何帮助都将受到极大的赞赏。
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.std_logic_unsigned.all;
entity MC14510B is
port (
signal pe : in std_logic;
signal ci_not : inout std_logic;
signal reset : in std_logic;
signal updown : in std_logic;
signal clk : in std_logic;
signal p : in std_logic_vector (3 downto 0);
signal q : out std_logic_vector(3 downto 0);
signal co_not : inout std_logic
);
end;
architecture myarch of MC14510B is
begin
process(pe, ci_not, reset, updown, clk)
variable qtemp : std_logic_vector(3 downto 0);
variable cotemp : std_logic;
begin
if reset = '1' then --reset condition
qtemp := "0000";
elsif clk'event and updown = '1' and ci_not = '1' then --count up
if qtemp < 15 then
qtemp := qtemp + 1;
cotemp := '1';
else
qtemp := "0000";
cotemp := '0';
end if;
elsif clk'event and updown = '0' and ci_not = '1' then --count down
if qtemp > 0 then
qtemp := qtemp - 1;
cotemp := '1';
else
qtemp := "0000";
cotemp := '0';
end if;
elsif ci_not = '0' then
qtemp := "1010";
cotemp := '1';
else
if pe = '1' then --enable preset
p <= qtemp; --output = input presets
cotemp := '1';
else
qtemp := qtemp; --output = output
cotemp := '1';
end if;
end if;
q <= qtemp;
co_not <= cotemp;
end process;
end myarch;
答案 0 :(得分:0)
您似乎有qtemp的作业转向p := qtemp
并且应该qtemp <= p
。看起来p应该在该过程的敏感性列表中。
然后您的代码进行分析。不能保证它是正确的。
p
已声明模式,您无法写入。