忍者ブログ

EDA Blog

Verilog、SystemVerilog、SystemCなど、ハードウェア記述言語についてのブログです。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

[Quartus II] Nios II EDSのインストール

Nios II EDS 9.0がようやくインストールできました。
先日ダウンロードしたときはファイルが壊れていたのですが、FirefoxではなくInternet Explorerでダウンロードしたら正常にダウンロードできました。
ブラウザの違いなのかどうかは不明ですが。

拍手[0回]

PR

[SystemC] VCDからWLFへの変換

SystemCの入門書を読みつつ、サンプルコードを実行して学習しています。
波形表示用にVCDを出力できますが、そのままではModelSimでは表示してくれません。
ModelSimをインストールするとvcd2wlfというコマンドがインストールされますので、それを使うとVCDをWLFに変換できます。

使い方は
    vcd2wlf <入力VCDファイル名> <出力WLFファイル名>
です。

拍手[1回]

[verilog-mode] verilog-library-extensions

verilog-modeのAUTOINST使用時にC-c C-aを実行したときに、下記のエラーが表示された場合の対処。
AUTOINSTでインスタンスしようとするモジュールを含むファイルが見つからない場合に発生します。
top.v:6: Can't locate sample module definition
Check the verilog-library-directories variable.
I looked in (if not listed, doesn't exist):
c:/cygwin/home/user/verilog.top.v


ファイルの拡張子が.vではないために見つからない場合は、ファイルの最後に、verilog-library-extensionsを追加します。
たとえば、Quartus IIのEDA Netlist Writerは、拡張子.voというファイルを作成します。
そのモジュールをAUTOINST対象にするには下記の行を追加します。

// Local Variables:
// verilog-library-extentions:(".v" ".vo")
// End:

拍手[0回]

[Quartus II] Quartus II v9.0のインストール

Quartus II version 9.0が公開されました。
ここからダウンロードできます。

Quartus IIとModelSim-Alteraはインストールできたのですが、Nios II EDSはダウンロードしたファイルが壊れているようでインストールできていません。
2回ダウンロードしてもダメだったので、後日再挑戦しようと思います。

拍手[0回]

[SWIG] SWIGの導入

モダンPerl入門の第8章を読みましたが、XS言語を使って本格的にC言語とPerlの連携をするのは敷居が高そうです。

代わりに、簡単にスクリプト言語とC言語の連携をするツールのSWIG (Simplified Wrapper and Interface Generator)をインストールしてみました。
Perlだけではなく、Tclなどの他のスクリプト言語とも連携可能です。

マニュアルを読んでいますが、使い方は簡単です。
下記のC言語のコードexample.cをTclからアクセスしたいとします。
int fact(int n) {
if (n <= 1) return 1;
else return n*fact(n-1);
}

int my_mod(int n, int m) {
return (n %m);
}


SWIGに入力するファイルexample.iを作成します。
%module example
%{

%}

extern int fact(int);
extern int my_mod(int n, int m);


下記コマンドでラッパーファイルexample_wrap.cを作成します。
swig -tcl example.i


example.cexample_wrap.cをコンパイルして、example.dllを作成します。
gcc example.c example_wrap.c -shared -ltcl -o example.dll


loadコマンドでexample.dllを読み込めば、example.cで定義された関数factmy_modが呼び出せます。
$tclsh
% load example.dll
%fact 5
120
% my_mod 10 3
1
%


同じコードをPerlから呼び出すには、swigコマンド実行時のオプションを変えます。
swig -perl example.i


gccでコンパイルしてDLLファイルを作成するのも同じです。
Perlのディレクトリ名は環境に合わせて変更する必要があります。
gcc example.c example_wrap.c -shared -I/usr/lib/perl5/5.10/i686-cygwin/CORE \
-L/usr/lib/perl5/5.10/i6868-cygwin/CORE -lperl -o example.dll


PerlコードからはuseコマンドでDLLを読み込めば関数を呼び出せます。
#! /usr/bin/perl -w
use strict;
use example;

print example::fact(5), "\n";
print example::my_mod(10, 3), "\n";

拍手[0回]

[Quartus II] Quartus IIでTkを使用する

Quartus IIでは、Tcl/Tkを使ってGUIを作成できます。
Quartus II Command-Line and Tcl API Helpに下記のサンプルがあります。
注意点として、最初にinit_tkを呼ぶ必要があります。

init_tk

# トップレベルの作成、タイトル追加
toplevel .top
wm title .top "Hello World"

# ウィジェット追加
button .top.hello -text Hello -command { puts "Hello, World!" }
pack .top.hello -padx 20 -pady 10

# tkwaitを実行することで、作成されたウィンドウがクローズされるまで
# 実行されます
tkwait window .top


上記のコードをhello.tclという名前で保存し、Tools→Tcl Scriptsから実行すると、Hello Worldというボタンが表示されます。

拍手[0回]

[SyetemVerilog] SystemVerilog for Design (1)

SystemVerilog for Designを一通り読み終えたので、コードを書きつつModelSimを使ってSystemVerilogを勉強していこうと思います。

まずは、Chapter 2で出てくるpackageです。
definitionsというパッケージをdefinitions.sv内に定義します。
package definitions;
parameter VERSION = "1.0";

typedef enum {ADD, SUB, MUL} opcodes_t;

typedef struct {
logic [31:0] a, b;
opcodes_t opcode;
} instruction_t;

function automatic [31:0] multiplier (input [31:0] a, b);
return a * b;
endfunction // multiplier
endpackage // definitions


パッケージdefinitionsの定義を使用するモジュールALMALU.svに記述します。
module ALU (
input definitions::instruction_t IW,
input logic clock,
output logic [31:0] result
);

always_ff @(posedge clock) begin
case(IW.opcode)
definitions::ADD : result = IW.a + IW.b;
definitions::SUB : result = IW.a - IW.b;
definitions::MUL : result = definitions::multiplier(IW.a, IW.b);
endcase // case (IW.opcode)
end
endmodule // ALU

最後に、単純なテストベンチをALU_test.svに記述します。
import definitions::*;

module ALU_tb;
parameter PERIOD = 10;

logic clock;
instruction_t IW;
wire [31:0] result;

initial begin
clock = 1'b0;
IW.opcode = ADD;
IW.a = 32'b0;
IW.b = 32'b0;

repeat (5) @(negedge clock);

IW.a = 32'hdeadbeef;
IW.b = 32'b1;

@(negedge clock) IW.opcode = SUB;
@(negedge clock) IW.opcode = MUL;
@(negedge clock);

#1 $finish;
end

always #(PERIOD/2)
clock <= ~clock;

ALU DUT ( .* );
endmodule // ALU_tb

ModelSimでは、下記のコマンドでコンパイル・実行します。-svオプションをつけることで、SystemVerilogキーワードを認識してくれます。
vlib work
vlog -sv definitions.sv ALU_test.sv ALU.sv
vsim -c -do "add wave *; run 1us" ALU_tb


波形は下図のようになります。
enumで宣言したopcodes_t型の変数は、enum定義のまま表示されているので分かりやすいです。
waveform_030709.png

拍手[0回]

[Verilog] ModelSimでのデフォルト基数を変更する

ModelSimをインストールしたディレクトリにあるmodelsim.ini内のDefaultRadix設定を変えることで、波形表示時のデフォルト基数を変更できます。
たとえば、デフォルトを16進数にしたい場合は、下記のように設定します。
DefaultRadix = hex
多ビットの信号については波形表示時に毎回16進数に変えていたのですが、これでその手間が省けるようになりました。

拍手[0回]

モダンPerl入門

モダンPerl入門を買ってきました。
XS言語の部分に特に興味があります。
少しずつ読んでいこうと思います。

拍手[0回]

SystemC 2.2.0のインストール

SystemCも勉強しようと思い、Cygwin上にSystemCをインストール。

インストールの手順は、コーヒーを飲みながら検証の話でもさんのブログを参考にしました。
Hello, Worldの実行確認ではエラーが出てしまったのですが、bambooflow @WikiさんのWikiを参考にして解決できました。

拍手[0回]

カレンダー

12 2025/01 02
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

フリーエリア

最新CM

[04/11 なつたん]

最新TB

プロフィール

HN:
aston_martin
性別:
非公開

ブログ内検索

カウンター

アクセス解析