忍者ブログ

EDA Blog

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

[PR]

×

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

[verilog-mode] verilog-auto-newline

verilog-modeでは、;を入力すると自動的に改行される設定になっている場合があります。
自動改行をオフするには、.emacsに下記の設定を追加してverilog-auto-newlineをnilに設定します。
(setq verilog-auto-newline nil)

拍手[4回]

PR

[verilog-mode] verilog-auto-star-save

[verilog-mode] verilog-auto-starの続きです。

verilog-auto-star-saveをtに設定すると、C-c C-aで展開した.*が保存時にも保持されます。
デフォルトではverilog-auto-star-saveはnilになっています。

verilog-auto-star-saveをtに設定するには、

(setq verilog-auto-start-save t)

とします。

展開された.*を元に戻したい場合は、C-c C-kを押すと保存された後でも.*に戻すことができます。

拍手[0回]

[verilog-mode] verilog-auto-star

SystemVerilogの.*を使うと、ポート名とネット名が同じであればインスタンス時にわざわざ記述する必要はありません。
記述は簡潔になりますが、他人の書いたコードをデバッグするときにはモジュール間の接続がすぐに分からずに苦労する場合があるかもしれません。

verilog-modeverilog-auto-starという機能を使うと、.*を展開してくれます。
ただし、この機能はデフォルトでは無効なので、.emacsに下記の設定を追加しておく必要があります。

(setq verilog-auto-star-expand t)


たとえば、下記のようなポートCLK、DIN、DOUTを持つモジュールがあるとします。

module sample (input CLK, input DIN, output DOUT);
logic ff0, ff1;
always_ff @(posedge CLK) begin
ff0 <= DIN;
ff1 <= ff0;
end

assign DOUT = ff1;
endmodule


そして、モジュールsampleを.*を使ってインスタンスしているモジュールがあるとします。

module sample_vt;
logic CLK, DIN;
wire DOUT;

sample DUT ( .*);
endmodule


C-c C-aを押すと、下記のように.*を展開してくれます。

module sample_vt;
logic CLK, DIN;
wire DOUT;

sample DUT ( .*,
// Outputs
.DOUT (DOUT), // Implicit .*
// Inputs
.CLK (CLK), // Implicit .*
.DIN (DIN)); // Implicit .*
endmodule


.*を展開した状態で保存しても、自動的に.*に戻してから保存してくれます。

拍手[0回]

Tektronix TDS3064BをPerlで制御する

別のブログに書いておいた記事です。
昔作成した、Perlを使ってTektronix社製のオシロスコープTDS3064Bを制御できます。
変数$commandが、オシロスコープに送るコマンドです。



use Socket;
use HTML::TokeParser; # TDS3064Bからの応答を解析するのに必要

# ソケットの作成
my $hostname = '192.168.0.4'; # TDS3064BのIPアドレス
my $port = getservbyname('http', 'tcp');
my $iaddr = inet_aton($hostname)
or die("Cannot convert hostname to IP address.");
my $sock_addr = pack_sockaddr_in($port, $iaddr);
socket(SOCKET, PF_INET, SOCK_STREAM, 0) or die("Cannot creat socket.");
connect(SOCKET, $sock_addr) or die("Cannot connect to $hostname.");
select(SOCKET); $| = 1; select (STDOUT);

# コマンドの作成
# $commandは、測定のソースをチャネル0に設定するコマンド
my $command = "measurement:immed:source ch0";
my $cmd = "COMMAND=$commandrn";
$cmd .= "gpibsend=Sendrnname=rn";

# TDS3064B内のCGIを使う
print SOCKET "POST /Comm.html HTTP/1.1rn";
print SOCKET "Host: $hostnamern";
print SOCKET "Referer: http://$hostname/Comm.htmlrn";
print SOCKET "Content-Type: text/plainrn";
print SOCKET "Content-Length: ", length($cmd), "rn";
print SOCKET "rn";
print SOCKET $cmd;
print SOCKET "rn";

