Мне нужно разделить значение (real
) между двумя процессами, но когда я пытаюсь запустить свой код, quartus
выдает ошибку.
library IEEE;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;
use IEEE.MATH_REAL.ALL;
entity de0nano is
port (
CLOCK_50 : in std_logic;
KEY : in std_logic_vector(1 downto 0);
SW : in std_logic_vector(3 downto 0);
LED : out std_logic_vector(7 downto 0);
GPIO : inout std_logic_vector(35 downto 0)
);
end de0nano;
architecture struct of de0nano is
--declarations
signal PN : real :=0.0 ;
signal PR : real :=0.0 ;
signal RC : integer :=1;
signal NC : integer :=1;
signal BET : integer :=1;
begin
count : process (CLOCK_50, GPIO)
begin
--A <= KEY(0);
GPIO(24) <= '1';
--functional coding
LED <= "00011000";
if (pn > pr) then
GPIO(26) <= '1';
LED <= "00000001";
else
GPIO(26) <= '0';
end if;
if (pn = pr) then
GPIO(26) <= '1';
LED <= "00000010";
else
GPIO(26) <= '0';
end if;
if (pn < pr) then
GPIO(26) <= '1';
LED <= "00000011";
else
GPIO(26) <= '0';
end if;
end process;
probabilityController : process (CLOCK_50, KEY)
begin
--stato iniziale
if((RC + NC + BET)=1) then
pr <= 0.5;
pn <= 0.5;
end if;
--sequenza rossi consecutivi
if(RC>0) then
pr <= (5)**RC;
pn <= 1- (5)**RC;
end if;
--sequenza neri consecutivi
if(NC>0) then
pr <= (5)**NC;
pn <= 1- (5)**NC;
end if;
end process;
betController : process (CLOCK_50)
begin
end process;
colorController : process (CLOCK_50, KEY)
begin
if(KEY(0)='1') then
NC<=0;
RC <= RC+1;
end if;
if(KEY(1)='1') then
RC<=0;
NC <= NC+1;
end if;
end process;
end str
Как я могу работать с одним и тем же сигналом/переменной из двух разных процессов?
begin
. (Это также не поддается синтезу, но в моделировании он будет делать именно то, что вы ожидаете: при условии, что вы понимаете семантику назначения сигналов.) Для синтеза избегайте записи одного и того же сигнала в двух процессах... Кроме того, вы не можете добавлять целое число к числу с плавающей запятой. , но это тривиально исправить. - person user_1818839   schedule 01.09.2015architecture ...
объявления сигналовbegin
назначенияend architecture
. Итак, ваша строкаSignal foobar : real := 0.0;
должна быть перемещена на 2 строки вверх. - person Paebbels   schedule 02.09.2015<=
, а не:=
. Числовой литерал для вещественного числа должен быть1.0
. Использование общей переменной вызывает проблемы уровня версии IEEE Std 1076, переносимости и зависимости от реализации (процессы являются параллельными операторами и могут фактически выполняться одновременно, до -2002 монопольный доступ к общим переменным не гарантируется). В -2002/2008 общие переменные являются защищенными типами. - person   schedule 02.09.2015