Перейти к содержанию
    

Отделение tasks в отдельный файл, SystemVerilog

Форумчане привет. Навожу порядок, думал сейчас быстро раскидаю код, да не тут то было.

Имею такой top, с таким например вызовом
 

`include "tasks.sv"
  
module top;

reg byte_1;
reg byte_2;

initial begin
  byte_1 <= 1'b1;
  byte_2 <= 1'b1;
end
  
always (...) begin
  tasks.sub (byte_1, byte_2);
end

Ну и решил я task убрать в отдельный файл. Даже зачем то оформил как модуль (Просто квартус меня заспамил варнингами и так я их поборол).

module tasks;

task sub;
	input  _byte_1;
	output _byte_2;

	begin
    	_byte_2 <= byte_1;
    end
endtask
      
endmodule

И тут все бы ничего и вроде квартус все съел, но начал ругать, что byte_2 миксует блокирующее и не блокирующее присваивание. Методом исключения понял, что надо закомментировать все присваивания в top модуле. То есть я понимаю, что теперб task sub выступает теперь как блокирующее присваивание byte_2 = byte_1 ?

 

Правильно ли я все понял? И есть ли выход из такой ситуации? Не хочу блокирующее, вся времянка уедет.
Заранее спасибо.

Изменено пользователем new123

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно, меня сейчас гуру верификации запинают ногами, но я поступил максимально "в лоб" в подобном случае.

Просто утащил task'и в отдельный файл, дал ему расширение .svt и в теле top_tb.sv сделал `include "./tests.svt". Не оформлял в модуль или что-то подобное. Голый текст. Всё =)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, nice_vladi said:

Не оформлял в модуль или что-то подобное. Голый текст. Всё =)

я так и начал.

Сначала столкнулся с тем, что таски используют регистры, которые объявлены в top модуле и не видят их никакими инклудами (хотя вот сейчас думаю, может надо было обращаться через top.xxxx). Ну ладно, сделал все как надо, добавил кучу output вместо прямого обращения.

При таком подходе он начал жаловаться, что я что то такое делаю, что создают latch. Завел модули. Ушло.

Теперь вот говорит, что я миксую присваивания. Может опять вернуться к первому варианту с адресацией top.xxx

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Буду теперь знать, что вместо output в task надо использовать ref. Не знал я, что в верилоге бывают ссылки.

 

module tasks;

task sub;
	input  _byte_1;
	ref    _byte_2;

	begin
    	_byte_2 <= byte_1;
    end
endtask
      
endmodule

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

освежили бы знания по function/task из стандарта, тогда многие непонятки уйдут

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 hours ago, new123 said:

Сначала столкнулся с тем, что таски используют регистры, которые объявлены в top модуле и не видят их никакими инклудами

Чтобы "увидело", достаточно инклудить в теле модуля, после объявления регистров. Или вообще под конец модуля перед endmodule

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, Nick_K said:

в теле модуля, после объявления регистров. Или вообще под конец модуля перед endmodule

прям вот пробовал и там и там. Ни в какую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, new123 said:

прям вот пробовал и там и там. Ни в какую.

Странно, может с парсером какие приколы. У меня есть инклуд для кое-каких макросов, но сути дела это не меняяет - обычная подстановка кода из какого-то файла на этапе чтения исходников.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, Nick_K said:

Странно, может с парсером какие приколы.

Вообщем был вынужден решить эту проблему, а то моделсим не принимал такие мои конструкции.
Инклуды принимает, если удалить эти файлы из проекта, чтобы они нигде не значились

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, new123 said:

Инклуды принимает, если удалить эти файлы из проекта, чтобы они нигде не значились

А ну так да, что же Вы хотели? Если файл есть в листе библиотеки, он будет считан в регулярном порядке. Потому его нужно удалять и чтобы только при парсинге было dummy подключение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В ModelSim такая же история повторилась.

Вместо vlog -work work *.sv пришлось перечислять каждый sv файл, за исключением этих инклудов. Вот это я поразвлекся, навел уборку в коде

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, new123 said:

В ModelSim такая же история повторилась.

Вместо vlog -work work *.sv пришлось перечислять каждый sv файл, за исключением этих инклудов. Вот это я поразвлекся, навел уборку в коде

правило хорошего тона инклуды в svh файл)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, des00 said:

правило хорошего тона инклуды в svh файл)

спасибо, буду теперь знать =)

Изменено пользователем new123

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, new123 said:

Вместо vlog -work work *.sv пришлось перечислять каждый sv файл, за исключением этих инклудов. Вот это я поразвлекся, навел уборку в коде

А ещё лучше в другой папке. Правда потом придётся подогнать доступ через относительный путь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...