# TDS3064Bからの応答を$respに連結していく
my $resp;
while () {
next unless /^/;
$resp .= $_;
}
close (SOCKET);

# ほしい情報は、TDS3064Bからの応答のtextareaタグに入っている。
# HTML::TokeParserでその内容だけ抜き出す。
my $p = HTML::TokeParser->new($resp) or die("HTML::TokeParser failed.");
my $tag = $p->get_tag('textarea');

# 応答は、$p->get_text()として見ることができる

拍手[1回]

Verilog PLI Reference Manual


ここからダウンロードできました。
当然英語ですが、各関数についてサンプルのソースも記述されているので、参考になりそうです。

拍手[0回]

ModelSimでPLI

ModelSim-Alteraで、Verilog PLIを使用してみました。
Cのコンパイルには、MinGWを使用しました。
Cygwinのgccコンパイラではエラーになるので注意してください。

C言語とVerilogのコードを用意します。
"Hello, World!"と表示する関数helloを、タスク$helloに登録しています。
それぞれ、hello.chello.vという名前で保存します。

C
#include 
#include "veriuser.h"

void hello() {
io_printf("Hello, World!\n");
}

s_tfcell veriusertfs[] = {
{usertask, 0, 0, 0, hello, 0, "$hello"},
{0}
};


Verilog

module hello;
    initial begin
        $hello;
        #1 $finish;
    end
endmodule

hello.cはgccでコンパイルし、hello.dllを作成します。
gcc -c -I<ModelSim directory>/include hello.c
gcc -shared -Bsymbolic -o hello.dll hello.o -L<ModelSim directory>/win32aloem -lmtipli


hello.vをコンパイルし、vsim実行時に-pliオプションでhello.dllを指定します。
vlib work
vlog hello.v
vsim -c -pli hello.dll -do "run 1 us" hello


"Hello, World!"と表示されます。
hello_022809.PNG

拍手[0回]

SHJSのテスト

SHJSを入れて、コードに色がつけられるようになった。
次は、背景に色をつけたい。

Tcl
puts "Hello, World!"
Perl
print "Hello, World!\n";
s/aaa/bbb/;
C
#include 

void main(void) {
    printf("Hello, World!\n");
}

拍手[0回]

リソグラフィ用語

TSMCのロードマップについての記事で出てきたリソグラフィについての用語を調べました。
Immersion Lithography
液浸露光
Numerical Aperture
開口数。NAと略される。
ML2
Mask Less Lithography。マスクなし露光のこと。

拍手[0回]

TSMCのロードマップ

EETimesに、TSMCについての記事が出ていました。
TSMC adds EUV to litho roadmap
TSMC to roll high-k/metal-gate duo at 32-nm

32nmでhigh-kとメタルゲートを導入し、22nmと15nmプロセス以降ではEUVを使用する
ロードマップだそうです。
22nm/15nmではマスクレス・リソグラフィを導入すると書かれていますが、マスクなしで
どうやってパターンを焼き付けるのか気になります。
この分野は詳しくないので、調べてみようと思います。

拍手[0回]

HCE

EDA Design Guidelineのこの記事で、イタリアのYlichronという会社がANSI-Cから
VHDLを生成できる動作合成ツールをリリースしたと書かれています。
ターゲットはFPGA向けとのことです。
VisualStudioと統合されていて、C言語のソースを変えずにVHDLに落とせるそうです。
会社のホームページからは試用版をダウンロードできるようです。

ANSI-CからRTLを生成するという点ではImpulseC/CoDeveloperと同じですね。
確かForteもFPGA向けのCynthesizerをリリースするというニュースが今年あった
と記憶していますが、FPGA向けの動作合成も本格化してくるのかもしれません。

拍手[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
性別:
非公開

ブログ内検索

カウンター

アクセス解析