k0b0's record.

Computer Engineering, Arts and Books

Verilog/SystemVerilog

Introduction to SystemVerilog. Simple test bench template

Simple test bench template Make a note of a simple test bench template. Simple test bench templete(SampleOfTb.sv) /** * SampleOfTb.sv */ **/ `timescale 1ps/1ps module SampleOfTb; /* Define Clock cycle */ parameter CYCLE = 10; /* Define the…

Introduction to SystemVerilog. Nbit NAND Gate by generate, for loop

Nbit NAND Gate by generate, for loop Describe N bit NAND gate with generate and for loop. Sample code(nandN.sv) /* nandN.sv */ module nandN #(parameter width = 8) (input logic [width-1:0] a, output logic y); genvar i; logic [width-1:0] x; …

Verilog/SystemVerilog $display

About $display Note about Verilog/SystemVerilog system task $display. Format of $display $display("Format", Argument0,Argument1...) Sample code /* test_display.sv */module test_display(); logic[15:0] x = 16'hffff; initial begin display(x);…

Verilog/SystemVerilog task文

Verilog/SystemVerilogのtask文 Verilog/SystemVerilogのtask文についてメモ。 task文の書式 タスクの定義 書式(1) task タスク名; 入出力ポートの宣言 信号の宣言 処理 ... endtask タスクの定義 書式(2) >|verilog| task タスク名 (入出力ポート,...,入出…

Introduction to SystemVerilog. Flip-flop (FF)

フリップフロップ(FF) SystemVerilogで各種FFを記述してみる。 D-FF(dflfl.sv) /* dflfl.sv */ module dflfl(input logic d, input logic clk, input logic reset, output logic q); always_ff @(posedge clk or posedge reset) begin if(reset) q <= 1'b0…

Introduction to SystemVerilog. About blocking assignment and non-blocking assignment

ブロッキング代入とノンブロッキング代入 SystemVerilogにおいてのブロッキング代入、ノンブロッキング代入(並列信号代入)についてメモ。 ブロッキング代入 一つの代入処理が終了するまで次の処理を行わない(ブロックされる)。記述の順番が回路の動作に…

Introduction to SystemVerilog. Data type and numeric expression

SystemVerilogのデータタイプと数値表現 SystemVerilogのいくつかのデータタイプをテストしてみる。 データタイプ データタイプ ビット幅 内容 bit 1 2値の符号なし整数(ビット幅指定可) byte 8 2値の符号付き整数 shortint 16 2値の符号付き整数 int 32 2…

Introduction to SystemVerilog. Logical delay

論理遅延 SystemVerilogで論理遅延を含めた回路を記述してみる。 論理遅延(logic_delay.sv) 論理遅延を含めたゲートの記述。論理遅延は"#"を用いて記述する。遅延の単位は`timescale 単位/時間精度で指定する。`timescaleで指定しない場合は遅延の単位は”n…

Introduction to SystemVerilog. Counter, Finite State Machine (FSM) (Moor Machine, Mealy Machine)

カウンタ、有限状態マシン SystemVerilogでカウンタ、有限状態マシンを記述してみる。 カウンタ カウンタ(counterN.sv) Nビットカウンタの記述。クロック信号(clk)の立ち上がり時にカウンター値(q)がカウントされる。なお、カウンターのリセットはリセッ…

Introduction to SystemVerilog. ROM and RAM

ROM、RAM SystemVerilogでROM、RAMを記述してみる。 ROM(Read Only Memory) ROM(ROM.sv) 4ワード3ビットのROMの記述。ROMは組合わせ回路で実現できるためalways_comb文+case文で記述している。 /* rom.sv */ module rom (input logic [1:0] addr, output l…

Introduction to SystemVerilog. Comparator, Multiplier

比較器、乗算器 SystemVerilogで比較器、乗算器を記述してみる。 Comparator(比較器) 比較器(comparater.sv) 比較器の記述。入力信号a、bを比較してその結果を出力信号として出力している。 /* comparater */ module comparater #(parameter WIDTH = 4) (i…

Introduction to SystemVerilog. Latch, register

ラッチ、レジスタ SystemVerilogで簡単なラッチ、レジスタを記述してみる。 ラッチ回路 ラッチ回路(d_latch.sv) Nbitラッチ回路の記述。always_latch文を用いて記述している。en(許可信号)が'1'の時のみ入力信号dを取り込む。 /* d_latch.sv */ module d_l…

Introduction to SystemVerilog. Combination circuit (decoder, priority circuit)

組合わせ回路 SystemVerilogで簡単な組合わせ回路を記述してみる。 デコーダ デコーダ(decoder3to8.sv) 3入力8出力のデコーダの記述。SystemVerilogのalways_comb文+case文を使って処理を記述。入出力信号のデータ型はlogicとしている。出力信号に関してはr…

Introduction to SystemVerilog. Combination circuit (basic gate, adder, multiplexer, tri-state buffer)

組合わせ回路 SystemVerilogで簡単な組合わせ回路を記述してみる。 論理ゲート 論理ゲート(logic_gates.sv) 基本的な論理ゲートの記述例。入出力ビット幅はパラメータで指定する。 /* logic_gates.sv */ module logic_gates #(parameter WIDTH=1) (input [WI…

Introduction to SystemVerilog. Module and port

SystemVerilogってVerilogHDLと何が違うの? SystemVerilogはVerilogHDLを拡張した言語であり、主に検証に関する機能が拡張されている。具体的にはVerilog-2005 の拡張であり、機能的には上位互換となっている。 2005年にSystemVerilog は IEEE Standard 180…

Verilog/SystemVerilogのparameterの使い方

parameter Verilog/SystemVerilogでは以下のようにparameterを設定することができる。parameterを使用することでモジュールの拡張性やコードの可読性が高くなる。 parameterの書式 parameter パラメータ名 = 値; parameterの記述例 module ff_para(ck, reset…

Verilog/SystemVerilogの条件コンパイル

条件コンパイル `ifdef 〜 `else Verilog/SystemVerilogでは`ifdef 〜 `else文を記述することによってプログラムを条件コンパイルすることができる。下記に条件コンパイルの書式を示す。str1が定義済みなら記述1をコンパイルし、str2が定義済みなら記述2を…

SystemVerilogの”暗黙のポート宣言”を試してみる

暗黙のポート宣言 従来のVerilogHDLではテストベンチの記述などでモジュールを呼び出す際にポート名と信号名を指定する必要がある。これはポート数が多くなるほど、その記述量は多くなり冗長となる。SystemVerilogではこのような冗長な記述を取り除くために”…

SystemVerilogの構造体(struct)を使ってみる

SystemVerilogの構造体 SystemVerilogの構造体を試してみた。(Cなどと同様に構造体(struct)とは別に共用体(union)もあるみたい。)構造体を宣言する際にpacked形式かunpacked形式か定義する(デフォルトはunpacked形式)。構造体をpacked形式で定義する…

SystemVerilogのlogic型

VerilogHDLでは記述する回路によってreg型とwire型を使い分ける必要がある。SystemVerilogでは新たにlogic型が導入されており、reg型とwire型を使い分けることなく全ての信号をlogic型で宣言することが出来る。これにより、reg型、wire型の使い分けのミスに…

SystemVerilogのalways_comb、always_ff、always_latch

SystemVerilogの3種類のalways文をメモ。 3種類のalways文を使い分けて記述することでコードの可読性が高くなったり、予期しない回路の生成を防ぐことが出来る。 always_comb 組合わせ回路記述する際に使うalways文。センシティビティリストには何も記述しな…

Modelsimのコマンド(vlog, vsim)スクリプト

Modelsimを使ってverilogソースをコンパイルしてシミュレーションするスクリプトを作成したのでメモしておく。 Modelsimのコマンドスクリプトサンプル スクリプトを実行するディレクトリ構成 sample/ |- sample.sv /*回路モジュール*/ |- sample_tb.sv /*テ…

intelFPGAのQuartus Prime Lite Edition(version 17.1)をUbuntu16.04(on Virtualbox)にインストールする

IntelFPGAのQuartus Prime Lite Edition(version 17.1)をUbuntuにインストールする システムの環境 ubuntu16.04 (on Virtualbox) 64bit Processor core : 1 Memory size : 2GB 1, 前準備 Quartus Primeに付随するModelSim-Altera (Starter) Editionを、Lin…

ModelSimをコマンドラインで実行する方法

MoselSimをコマンドラインで実行する方法をメモ。 1, vlib : 作業ディレクトリを作成 $ vlib dir 2, vmap : プロジェクト名と作業ディレクトリを関連づける $ vmap prj dir_path 3, vlog : ソースコードのコンパイル $ vlog test1.v test2.v -f file_list -w…

Verilog/System Verilogのgenerate文

for文を使って回路モジュールを任意個生成する方法があったよなぁと思い出しつつコーディングした。忘れないうちにメモ。下記の例ではgenerete文を使ってFFを4つ生成している。うまくgenerete文を使えば色々便利かも。 //Example of generating four FFs mod…

Icarus Verilog の引数オプション

Icarus Verilog(iverilog)の引数オプションをメモしておく。 書式 iverilog [-ESVv] [-Cpath] [-ccmdfile] [-g1|-g2|-g3.0] [-Dmacro[=defn]] [-pflag=value] [-Iincludedir] [-mmodule] [-Mfile] [-Nfile] [-ooutputfilename] [-stopmodule] [-ttype] [-Tmi…

Icarus Verilog の使い方(on MacOS)

インストール方法 以下のコマンドを実行してインストールする。 (注:Homebrew をインストールしていない場合は先にHomebrewをインストールする。) $ brew install icarus-verilog コンパイル 以下のコマンドよりVerilogHDLファイル(.v)をコンパイル $ ive…