shtaxxx日記

コンピュータアーキテクチャについて研究している研究者の日記や技術紹介

Verilog HDL

Verilog HDLシミュレーション時に引数を渡す

シミュレーション実行時に引数を渡す $value$plusargs("arg_description", arg_var)を使う.当該引数がない場合には$value$plusargs()は0を返す. テストコード (test.v) ARG0とARG1が引数名,var_aとvar_bが実際に引数が渡される変数. module test; reg [7…

generateなしでforとスコープが使えるだと・・・

ふとtwitterでgenerateなしのfor文を利用している例があることを知り,試してみました. generateなしでforをべた書き,スコープを定義 module testtest; wire [3:0] OUT0, OUT1; test uut (OUT0, OUT1); initial begin $dumpfile("uut.vcd"); $dumpvars(0, …

always文中のNamed Block (名前付きブロック) でのreg宣言のあれこれ

scope1でreg宣言だけをするとSyntax Error module Test; reg [7:0] tmp0, tmp1; initial begin tmp1 = 0; #10; tmp1 = 1; #10; $finish; end always@* begin: scope0 reg [7:0] tmp0; begin: scope1 reg [7:0] tmp0; //tmp0 = tmp1; end tmp0 = tmp1 + 1; en…

名前付きブロック (Named Block)の中ならalways文中でもreg宣言ができる

scope0とscope1のそれぞれでreg [7:0] aを宣言 module Test; reg [7:0] b; always @* begin: scope0 reg [7:0] a; a = b; begin: scope1 reg [7:0] a; a = b + 1; $display("scope1: a=%d", a); end $display("scope0: a=%d", a); end initial begin b = 10;…

スコープ内変数へのアクセス

generate for (w=0; w

Icarus Verilog + vvpでシミュレーション時に引数を渡す

当該する引数がない場合,"$value$plusargs()"は0を返す. 引数は +arg=val のように書く. reg [2:0] mode; initial begin if(! $value$plusargs("mode=%d",mode) ) begin mode = 1; end $display(mode); end iverilog -o main.vvp main.v $ vvp main.vvp +…

Verilog HDLのgenerate文のスコープについて

Verilog HDLではgenerate文を使うことで変数やfunction文のスコープを定義することができる.本当にfunction文にスコープが有効なのか気になったので,試してみる.次のテスト用コードGENには3つのfunction testが定義されている. GEN内で共通のfunction te…

Verilog-HDLのtask文を回路記述に使ってみよう -まず手始めに-

taskでVerilogをCっぽく書いてみる・・・がしかし ハードウェア記述言語のVerilog-HDLにはtask文という構文がある. task文中では逐次的にreg変数への代入が記述できる. 通常,task文はテストベンチ中でテストターゲットの操作を行うために利用するが, これを…