МАРСОХОД

Open Source Hardware Project

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1

ТЕМА: Функциональное программирование на Verilog

Функциональное программирование на Verilog 4 года 5 мес. назад #2616

Добрый день товарищи.
Прошлым летом заинтересовался ПЛИС, изучил VHDL и через некоторое время перешел на Verilog.
Программы для опроса датчиков, общение с flash и DDR никогда не получаются у меня универсальными, однако очень хотелось бы.
Очень интересно было бы позаимствовать из Си вызов функций. чтобы не приходилось каждый раз создавать флаги и прыгать по коду. Допустим, вызов функции "запись flash (аргументы) " . суть проста и , я думаю, доступна каждому. Почитал описание <a href="/index.php/verilog">verilog</a> - нашел процедуру "task " . Можно ли сделать внутри этой процедуры временную задержку,доступ в память или еще что-нибудь? Кто-нибудь пробовал? я первым делом попробовал написать крайне банальную функцию задержки. поместил счетчик в Task и ждал сигнала при достижении определенного значения. событие происходит в следующем такте после вызова TAsk. никаких задержек. выполнение программы задерживается на строчке с Task на 1 такт. пробовал пихать туда циклы - результат тот же. для примера www.asicguru.com/verilog/tutorial/tasks/64/


Товарищи поделитесь опытом. заранее спасибо .

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Владислав.

Re: Функциональное программирование на Verilog 4 года 5 мес. назад #2618

Владислав пишет: я первым делом попробовал написать крайне банальную функцию задержки. поместил счетчик в Task и ждал сигнала при достижении определенного значения. событие происходит в следующем такте после вызова TAsk. никаких задержек. выполнение программы задерживается на строчке с Task на 1 такт.


Покажите код. Скорее всего Вы смешали в кучу блокирующие и неблокирующие присваивания - самая распространённая ошибка.

пробовал пихать туда циклы - результат тот же. для примера www.asicguru.com/verilog/tutorial/tasks/64/


В Верилоге циклы это не совсем то же самое что и в классических языках программирования. Для реализации задержки конструкция "for" обычно не нужна.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Функциональное программирование на Verilog 4 года 5 мес. назад #2619

Вместо 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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Функциональное программирование на Verilog 4 года 5 мес. назад #2620

Владислав пишет: Вместо 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.

Re: Функциональное программирование на Verilog 4 года 5 мес. назад #2621

Я понимаю, что будут нюансы при использовании разных клоков.

А вот count вообще не меняет свое значение. Могу показать rtl модель. Он for не синтезирует.мне хочется чтобы алгоритм основной остановился на task и стоял столько сколько нужно для выполнения внутреннего алгоритма в task. Функции хочу) чтобы их можно было include-ом подключить к проекты и вызывать в коде.есть какие нибудь предложения как сделать это в task?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Владислав.
  • Страница:
  • 1
Время создания страницы: 0.151 секунд

facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Forum Наш форум Языки программирования Функциональное программирование на Verilog