Verilogインスタンス記述生成スクリプト

VerilogPerlを利用した、RTLのインスタンス記述生成スクリプトです。

RTLを引数で読めば、標準出力にインスタンス記述を出力します。

※日本語VerilogPerlの某有名ページを参考にさせて頂きました。


#!/usr/bin/perl -w

use strict;
use warnings;
use Getopt::Std;
use Verilog::Netlist;

my %opt = ();
getopts("hif", \%opt);
if ($opt{h}) { &help(); }
if ($opt{i}) { &MkInst(); }
if ($opt{f}) { &MkIOInfo(); }

sub help()
{
print << "ENDLINE";
Usage: ${0} [Optin]
Option:
-h :help
-i rtl :making instance
-f rtl :making i/o information
ENDLINE
}

sub MkInst {
my @FileList = @ARGV;

my $NetList = new Verilog::Netlist;
&ReadVerilogFiles($NetList, \@FileList);

&PrintInstance($NetList);
}

sub MkIOInfo {
my @FileList = @ARGV;

my $NetList = new Verilog::Netlist;
&ReadVerilogFiles($NetList, \@FileList);

&PrintIOInfo($NetList);
}

sub ReadVerilogFiles {
my ($netlist, $r_filelist) = @_;

foreach my $file (@{$r_filelist}) {
$netlist->read_file(filename=>$file);
}

$netlist->link(); # connection resolve
}

sub PrintInstance {
my ($netlist) = @_;

foreach my $module ($netlist->modules_sorted) {
my @ports = $module->ports_ordered;
if ($#ports == -1) { next; }

print ' 'x4, $module->name,' ', $module->name, "_0 (\n";

my $max = 0;
for (my $index=0; $index <= $#ports; $index++) {
my $size = length($ports[$index]->name);
if ($max < $size) { $max = $size; }
}

for (my $index=0; $index <= $#ports; $index++) {
print ' 'x8, '.', $ports[$index]->name, ' 'x($max-length($ports[$index]->name));
print '(', $ports[$index]->name, ' 'x($max-length($ports[$index]->name)), ')';
if ($index != $#ports) {
print ",";
} else {
print " ";
}
print " // ", $ports[$index]->direction;
if (defined($ports[$index]->net->width) && $ports[$index]->net->width != 1) {
print '[',$ports[$index]->net->msb;
print ':',$ports[$index]->net->lsb,']';
}
print "\n";
}

print ' 'x4,");\n";
print "\n";
}
}

sub PrintIOInfo {
my ($netlist) = @_;

foreach my $module ($netlist->modules_sorted) {
my @ports = $module->ports_ordered;
if ($#ports == -1) { next; }

print "\/\/ ",$module->name,"\n";

my $max = 0;
for (my $index=0; $index <= $#ports; $index++) {
print $ports[$index]->name;
if (defined($ports[$index]->net->width) && $ports[$index]->net->width != 1) {
print '[',$ports[$index]->net->msb;
print ':',$ports[$index]->net->lsb,']';
}
print "\t";
print $ports[$index]->direction;
print "\n";
}
}
}

テーマ : プログラミング
ジャンル : コンピュータ

2010-03-25 : Work-Linux-Perl : コメント : 0 : トラックバック : 0
Pagetop

Incisive/VCSのライブラリのロード方法はこれ

Incisive/VCS両者共、ライブラリを再帰的に読み込ませる事が可能です。

■ Incisive
-vlogext .hoge
-v lib.hoge
+libext+.fuga
-y libdir

■ VCS
+verilog1995ext+.hoge
-v lib.hoge
+libext+.fuga
-y libdir
2010-03-15 : Work-Product-Design : コメント : 0 : トラックバック : 0
Pagetop

SimVisionへのRTL読み込み

ncverilogでコンパルすると、snapshotを保存しました...と出るので、それを読み込ませてやればOK。

simvision -snapshot worklib.ほげほげ:v

テーマ : ソフトウェア開発
ジャンル : コンピュータ

2010-03-15 : Work-Product-Verification : コメント : 0 : トラックバック : 0
Pagetop

Sambaの設定はこうしよう

1. /etc/samba/smb.conf ファイルを編集します。変更内容は以下の通りです。

■ ワークグループ設定


workgroup = ワークグループ名


■ アクセスコントロール


hosts allow = localhost 127.0.0.1 10.10.10.


■ プリンターコントロール


load printers = no


■ 共有設定


[homes]
comment = Home Directories
path = %H/Work
browseable = no
writable = yes


■ [printers] の行頭に";"を入れる

2. ユーザーを追加します。

smbpasswd -a ユーザー名

3. 最後にサービスを再起動します。

service smb restart
2010-03-14 : Work-Linux-Env : コメント : 0 : トラックバック : 0
Pagetop
ホーム

プロフィール

zive

Author:zive
大阪在住、男

ブログ検索

月別アーカイブ

FC2カウンター