[英]Why Quartus II recognizes my variable as a signal?
我是VHDL编程的新手,这是我的第一个项目-构建一个同时具有正/反向计数顺序的二进制计数器。 我的计划很简单:
flag
。 curr_s
。 ctl
信号作为敏感信号,然后切换curr_s
并重置count
的值-该值设置为存储我上一个进程的计数。 现在,问题是,Quartus II向我返回了错误消息:
错误(10028):在bi_counter.vhd(35)处无法解析网络“ count [31]”的多个常量驱动程序
错误(10029):bi_counter.vhd的常量驱动程序(46)
错误(10028):在bi_counter.vhd(35)处无法解析网络“ count [30]”的多个常量驱动程序
...
错误(10028):在bi_counter.vhd(35)处无法解析网络“ count [14]”的多个常量驱动程序
我用谷歌搜索了一些规则,例如不允许在多个进程中更改signal
的值,但是问题是我将count
声明为共享变量而不是信号-应该不会遇到这种错误。 我之所以这样做是因为我想使用count
作为变量来在进程之间交换信息-这有意义吗?如果没有,是否有任何解决方法?
这是我的代码:
--
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.numeric_std.all;
--
entity bi_counter is
port(
master_clk, ctl, rst: in std_logic;
q: out std_logic_vector(7 downto 0)
);
end bi_counter;
--
architecture behv of bi_counter is
shared variable curr_s: std_logic := '0'; -- 0 for incremental, 1 for reverse counting
shared variable count: integer := -1;
shared variable master_count: natural := 0;
signal flag: std_logic;
begin
p_freq_div: process(master_clk, rst)
begin
if rst = '0' then
master_count := 0;
elsif master_clk'event and master_clk='1' then
master_count := master_count + 1;
if master_count = 24000000 then
flag <= not flag;
master_count := 0;
end if;
end if;
end process p_freq_div;
p_count: process(flag)
begin
if curr_s = '1' then
count := count + 1;
q <= conv_std_logic_vector(count, 8);
else
count := count - 1;
q <= conv_std_logic_vector(count, 8);
end if;
end process p_count;
p_switch: process(ctl)
begin
if ctl'event and ctl='1' then
curr_s := not curr_s;
if curr_s = '0' then
count := 0;
else
count := 1000;
end if;
end if;
end process p_switch;
end behv;
你写了:
我用谷歌搜索了一些规则,例如不允许在多个进程中更改信号的值,但是问题是我将计数声明为共享变量而不是信号-应该不会遇到这种错误。
这个“规则”不仅使您的生活更加困难。
考虑一下您要做什么。 您正在尝试合成一些要保留在设备上的值,并试图从两个独立的进程中分配一个值(即使它们可能是相关的,并且您知道它们应该如何工作,但它们仍然是独立)。 无论使用哪种语言元素-信号,变量,等等-一旦到达只有物理电路的设备,它就变得无关紧要。 也就是说,您可能没有违反任何语言规则,但是您违反了物理规则。
您的输出可以用以下形式表示:如果有某种条件,则输出某些内容,否则,如果有其他条件,则输出其他内容,等等。这可以放在单个过程中,这是我建议您执行的操作。
而且,正如罗素(Russell)所建议的那样,您可能不应该使用共享变量,尤其是像您那样绕过语言规则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.