ドルビーラボラトリーズの子会社のVia Licensing社がMPEG-4 SLSのパテントプールのライセンス管理を行っており、MPEG-4 SLSに関するシンガポールのA*STAR ETPL（Agency for Science, Technology and Research Exploit Technologies Pte Ltd、シンガポール科学技術研究庁 エクスプロイトテクノロジーズ社）、ドイツのフラウンホーファーIIS、及びNTTの特許を管理している。ライセンス料金はPC向けデコーダも含め有料である。
MPEG-4 SLSのリファレンス実装はISO/IEC 14496-5:2001/Amd.10:2007で定義されている。また、フラウンホーファーIISは組み込みシステム向けや各種PC向けのソースコードとライブラリの提供を行っている。
簡単な2フリップフロップの例を以下に示す。module toplevel(clock,reset);  input clock;  input reset;  reg flop1;  reg flop2;  always @ (posedge reset or posedge clock)    if (reset)      begin        flop1 <= 0;        flop2 <= 1;      end    else      begin        flop1 <= flop2;        flop2 <= flop1;      endendmoduleVerilogにおける"<="演算子は、普通の手続き型言語とは異なる、ハードウェア記述言語としてのもう1つの側面である。この演算子は「ノンブロッキング」代入文として知られ、alwaysブロックが実行されるまでアクションは登録されない。つまり、代入文を書いた順序は無関係であり、必ず同じ結果が生じる。そのため、flop1とflop2はクロックごとに値がスワップされることになる。もう1つの代入演算子である"="は、ブロッキング代入文と呼ばれる。"="による代入が行われると、代入先の値は即座に更新される。もし上の例で"<="の代わりにブロッキング演算子の"="を使用したとすると、flop1とflop2の値はスワップされず、手続き型プログラミング言語のように、コンパイラはflop1の値をflop2の値にセットするのだと解釈する（その結果、flop2とflop1の値にセットするという冗長な論理は無視されることになる）。モジュールはキーワードmoduleで始まる。その後のDiv20xが名前を示し、続く括弧内は端子リストである。6個の端子があり、それぞれの端子の入出力方向はモジュール中のポート宣言（inputとoutput）で指定される。最後のendmoduleでモジュールの終了である。モジュール内には、パラメータ宣言、ポート宣言、レジスタ宣言、イベント宣言、ネット宣言、ステートメントなどを記述する。// // 表題 イネーブル付20段カウンター// module Div20x (    // ポート宣言（外部から本モジュールへの接続を定義する）    input clock,  // クロック    input reset,  // リセット（正論理, ハイアクティブ）    input cet,    // カウンターとTC出力のイネーブル    input cep,    // カウンターのみのイネーブル    output reg [size - 1:0] count,   // 束線を示す。この場合5bit幅                                     // alwaysまたはinitialブロックでドライブする信号は                                     // reg型でなければならない    output tc);                      // regと明記していない、他の信号はwire型。                                     // ポート宣言したwire型信号のネット宣言は省略可能であり、省略することも多い。    // パラメータ宣言    parameter length = 20; // カウント段数    parameter count_zero = 5'b00000; // 5bit幅,2進数の0を表す     parameter count_one  = 5'b00001; // 5bit幅,2進数の1を表す    parameter size = 5;   // bit幅,基数の指定を省略すると32bit,10進数になる。    // always文。resetやclock信号の変化に同期し並列に実行される    always @ (posedge clock or posedge reset) begin                                     if (reset) begin // 非同期リセット            count <= count_zero;        end else begin            if (cet || cep) begin // イネーブル                if (count == length - 1) begin                    count <= count_zero;                end else begin                    count <= count + count_one;                end            end        end    end    // assign文。tcの値は実行中、継続的に値が与る    assign tc = (cet && (count == length - 1));endmoduleポート宣言やレジスタ宣言での[a:b]のような形式は、束線（多くはバス）を示す。例えば[3:0]であれば配線が4本あることになる。always節は、括弧内の信号を指定した条件に変化があったときに実行される。posedgeは信号が0から1に変化した場合を指定する。orは括弧内の信号のどれか1つでも変化した場合を指定する。上記のように、resetに合わせてreg型を初期化するのが基本的なデザインパターンである。ディレイの例は以下の通りである。...reg a, b, c, d;wire e;...always @(b or e)  begin    a = b & e;    b = a | b;    #5 c = b;    d = #6 c ^ e;  end上記のalways節は、もう1つの使い方を示している。たとえば、上の例では、リストに含まれる要素（bまたはe）が変化したタイミングでいつでもalways節が実行される。いずれかの変数が変化すると、即座に新しい値がaに代入される。ブロッキング代入文を使用しているため、bにはその代入後に（aの新しい値を用いて）新しい値が代入される。5単位時間のディレイの後、cにbの値が代入されると同時に、c ^ eの値が計算され、見えない保管場所に一時的に保存される。6単位時間後、保管されていた値がdに代入される。プロセス内（initialまたはalwaysブロック内）で操作される信号は、reg型を持つ必要がある。また、プロセスの外で操作される信号はwire型を持たなければならない。この時使われるregという名前は、必ずしもハードウェアのレジスタを意味するわけではない。