Verilog-AMS — это производная от языка описания аппаратного обеспечения Verilog , который включает расширения аналоговых сигналов и смешанных сигналов (AMS) для определения поведения аналоговых систем и систем смешанных сигналов. Он расширяет циклы симулятора Verilog/ SystemVerilog / VHDL на основе событий за счет симулятора непрерывного времени, который решает дифференциальные уравнения в аналоговой области. Обе области связаны: аналоговые события могут инициировать цифровые действия и наоборот. [1]
Стандарт Verilog-AMS был создан с целью дать возможность разработчикам аналоговых и смешанных сигнальных систем и интегральных схем создавать и использовать модули, инкапсулирующие описания поведения высокого уровня, а также структурные описания систем и компонентов. [2] [3] [4]
Verilog-AMS — это стандартный язык моделирования схем со смешанными сигналами. Он обеспечивает семантику моделирования как в непрерывном времени, так и на основе событий, поэтому подходит для аналоговых, цифровых и смешанных аналогово-цифровых схем. Он особенно хорошо подходит для проверки очень сложных аналоговых, смешанных и радиочастотных интегральных схем. [5]
Verilog и Verilog/AMS — это не процедурные языки программирования, а языки описания оборудования на основе событий (HDL). По существу, они предоставляют сложные и мощные языковые функции для определения и синхронизации параллельных действий и событий. С другой стороны, многие действия, определенные в операторах программы HDL, могут выполняться параллельно (что-то похожее на потоки и тасклеты в процедурных языках, но гораздо более детально). Однако Verilog/AMS можно объединить с процедурными языками, такими как язык ANSI C, используя процедурный интерфейс Verilog симулятора, который упрощает реализацию набора тестов и позволяет взаимодействовать с устаревшим кодом или оборудованием испытательного стенда.
Первоначальным намерением комитета Verilog-AMS был единый язык для аналогового и цифрового проектирования, однако из-за задержек в процессе слияния он остается в Accellera , в то время как Verilog превратился в SystemVerilog и перешел в IEEE.
Verilog/AMS — это расширенная версия Verilog digital HDL, поэтому все операторы в цифровой области работают так же, как в Verilog (примеры см. здесь). Все аналоговые части работают как в Verilog-A .
В следующем примере кода в Verilog-AMS показан ЦАП , который является примером аналоговой обработки, запускаемой цифровым сигналом:
`include "constants.vams" `include "disciplines.vams" // Модуль простой модели DAC dac_simple ( aout , clk , din , vref ); // Параметры параметра целое число бит = 4 из [ 1 : 24 ]; целое число параметра td = 1 n from [ 0 : inf ); // Задержка обработки ЦАП // Определение ввода/вывода input clk , vref ; вход [ биты - 1 : 0 ] din ; выходной выход ; //Определение типов портов log clk ; логика [ биты - 1 : 0 ] din ; электрический выход , vref ; // Внутренние переменные real aout_new , ref ; целое число я ; // Изменить сигнал в аналоговой части Analog Begin @( Posege Clk ) Begin // Изменить выход только для нарастающего фронта тактового сигнала aout_new = 0 ; ссылка = V ( vref ); for ( я = 0 ; я < биты ; я = я + 1 ) начать ref = ref / 2 ; aout_new = aout_new + ref * din [ я ]; end end V ( aout ) <+ переход ( aout_new , td , 5 n ); // Получаем более плавный переход при изменении выходного уровня end endmodule
Модель АЦП считывает аналоговые сигналы в цифровых блоках:
`include "constants.vams" `include "disciplines.vams" // Модуль простой модели АЦП adc_simple ( clk , dout , vref , vin ); // Параметры параметра целое число бит = 4 из [ 1 : 24 ]; // Число бит параметра целое число td = 1 from [ 0 : inf ); // Задержка обработки АЦП // Определение ввода/вывода input clk , vin , vref ; вывод [ биты - 1 : 0 ] dout ; //Определение типов портов electric vref , vin ; логика клк ; reg [ биты - 1 : 0 ] dout ; // Внутренние переменные real ref , sample ; целое число я ; начальное начало dout = 0 ; конец // Всегда выполнять выборку в цифровых блоках для нарастающего фронта тактового сигнала @( posege clk ) Begin Sample = V ( vin ); ссылка = V ( vref ); for ( я = 0 ; я < биты ; я = я + 1 ) начать ref = ref / 2 ; if ( образец > ссылка ) начать dout [ i ] <= #( td ) 1 ; образец = образец - ссылка ; конец еще dout [ i ] <= #( td ) 0 ; конец, конец , конец , модуль
Хотя изначально этот язык поддерживался только коммерческими компаниями, часть подмножества поведенческого моделирования «Verilog-A» была принята сообществом, занимающимся моделированием транзисторов. Транслятор ADMS поддерживает его для симуляторов с открытым исходным кодом, таких как Xyce и ngSPICE. Более полная реализация теперь доступна через OpenVAF. Симулятор Gnucap после SPICE был разработан в соответствии со стандартным документом, и его поддержка Verilog-AMS как на уровне симулятора, так и для поведенческого моделирования растет.