Как установить Verilog HDL в Linux?

Опубликовано: 6 Сентября, 2022

Verilog, что означает Verify Logic. Он широко используется в программировании аппаратных устройств, с ростом требований к системе микросхем и аппаратным устройствам Verilog HDL стал более популярным. В Verilog проектирование и проверка цифровых устройств на уровне абстракции RTL стали менее сложными. Понимание Verilog такое же, как программирование на C, поскольку большая часть его синтаксиса похожа на него.

С ростом спроса на СБИС число конструкций микросхем увеличилось. В первые дни было сложно синтезировать логику и отлаживать код. Так появился язык описания оборудования. Последний стандарт Verilog HDL внес значительный вклад в программирование HDL, сделав его логически синтезируемым и простым в отладке. Теперь мы напишем нашу первую программу Verilog и установим Verilog в ядре Linux.

Установка Verilog HDL в Linux

Icarus Verilog — инструмент моделирования и синтеза Verilog. Используя этот инструмент, он работает как компилятор Verilog в определенном целевом формате. Этот компилятор может генерировать промежуточную форму, называемую сборкой vvp, для пакетного моделирования, и эта промежуточная форма выполняется с помощью команды «vvp». Для синтеза компилятор генерирует списки соединений в нужном формате.

Шаг 1: Локальное клонирование репозитория Icarus Verilog. Клонировать репозиторий Icarus Verilog: git clone https://github.com/steveicarus/iverilog.git. После того, как вы клонируете репозиторий, создается каталог с именем iverilog. Теперь используйте команду cd для изменения текущего рабочего каталога.

git clone https://github.com/steveicarus/iverilog.git

cd iverilog

Шаг 2: Настройте файлы. Как только вы окажетесь внутри каталога iverilog, вам нужно будет выполнить очень мало шагов для настройки. Чтобы настроить иверилог в локальном репозитории, выполните следующую команду.

sh autoconf.sh

Если вы столкнулись с ошибкой, это означает, что autoconf не установлен в вашей системе. Установите autoconf, введя следующую команду.

Fedora: sudo dnf install autoconf

Ubuntu: sudo apt-get install autoconf

Сообщение об успешной настройке выглядит следующим образом:

Autoconf in root…

Precompiling lexor_keyword.gperf

Precompiling vhdlpp/lexor_keyword.gperf

А затем настройте файлы для обновления настроек по умолчанию.

./configure

Теперь вы готовы к работе.

Шаг 3: Установите iverilog и GTKWave. После настройки параметров по умолчанию перейдите в корневой каталог и выполните команду make install. Но перед этим убедитесь, что у вас установлены GCC, g++, bison и flex. Поскольку Verilog был создан с использованием программирования C: g++, gcc, flex и bison должны быть установлены для компиляции и запуска кода iverilog. Если у вас нет gcc, g++, bison и flex, запустите эти команды.

//sudo apt-get install package_name in ubuntu

sudo dnf install flex 

sudo dnf install gcc

sudo dnf install bison

sudo dnf install g++

После того, как вы установили эти предметы первой необходимости, приступайте к установке.

sudo su

make install

sudo dnf install iverilog

sudo dnf install gtkwave 

Иверилог успешно установлен, теперь давайте напишем код Верилога и запустим его.

Скомпилируйте и запустите код Verilog

Мы будем писать простой код ворот и для проектирования, и для моделирования. Убедитесь, что вы сохранили Verilog с расширением .v. Таблица истинности такова:

а б вне
0 0 0
0 1 0
1 0 0
1 1 1

Во-первых, создайте имя файла dut.v, которое является нашим дизайном в тестовом блоке кода. Мы начнем с определения имени модуля, начиная с ключевого слова модуля. Мы передаем список портов в качестве аргумента имени модуля. Использование моделирования абстракции потока данных.

//dut= save in dut.v

module and_gate(out,a,b);

   input a,b;

   output out;

   assign out = a & b;

   //and a1(out,a,b); for gate level abstraction

endmodule

Затем напишите код тестового стенда или моделирования. Моделирование заключается в проверке проектного блока путем ввода в него входных данных.

//testbench for and gate

module tb;

    reg A, B;  //input assigned to register

    wire out; //output assigned to net

    //instantiate dut

    and_gate dut(out,A,B);

    initial

    begin

        A = 0; B = 0;#10

        $display(“A=%b B=%b Output=%b”,A,B,out);

        A = 0; B = 1;#10

        $display(“A=%b B=%d Output=%b”,A,B,out);

        A = 1; B = 0;#10

        $display(“A=%b B=%b Output=%b”,A,B,out);

        A = 1; B = 1;#10

        $display(“A=%b B=%b Output=%b”,A,B,out);

        $finish;

    end

endmodule

Следующий синтаксис используется для компиляции и запуска кода Verilog:

//to compile:

iverilog -o check_code tb.v dut.v

//to run:

vvp check_code

Выход:

Вы можете проверить вывод, обратившись к таблице истинности