Verilog/SystemVerilog
VerilogHDLの言語仕様ではwireとして宣言されていない信号線は暗黙的に1bitのwireとして解釈される。一応、Warningとしてコンパイラが教えてくれるのだが、これが原因で何時間もデバッグする羽目になる事もある。。。 そこで、"`default_nettype wire”宣言と…
複数のモジュール内で同じヘッダファイルをincludeしたSystemVerilog記述をQuartus Primeでコンパイルしたところ、競合が生じてエラーが出た。 ModelSimでの論理シミュレーション時は大丈夫だったのだが、Quartus Primeのコンパイラは厳しいようである。 と…
IP Catalogを使ってシングルポートRAM(同期書き込み、非同期読み出し)を生成してみる。 FPGA(MAX10)でそこそこの容量のメモリを使いたいのだが、レジスタで構成すると、LEをかなり消費する。というわけで、IP Catalogで用意されている、シングルポートRAM(同…
クロック分周器 FPGAボードを使って、7セグメントLEDに結果を表示させたい時がある。 けれど、MHz〜GHzで動作されたんでは確認できない。 という事で、クロック分周器(50MHz -> 1Hz)を2つ記述してみる。 (どちらの記述も分周するのだけれど、出力される波…
チャタリング除去回路を記述してみる FPGAボードを使っているとスイッチをよく使う。 スイッチを押すとノイズ(チャタリング)が起こる。 というわけで、色々と参考にしてチャタリング除去回路を書いたのでメモしておく。 チャタリング除去回路(chatter.sv…
SystemVerilogで2種類のレジスタファイル(アドレス長:2ビット、レジスタ数:4、データ長:32ビット)を記述してみる。 レジスタファイル(レジスタとMUXで構成) 個人的にはこちらの記述の方が読みやすいかなぁ。 (レジスタ数が増えると、コードの行数が長くな…
$readmemb()でメモリの初期値を設定する $readmemb()の書式 2進数で初期値を設定する場合は$readmemb()を使い、16進数で初期値を設定する場合は$readmemh()を使う($readmemhの書式は$readmemb()と同じである)。 $readmemb("初期値が記述されたファイルの絶…
符号拡張 ビット連結を利用して、符号拡張を記述してみる。 ビット連結の記述例 // 8bitのデータを二つ連結して16bitの信号に代入 data_y[15:0] = {data_x_upper[7:0], data_x_lower[7:0]}; 符号拡張の記述例 // 上位8bitを符号拡張して16bitの信号に代入 da…
The synthesis result of Casex and Casez is the same. Details are on the following page. Are Casex and Casez are synthesizable or not? - Quora
Which is the best book and website to study verilogHDL coding ? https://www.quora.com/Which-is-the-best-book-to-study-verilog-coding book Verilog HDL (paperback)作者: Samir Palnitkar出版社/メーカー: Prentice Hall発売日: 2003/02/21メディア:…
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…
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; …
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文についてメモ。 task文の書式 タスクの定義 書式(1) task タスク名; 入出力ポートの宣言 信号の宣言 処理 ... endtask タスクの定義 書式(2) >|verilog| task タスク名 (入出力ポート,...,入出…
フリップフロップ(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…
ブロッキング代入とノンブロッキング代入 SystemVerilogにおいてのブロッキング代入、ノンブロッキング代入(並列信号代入)についてメモ。 ブロッキング代入 一つの代入処理が終了するまで次の処理を行わない(ブロックされる)。記述の順番が回路の動作に…
SystemVerilogのデータタイプと数値表現 SystemVerilogのいくつかのデータタイプをテストしてみる。 データタイプ データタイプ ビット幅 内容 bit 1 2値の符号なし整数(ビット幅指定可) byte 8 2値の符号付き整数 shortint 16 2値の符号付き整数 int 32 2…
論理遅延 SystemVerilogで論理遅延を含めた回路を記述してみる。 論理遅延(logic_delay.sv) 論理遅延を含めたゲートの記述。論理遅延は"#"を用いて記述する。遅延の単位は`timescale 単位/時間精度で指定する。`timescaleで指定しない場合は遅延の単位は”n…
カウンタ、有限状態マシン SystemVerilogでカウンタ、有限状態マシンを記述してみる。 カウンタ カウンタ(counterN.sv) Nビットカウンタの記述。クロック信号(clk)の立ち上がり時にカウンター値(q)がカウントされる。なお、カウンターのリセットはリセッ…
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…
比較器、乗算器 SystemVerilogで比較器、乗算器を記述してみる。 Comparator(比較器) 比較器(comparater.sv) 比較器の記述。入力信号a、bを比較してその結果を出力信号として出力している。 /* comparater */ module comparater #(parameter WIDTH = 4) (i…
ラッチ、レジスタ SystemVerilogで簡単なラッチ、レジスタを記述してみる。 ラッチ回路 ラッチ回路(d_latch.sv) Nbitラッチ回路の記述。always_latch文を用いて記述している。en(許可信号)が'1'の時のみ入力信号dを取り込む。 /* d_latch.sv */ module d_l…
組合わせ回路 SystemVerilogで簡単な組合わせ回路を記述してみる。 デコーダ デコーダ(decoder3to8.sv) 3入力8出力のデコーダの記述。SystemVerilogのalways_comb文+case文を使って処理を記述。入出力信号のデータ型はlogicとしている。出力信号に関してはr…
組合わせ回路 SystemVerilogで簡単な組合わせ回路を記述してみる。 論理ゲート 論理ゲート(logic_gates.sv) 基本的な論理ゲートの記述例。入出力ビット幅はパラメータで指定する。 /* logic_gates.sv */ module logic_gates #(parameter WIDTH=1) (input [WI…
SystemVerilogってVerilogHDLと何が違うの? SystemVerilogはVerilogHDLを拡張した言語であり、主に検証に関する機能が拡張されている。具体的にはVerilog-2005 の拡張であり、機能的には上位互換となっている。 2005年にSystemVerilog は IEEE Standard 180…
parameter Verilog/SystemVerilogでは以下のようにparameterを設定することができる。parameterを使用することでモジュールの拡張性やコードの可読性が高くなる。 parameterの書式 parameter パラメータ名 = 値; parameterの記述例 module ff_para(ck, reset…
条件コンパイル `ifdef 〜 `else Verilog/SystemVerilogでは`ifdef 〜 `else文を記述することによってプログラムを条件コンパイルすることができる。下記に条件コンパイルの書式を示す。str1が定義済みなら記述1をコンパイルし、str2が定義済みなら記述2を…
暗黙のポート宣言 従来のVerilogHDLではテストベンチの記述などでモジュールを呼び出す際にポート名と信号名を指定する必要がある。これはポート数が多くなるほど、その記述量は多くなり冗長となる。SystemVerilogではこのような冗長な記述を取り除くために”…
SystemVerilogの構造体 SystemVerilogの構造体を試してみた。(Cなどと同様に構造体(struct)とは別に共用体(union)もあるみたい。)構造体を宣言する際にpacked形式かunpacked形式か定義する(デフォルトはunpacked形式)。構造体をpacked形式で定義する…
VerilogHDLでは記述する回路によってreg型とwire型を使い分ける必要がある。SystemVerilogでは新たにlogic型が導入されており、reg型とwire型を使い分けることなく全ての信号をlogic型で宣言することが出来る。これにより、reg型、wire型の使い分けのミスに…