-
Владислав
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 3
-
Спасибо получено: 0
-
-
-
|
Добрый день товарищи.
Прошлым летом заинтересовался ПЛИС, изучил VHDL и через некоторое время перешел на Verilog.
Программы для опроса датчиков, общение с flash и DDR никогда не получаются у меня универсальными, однако очень хотелось бы.
Очень интересно было бы позаимствовать из Си вызов функций. чтобы не приходилось каждый раз создавать флаги и прыгать по коду. Допустим, вызов функции "запись flash (аргументы) " . суть проста и , я думаю, доступна каждому. Почитал описание <a href="/index.php/verilog">verilog</a> - нашел процедуру "task " . Можно ли сделать внутри этой процедуры временную задержку,доступ в память или еще что-нибудь? Кто-нибудь пробовал? я первым делом попробовал написать крайне банальную функцию задержки. поместил счетчик в Task и ждал сигнала при достижении определенного значения. событие происходит в следующем такте после вызова TAsk. никаких задержек. выполнение программы задерживается на строчке с Task на 1 такт. пробовал пихать туда циклы - результат тот же. для примера
www.asicguru.com/verilog/tutorial/tasks/64/
Товарищи поделитесь опытом. заранее спасибо .
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
alman
-
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 263
-
Спасибо получено: 41
-
-
-
-
-
|
Владислав пишет: я первым делом попробовал написать крайне банальную функцию задержки. поместил счетчик в Task и ждал сигнала при достижении определенного значения. событие происходит в следующем такте после вызова TAsk. никаких задержек. выполнение программы задерживается на строчке с Task на 1 такт.
Покажите код. Скорее всего Вы смешали в кучу блокирующие и неблокирующие присваивания - самая распространённая ошибка.
пробовал пихать туда циклы - результат тот же. для примера
www.asicguru.com/verilog/tutorial/tasks/64/
В Верилоге циклы это не совсем то же самое что и в классических языках программирования. Для реализации задержки конструкция "for" обычно не нужна.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Владислав
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 3
-
Спасибо получено: 0
-
-
-
|
Вместо For я пытался создать счетчик - тщетно .больше чем на 1 такт .
for использовал только потому что в обычных always каждая новая итерация цикла это 1 клок.хотелось бы чтобы task работал по определенным внешним клокам .
код выглядит вот так .
module EXPL
(
CLK,
RST,
INT,
INT1
);
input wire CLK;
input wire RST;
output wire INT;
output wire [5:0]INT1;
assign INT = int_fl;
assign INT1= flag;
reg int_fl;
reg [5:0]flag;
task delay ;
input wire int_fl;
output reg [5:0] int_2;
integer i, count =0;
begin
if (int_fl) begin
for (i=5; i>=0; i=i-1)begin
count <=count+1;
end
int_2<=count;
end
end
endtask
always @(posedge (CLK ) or posedge (RST))
begin
if (RST) begin
int_fl <=1;
end
else begin
if (int_fl) begin
int_fl <=0;
end
else begin
int_fl <=1;
end
delay (int_fl, flag);
end
end
endmodule
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
alman
-
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 263
-
Спасибо получено: 41
-
-
-
-
-
|
Владислав пишет: Вместо For я пытался создать счетчик - тщетно .больше чем на 1 такт .
for использовал только потому что в обычных always каждая новая итерация цикла это 1 клок.хотелось бы чтобы task работал по определенным внешним клокам .
Я не уверен, что понял правильно задачу.
for (i=5; i>=0; i=i-1)begin
count <=count+1;
Имхо, проблема где-то тут. Если не ошибаюсь (а я могу ошибаться, поскольку не эксперт в Verilog),
то эта конструкция синтезируется в нечто вроде такого:
count <=count+1;
count <=count+1;
count <=count+1;
count <=count+1;
count <=count+1;
Что "выродится" в единственный count <=count+1;
Что касается "внешних" клоков, то это не очень хорошо - могут появиться различные проблемы. Фишка как раз в том, чтобы использовать один единственный клок синхронизирующий всю схему. Про смешивание различных клоков можно почитать что-нибудь из
yandex.ru/yandsearch?text=verilog%20%D0%...D0%BE%D0%B2&lr=11049
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от alman.
|
-
Владислав
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 3
-
Спасибо получено: 0
-
-
-
|
Я понимаю, что будут нюансы при использовании разных клоков.
А вот count вообще не меняет свое значение. Могу показать rtl модель. Он for не синтезирует.мне хочется чтобы алгоритм основной остановился на task и стоял столько сколько нужно для выполнения внутреннего алгоритма в task. Функции хочу) чтобы их можно было include-ом подключить к проекты и вызывать в коде.есть какие нибудь предложения как сделать это в task?
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
Время создания страницы: 0.166 секунд