DocsTech
/
VERILOG HDL
/

~ cd 17.10. ввод командной строки. 17.11. математические функции

17.10. Ввод командной строки.

Альтернативой чтению файла для получения информации для использования в симуляции является указание информации в команде вызова симулятора. Эта информация находится в форме необязательного аргумента, предоставляемого симулятору. Эти аргументы визуально отличаются от других аргументов симулятора тем, что начинаются с символа плюс (+).

Эти аргументы, называемые ниже plusargs, доступны через системные функции, описанные в разделе 17.10.1 и 17.10.2.

17.10.1. $test$plusargs (строка)

Системная функция $test$plusarg ищет в списке plusargs заданную пользователем plusarg_string. Строка указывается в аргументе системной функции как строка или вещественная переменная, которая интерпретируется как строка. Эта строка не должна включать ведущий знак плюс аргумента командной строки. Перебор plusargs, присутствующих в командной строке, выполняется в указанном порядке. Если префикс одного из предоставленных plusargs совпадает со всеми символами в предоставленной строке, функция возвращает ненулевое целое число. Если ни один plusargs из командной строки не соответствует предоставленной строке, функция возвращает целочисленное значение ноль.

Например:

Запустите симулятор с помощью команды: +HELLO

Код Verilog выглядит следующим образом:
...
Копировать
initial begin
    if ($test$plusargs("HELLO")) $display("Hello argument found.")
    if ($test$plusargs("HE")) $display("The HE subset string is detected.");
    if ($test$plusargs("H")) $display("Argument starting with H found.");
    if ($test$plusargs("HELLO_HERE"))$display("Long argument.");
    if ($test$plusargs("HI")) $display("Simple greeting.");
    if ($test$plusargs("LO")) $display("Does not match.");
end
Это приведет к следующему результату:
...
Копировать
Hello argument found.
The HE subset string is detected.
Argument starting with H found.

17.10.2 $value$plusargs(user_string, variable)

Системная функция $value$plusarg ищет в списке plusargs (как и системная функция $test$plusargs) указанную пользователем строку plusarg_string. Строка указывается в первом аргументе системной функции как строка или вещественная переменная, которая интерпретируется как строка. Эта строка не должна включать ведущий знак плюс аргумента командной строки. Перебор plusargs, присутствующих в командной строке, выполняется в указанном порядке. Если префикс одного из предоставленных plusargs совпадает со всеми символами в предоставленной строке, функция возвращает ненулевое целое число, остаток строки преобразуется к типу, указанному в user_string, и полученное значение сохраняется в предоставленной переменной. Если подходящей строки не найдено, функция возвращает целочисленное значение ноль, а предоставленная переменная не модифицируется. Когда функция возвращает ноль (0), предупреждения не выдаются.

User_string должна иметь следующий вид: «plusarg_string format_string«. Строки формата(format_string) такие же, как и в системных задачах $display. Они единственные допустимые (допустимы прописные и строчные буквы, а также ведущие 0):

  1. %d — десятичное преобразование
  2. %o — восьмеричное преобразование
  3. %h — шестнадцатеричное преобразование
  4. %b — двоичное преобразование
  5. %e — реальное экспоненциальное преобразование
  6. %f — преобразование вещественных десятичных дробей
  7. %g — преобразование вещественных десятичных или экспоненциальных значений
  8. %s — строка (без преобразования)

Первая строка из списка plusargs, предоставленного симулятору, которая совпадает с частью plusarg_string указанной строки user_string, является строкой plusarg, доступной для преобразования. Оставшаяся строка совпадающего plusarg (остаток — это часть строки plusarg после части, совпадающей с plusarg_string пользователя) должна быть преобразована из строки в формат, указанный строкой format_string, и сохранена в указанной переменной. Если остаток строки отсутствует, значение, сохраненное в переменной, должно быть либо нулем, либо пустой строкой.

Если размер переменной больше, чем значение после преобразования, то сохраненное значение добавляется нулем до ширины переменной. Если переменная не может вместить значение после преобразования, значение усекается. Если значение отрицательное, то значение считается больше, чем предоставленная переменная. Если в строке, доступной для преобразования, имеются символы, которые являются недопустимыми для указанного преобразования, в переменную записывается значение ‘bx.

Verilog HDL:
...
Копировать
`define STRING reg [1024 * 8:1]

module goodtasks;
    `STRING str;

    integer int;
    reg [31:0] vect;
    real realvar;

    initial begin
        if ($value$plusargs("TEST=%d",int))
            $display("value was %d",int);
        else
            $display("+TEST= not found");
        #100 $finish;
    end
endmodule

module ieee1364_example;

    real frequency;
    reg [8*32:1] testname;
    reg [64*8:1] pstring;
    reg clk;

    initial begin
        if ($value$plusargs("TESTNAME=%s",testname))
        begin
            $display(" TESTNAME= %s.",testname);
            $finish;
        end
        if (!($value$plusargs("FREQ+%0F",frequency)))
            frequency = 8.33333; // 166 MHz
        $display("frequency = %f",frequency);
        pstring = "TEST%d";
        if ($value$plusargs(pstring, testname))
            $display("Running test number %0d.",testname);
    end
endmodule
и добавив в командную строку инструмента параметр plusarg
...
Копировать
+TEST=5
приведет к следующему результату:
...
Копировать
value was 5
frequency = 8.333330
Running text number x.
Добавление в командную строку инструмента параметра plusarg
...
Копировать
+TESTNAME=bar
приведет к следующему результату:
...
Копировать
+TEST= not found
TESTNAME= bar.
Добавление в командную строку инструмента параметра plusarg
...
Копировать
+FREQ+9.234
приведет к следующему результату:
...
Копировать
+TEST= not found
frequency = 8.333330
Running test number 23.

17.11. Математические функции

Существуют целочисленные и вещественные математические функции. Функции математической системы могут использоваться в константных выражениях, как указано в п. 5.

17.11.1 Целочисленные математические функции

Например:
...
Копировать
integer result;
result = $clog2(n);

$clog2 — системная функция, которая возвращает потолок логарифма по основанию 2 аргумента (логарифм, округленный до целого значения). Аргумент может быть целым числом или векторным значением произвольного размера. Аргумент рассматривается как беззнаковое значение, и значение аргумента, равное 0, дает результат 0.

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

17.11.2 Вещественные математические функции

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

Таблица 17.18. Перекрестные списки вещественных математических функций из языка Verilog в язык C

Функция VerilogЭквивалентная функция CОписание
$ln(x)log(x)Натуральный логарифм
$log10(x)log10(x)Десятичный логарифм
$exp(x)exp(x)Экспонента в степени x
$sqrt(x)sqrt(x)Квадратный корень
$pow(x,y)pow(x,y)x**y
$floor(x)пол(x)Усечение дробной части
$ceil(x)ceil(x)Усечение дробной части с добавлением 1
$sin(x)sin(x)Синус
$cos(x)cos(x)Косинус
$tan(x)tan(x)Тангенс
$asin(x)asin(x)Арксинус
$acos(x)acos(x)Арккосинус
$atan(x)atan(x)Арктангенс
$atan2(x,y)atan2(x,y)Арктангенс x/y
$hypot(x,y)hypot(x,y)sqrt(xx+yy)
$sinh(x)sinh(x)Гиперболический синус
$cosh(x)кош(x)Гиперболический косинус
$tanh(x)tanh(x)Гиперболическая тангенс
$asinh(x)asinh(x)Гиперболический арксинус
$acosh(x)акош(x)Гиперболический арккосинус
$atanh(x)atanh(x)Гиперболическая Арктангенс
Главная
Курсы
Вебинары
3. Лексические правила(Синтаксис) Verilog HDL
4. Типы данных Verilog HDL
5. Выражения и Операторы Verilog HDL
6. Назначения (Assignments) в Verilog HDL
7. Моделирование на уровне вентилей и переключателей в Verilog HDL
8. Примитивы, объявляемые пользователем (UDP) Verilog HDL
9. Процедурные назначения. Поведенческое моделирование в Verilog HDL.
9. If, case for, while и repeat Verilog HDL
9. Initial, always, задержки, блоки Verilog HDL
10. Задачи(task) и функции (function) в Verilog HDL
11. Семантика планирования. Стек (stack) в Verilog HDL
12. Модули(module). Переопределение параметров(defparam).
12. Порты. Иерархические имена в Verilog HDL
12. Generate блоки Verilog HDL
12. Иерархические имена Verilog HDL
13. Конфигурирование содержимого конструкции
13. Использование библиотек. Конфигурирование содержимого конструкции в Verilog HDL
14. Specify блоки в Verilog HDL
15. Setup, hold, setuphold и recovery в Verilog HDL
15. Skew, period, width и nochange Verilog HDL
15. Проверка синхронизации сигналов в Verilog HDL
16. Бэканнотирование с использованием стандартного формата задержки (SDF) в Verilog HDL
17. Системные задачи и функции
17.2 Файлы. Запись и чтение файлов Verilog
17. Задачи временной шкалы, управления, PLA и стохастического анализа Verilog
$time, $stime и $realtime Verilog
17.8. Функции преобразования Verilog
17.9. Функции распределения вероятностей Verilog
17.10. Ввод командной строки. 17.11. Математические функции
18. Дамп файлы изменения значений (VCD)
18. Формат файла VCD расширенные и четырьмя состояниями
19. Директивы компилятора Verilog HDL
20. Обзор интерфейса языка программирования (PLI) Verilog
28. Зашифрованные оболочки
Закрыть