「ほっ」と。キャンペーン

とりとめのないことを書いております。
by tempurature
カテゴリ
全体
プログラミング
scheme
verilog
未分類
以前の記事
2016年 04月
2016年 03月
2016年 02月
2016年 01月
2015年 12月
2015年 11月
2015年 10月
2015年 09月
2015年 08月
2015年 07月
2015年 06月
2015年 03月
お気に入りブログ
PHPで競技プログラミング
メモ帳
最新のトラックバック
ライフログ
検索
タグ
人気ジャンル
ブログパーツ
最新の記事
情報処理技術者試験 お疲れ様..
at 2016-04-17 18:55
基本情報技術者試験 平成27..
at 2016-04-14 04:48
基本情報技術者試験 平成27..
at 2016-04-13 23:03
苦い薬(ハーブ、サプリメント..
at 2016-04-09 14:03
「おバカ度チェックリスト」を..
at 2016-03-24 09:54
外部リンク
ファン
記事ランキング
ブログジャンル
画像一覧
カテゴリ:verilog( 6 )
idealの読み方は?
verilog関連で、sdc制約を記述することがあって、その中でideal net(理想的なネット)という概念があります。

idealというのはreal(実在の)の反意語であって、それほどマイナーな単語ではないのですが、私はこれを「アイデアル」と読んでいました。しかし、会社の先輩は「アイディール」と呼んでいたので、まさか!!と思って調べてみると、案の定、私のほうが間違っていたようなのです。

その根拠としては、google検索で以下のように調べた際に、検索結果が

ideal アイデアル : 約58,500件
ideal アイディール : 約173,000件

となっていたためです。そーか、英語では「アイディール」の方に近い発音だというのはわかっていたのですが、日本人もアイディールと読んでいたのは驚きでした。

なぜって、warningやimageのように英語発音とカタカナ語が乖離している単語は結構あるからです。

とはいえ、自分がidealをアイデアルと読んでいるのは、数学用語のイデアルに引きづられているのではないかと思います。ちなみに、

ideal イデアル : 約167,000件

でした。

あと、tupleはタプルと読んでいますが、英語発音ではテュープル・タプルの2通りがあるようですよ。


[PR]
by tempurature | 2015-07-25 03:39 | verilog
【verilog】スクリプトの活用について
UNIX系のEDAツールを使っている時、スクリプトが活用できるかどうかが仕事の効率アップの鍵になることが多いようです。
UNIXの作業効率を上げるためのスクリプトの活用についてまとめました。

1. まずはプログラミングをしないで済ませられないか検討しよう。

UNIXには豊富なコマンドが用意されており、プログラミングをしなくとも編集や繰り返し実行などが簡単にできるようになっています。例えば、テキストファイルの一括編集にはsedを使います。ファイルの表示にはcat, head, tailなどを使用します。また、パイプ機能を使えばテンポラリファイルを作らずに複数の作業を行うことができます。

2. 次に、シェルスクリプトで済ませられないか検討しよう。

スクリプトを書く必要がある場合にだけ書くようにします。なぜなら、シェルスクリプトのデバッグは意外に難しいからです。特にsedのような正規表現が絡むコマンドはスクリプトの中に書く前に、その1文だけをコマンドラインで思うとおりの動作をするかデバッグしましょう。
 UNIXのスクリプト作成でperlなどよりもシェルスクリプトを薦めるのは、コマンドライン上で1文デバッグできるということがあげられます。
 また、スクリプトは100行を超えないのが理想です。スクリプトが長大になると、スクリプトのテスタビリティが失われてデバッグしづらくなるためです。スクリプトが200行を超える場合は、その記述の一部を別ファイルに抜き出せないかを検討した方がいいです。

3. perl, rubyは作業環境に用意されていないコマンドを実装したり、移植性を高めたりするために使おう。

例えば、realpathというコマンドは環境によっては用意されていない場合がありますが、rubyを使うと1,2行で実装できます。また、コマンドラインやシェルスクリプト上でperl, rubyの1行実行をするのも有効な使い方です。

4. pythonは使わない。

pythonは、モジュールのコンパイルを行うのでインタプリタによるデバッグがしづらいです。また、pythonの1行実行もpython特有のインデントルールによって、あまり使い勝手がよくないです。


[PR]
by tempurature | 2015-06-21 18:30 | verilog
【verilog】ポートリスト間の食い違いを素早く見つける方法
verilogでは、ポート数が多いモジュールを作成して、インスタンス化するようなことが多々あるかと思います。

/* chaplin.v */
module chaplin ( you_ll, never, find, a, rainbow, if_, you_re, looking, down );

input you_ll, never, find, a, rainbow;
output if_, you_re, looking, down;

endmodule

/* united_artists.v */
module united_artists;

chaplin actor ( you1, will, never, find, a, rainbow, if_, you2, are, looking, down );

endmodule

そのとき、モジュールのポート数が食い違ってシミュレータのコンパイルが通らないことがあります。しかし、シミュレータのエラーメッセージには「どのポートが」食い違っているかまでは教えてくれないことがあります。そのような場合に、私がやっているテクニックをまとめます(UNIX系OSの場合)。

1. 2つのverilogファイルをコピーして、テキストエディタでそれぞれのポートリストを
切り出す。

/* tmp1 */
you_ll, never, find, a, rainbow, if_, you_re, looking, down
/* tmp2 */
you1, will, never, find, a, rainbow, if_, you2, are, looking, down

2. テキストエディタ上で、スペースを空文字列に置換する。
(viでは、:%s/ //g)

3. コンマを改行文字に置換する。
(viでは、:%s/,/^M/g ただし^MはCtrl+V, Ctrl+Mと入力してください)

4. tmp1, tmp2に空白行がある場合は削除します

5. ソートします
sort tmp1 > tmp3
sort tmp2 > tmp4

6. テキストファイルを比較します
$ diff tmp3 tmp4
1a2
> are
8,9c9,11
< you_ll
< you_re
---
> will
> you1
> you2

この比較によって、chaplin.vには、are, will, you1, you2ポートが不足していて、
united_artists.vにはyou_ll, you_reポートが不足していることがわかります。



[PR]
by tempurature | 2015-06-21 17:16 | verilog
【verilog】定数記述の問題点
verilogではdefine、parameter、localparamによって定数を記述することができます。

<defineの問題点>
define記述はCでも問題がありますが、
verilogの場合は少し事情が異なります。

例えば、
gcc a.c b.c c.c
と入力するとa.outが出力されますが、
a.cで行ったdefine記述がb.c, c.cに影響を与えることはないです。

しかし、
verilog a.v b.v c.v
とした場合には、
a.vのdefine記述がb.v, c.vに影響を与えることを最近知りました。

なので、verilogのdefineはCのdefineよりも危険だということを
念頭においてdefineを使用するべきでしょう。
他の人のRTLを見た場合、defineはグローバルな定数で使っているか
ローカル定数の場合は難読化(わざと名前を長くする等)させているように
思いました。

<parameterの問題点>
バス幅の定義に使えない

<localparamの問題点>
バス幅の定義に使えない
シミュレータによっては使えない
(Verilog-95のキーワードでないため)

verilogの場合、定数はハードコーディングするのが正解の場合が
あるのでしょう。残念です。


[PR]
by tempurature | 2015-03-29 05:31 | verilog
【verilog】同期回路でグレイカウンター・ジョンソンカウンターは導入しづらい
普通のカウンターはバイナリカウンターといいます。

<グレイカウンターの問題点>
ASICの論理合成ツールでは、ハザードレスに合成するのが難しい。
(FPGAではIPを利用すればよいみたいです)
スクリプト言語(perl等)で真理値表を自動生成する必要がある。

<ジョンソンカウンターの問題点>
マイナーすぎて周りの人に説明することができない。
空きステートをつぶすのが面倒。

特別な理由がない限り、グレイカウンターやジョンソンカウンターを
使うのは控えた方がよいかと思います。

※グレイコードは非同期クロックドメイン間の信号受け渡しに
 使えるそうです。


[PR]
by tempurature | 2015-03-29 05:11 | verilog
【verilog】カウンターはダウンカウンターがおすすめ
カウンターにはアップカウンターとダウンカウンターがあります。
どちらがいいのか?
verilogのRTL記述例をあげます。

<アップカウンター>
localparam OVF = 8'd200;
reg [7:0] count;
always @( posedge clk ) begin
if ( start )
count <= 8'h00;
else ( count < OVF )
count <= count + 8'h01;
end

<ダウンカウンター>
localparam LOAD = 8'd200;
reg [7:0] count;
always @( posedge clk ) begin
if ( start )
count <= LOAD;
else ( count != 8'h00 )
count <= count - 8'h01;
end

上のアップカウンターの問題点はcountが200以上であったときに、
正常な状態(200以下)には戻らないということです。
一般的に空きステートに入った時には、抜けるようにするべきという
考え方があります。空きステートから抜けられないのがどのくらい
問題なのかは把握していないです。

ダウンカウンターの利点は、上記アップカウンターの構成より簡単に
自然に空きステート対策ができるという点です。

なのでさりげなくダウンカウンターを使いましょう。


[PR]
by tempurature | 2015-03-29 04:55 | verilog