[an error occurred while processing this directive]
procedure (VHDL) v.s. task (Verilog)
(«Телесистемы»: Конференция «Языки описания аппаратуры (VHDL и др.))

миниатюрный аудио-видеорекордер mAVR

Отправлено -=Sergei=- 15 июня 2004 г. 13:33

Вопрос следующий....
Могу ли я в TASK описать длительный процесс? т.е. например если в VHDL то изначально он такой:
----------------------------------------------------------------
procedure USART_ACC(
RW : std_logic;
Address : std_logic_vector(7 downto 0);
Bank : std_logic_vector(2 downto 0);
DATA : std_logic_vector(7 downto 0);
signal CLK: in std_logic;
signal Q: in std_logic_vector(3 downto 0);
signal WR : out std_logic;
signal RD : out std_logic;
signal DATAi: out std_logic_vector(7 downto 0);
signal DATAo: in std_logic_vector(7 downto 0);
signal ADR: out std_logic_vector(5 downto 0);
signal DATAout: in std_logic_vector(7 downto 0);
signal DATA_READ: out std_logic_vector(7 downto 0)
) is
begin
DATAi<=x"00";
ADR <="000000";
RD <='0';
WR <='0';
if (RW='0') then
wait on Q(2) until Q(2)='0';
DATAi<= DATA;
ADR <= Bank & Address(2 downto 0);
WR <='1';
RD <='0';
wait on Q(0) until Q(0)='1';

else
wait on Q(0) until Q(0)='0';
DATAi<= DATA;
ADR <= Bank & Address(2 downto 0);
WR <='0';
RD <='1';
wait on Q(1);
DATA_READ <= DATAout;
wait on Q(2) until Q(2)='1';
end if;
DATAi<=x"00";
ADR <="000000";
RD <='0';
WR <='0';
wait on CLK until CLK='1';
end procedure ;
----------------------------------------------
Переписал его в Verilog
----------------------------------------------
task USART_ACC ;

input RW;
input [7:0]Address;
input [2:0]Bank;
input [7:0]DATA;
input CLK;
input [3:0] Q;
input [7:0] DATAo;
input [7:0] DATAout;

output WR;
output RD;
output [7:0] DATAi;
output [5:0] ADR;
output [7:0] DATA_READ;

begin
DATAi = 0;
ADR = 0;
RD = 0;
WR = 0;

if (RW==0) begin
wait (Q[2]==0);
DATAi = DATA;
ADR = {Bank , Address[2:0]};
WR = 1;
RD = 0;
wait (Q[0]== 1);
end
else
begin
wait (Q[0]==0);
DATAi = DATA;
ADR = {Bank , Address[2 : 0]};
WR = 0;
RD = 1 ;
wait (Q[1]==1);
DATA_READ = DATAout;
wait (Q[2]==1);
end
DATAi = 0;
ADR =0;
RD = 0;
WR =0;
wait (CLK==1);


end
endtask
------------------------------------------

Вообшем просто симулирую на шине несколько тактов.
В ВХДЛ все работает прекрасно, в верилоге нифига...
Выходы ТАСКА принимают правильные (нужные мне значения) а вот сигналы которые должен этот ТАСК менять вне своего тела остаются без изменения. Что я делаю не так ?

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru