Welcome to Our Company
Home
Tutorial
Download
Opencores
F.A.Q.
Support
Purchase
Links

Information

 
 
Question Answer
Verilogサブセットで、サポートしている仕様は?
Specify Section、PLI、IEEE1364-Verilog-2001主要構文をサポートします。


以下は、Version 1.45でのサポート構文リストです。
No.は、Stuart Sutherland氏の「Verilog2001: A Guide to The New Feasutres of the Verilog Hardware Description Language」でのNo.です。

No Item Support
1 Combined port and data type declarations.
2 ANSI C style module declarations.
3 Module port parameter lists.
 4 ANSI C style UDP declarations.
 5 Variable initial value at declaration.
 6 ANSI C style task/function declarations.
 7 Automatic (re-entrant) tasks
 8 Automatic (recursive) functions.
 9 Constant functions
10 Comma separated sensitivity lists
11 Combinational logic sensitivity lists
12 Implicit nets for continuous assignments.
13 Disabling implicit net declarations.
14 Variable vector part selects.
15 Multidimensional arrays.
16 Arrays of net and real data types.
17 Array bit and part selects.
18 Signed reg, net and port declarations.
19 Signed based integer numbers.
20 Signed functions.
21 Sign conversion system functions.
22 Arithmetic shift operators.
23 Assignment width extension 32 past
24 Power operator
25 Attributes.
26 Sized and typed parameter constants
27 Explicit in-line parameter redefinition
28 Fixed local parameters.
29 Standard random number generator.
30 Extended number of open files
31 Enhanced file I/O.
32 String read and write system tasks.
33 Enhanced invocation option testing.
34 Enhanced conditional compilation.
35 Source file and line compiler directive
36 Generate blocks.
37 Configurations.
38 On-detect pulse error propagation
39 Negative pulse detection
40 Enhanced input timingchecks.
41 Negative input timing constraints.
42 Enhanced SDF file support.
43 Extended VCD files.
44 Enhanced PLA system tasks.
45 Enhanced Verilog PLI support.


VerilogからVHDLのトランスレータはないのですか? ありません。当面、開発予定もありません。
今後のVersionUp予定は?



現在は、SVパーサ上に、実装中です。



現状の開発速度からみて、パーサの初期リリースが12月、かなり限定的なSVサブセットのリリースが3月頃と予想します。


  • SystemVerilogパーサ
  • コンパイルーRunTimeの分離
  • 高速化
  • Linux
  • PLI/VPI サポート拡充
  • 64ビット
  • GUI ご要望の実装
  • SWIFTのサポート


 あるユーザ様が、MIXIで、コミュニティを立ち上げてくださいました。興味のある方は、 お気軽にご参加下さい。


VHDLから、Verilogへのトランスレータは、何でも変換できるのですか?  いいえ。対応不能な記述はあります。

 ・演算子定義
 ・IEEEライブラリ以外の記述
 ・Config文.
 ・Attribute
 ・VITAL 、PRIMITIVE定義、その他

 等です。 
 
特にハードウェアから遠い記述だと、ソース修正が必要となる確率が上がります。これは、トランスレータの問題というよりは、そもそも違う言語なので無理があるということかもしれません。Veritakでは拡張仕様でシミュレーションレベルでは、ソース修正ができるだけ少なくなるように配慮しています。
なお、System Verilogでは、VHDLからの変換負担がかなり軽減される見通しです。Vertak シミュレータ本体がSystem Verilogへ対応するに従い、VeritakトランスレータもSystem Verilogへの変換に切り替えて行きます。
トランスレータを通した後の著作権は? トランスレータは、著作権を主張しません。
原作者のCOPYRIGHT表示が残るようになっています。
Veritakの目指しているものは?
SystemVerilog
現在、Veritakは、Verilog2001準拠仕様ですが、プリプロセッサが、3K、GUIが40K,、コンパイラ・シミュレータが180K行になっています。
 
最終的にはSystemVerilogの実装を目指していますが、さらに5万行程度の記述が必要と思われます。これができると、クラス,struct,typedef,union,enum等のC/C++的記述もできるようになります。SystemVerilogは=Verilog2001 + C++みたい仕様で、かなり大規模な言語仕様です。
 

<シミュレータの開発言語について>
・PCのメモリとCPUが高性能になり、昔、数十分かかっていた数万ゲートのシミュレーションがVeritakで15SECで出来て満足していると、100万ゲートレベルのRTLシミュレーションでは「遅い」と言われてしまいます。また、最近のサポート事例ですが、32MBのSDRAMをモデリングしているユーザがいて、こちらが驚いてしまいました。(Verilogだと4値なのでこのObjectだけで64MB食ってしまう。VHDLでは128MB)これだけPCが高性能になっても、まだCPUとメモリは足りません、というよりこの関係は、当分変わることがない(真理に近い)ような気がします。VHDLとVerilogでは、単純に必要メモリは倍違うし(その結果シミュレーション速度もVerilogの方が速いです。(また、SystemVerilogでは、Speed Accelerate用に2値もあります。)高性能なCPU・ASIC分野でVerilogが好まれるのはここにあります。)開発言語は、今の時代、C++でなくてもいいような気がしますが、シミュレーション速度を考えると選択の余地はないのです。

WEB EDITION/WEB PACK+Veritak
フリーのWEB Editionでもゲート規模でいえば、搭載RAMも含めると100万ゲート規模の開発が可能な時代になってきました。設計ツールさえ整えれば、独自アーキテクチャでCPU・DSP等何でも設計できます。しかもバス幅は、16ビットとか32ビット等外部バス幅に制限されることはありませんし、PLLでCLOCK周波数も思いのままです。FPGAの能力は一昔前のそれとは比べ物にならないくらい大きなものになっています。特定計算分野では、ペンティアムを凌駕することも可能でしょう。このような潜在能力が高いFPGAのH/W資源を効率よくプロセシング(コーディング)するための設計ツールとなることを目指しています。

NYSL FPGA CPUコア
いまはもう、「ミニコンピュータ」が死語になっていますが、その昔、CPUは、ラックにはいっていました。フロッピーディスクや、ハードディスクのコントローラ周辺を「チャネル」と言って、各々、今のPCボード以上に大きい基板でTTL/ECL/ゲートアレーで設計されていました。レジスタ演算300nsを豪語した時代です。実験室のHP64000エミュレータや国産初の16ビットプロセッサを設計した優秀な人達を垣間見ながら、そんな人達を雲の上のような存在に感じていました。68000の設計に100人月かかったと言われた時代です。しばらくして私もゲートアレーを設計するようになりましたが、ゲートアレーの2Kゲートを設計するのに2ヶ月ではきつい、といった上司とのやりとりを覚えています。(あるVeritakユーザ(先端のシステムLSIデザイナー)によると最近は、100Kゲート/人の生産性だそうです。隔世の感がありますね。)

 時代は変わり、HDLと論理合成器で、誰でも(論理設計のエキスパートでなくとも)FPGAで、オリジナルCPUを設計できる時代になりました。今や、FPGAの片隅にCPUを忍ばせておくこともできる位にFPGAのリソースが豊富になりました。そう、自分仕様の自分のプロセッサ設計し、実際に走らせるできることができます。GCCのMDをいじれば、C/C++/Fortran/ADA/JAVAも走らせることが可能でしょう。Cが走れば、その上でOSも走らせることができます。

Veritak開発者自身、H/W技術者ですので、FPGA用CPUコアを設計してみたいと思っています。しかし、オープンコアの互換CPUコアでは、シミュレータで走らせるのは問題なくとも、実際にH/W化して世にだすとなると著作権、パテントの問題はついてまわります。また、パテントの問題をクリアしても、GPLではソース開示の義務が生じます。
ところでマイクロプロセッサが誕生して以来基本アーキテクチャは変わっていません。そこで、枯れた技術のみを使用するFPGA用CPUコア(GCCで動く)をNYSL(&パテントの縛りがない)を設計してみたいと考えています。いつか、LINUXやロボットを自分のCPUで走らせてみたいですね。これはH/W技術者としての夢です。0と1だけの閉じた世界から、技術の積み重ねによって壮大な世界に展開される不思議を体現してみたいと思います。
会社の手続き上、見積書、請求書が要るのですが。 メールでご指示下されば、対応します。決済方法、時期についてご指示いただければ、対応可能です。
XLやVCS等のプロテクトライブラりは? 対応していません。将来的にも対応できません。
どんな人がVeritakを使っていますか? Veritakは、高速なHDLシミュレータです。10GB以上の圧縮波形Save(VCDでは、100GB以上に相当)、さらに高速化したコンパイラVersion、64ビット環境対応、SystemVerilog対応等、機能強化にも取り組んでいます。
LSI開発作業の殆どの時間が、RTL記述と検証作業に費やされることに着目して、RTLのデバッグ効率アップにフォーカスしています。LSIエンジニアによるLSIエンジニアの為のシミュレータです。


LSIデザインエンジニア/Drが自宅で使うシミューレータとして、また、Verilogの言語習得用、自作ロボット等、知的な電子工作で使われる方、と様々のようです。理由は、よく分かりませんが、日本・海外共、研究者の方が多いような気がします。勿論、現役バリバリのLSIエンジニアの方も大勢いらっしゃいます。(おかげさまで、日本でLSIを設計されている主要な企業では、大体、お使いの方がいる筈です。)TODOLISTを見ていただければ、多くの改善提案は、実業務効率UPにフォーカスした提案であることがお分かりいただけることと思います。



ユーザの皆様からのご意見、ご要望をお聞きしてその機能の必要性に得心することも多いです。特に、日本のプロフェッショナルLSIデザイナの方々からは、多くのご示唆をいただき、急速に改善することができました。1Userとしても大変使い易くなったと思います。半年前のリリースとは、比べるべくもありません。ここで、会社名とお名前を挙げてお礼を申し上げることはできませんが、Userが最大のContributerです。
本当にありがとうございます。

Veritakを駆使して是非、日本からもオープンコアで世界に名を馳せる人が出てきてくれれば嬉しいです。
英語版が出るとのことで楽しみにしています。日本から、世界に向けて、こういうソフトウェアの貢献ができることはすばらしいことだと思います。英語版がでたら、一緒に仕事をしている海外の友人にプレゼントしたいと思っています。
・・・。
その際、私がライセンス料を支払い、彼に譲渡することは認めて頂けるでしょうか。
3.15Aよりノードロックになりました。
From the licensing it was not clear to me how many licenses are needed if one person runs the regressions over 5-10
machines. It is clear for interactive use as it is one license per person
using Veritak.
1 license /PC is required.
One question that the group manager at my client's company has is if he gets a lot of licenses of Veritak, what kind of support he should expect over the next few years.
Nothing special,same as your client were you.
学生が卒業した後、ライセンスを持って出る事が考えられます。
学生が研究室以外のPCの載せる場合には期限付きにするか
フローティング・ライセンスだと良いのですが、どうでしょうか。
3.15Aより、ライセンス方式をノードロックに変更しました。



 
Veritakの開発とサポートをお一人でやっているのでしょうか?もしそうなら凄い.. そうです。迅速なサポートを心がけています。

ライセンス
の形態がCPU IDによるノードライセンスへ移行した事を先ほど知りました。
会社と自宅でVeritakを愛用しているものとして、どのような対応を取るべきか考えてしまいます。
レジスト済みの旧ユーザーは、当面どのようにすればよろしいでしょうか?
ノードロックライセンスは、新たに購入される方に適用します。旧ライセンスユーザ(Veritak3.15A以前に購入された方は、自動的にPro版扱いになっております。現在のシェアウェア(Basic)版は、使用できません。今までどおり、ご自身でお使いになられる限り、自由にアップデートしたものを会社・自宅・学校・研究室・実験室を問わず、何台でもお使いください。

ライセンスを継続的に追加していこうと思うのですが,ノードロックですと
管理しきれないで困りますが,将来的にはフローティング・ライセンスにして頂
くと助かります.
将来的に検討したいと思いますが、当面現在のスタイルです。
シェアウェア版について.. Pro版とシェアウェア版について
  • 企業内で仕事に使う用途をPro用
  • 個人のHDL学習や電子工作用途に使う用途をシェアウェア用

として分けました。機能の違いについては、WEB tutorial 6章をご覧ください。


シェアウェア版のアップについては、WEBサイトでメジャー Versionアップ時にアップします。Vectorは、不定期に(数ヶ月に一回程度)安定版を追いかける形になります。なお、お仕事でお使いでしたら、迅速なサポートのPro版をご購入いただきたくお願いいたします。



項目 シェアウェア版(Basic版) Pro版
呼称 Veritak-Basic Veritak-Pro
用途 個人用途 お仕事用
価格 4,830円(税込み)
27,000円/17,000円(税込み)
取り扱い Vectorのみ(学生の方でVectorをご利用できないときは、サポートまでご相談ください。) 菅原システムズ
ノードロック ありません あります
期間制限 ありません あり/なし
VersionUp Vectorサイトは、数ヶ月に一回、本サイトは、メジャーVersion up時 期間制限版は、期間内のみ使用可能です。
書類他 発行できません。 請求書、見積書、納品書、ライセンス発効書、領収書の発行可能です。
サポート あります 優先的にサポートを行います
機能の違い WEB tutorial 6章をご参照ください

現在VeritakホームページからダウンロードしたPro版を試用で使っていますが、Vectorで購入する場合は一度アンインストールしてインストールしなければだめでしょうか?
評価期間でVHDLのシミュレーションの評価をしたいのですが..
ModelSimのように複数バージョンをインストールできますでしょうか?
アンインストールする必要はないです。ただ試用期限は現在共通になっておりまして、アンインストール・インストールにかかわらず、16日で切れます。サイトでもメジャーリリース時にアップするようにしました。サイトにあるBasic版は、旧シェアウェア版とは、ライセンスを分けていますので、新しくご試用、ご評価が可能です。(旧シェアウェア版ライセンスでは動きません)


複数Versionインストールは対応していません(最後にインストールしたのが登録されます)が、インストールフォルダのVeritakWin.Exeがメインプログラムで、それを
アイコン化すれば、そのVersionが呼び出せます。(複数起動については、F.A.Q.345をご参照ください。)

VHDLトランスレータのことでしょうか?このツールは、現在サポートしていません。(事情と現状については、F.A.Q.238/242/312/317/181をご参照ください。)
ボリューム・ディスカウントは、もしあっても、百のオーダーでしょうか? ディスカウントは2007年内で終了いたしました。

既に購入済みで、ライセンスを請求されていないお客様は、なるべく一年以内に完了するようにお願いいたします。
PCのHOST IDの変更は
一度パスワードを発行した後でも無料で変更は可能でしょうか。
基本的にノードロックですので、インストールしたPCが故障等により使用不能になった場合に限らせていただいておりますが、Pro1については、3年間は、その旨お申し出いただければ、無料で再度ライセンスを送付しております。
アップグレートについて Pro−1ライセンスでご購入された方は、今後リリースされるすべてのUpgrade/Updateに対応します。
振込処理についてライセンス発行後
の振込でもよろしいでしょうか。
はい、事務処理に2-3ヶ月かかるのは、問題ありません。
Veritak-Pro1の購入を検討しております。
Veritak-Pro1のライセンスについて質問させて下さい。

> インストールしたPCが故障等により使用不能になった場合、期限内版は、
> 期限内の間、期限なし版は3年間、その旨お申し出いただければ、
> 再度ライセンスを送付いたします。

とありますが、3年間の意味について質問です。

例えば、
@ 2007/11に Veritak-Pro1を購入し、PCにインストール
A 2008/12 に PC買い替え。 新PCに Veritak-Pro1インストール(ライセンス再
発行)
B 2010/12 に PC買い替え
となった場合に、Bの時点で Veritak-Pro1 を使用する場合、
@の時点(初回インストール時(購入時))から3年経過しているため、ライセンス
再発行不可となるのでしょうか?
それとも、Aの時点(再インストール時)から3年以内なのでライセンス再発行可能
となるのでしょうか?
ご容赦ください。ご購入から3年間と解釈してください。例の場合、10年10月にPCを買い換えたとお申し出があれば、再度ライセンスを発行します。しかし、10年12月では、発行いたしません。なお、ライセンス自体は、そのPCに永続ですので、故障しない限り、Pro1の場合は、Update/Upgradeを適時行うことが出来ます。


Veritak使用方法について 

Question Answer
時間0で、トリガが検出されません。次のソースで、$displayが動きません。


initial begin
 edge=0;
end
下位モジュールで、
always @(negede edge) begin
 $display("edge detected %b",edge);
end

シミュレーション最初の非同期Preset動作がModelsimと違う。
Project Optionを変更したら同じになったがどちらがいい...
Project OptionのThread Generate Sequence の設定を上にしてください。(After all always threads doneにCheck)。

Verilogの言語チュートリアルにも書きましたが、シミュレータによる相違の一つで、言語仕様でスレッドの生成順序が規定されていないことによるものです。詳しくは、Verilogの言語チュートリアル第5章シミュレータの内部構造-時間とイベントをご参照ください。



 Verilog 言語仕様上は、どちらの設定でもOKです。どちらがいいということ はありません。
 デフォルトと反対の設定ですと、全てのAlwaysが実行されてから、Initialが実行されます。デフォルト設定ですと、それが、Module内でAlways->Initial、 次のModule内でAlways->Initialという風に実行されます。(Stepで確認できます。)
 Power On時は、どうしてもThread依存になってしまいますが、Thread依存コードは、 Power On後の最初の数パターンで吸収されるテスト記述とすることををお勧めします。Option設定 を変えてPower On後の数パターン後、一致しないようだと、Thread 実装Seq. 依存コードになっているということです。これは、「他のシミュレータと結果が違う」ことを意味します。たとえば、Tutorial にあるPICの例は、Project Optionが逆だと、 パターンズレが生じてFailとDisplayされます。これは、使ったシミュレータのThreadシーケンスに依存したコードになっている悪い例です。 
 ASIC屋さんへパターンを提出する際、PowerOn後の数パターンをxxにすることは、普通に行われていると思います。
=>Ver.1.47から、新たなオプションをDefaultとしました。
Project OptionでSave All Sim DataにCheckをしないと波形がおかしい。Checkをすると遅くなる。 仕様です。波形をご覧になる場合は、Save All Sim DataをOnにしてください。Onにすると全波形を圧縮しながらシミュレーションを行うので遅くなります。
$fscanfが動かない $fscanfは、システムファンクションとして規定されているので、戻り値の記述が必要です。(たとえば、 a=$fscanf..)
Version1.22よりコンパイルエラーからWarningに変更します。
4 「ステートに名前を付ける」が機能しない。 パラメータリストでは、[msb:lsb]を明示してください。
たとえば、
parameter [2:0] vidle = 3'd0,vvoid = 3'd1,vwld = 3'd2,vsen = 3'd3, vild = 3'd4,vinter = 3'd5;
のようにビット幅[2:0] を明示します。
5 NCSIMを使用しています。Veritakでサポートしていないタスクは、無視するようにできないでしょうか?
Unique Keyword Veritakは、Veritak内で暗黙に宣言されています。`ifdef Veritakで逃げてください。サンプルソースは、regression testフォルダにfmonitor_test.vがありますので、それをご参照ください。
6 Read-Onlyレジスタの動作確認をする場合、テストベンチではforceで  内部ノードを所望の値に設定し、レジスタリードをすることで動作確認
していますが、forceの書き方によりコンパイルがエラーとなります。
 (Verilog-XLでは問題なくコンパイルできます)
Veritakのバグです。1.24Aで修正しました。1.41Aより、NET構文のFORCE/RELEASEも対応しました。
信号処理の回路を検討しているので、波形をアナログで表示したいのですが、 どうすればいいのでしょうか? Tutorialに載せていませんでした。載せました。
ウィンドウズ2000で動かしたいのですが、可能でしょうか?
  また、2000に正式対応する予定はありますか?
Windows2000もXP系なので、何ら問題なく使用できます。Release時の検証環境としては、XPを使っているのでXPとしかしていませんが、サポートとしては、Windows2000も行いますのでご安心ください。
数々の改善のおかげで、veritakはそれほど規模の大きくないブロックレベルでのRTL-Simに使用するには重宝しておりますが、チップレベルでの大規模回路でのデバッグへの適用を考えるとSim実行時間で問題があります。
NC-Verilog(UNIX)に比べて遅過ぎるのですが。


=>3.00で、速度計測してみました。3.1ユーザレポートによりますと,ベンチによりますが、PEからSE程度の速度のようです。 NC/VCSとの比較では、1/5程度と推定しています。


10 仮想メモリの最大サイズが小さい場合、さまざまなエラーメッセージを出力する。
Windows2000、実メモリ128Mバイト、仮想メモリ最大384Mバイ
トで発生。

仮想メモリの最大サイズを大きく設定する。
とりあえず仮想メモリの最大サイズを768Mバイトに設定して症状が発生しなくなった。
Veritak内部では、 シミュレータエンジンスタートアップ時に仮想メモリを比較的大容量取得しています。
このときメモリが確保できないとエラーとなります。その場合は、下記1)2)のいずれかを実施してください。
 
 1)ご掲示方法のように仮想メモリを増やします。
 2)プロジェクトを構成することで、WaveformView用の取得仮想メモリ設定を変えることができ、必要な仮想メモリ量を少なくできます。
 
<方法>
 A)プロジェクトを構成します。
 B)プロジェクト設定=>MAX_DISK_CAPACITY_FOR_SAVE_DATA 400MBを220MBにします。
 C)一旦プロジェクトをSaveし、LoadProjectします。
 
 
 
11 RTLシミュレーションにおいて、ALTERAのPLLマクロ(メガファンクション:altpll)を使用すると、
(RAM,ROMマクロではそんなに大幅な速度低下はないのですが、)PLLだけは大幅な速度低下となってしまいます。

Version1.41Aにおいて改善しました。

=> ユーザ様から[PLL記述で、10.5倍、PLLを含まない記述で3倍程度になった。」との報告をいただきました。ありがとうございました。
12 generate文でインスタンスを記述するとき、上位層で記述したパラメ
ータが下位層モジュールにオーバライドされていない。そのため、下位層
デフォルトのパラメータが用いられ、warningが出る。またそのため正常なシミュレーションができない(defparamを用いた場合)
VCSでは問題のない記述です。
 Verilog2001 generateはVersion1.44よりサポートしました。
13 プロジェクトを起動するとメッセージWindowが起動しますが
Windowのタイトルバーの”Veritak 127”とありますが、
これはバージョンを意味しているのでしょうか?
バージョンでしたら次回のソフトのUpDate時にでも
修正していただけますでしょうか?

使用環境は、
OS WindowsXP
Veritak Ver1.29A です。
これは、読み込んだプロジェクトファイルの冒頭に書いてある
  Version Noです。この場合は、Version1.27以上で作成されたプロジェクトファイルを読み込んだことを示しています。
  Versionが上がって、プロジェクトファイルにSaveする情報が増えたときだけ、書き直していますので必ずしも、お使いのVeritak Versionを現していません。(Version1.29では、情報追加がありませんでした。)
  
  そういう訳ですので、そのままとさせてください
Version.1.50から、VersionUpの際は、更新することにしました。
14 RTLシミュレーションで、A社やX社などベンダーオリジナルのオリジナルファンクション
 (MegaFunctionやMegaCoreなど)を使用したシミュレーションの方法が今ひとつ
 解りません。ご教授頂けると幸いです。
Veritak チュートリアル 5 ゲートシミュレーションで、FPGAベンダのライブラリを使ったシミュレーション例(RTL/ゲート)を行っております。御参照ください。なお、FPGAベンダライブラリは、プロジェクトと同じドライブにある必要があります。ないときは、COPYして同じドライブになるようにしてください。
15 ツールチップのon/offは出来るのでしょうか? WaveformView上、マウス中ボタンでメニューがでてきます。
16 Xilinx CoreGenで生成したコアでコンパイルエラーが発生する。
DCM の記述でコンパイルErrorが発生する
1.44でFixいたしました。 1.44よりプロジェクトのLIBフォルダを指定できるようになりました。これによりフォルダ内ファイル全部のSelectをしなくてもよいようになりました。
 DCMの記述は、Real Case文で、1.44よりサポートしました。
17 Altera primitive Library
を使った記述で、コンパイルが終了しない。
Altera の*atoms.v は、Primitive Libraryになっておりゲートレベルシミュレーションの為のライブラリです。この場合は、Project Optionの Alteraをチェックしてみてください。
 
また、Altera Primitive Livrary(特にメモリを含んだ記述)は、必要以上にメモリを馬鹿食いします。たとえば、Altera Primitive Libraryを使った 32KB メモリ,5000LUTの記述で、500MB 位Veritakは消費してしまいます。VeritakでAltera ゲートレベルで扱える範囲は、PCメモリの搭載量にもよります。(EP1S60+32MB Memoryで、コンパイルに2GBのメモリを必要とした例がございます。)

Veritakは、RTLにフォーカスしているシミュレータです。大規模Projectのゲートレベルシミュレーションでは、規模的な制限があることをご了承ください。
  
18 Simulationが進まない。
Silosでは、No convergence during time simulation エラーが出るが。
無限ループ記述をチェックしてみてください。 Alaways/Initialで記述される無限ループは、DebugモードPauseで止まるはずですが、Net記述で時間の進まない無限ループだと 止まらない仕様になっております。Simulationが進まなくなる時刻手前からStep実行により記述のデバッグを試みてください。
 
19 Design規模の制限は? ・Veritakは、設計の殆どの時間が、RTL/テスト記述/RTL検証時間であることに注目して、RTLにフォーカスしているシミュレータです。

・RTL レベルで使い勝手がよいのは、個人で設計できる限界に近いASIC10万ゲートクラスではないかと思います。このレベルでは、トレースモードを使っても速度低下はそれほど感じないと思います。
 
 RTLレベルの限界は、PCメモリに依存します。500MBメモリ搭載のPCでは、ASIC100万ゲートレベルが可能と思われます。(このレベルでは、NCとの速度差は、10倍近くになると思います。) 
 いずれにいたしましても、記述によりますので試用時に御確認ください。
ゲートシミュレーションについては、17項を参照ください。



20 wire #(real-real) a=b;
でコンパイルエラーが出る
Net Real Delay Expressionは、Real単項だけの限定サポートになっておりました。Version1.44(1/11)リリースより通常のExpressionに対応しました。
21 VHDL->VerilogトランスレータがWindowsXPでないと使用できないとのメッセージが表示されます。

当方の使用OSはWindows2000ProSP4です。
Version 1.44よりWindows2000に対応しました。

22 Veritakの使い方ではないのですが、realの使い方を説明した文献がほとんどなく、よくわかりません。 インストールしたフォルダのなかに「regression test」フォルダがあります。これは、コンパイラの検証に使ったサンプル集です。(1.47では270個程あります。リリース時には、これで、Failがないことを確認しています。)そのなかでrealを扱ったサンプルもありますのでgrepしてみてください。
 またオープンコア「デザインウェーブコンテスト2005課題を解く」,または、「演算 除算/対数/平方根のH/Wアルゴリズム」で、realを使ったシステムシミュレーションを行っています。ご参考になるかもしれません。
23 ProjectをHDDではなく、USB
フラッシュに置くとコンパイルできない。HDDでは、問題ない。
メルコ バッファロー製 RUF-C64Mで問題があったとのことでしたが、しかしすでに販売中止品でしてしかもUSB1.1準拠でした。入手を試みたのですが、入手できず、再現にいたっておりません。なお同系列のUSB2.0では、問題なかったとの報告をいただいております。
24 Xilinx Coregen LibraryのMemory で、EC=220エラーが出てコンパイルできない。
RunTime warningがでる。
CoregenのRTL記述に問題がありますが、Libraryになっているので、Veritak 1.49Aで応しました。
Coregenlibは、VerilogHDLとしてあまりよい書き方をしていません。これまで、何箇所かWarningがでる箇所を特定、解析していますが、そのように書かれている としか言い様がありません。例えば、存在しないインデックス値のVectorにライトしてしまうという記述が散見されます。
25 チュートリアルに「拡張子vtakprjは、インストール時にVertakに関連付けるられます。フォルダを移動したときは再インストール。。」とありますが、エクスプローラ等で関連付してもよいですか? 手動で、できる方はそれでもOKです。VeritakのメインプログラムはVeritakWin.exeです。Drag&Drop、プロジェクトのダブルクリックによる起動等は、このEXEに対して引数として渡すことになります。
26 1)シュミレート時間は、どれくらいできるのでしょうか?


2)テストベンチの時間ステップと、配置配線後の”時間ーステップ”をどの様に関連づけ、遅延量を考えてば良いでしょうか。
1)シミュレーションの時間設定を、ツールのどこかで設定でするものではありません。Spice等のAnalogシミュレータとは違い、刻み幅(デルタt)ごとに、見るものではなく(たとえば、1psごとに値をいちいち見に行くことはなく)、EVENTがあったときしか値を再計算しません。これをEventDrivenと言います。(Verilog/VHDL皆同じです。)
たとえば、
`timescale 1ns/1ps

という記述では、単位は、1ns、丸め精度は1psで行うということですが、

always #10 a=~a;

と言う記述のとき変化するのは、#10、つまり10ns毎しか値は変化しないですから、1ps毎に値を計算する必要はなく10ns毎に見ればよい訳です。従ってシミュレート時間の「時間としての制限」はありません。(ただし、SaveでDiskの容量設定はProjectOptionであります。)実際的に制限になりうるのは、発生するEVENT数、つまり、対応するゲート数とPCの搭載メモリになります。通常は、コンパイルできれば、実行時メモリ不足になることはありませんので、デザイン規模とメモリという関係に帰着しますが、それについては、上の方のF.A.Q.をご参照いただきたいと思います。



2)テストベンチにおいては、単位ですので、たとえば、
 #10 a=0;
 #10 a=1;
 の10は、10nsでも10ps,10ms、何でもいいのです。その単位は、たとえば、
 `timescale 1ns/1ps
 のように冒頭に指定しますが、RTLシミュレーションにおいては、Hardwareの記述(論理合成部)の遅延時間は、0と考えますので、仮想的な時間でいいのです。

配置配線後は、MAX xxMHzと駆動最大周波数を合成器が言ってきますので、
それよりも速い記述をテストベンチで指定しておりますと、当然期待通り動かないことになるので、それ以下になるように記述しなければなりません。そこで、`define CYCLE 10
としておいて、上の例では、
#(`CYCLE) a=0;
#(`CYLCE) a=1;
としておくと合成器が、9nsでもいいよと言ってきたら、冒頭のCYCLEを9
にするだけで、RTLテストベンチがそのまま、最大駆動周波数ので遅延シミュレーションにもなります。

Veritak チュートリアルでは、具体例で、RTLテストベンチから、論理合成、遅延シミュレーションまで詳しく説明しています。
27 マーカをだすと、拡大縮小ができなくなってしまう。1.50以降 個別グラフィックチップ/ドライバに依存するようです。
対処Versionは、1.52D以降です。
28 [環境]
* Veritak Version 1.60A Build May.12 2005
* QuatusII version 4.2SP1 or 4.1
* ModelSim - Altera5.8e

[現象]
* チュートリアルの "5.1.2 Dual Port RAM" シミュレーションを実施
* Altera ライブラリーは以下に設定
C:\altera\quartus42\eda\sim_lib/altera_mf
* シミュレーションを実行すると、RAM出力に不定がある。(添付ファイル参照)

[その他]
* ModelSim - Altera5.8e(QuatusIIVer4.2とセットだったもの)で確認すると、
不定は発生しない。
* QuatusII のVerを4.1にバージョンダウンした場合のaltera_mfを
ライブラリーとして設定すると不定は発生しない。
Veritakのバグではありません。altera_mf.vの記述に問題があります。5.0のaltera_mf.vでは修正されているので、5.0以上のVersionをお使いください。ModelSimでは、なぜか次の文で、トリガをかけてしまっているからです。(6.0で確認)
module tri_test;
        wire a;
        sub sub1(a,);
        initial begin

                #100;
                $finish;

        end

endmodule


module sub(input a ,input e);
tri    i_byteena_a;

        

always @(i_byteena_a )
    begin
        $display("triggered");
        end       
endmodule    
      
29 パラメータのステート名表示が???になってしまう。 Verilog-2001形式のパラメータリストにしてください。

// Parameter List
//By Tak.S May.18.2005
//parameter IDLE_ST = 3'h0;
//parameter ST0 = 3'h1;
//parameter ST1 = 3'h2;
//parameter ST2 = 3'h3;
//parameter ST3 = 3'h4;
//parameter ST4 = 3'h5;
//parameter ST5 = 3'h6;
//parameter ST6 = 3'h7;
//を
// Parameter List Added by Tak.S May.18.2005
parameter IDLE_ST = 3'h0,
ST0 = 3'h1,
ST1 = 3'h2,
ST2 = 3'h3,
ST3 = 3'h4,
ST4 = 3'h5,
ST5 = 3'h6,
ST6 = 3'h7;
//にしてください。
30 次の記述がVCSの結果と一致しません。?
wire signed [7:0] regSB;
assign regSB = $signed(4'b1100);
Veritakのバグです。Version1.61/1.63で修正しました。なお、$signedは、FPGAの論理合成で未対応なようです。4'sb1100 (Verilog-2001) の方がより直接的な表現になるかと思います。また、LHSと、RHSで、ビット幅が異なる演算は、VHDLでは、エラーとなりますが、Verilogでは、エラーとなりません。これに符号付きがはいるとさらに、状況を複雑にするので特に、LHSとRHSのビット幅を一致させて書く記述をお勧めします。(VeritakのLintオプションで、チェックするのも一方法です。)なお、Verilog-2001符号については、言語チュートリアル編8.3.5にあります。
31 VeritakでVCDファイルを出力し、LSIベンダーさんに送ったところヘッダーがうまく認識できないとの連絡がありました。
全く同じ下記のVSDファイル出力の記述での結果を添付しますが、VeritakとModelSimとで結果が異なるフォーマットになっております。
どちらの出力ファイルもVeritakで波形確認できるのでフォーマット自体は問題ないのだと思いますが、LSIベンダーとやりとりのために、出力フォーマットをModelSimの形式で出力する方法をご教示いただけないでしょうか?
拝見したVCD出力は、LRM上は問題ない記述です。MODELSIMとの違いは、個々の信号にたいして、$scopeが入っている点です。これは、個々の信号について$dampvars宣言を行っているためですので、ハードのトップ階層による方法で変更してみてください。
例えば、
 initial begin
     $dumpfile("Sim.vcd") ;
     $dumpvars(1,Sim_top.abc.a);
     $dumpvars(1,Sim_top.abc.b);
    $dumpvars(1,Sim_top.abc.c);
...

  initial begin
  $dumpfile("Sim.vcd") ;
     $dumpvars(1,Sim_top.abc);
 
にすると  Sim_top.abcの階層にある信号すべてが出力され、そのSCOPEに対して$scopeの記述が対応しますので、ModelSimとの相性が良くなると思います。
32 tranでInternal Errorが発生する tran..構文はVersion 1.71で、strengthの表示と共にサポートしました。
33 reg宣言する前に信号を使用した場合もWarningメッセージを出してほしい。
ALTERA/QuartusIIではエラーになりませんが、ModelSimではエラーになります
ご指摘の箇所は、LRM上問題ない記述です。なぜか、De-fact StandardのシミュレータとLRMとの乖離が存在するため、悩ましい問題です。ここでの処理は、LRM準拠とし、当該指摘箇所は、LINTでWarningを出力することにしました。Version1.64より。
34 reg宣言やwire宣言していない信号res00を使用した場合何らかのメッセージを出してほしい。  Enable Lint Warning をチェックしていてもWarningメッセージが出ない。ALTERA/QuartusII や ModelSimではエラーになりますので Verilogでは、インスタンスポートの1ビット宣言は、wire宣言をしなくてもよいのですが、ご指摘の箇所は、確かにLRM上エラーとするべきです。Verision1.64よりエラーとします。また、LINT機能では、Verilog2001の'default_netype none
に相当する処理をWarningとして出力するようにします。
34 アプリケーションエラーで落ちる。
Viewerを最小にしておくと起きない。

現象が出やすいのは、DELLのようです。Precision670、370と言ったタイプが
 ありますが、全般的に同じ動きをします。ほとんどがPen4で、Memoryは1〜2GB
 程度入っています。(一部Xeonがあったかも。)

ViewとSimulationの同時進行に起因し、グラフィックカードによるようです。
1.64で対策済みです。
35 プロジェクト設定で-include_dirを指定したがincludeファイルを探しに行かない。 -inlclude_dir は、プロジェクト編集画面で、一番頭になるようにしてください。逆に言うと、-include_dir より上にあるファイルは、それより下にある-include_dir フォルダを探しに行かない仕様になっています。
36 シミュレーションをしていて、ソースを直した時など、Saveボタンをクリックしておくのですが、せっかく信号を整列させておいても、Reload & GO するとシミュレーションが終了してもWaveform Viewerはポップアップせず、また一から信号を整列させています。
何か良い方法は無いでしょうか?
現在の仕様では、コンパイルエラーがでた後のReloadでは、画面が出ません。このため、F.A.Q.s.TODO LIST29によりSaveボタンを設けました。
 Saveボタンでは、Diskに状態がSaveされますので、所望のWaveformViewが出ているときにSaveしてください。
この後、ソースを直してコンパイルエラー等でWaveformViewが出ていないときにはSaveしないでください。(SaveするとWaveforViewなしがSaveされてしまいます。)

Load Projectで、ファイルダイアログを出してProjectを再読み込み、GOするとSave状態で出てきます。また、Doファイルによる画面ごとのSaveもできます。(F.A.Q.s TODO LIST6)チュートリアル2.4.10をご参照ください。

なお、本アイテムは、TODOLIST59に関連しています。1.68より改善しました。
37 <XILINXでのゲートレベルSIM>
 結論から申し上げますと遅延が付いてゲートレベルSIMが動作しました。
 そこで質問ですが "glbl.v"は、プロジェクトで設定する時に順番があるように
 思えますがいかがでしょうか?

 テストベンチより上におくと、うまく動作しないようです。

 弊社では、プロジェクトを

(1)verilognet
(2)testbench_top
(3)other testbench_model
:
(4)glbl.v
(5)-lib_dir
simprims
にするとうまくいきました。
 ((4)を(2)の前に置くと)うまく動作しません。)
 ソース冒頭に下記のような宣言があり、これが影響したものと思われます。全部のModuleに宣言が含まれていれば、問題ないのですが、恐らく、テストベンチ で、宣言されてないmoduleがあり、glbl.vのタイムスケールを引きづったのではないかと想像します。

VerilogHDLの仕様の紛らわしさと言いますか、Veritakチュートリアルにも、その辺の事を書いていませんで した。次回改版時に順序問題について追加します。


`timescale 1 ps / 1 ps
38 veritakは、MIN,TYP,MAXのどの遅延を用いているのでしょうか? SDFにおいては、TYPを使っています。
これは、Altera/Xilinx共SDF ファイルをみていただければ、分かりますが、MIN/TYP/MAX共、同じ値になっており選択の意味がないからです。しかしながら、お使いのACTELのSDFファイルは、MIN/TYP/MAXが有意に生成されておりました。
そのため、1.68(7/4Release)より、選択を設けました。
39 Veritakでもって、cycloneを用いた設計をしております。
メガファンクションのlpm_multを使用し、RTLシミュレーションを行いたいのですが、いったい何をプロジェクトに入れればよいのかが分かりません。
FAQを見て、チュートリアルの5章は良く読みました。
altera_mf.v と同じフォルダにある220model.vのなかにlpm_mult モジュールが定義されていますので、それをaltera_mf.v と同様にプロジェクトのなかに放り込んでください。multだけなら、
altera_mf.v は要りません。
40 タイミング設計時に、基準クロックのエッジに合わせて、グリッドを書いています。
Waveform Viewerも、一定の時間間隔のグリッドではなく、指定クロックの指定エッジを単位としてグリッドを表示するように出来ないでしょうか?
グリッドは、1.68から、シミュレータの精度で設定できる ようにしました。(`timesclale 1xx/1ps になっていれば、1ps単位での設定ができます。)通常クロックは、Power Onから自走していると思うので、大部分は カバーできるのでは?と思います。
41 Xilinx7.1 で合成できる記述で、generateがコンパイルできない。 Veritakのバグです。1.70で修正しました。
42 早速インストールしたところ、PCにインストールしてある
Virus検出ソフトウェアが、veritakwinフォルダにあるassosiation.exe が Worm/Opanki.A の可能性ありと診断しました。

webでwormの内容について調べましたが、AOLのメッセンジャーを
使って広がるwormとのことでしたので、無視してインストールして
しまったのですが、大丈夫でしょうか?
MacAfeeVirusScan (最新Versionと最新更新Data)で、 Scanしましたが、ウィルスは、検出されませんでした。
 また、メッセンジャーは、弊社の全PCでインストールしておりません。 どうして、そのように診断されたかは不明ですが、association.exe は、関連付 けの為(vtakprj拡張子)に、レジストリを操作しますのでそのコードを読んだのかもしれません。

なお、このプログラムは、インストール時に一回だけ実行され、それ以外は実行 されませんので、削除していただいても評価に支障はございません。いずれにいたしましても,開発環境/リリース時の検査を含め、ウィルス対策は、万全を期しておりますので、ご安心して御使用ください。
43 現在veritak上でPLIを利用しようと試みております。
菅原様のHP上のPLIを使った算術ライブラリの説明を参考に
しているのですが。システムタスクを追加する際の vpi_user.h
にあたるファイルは veritak のどのファイルになるのでしょうか?

また、PLIを試用する上で参考になるチュートリアル等も
ありましたら教えて頂けると幸いです。

旧PLIは保守になっているのでお勧めしません。Verilog-2001のPLI=VPIは、ICARUSのソースが参考になります。ICARUSでの$readmemdh等のシステムタスクは、全てVPIで書かれています。一部独自の機能で書かれていますが、ソースは読みやすいと思います。ソースのVPIフォルダをご参照ください。


なお、邦訳は、ありませんが、http://www.sutherland-hdl.com/pli_book_examples.html
が参考になると思います。

また、http://www.chris.spear.net/pli/default.htm
では、IO関係の記述がありますが、2001では、殆どBuilt inしているので、Veritakその他2001をサポートしているシミュレータでは必要ありませんが、記述としては参考になると思います。

SystemVerilogでは、DPIというのもありますが、これだと直接CALLですのでVPIの面倒なLINK手順は必要ありません。(が、その性質上、殆ど一発で動かさないといけません。)Veritakでは、コンパイルドバージョンにおいてDPIの実装を優先して考えています。
=>Item 135をご参照ください。
44 いつもveritakを設計検証のメインツールとしてつかわせていただいております。

早速ですが、質問がございます。
xilinxの配置配線後のシュミレーションを行いたいのですが、コンパイルが途中で止まってしまいます。
Reduction Phase:
ターゲットデバイスはxc3s1500との事で、Veritakには、その規模のゲートシミュレーションは、荷が重過ぎるようです。
ゲートレベルについては、改善が滞っており申し訳ありません。
45 VCDファイルは144 MBで、読み込めません。 1.79Aで改善しました。

VCDのフォーマットは、一種の圧縮フォーマットになっていて、通常、内部のメモリは、VCDファイルサイズの数倍程度メモリが必要です。(たとえば、144MBx5=700MB強)
1.79A での評価では、例えば、140MBのファイルで、750MB、250MBのファイルで1.7GBのメモリが必要でした。
それ以上のVCDファイルについては、64ビットVersionを待っていただきたいです。(かかる時間は別としてサイズの制限はなくなります。)
46 波形表示画面で、ある信号に注目して他との比較等を行いたいことはよくあるかと思いますが、このとき、マウスクリックで選択したときに、該当波形を「反転」等して強調表示できると、とても具合が良いと思うのですが如何でしょうか。今の状態ですと、注目している波形がどれなのか直感的に分かりづらいことがあるかと思います。  選択波形のハイライト機能は、
・プロジェクト設定=>Highlight Selected Items
 をチェックすると機能いたします。ハイライトの色は、
・表示=>色設定=>Highlight Color
 で選択できます。設定した状態で、プロジェクトをSaveしておくと
 ハイライト機能/ハイライト色は、覚えています。
 また、StatusBarの左端は、xitemsになっていると思います。これは、現在選
択されているアイテムの個数を表しています。
 
 ご要望事項とは、少し違いますが、これで代用できないでしょうか?
 
47 ALTERAのFPGAのゲートレベルシミュレーションをしたいのですが、PLLが発振
しません。
何が悪いのかアドバイスいただけますでしょうか?

PLLだけの簡単なプロジェクトを作成してみました。
Wizardで設定した周波数とTestBench上のRef周波数がわずかに違っていますね。確かにRTLのSimでは、このままでも発振してくれましたが、ゲートシミュレーションでは、Ref周波数のチェックにひっかかっているようです。Wizardで設定した周波数を入れてみてください。
48
クロックの立ち上がりのセットアップは1クロック分あり、ホールド時間は0という認識でいました。
ご存知のように高速ロジックではホールドタイム0での動作保証をしている
ものがありますが、それと同じような感覚でいました。
私の認識がおかしいのかもしれませんが教えていただければ幸いです。


シミュレーションする回路からの信号のレベルで入力する信号を
変化させたいときにどのように記述すればよいのか教えてください。
つまり、例えばシミュレーションベクタからSTBをアサートしたとします。
STBをネゲートするのは、シミュレーションすべき回路のACKがアサートされ時点でネゲートしたい。
HDLシミュレータは、言語仕様に従って順に実行しているだけですので、
少なくとも、この場合、SETUP/HOLDという概念はありません。単純にinitial
とalways の実行順序のみで決まります。単純には、CLKに対し、同時にDataを変化させるとどちらに転ぶかわかりません。これは、DFFのCLKに同時にDATAを変化させるとどちらにころぶかわからないのと同じではないでしょうか?
シミュレータが決まれば決定的ですが。。これは、Race問題と呼んでおり、シミュレータ同士で実行結果が変わってしまう例です。この辺の話は、言語編の5章に書いてあります。
 とりあえず、DataとCLKを同時に入力しないようにしないといけません。そこで、添付のように記述してみました。HARDは、POSで見ますのでNEGで入れてやればいいですね。
 
例えば、
always @(posedge CLK) begin
  if (wOUT==8'h44) begin
  @(negedge CLK) ;
  LD=0;
  INDATA=$random;
  @(negedge CLK);// 同時変化を避けてテストベクタを作成してください。
  LD=1;
end
のように、Hardモジュールの出力(wOUT)に応じて、テストベンチ側の入力(INDATA,LD)を変えてやります。その際に、Hard側では使っていないEdgeで入力を変化させてやると、CLK周期が変わってもメンテが楽にできます。



LSIを設計する場合の最も大きな問題は、バグをいかにして出さないか?だと思います。バグを出さないようにするにはどのようにすればいいでしょうか?
理屈的には、全てのケースをシミュレーションで確認しておけばよいですね。それには、
周辺のモデリング(現実のハードはなくともそれらしく動く記述)が必要になります。そうすれば、仮想世界で、時間はかかっても全てのケースをテストすることは可能です。そのためには、パターン#ではなく、上記のようにダイナミックに応答するモデリングが必須です。HDLには、そのための機構が備わっています。
簡単なハードでも、上流でテストしておくことをお勧めします。FPGAの場合、「論よりRUN」の感覚もありますが、モデリングして機能検証という作業は大切な設計工程だと思っています。このとき、適度なモジュールユニット単位でのテストベンチを設計資産として残しておくことをお勧めします。
そうすると、仮に問題があった場合、RTLシミュレーションのテストベンチで、HARDだけ論理合成したものに置き換え、遅延シミュレーションをすることができます。ここで動いたのなら、まず論理合成の問題はない、と言えると思います。
49 I am running regressions on Windows XP by executing ModelSim PE in
command-line mode.

Can veritak be run in command line mode without the GUI? That would really help to run regressions.
Yes, though it is very primitive and interim.

See "Command" folder and "release_note.txt" for usage of command switch in installed version of 1.73A.
"example.bat" is batch file as small example.
50 reg[3:0] memory[3:0]
の信号を、Waveformに表示させようとした場合、「データはsaveされていません」と出ますが、表示は不可能なのでしょうか?
samplesフォルダにmemory_testのプロジェクトがありますので、Load Project/Goしてみてください。チュートリアルは、2.4.9メモリになります。Verilog-2001 の多次元配列(reg[3:0] mem [1:4][2:4] といったメモリ)のViewの例になっています。
51 I am running a complex testbench and modules that include a fast model of a large DDR by doing disk I/O using $fseek, $fscanf and $fdisplay.

What I see is when a value is read from disk into a register by doing $fscanf (file_reg), if the value is passed to a module above the module doing the file read, the module above correctly delays by one cycle outputting the value read from the file using a non-blocking assignment (tb_file_reg). However, when passing the value read to a module below the module doing the file read, the value is not delayed when doing a non-blocking assignment (o1). You can compare with the behavior of a locally-generated value (local_reg) which is correctly delayed by a module above and a module below the module that generates it.
In my implementations, $scanf behaviors like Blocking Assignment,not Non-Blocking assignment,so ,file_reg=hoo;

I think this may cause famous race problem in verilog as you know.
(Simulator dependency(threading order) results in most cases.)

If you are expecting Non-Blocking assignment in $scanf,
Add #1 in last line of always process.


always @(posedge clk or negedge reset_n)
begin
   if (reset_n==1'b0)
     begin
         file_reg <= 2'd0;
         local_reg <= 2'd0;
         BA_reg<=0;
         fp = $fopen("input.txt","r");
     end
else
     begin
     local_reg <= local_reg + 2'd1;

     #1;//file_reg are assigned like blocking_register
     //file_reg=hoo
     status = $fscanf(fp,"%d",file_reg);

     end
end

In summary,thread sequence in Veritak is as follows.

1)#5 tb_clk = ~tb_clk; // Time advances
2)tb_file_reg_1 <= tb_file_reg; //Test Bench NBA
3) // status = $fscanf(fp,"%d",file_reg);//TAK
file_reg=file_reg+1;//TAK Blocking Assignment
4) out1 <= in1;
5)#5 tb_clk = ~tb_clk; // Time advances

Please note,
. out1 is assigned after updated file_reg
. tb_file_reg1 is assigned before updated file_reg

That's why Difference between out1 and tb_file_reg1 exists.
Thread Sequence in verilog depends on implementation of the simulator,
or even optimized level in the same version of simulator.

I checked by using Modelsim, the results are what you are expecting.
Thread sequence is;

1)#5 tb_clk = ~tb_clk; // Time advances
2)tb_file_reg_1 <= tb_file_reg; //Test Bench NBA
4) out1 <= in1;
3) // status = $fscanf(fp,"%d",file_reg);//TAK
file_reg=file_reg+1;//TAK Blocking Assignment

5)#5 tb_clk = ~tb_clk; // Time advances

However, this is not always true in all simulators as I mentioned.
Some simulator will perform ,for examples,1)3)2)4)5).It is noted 1)5) are determinative, while the sequence of 2)3)4) may vary.

One solution to avoid the race is to use NBA (as you did by local_reg.),
However $scanf is BA. So, some delay technique should be applied to obtain determinative simulation results.
52 Right now I am re-running my regression after finding and fixing a discrepancy between ModelSim 6.1a and Veritak 1.74a.

Inside a file, the entry:

...
forever #2222 clk = ~clk;
...

was interpreted by ModelSim 6.1a as 2222 ps while Veritak 1.74a was interpreting it as 2222 ns. The file does not have a `timescale but the testbench of the whole design has a

`timescale of 1 ns / 1 ps

ModelSim uses a 'default' setting which I believe is 1 ps / 1 ps but can be overriden.

I believe that Veritak 1.74a is doing the right thing by propagating the `timescale downwards. Can you please confirm this?
`timescale is frequent problem in Verilog-HDL.It depends on only order of compilation, not hierarchy of design.

For example,
File A;
`timescale 1ns/1ps
module ...
File B,C,D,E
module ...(no timescale declaration)
File F;
`timescale 1ps/1ps
module...
File G,H,K,
module ...(no timescale declaration)

If compile order is A,B,C,D,E,F,G,H,K
timescale of B,C,D,E is 1ns/1ps because previously declared is 1ns/1ps in File A.
timescale of G,H,K is 1ps/1ps because previously declared is 1ps/1ps

if compile order is F,B,C,D,E,A,G,H,K
timescale of B,C,D,E is 1ps/1ps because previously declared is 1ps/1ps in File F.
timescale of G,H,K is 1ns/1ns because previously declared is 1ns/1ns

You can change compile-order by changing order of files in Project file.

LRM states as follows;
The ‘timescale compiler directive specifies the unit of measurement for time and delay values and the
degree of accuracy for delays in all modules that follow this directive until another ‘timescale compiler directive is read.

Of-course Veritak is based on LRM.
Veritak assumes 1ns/1ns until valid timescale appears. However this is not always true in other simulators. LRM states nothing about this issue,means it depends on implementation of simulator.

Recommendation is to declare timescale on all design files,for example,
using `include "xxx.h" .
53 For example, put together all PCI signals and be able to shrink them to 1 line or expand to all as desired, then do the same for DDR signals. Kind of what can be done with buses. Does Veritak have that capability? I think current Veritak can do that. Please see tutorial 2.4.6 Grouping.
After Grouping you can save the format in project file ,also can save as .do file (,which is not compatible with ModelSim's)
54 下記でエラーが発生する。MODELSIMでは問題ない。
genvar ii;
generate
for(ii = 4 ; ii < 16 ; ii = ii + 1) begin
pulldown(A[ii]);
end
endgenerate
問題は、begin :loop のラベルの記述(:Name)がないことです。少なくともVerilog 2001による記述では、for文のgenerateは全てラベルの記述が必要です。MODELSIMでなぜ、エラーとしていないかはわかりませんが、SystemVerilog3.1aでも該当する構文はないように思います。
従いまして、ラベルの記述をしていただくのが解決策になります。

なお、generateの説明は、http://japanese.sugawara-systems.com/tutorial/verilog/framepage7.htm
の11章の3にあります。
55 下記の添付ファイルで構文エラーが発生します。

遅延設定で、カッコ内の計算処理を行っていないようです。

#( ( 10:20:30 ) ) ;
#( ( 20:40:60) − ( 10:20:30 ) ) ;
のような文の処理ができないようです。
 Version 1.78で対応しました。Min,TYP,MAXの選択は、
プロジェクトのSDFの設定で行ってください。
56 システムタスクreadmemh を使用してメモリモデルを初期化
しています。
シミュレーションを行うと、下記のメッセージが出力されます。
readmemb(h) ../xxx.txt Access Error accessing address=1000000 min_address=ffffff max_address=0

恐らくデータ数が多いことが問題だと思っています。そこで、システムタスクreadmemhで初期化できるデータ数の制限を教えていただきたいのですがよろしくお願いします。
大きなメモリ宣言ですね。 たとえば、
 reg [7:0] mem [24'hffffff:000000];
$readmem("abc ",mem);
範囲チェックにひっかかっている可能性があります。(Veritakの実装では、範囲Checkを厳密に行っています。)
これで、Data点数が1000001hex個あったとするとエラーになる可能性があります。


す。 この場合は、ffffff を少し増やしてみてはどうでしょうか?Veritakの実装では、メモリが許す限り頑張りますが、LRM上の仕様は、24ビットまでだったと思います。
57 Veritakにて以下の記述が syntax error になります。
reg [16383:0] pag0_buf;
pag0_buf = 16384'dx;
1995では、Illegalな構文ですが、2001では、Legalです。1.81よりサポートいたしました。
=>
この文の応用で、'sdxとすると無制限にxが拡張されるので、Regression Testを書くのに重宝しています。ありがとうございました。
58


$freadで読んでいる途中でおかしくなる。
MS Windows 特有の世界があります。この質問は、「ModelsimもVeritakも同じだが、動かない。。」と何回か海外掲示板でも出ていました。
$fopen( "xx","rb") バイナリで開いてみてください。
59 $fscanf ("xx\n",xx);の後の動作がおかしい。 $fscanf 中の改行はサポートしていませんでした。1.85より対応しました。
なお、$fscanfよりも、一旦行を$fgetsで読んで、$sscanfで、解析した方がスマートかもしれません。
60 XilinxのROMジェネレーターがコンパイル不可 プリプロセッサのバグです。1.85で修正しました。
61 ソフト屋さんからの脱却をめざし、Verilog-HDLのお勉強,,
ソフトから入ってこられる方は、まずハードウェアのお勉強をお勧めします。
Veritakは、初心者には優しい作りになっていますが、Verilog HDL自体は、決してそうではないので、フリップフロップ、マルチプレクサ、等の概念をまず思い出すことが必要だと思います。
業務としてやっていかれるなら、HDLと回路の対応を記したSTARCの「RTL設計スタイルガイト」に目を通されることをお勧めします。(Verilogの言語と合成可能な記述はまた別です。 一定のスタイルを覚えてしまった方がよいのではと思っています。)
また、H/Wの勉強という意味では、(入手可能なら)HDL以前の ASIC論理回路設計法 小林芳直 が良い本でした。(私は、HDL以前に、この本をベースにASICを回路図ベースでそれこそ、数十個起こしました。)
=>

前述の通りVerilog HDL の合成記述は、文法(BNF)もさることながら、一定のスタイルを覚えた方が早いと思い、なにかよい方法がないかと考えました。そこで、入門用として、インストールパッケージsamples/coding_styleのsyn.hta スクリプトで、シミュレーションと記述の対応を書いてみました。(スクリプトなので、ウィルスチェックの警告は出ます。)数は、まだ少ないのですが、記述のメモとしても活用できるように Verilog-2001の記述についても順次追加していきます。 また、記述例としては、regression_testフォルダにも多数収録しているので、grepしてみてください。(1.94では、500以上のサンプルがありました。Veritakの歩みでもあります。)
62 VeriPadの改造も考えています ソースは公開していますが、それが内部的にもDocumentの全てです。
不明な点は、どうぞお問い合わせください。
63 Q1 Veritakの正しい読み方が解りません。

Q2 「2xの実装はそこそこに、4xの検討に入りました」等の表現がありますが 2x、4xとは何でしょうか?

Q3つい先日、IEEEでVerilog2005が規格化されましたが、 Verilog2005については、将来的に対応を検討していきますか?
Q1べりたっく と読んでください。

Q2 2倍速、4倍速の意味です。ModelSimのザイリンクス版(アルテラ版もたぶん同速度だと思いますが、)1xとしたときの、シミュレーション速度です。ModelSimは、FPGA業界標準のシミュレータで、最下位機種のPEは、Veritakと同じか、やや速い速度です。最上位機種のSEという製品は、さらにその2倍速です。
従って、4xとは、SEの速度を目標にしているという意味です。
4x Versionは、C++ソースを吐きますので、SystemCモデルや、C/C++で書かれたユーザアプリケーションモデルとのLINKがSTATICに可能になると思います。

Q3言語仕様が大きすぎて1年かけてもその全てを実装するのはできないと思います。よく使いそうな機能(SUBSET)から年末位にリリースする予定です。
64 プロジェクト設定で、設定したはずのチェックが外れてしまう。 表示のバグです。1.93Aで修正しました。
65 A few of us tried using your software and were very impressed with it ..
I am not sure, but is it possible to run in batch mode. I would like to be able to create an exutable (without any GUI interface), that I can submit the jobs on remote machines and look at log file for pass / fail information.
Veritak is currently interpreter ,not compiler for generating executables.However you can perform batch operations for use of such as regression tests.

Please see Command folder in installed package.
There should be one example "examples.bat".
Run "example.bat", then you will see the log file as a result.
Explanation of command line is in "release_note.txt".

Once you build veritak-Project and run the project, "veritak_command.txt" will be appeared in project folder. It may be easier to arrange the description to the command line. One note is that veritak2.exe in Command is all different from veritak2.exe in used GUI. Please use veritak2 in Command for use of batch operations.
66 mifファイルによる初期化されたRAMはシミュレーシ
ョンでは使用できないのでしょうか
mifファイルは、サポートしていません。 というよりも、Verilog言語以外の直接のサポートはしておりません。従って、mifにしろ、coeにしろhexにしろ、結局は、Verilogの形式にしないと読み込めません。Alteraの場合は、altera_mf.v の中で、hexを内部でVerilogに変換しているので、hexなら読むことが出来ます。5.1以前は、$hex2verでこれを行っていましたが、5.1からHDL記述で、やるようになっています。(その為、遅くなっています。)
67 読み込むテキストファイル(tp.txt)中にコメント行を入れたい場合
.vではどのように記述すればよいのでしょうか。

tp.txtの内容(例)
;Comment Line 1
aaaa5555
5555aaaa
12345678
;Comment Line 2
87654321

$xxxxという関数とかちょっとしたテクニックはほとんど知らないと言ってもいいくらいです。
何か良い書籍がありましたら、お知らせください。

オープンコアCRCの項に記載しました。

残念ながら、今回、一連の$xxは、Verilog2001で追加されたFILEIOというもので、邦訳ではないと思います。あるのは、英文のLRMだけで、しかもIEEEで数十ドルします。余裕のあるときに言語編で解説をするつもりですが、それまでは、すみません、サンプル(regressiion_test フォルダ、オープンコア)を見ながらやっていただきたいです。
68 お奨めいただいたSTARCの「RTL設計スタイルガイト」に目を通しながら、本を2冊ほど読んでおりました。

Veritakの新版にて、書籍用とありますが、何か本が出るのでしょうか?
1ユーザーとして楽しみでもあります。
STARCの本は、実践的ですごく良い本だと思います。理屈よりも、
Design Compilerはこう解釈する、ということなんですね。

それ以上の、Coding Style については、Sutherlandさんが書いている一連のPaperがあり、余裕がありましたら、これもお勧めです。

http://sutherland.com/papers.html
 

 海外と国内で一件づつ書籍化のお話があります。いずれも決まった話ではありませんが、それぞれの著者の方の評価用に制限を加えコンパイルし直したものを準備しただけで(Veritak-Liteは、公開していません)、実現するにしても随分先(1年後?)です。
 Veritakは、あくまでプロフェッショナルが使いやすいツールを指向して(実際ユーザ様の、2/3以上がそうだと思います。)いるのですが、考えてみると、日本語環境を含め、初学者がすぐに使いやすいツールにもなっていると思います。そのような方々の力になれたら幸いです。
69 Having LINT checks switched on, I am getting "backward declaration"warnings for the $display functions. Most likely it is my problem as I do
not have this issue with my other test benches. But - I am not able to understand and fix it.
As a workaround, please ignore Warnings for hierarchy signals. This should fix in near future versions.
=>Version 1.98A fixed this problem.
70 Verilogのテクニックを教えてください。
functionを使って、2個のリターン値を取得したいのですが
方法はありますでしょうか。
ファンクションは、1個のリターンしか返せません。
ファンクションは、組み合わせ回路です。Cでいうならなら、関数CALLですね。
複数のビット幅でよければ、無理やり、下のような感じでしょうが、元々、独立した回路なら、複数のファンクション(すなわち組み合わせ回路)を呼ぶことになるでしょう。
 function [8:0] FUNC (input [3:0] a, input [4:0] b);
  FUNC={a,b}
 endfunction

Item61/68に関連しますが、HDLの文法としては、間違いなくても合成の記述としては、問題である例が多々あります。もし、業務で記述されるようでしたら、RTLとHDL記述の対応を記したSTARCの書籍をご覧になることをお勧めします。

合成に関しては、既に実績ある記述(Coding Style)を真似ることをお勧めします。勿論、テストベンチは、合成の対象外ですので、文法を駆使して独自のCoding Styleで書かれても問題はないと思います。
71 I recently purchased your very promising Veritak simulator. I have found one bug that seems to be present in the current 1.98A snapshot as well as
the 1.75A stable version, regarding the concatenation operator when used with don't-care values (1'bx).
Yes,this is a serious bug. I will fix this within a day.
Fixed version will be 1.99A.

Again, thank you very much for your cooperation.
72 Micron のSDRAM記述でコンパイルエラーがでる。 task /function で
 input a;
  real a;
という記述に対応していませんでした。Version2.00Aにて対応しました。
また、シミュレーションモデルでは、コンペアエラーになってしまいますが、これは、テストベンチの記述で、レースがある為で、ソースを直していただくより方法がありません。ソースを修正するシミュレーションモデルのFeedBackを行います。
73
同じラベル名をつけてもエラーとなりませんが、問題ないでしょうか?

always @(posedge clk or negedge reset_n)
begin : delay
reg a;
...
always @(posedge clk or negedge reset_n)
begin : delay
reg a;
...
SCOPEは、Uniqueである必要がありますので、コンパイルエラーとすべきと考えます。Version 2.00Aにて対応しました。
74 ifdefでこんな事したいのですが、表記が不明です。
良い方法があればお教えください。
よろしくお願いします。

`ifdef PACKET_TYPE_PL_IN || PACKET_TYPE_PL_OUT
max_i = 70;
`endif


`ifdef PACKET_TYPE_PL_IN || PACKET_TYPE_PL_OUT
DPRAM_WE = 1;

`end
C言語みたいに||とか &&は使えません。

どうしても

`define PACKET_TYPE_PL_IN_PACKET_TYPE_PL_OUT

`ifdef PACKET_TYPE_PL_IN_PACKET_TYPE_PL_OUT
max_i = 70;
`endif


`ifdef PACKET_TYPE_PL_IN_PACKET_TYPE_PL_OUT
DPRAM_WE = 1;

`end

か、
`ifdef PACKET_TYPE_PL_IN
`define PACKET_TYPE_PL_IN_PACKET_TYPE_PL_OUT
`elseif PACKET_TYPE_PL_OUT
`define PACKET_TYPE_PL_IN_PACKET_TYPE_PL_OUT
`endif

になってしまうと思います。
75 Veritakとquartusのシミュレーション結果に差が生じてしまい
Veritakでどのように対応したら同じような結果が出るか
教えてください。
...、結果的に送信データが1ビットずれてしまうと言う
現象が発生しています。(リスト1)
RTL,ゲートレベルシミュレータの差だとは思いますが
このような差が発生しないようなテクニックがあるのでしたら教えていただければ幸いです。
 RTLシミュレータは、遅延0の仮想世界です。DFFで、CLOCKとDATAを
同時に変化させてQは、どちらになるでしょうか? (SETUP/HOLDが0では、どうなるか分かりませんね。) RTLの記述は、常にこのことを自問自答しながら注意深くテストベンチを作成する必要があります。
ゲートシミュレーションとRTLの結果を一致させるには、
「読み込みと書き込みを同時にしない」
に尽きます。もし、H/Wでそのような回路になっていれば、当然誤動作になりますから論外ですが、テスト記述でも、POS/NEG や、#Delay記述を使って、同時変化をさせないようにしてください。
 いずれにしても、
  • H/WのFFに相当する記述
  • 組み合わせ回路
の区別をしっかり意識できている必要があります。
 
76 いつもVeritakを利用させて頂いています。

早速ですが質問があります。

あるプロジェクトをロードし、シミュレーションをGOさせると
以下のような画面表示が出てしまい、途中で止まってしまいます。
------------------------------------------------------------
Window02
 EC:2884 MapViewOfFile. Can not allocate memory...
8size = 100419664low_address=8781824high_address=0hdiskpmap=000005B8
------------------------------------------------------------
どのような内容で、どのようにすれば対処できるのかのご教示の程、宜しくお願い致します。
恐れ入ります。最新版の2.06にしてください。内蔵しているソフトウェアプロテクション(他社製)との相性がよくなかったようなので変更しました。
77 今回、結構大きなものをFPGAを用いて作成しようと考えて
いるのですが、バグ?を見つけましたので、メールを差し上げました。

Veritakの内部構成をしらないのですが、添付したファイルをloadしてみると、構文解析まですんなり通ってしまいます。
しかし、明らかなタイピングミス(不定義変数)があり、本来は、
これを検出してほしいのですが、されていません。
Veritakの場合、
 1.構文解析、BISON/YACC
 2.意味解析/Instance展開 Elaborationとも呼ばれています。
 3.コードGenerate
 
の順で、デザイン全体をSCANしています。文法上の解析は、1でチェックされますが、変数の未定義等は、デザインのTOPを確定させて、TOPから再度SCANしていった時にチェックしています。(=>2.意味解析の部分です。)
したがって、デザインTOPが確定されないと2.のチェックに行かない仕様になっています。添付は、いい加減なTOPを擬似的に作ったもので、
この例のようにしていただけば幸いです。
78 QuartusWEB51のMegaWizardで非同期DPRAMを
作成しました。
これを使用すべく記述を開始し、Veritakでシミュレーションを
開始したところ
「lpm_ram_dp_componentモジュールが見つかりません。」
というメッセージが表示されました。
やってみましたが、次のようなモジュールが生成されました。ここで、grep すべきは、altdpram で、この場合altera_mf.v にありました。

altdpram altdpram_component (...


同様にして、220model.v の中を探してみてください。(古いのは、大抵220model.vです。)
79 I'm having this problem again with version 204.A

------------Starting Verilog Build Process----------
Starting Verilog PreProcessor...
uart_command_parser.v(1):: Reading
Could not start Verilog PreProcessor.
finished with incompelte compilation

This was working fine until my computer crash overnight. Now I can't get it
to compile today.

I tried upgrading to version 2.05A, but in that simulation the clock does
not toggle.

initial begin
rx_clk = 1'b0;
end

always rx_clk = #5 ~rx_clk;

I had no problems with this before and nothing has changed since yesterday
when every thing was working fine.
Yes, this is famous race condition. #5 a=~a is preferred,
as you have already know.
This is due to change I actually made for thread seq.
I should have compatibility with previous release..

I changed thread seq. again from Version 2.06A.
This release will work even in your first attached code.
Software protection (built in by another company) sometimes causes unstable state of veritak. The patch is also applied from Version 2.06A.
Cause in 2.03/04 is still unknown. But recommendation is to use 2.06A.
80 I am getting: memcd_strategy_trans_control.v(275)::Internal Error, Error
Code=796

the line is:
wire burst_p_cl_mwl = param_ddrii_sdram_mode ?
~(trans_count[bstLenCntfn(param_bstlen)+cl_rounded + 1'b1 - param_wrlat])
: ~(trans_count[bstLenCntfn(param_bstlen)+cl_rounded]);

what is wrong with this statement?
It is related to maximum index and size of declared vector.
For Example,
reg [22:0] vector;
reg [3:0] index;
 wire a=vector[index];
Please note 5bits will be required for full access in vector.
EC796 is such case of error.
From 2.07, warning is generated instead of error.
81 force文にて、存在しない信号をドライブすると、明確なエラーメッセージを出
さずに終了してしまうようです。

具体的には、

force bench_main.main_mdl.xbkcs = 1'b1;

ここで、xbkcsは、存在しない信号です。
以下のようなエラーを出力し、

NULL FILE NAME :Error: bench_main Internal Error EC=758
Elaboration Phaseでエラーが発生しました。
"コンパイル未完了のまま終了しました。

と、終了してしまいます。
2.10で、適切なエラーメッセージが出るように改善しました。
82 $fgetsを以前、修正していただいたのですが、どのバージョンからかわかりませ
んが、元に戻っていないでしょうか?
1.92で、ESCAPEシーケンスの問題を対策した際のバグです。2.10で修正しました。
83 本日、save/restore(β機能)を使ってみようと
http://japanese.sugawara-systems.com/tutorial/tutorial/save_restore.htm

に沿って、動作を把握しようといたしましたが、

veritakwin210A\samples\savet_to_disk.v(15)::Info: シミュレーション時間更新
により一時停止しました。time=1000 ,インスタンス名:save_to_disk
veritakwin210A\samples\savet_to_disk.v(15)::Info: シミュレーション時間更新
により一時停止しました。time=2000 ,インスタンス名:save_to_disk
と「Go」ボタンを押すたびにブレークは入る動きとなり、少し困惑しました。

メニューの「シミュレーション」→「Run Length」が有効になっていたからでした
が、この件は説明に全くありません。
サンプルプロジェクトとして、何が起こったか解らない人も居るかも知れません。

ご指摘の通り、RunLengthがEnableになっておりました。
2.11で修正します。
84 どうも重箱の隅のようなバグらしきものが見つかったので報告です。
以下をcompileすると Parse error.yy=syntax errorで止まってしまいます。
modelsimでは問題ありません。
使用しているのは veritak 2.10A WindowsXP版です。

`timescale 1ns/1ps
`define test1 50e-2
module test();
real temp1;
initial
temp1 = 1/`test1;
endmodule
プリプロセッサのバグのようです。プリプロセッサが通った後のファイルpreout.vで見ると次のようになっておりました。
したがってワークアランドとしては、マクロ定義しないことになります。

module test();
real temp1;
initial
temp1 = 1/ 50e - 2;
endmodule

次Version2.11AにてFIXいたします。
85 いいToolと思います、でも、I got some trouble. Sorry that my Japanese is not
good, I describe my problems in English as following:



Problem 1:

I download a “Divider” from
http://www.opencores.org/projects.cgi/web/divider/overview
<http://www.opencores.org/projects.cgi/web/divider/overview>

And I run the simulation with no change. It will run few minutes
and stop at:



Problem 2:

I write some codes, which can run very well. But if I miss one
“;” as you see in line 69 in the figure, the compiler will stop and cannot
show error line number.

If tools cannot show line number, it will be very hard to debug in bigger
design.



My Computer is:

VAIO NotePC with Intel Core Solo T1300 (1.66GHz) CPU, 1GB SDRAM, HDD free
space is about 10GB.
Problem 1.


As for Problem1 , sorry, but this is the limitation of Veritak.
Waveform View is 32bit addressing restricted by 2GB(as user domain).
You can check GUI' memory consumption as Veritakwin.exe.
If you display long-long history of the signals, memory allocation error might occur.

From Version 2.11B, correct error message(memory allocation error) will be displayed. (2.11B also fixes integer array's signed operation.)

Memory increase of system memory will improve this situation, however
it is not enough for this project. (I checked without waveform display, compressed archive shows 1.2GB finally. Usually 3x-20X memory required for display if all signals are displayed.
Solution will be 64bit version next year.I apologize inconvenience.


Problem 2.
You need to make Compiler status pain to the front. (Sometimes it's behind the view.)

Try following procedure.
Step1)Load Project
Step2)Menu => Window => Horizontal
86 I'm having trouble with the scope tree viewer. I've tried to simplify the
case as much as possible.

1. I start VeritakWin
2. Verilog Project -> Load Verilog -> File name: tb_top.vtakprj -> Open
3. Go -> Pause
4. Push Waveform viewer to the front
5. Expand tb_top in the Scope Tree View
6. Expand u_module2 in the Scope Tree View

sync_2, sync_3, u_fifo[0], u_fifo[1], and u_fifo[2] are in the Scope Tree
View. However, I cannot see u_module1, sync_1, u_lmem, or u_pmem, in the
Scope Tree View. Therefore I cannot use the waveform viewer to debug what's
inside those modules.
Yes, there is a bug regarding scope tree view for module array.
Try 2.11A
87 Will veritak software work on AMD Athlon 64 X2 3800 "Dual Core" processor.
The operating system is Windows XP professional.
Please let me know.
Sorry, no one in community have tried X2 processor.
A couple of persons have experience by P4 or Xeon with hyper-threading.
They told me there was no problem.
From design view, it should work. However please do not expect x2 gain of performance as well as other single threading software.
88 HI
sugawra i am geting the results. but whenever i am compile and simulate
with veritak i am not unable to do gate level simulation. i am here with
attaching my project keep it is as confidencail and make sure that it to work
and give me any setting suggestions need to made to work
First thing for the problem is to resolve semantics errors.
This is not my work but your work. After resolving the issue,
I will look into further analysis.

For example, you define "mas2app_tagid_r" in mastop.v
this signal should be in ahbmas.vo. However, this signal could not be found in ahbmas.vo (mas2app_tagid_r0/r1 are there , but they are different signals.)


\\Athron\fa\vencat\may32006\veritak\tb\mastop.v(108)::
\\Athron\fa\vencat\may32006\veritak\netlist\ahbmas.vo(31)::Error: mas2app_tagid_r can not find destination.
\\Athron\fa\vencat\may32006\veritak\tb\mastop.v(108)::
\\Athron\fa\vencat\may32006\veritak\netlist\ahbmas.vo(31)::Error: mas2app_rdata_r can not find destination.
89 On the fly を使用すると、不定期に波形が化ける GUIのバグです。2.11Cで修正しました。
90 HT で、on the fly を使用すると高い確率で、落ちる GUIとシミュレーションエンジンは、独立にマルチスレッドで動きますが、DUALもしくは、擬似DUALであるHTで問題が顕在化したようです。2.12BでFIXしました。
91 添付のFIFOのファイルをVeritakでコンパイルすると
Veritakがアプリケーションエラーを発生させます。

なお、このファイルは雑誌のサンプルHDLです。

記述に問題があるのでしょうか?

テストベンチと動作記述RTLをそれぞれ分けて(Projectを作成して)
コンパイルしたところ、テストベンチのみをコンパイルした場合
アプリケーションエラーが発生しました。
RST = 0'b0;//=>RST=1'b0 が適当

で落ちています。意味的には、0ビットというのは、ILLEGALで、何らかのエラー
にすべきところです。次リリースより、明示的にエラーとします。
92 Coding the attached behavioral program I found that I get xxxx when
displaying and empty values (it appears like all ones) in the result
file when processing the attached files.
You need to use Blocking assignment instread of Non-Blocking assignment in for loop if they  do not have delay statement.

for (pixel=1;pixel<=640;pixel=pixel+2) //
 $fread(a,ifp);
 $fread(b,ifp);
 $fread(c,ifp);
 $fread(d,ifp);
 green<=abc;// should be green=abc;
end
$fwrite(ofp,"%u",blue0[19:12]);
...

93 timeを%dで表示させると、10桁しか表示されません。
(桁あふれ表示になってしまいます)
2.13AでFIXしました。
94 Win2000で vcdファイルに波形データを書き込むようにして "Go" させ、
途中で "Pause" させた後に、"ユーティリティー"→"VCDファイル読み込み"
させた場合、波形表示されている区間の一部の VCDデータしか読み込まれて
いないようです。
"Pause"させたまま、Veritakを終了させ、作成されたVCDファイルを
Veritakにドラッグ&ドロップして波形を表示させても同様です。

OSがXPの場合には上記現象が起きておりません。XPで出力したVCDファイルと
2000で出力したVCDファイルとのDiffをとると、2000のVCDファイルの方が
短く、最後の方が抜け落ちております。

上記現象はそもそもOSに依存したもので、対処のしようが無いのかも
知れませんが、もし、可能でしたらご対応下さい。
(例えば、"Pause"の状態で強制的にFinishさせ、VCDファイルに書き込まれ
てないバッファデーターを書き込んでからファイルクローズさせるなど。)
WIN2000日本語版でやってみたのですが、それらしい現象は再現できておりません。(DIFFまではやっていませんが、VeritakのWaveformとの視認で、最後まで書いているように思います。)

 内部的には、Pauseまたは、$stop/$finishで、$dumpflushを呼び出しておりましてバッファはフラッシュされているのが設計仕様になっております。この点において、XP/2000の設計的な違いはありません。
 Pauseは、同じ時刻で止めても同じソース行で止まらないように、再現性に難があります。
 
1)そこで、試しに$stopで止めて比較されてはいかがでしょうか?($stopでも$dumpflushは利きます。単に$stopでも、

$dumpflush;
$stop;//Veritak内部実装は、こうなっています。
95 コンパイル版、Ver 3.00リリース、お疲れさまです。
早速、新版の利用を開始いたしました。


本版で修正が入っている `define 関連で
コンパイルエラーが発生する構文がありました。

parameter STEP = 1000;

`define CYCLE STEP;
`define SETUP 10;

always @(posedge CLK)
begin
    #(`CYCLE-`SETUP)
    ほにゃらら〜
end


このような構文例で
#(`CYCLE-`SETUP) の部分がコンパイルエラーとなります。
Parse Error.yy=syntax error

Ver 2.16Aまでは、この記述で通っておりました。
(Ver 2.16Aへ戻すとコンパイルが通ります)

まずはご連絡まで。
3.00A からプリプロセッサの不具合を修正しました。それは、2.16以下で、

`define CYCLE STEP;
`define SETUP 10;
の";" を無視してしまう不具合を無視しないようにしました。

3.00Aでは、この不具合を修正したので、次のように置き換えられてしまいます。
(プロジェクトオプションでEnableすると、preout.v で処理結果が見れます。)

module define_test;
parameter STEP = 1000;




always @(posedge CLK)
begin
#( STEP ;- 10 ;);

end
endmodule

一方2.16以下は、";"を無視してしまっているので、動いてしまいます。大変に申し訳ありません。
96 ライセンスキーはどこに入れたら良いか、よろしかったら教えてください。 ライセンスキーは、Veritak起動->ヘルプ->ライセンスキー
でダイアログが出ますので、そこで、コピペすればOKです。一度入力して成功するとキーは催促されませんしキーの表示もされません。






Veritak要望リストby users 
 


ご要望を頂いて4時間後にリリースしたものもありますし、4ヶ月お待ちいただいたのもあります。いままでの追加設計・コーディング作業で2万行位、書いたと思います。
 最近は、ご覧の通り、ご要求が高度になってきたせいもあり、滞りがちです。


(ところで、NC-Verilog,XL,VCS,MODELSIM,SignalScan,SpyGlass,Debussy、WZ Editor...
Veritakユーザは、そのInexpensiveな価格にもかかわらず、高度かつ高機能なツールをお使いの方が多いのはどういう訳でしょう?MODELSIM以外私は、触ったこともないので、ご要望される場合は、説明を忘れないでくださいね。)
 

Version 対応/コメント
VCD信号名の保存 1.01B 済み
信号並び順の規則が不明。
/信号名のソート機能追加
1.12D ScopeViewの信号リストをアルファベットオーダに改善済み
$fmonitor,$fscanfの実装 Ver1.19
Version 1.74のシステムタスクリストです。
  • $fmonitor
  • $fmonitorb
  • $fmonitoro
  • $fmonitorh
  • $fscanf
  • $fgets
  • $fgetc
  • $ungetc
  • $sformat($sprintf)
  • $printtimescale

実装済みシステムタスク(Verilog2001)は以下の通りです。
  • $display
  • $dsiplayb
  • $displayh
  • $displayo
  • $monitor
  • $minotorb
  • $monitorh
  • $monitoro
  • $monitoroff
  • $mointoron
  • $strobe
  • $strobeb
  • $strobeh
  • $strobeo
  • $write
  • $writeb
  • $writeh
  • $writeo
  • $fopen
  • $flcose
  • $fdisplay
  • $fdisplayb
  • $fdisplayo
  • $fdisplayh
  • $fwrite
  • $fwriteb
  • $fwriteo
  • $fwriteh
  • $stop
  • $finish
  • $realtime
  • $stime
  • $time
  • $random
  • $distuniform
  • $bitstoreal
  • $realtobits
  • $rtoi
  • $itor
  • $signed
  • $unsigned
  • $timeformat
  • $sdf_annotate(Altera,Xilinx)
  • $readmemb
  • $readmemh
  • $sreadmemb
  • $sreadmemh
  • $fread
  • $fwrite("%u",xx);
  • $fflush
  • $fseek
  • $ftell
  • $rewind
  • $dist_normal
  • $dist_exponential
  • $dist_poisson rtl_dist_poisson
  • $dist_chi_square
  • $dist_t
  • $dist_erlang
  • $sscanf
  • $test$plusarg
  • $value$plusarg
なお、Veritak独自の実装済みTask/Functionは、以下です。
  • $sprintf
  • $M_E
  • $M_LOG2E
  • $M_LOG10E
  • $M_LN2
  • $M_LN10
  • $M_PI
  • $M_PI_2
  • $M_PI_4
  • $M_1_PI
  • $M_2_PI
  • $M_2_SQRTPI
  • $M_SQRT2
  • $M_SQRT1_2
  • $acos
  • $asin
  • $atan
  • $cos
  • $cosh
  • $exp
  • $fabs
  • $log
  • $log10
  • $sin
  • $sinh
  • $tan
  • $tanh
  • $ceil
  • $floor
  • $sqrt
  • $fmod
  • $atan2
  • $pow
  • $runge_kutta
  • $conv_hex2ver
  • $writememh(これは、Stdな仕様ではありません)
  • $writememb(これは、Stdな仕様ではありません)
  • $normal_vtak($dist_normal のreal版)

4-1 1.バスや信号のエッジへの移動に矢印ボタンを使用しなくては
   なりませんが、できればマウスでエッジ近くをクリックした時に
   自動でエッジに移動するモードも是非用意していただきたい。
Ver1.19
Version1.19で実装しましました。
4-2 2.Scopeの位置はSignalの左側の列とし、スクロールバーを左に
   移動させることで階層がわかるようにしたほうが良いのでは。
   (現在のままだと深い階層の信号の構造を見る場合に画面サイズ
   を変更し、Scopeの列を広くするなどの工夫が必要)
Ver1.19

代替案で実装しました。
Ver1.19より、Scopeの列をクリックすることでTreeViewをWaveformViewの直下に出します。これで、階層とSignalの対応が改善されます。私的評価では、気に入っています。
4-3 3.任意の時刻にマーカーを挿入できるようにし、マーカーには任意の
   名前をつけることが出来ると便利。マーカーは2箇所は挿入できる
   ようにし、1箇所の場合は挿入箇所の時刻を表示し、かつ既に表示
   されているカーソルとの相対時刻の表示も欲しい。
   マーカーを2箇所入れた場合にはMarker2-Marker1の値もステータス
   バーに表示が欲しい。
Ver. 1.20A. マーカモードを追加しました。Markerをクリックするとマーカモード1,2,3,4、カーソルモード
(従来モード)と循環します。

4個/Viewまでマーカを定義できます。マーカの絶対時刻は、WaveformViewのStatus Barに表示されます。相対時間は、空行に表示されます。必要箇所に空行を挿入してください。
 マーカの名前は、時間目盛り上をクリックするとダイアログが出てきます。
4-4 4.FindPatternの機能をより拡張して、複数信号の条件でのSerch
   ができれば便利。
   例えば、「ADRS(アドレス)が8'h34でかつ、WENの立ち上がり」
   のようなAND条件でのサーチなどをサポートしてもらいたい。
Ver. 1.20A. YACCのデバッグしていて、こんなのが欲しい、と思っていました。

操作としては、左記のような場合、
  • WENのFIND PATTERNをPOSEDGEに設定
  • ADRSのFIND PATTERNを8'h34に設定
します。その後、黒カーソルをだしておき、LISTVIEW(左ペイン)上のWEN,とADRSの二つを選択します。
<− −>で、当該パターン箇所に移動します。
4-5 5.任意の複数信号のバス化をサポートし、MSB/LSBは入れ替え可能と
   していただきたい。バス化した場合の信号名は何らかの規則でデフォルトを決めて良いが、ユーザが自由に定義可能ともする


VCDファイルをVeritakに読み込ませ表示させているのですが
アドレスバス、データバスなどのバス記述ではなく1ピンずつ
バラバラの状態でVCDが作成されています。
この状態では31bitのデータバスなどでは可読性が悪いです。
Viewerの機能として信号をまとめる(グループ化)ことができるの
でしょうか?

Ex.
グループ化していない状態 -> グループ化した状態
Data0  -> Data[2:0]
Data1
Data2

Ver1.42A =>Pendingしていたのですが、VCDファイルでそのようなファイルを吐くツールがあるので、VCD Viewerにも適用できるように検討しました。

ついでに、波形フォーマットのCOPY&PASTE機能を実装してみました。
4-6 6.WaveformViewerの画面をユーザカスタマイズできればありがたい。
   背景色、波形色、文字サイズ/色。
Ver1.21 Ver1.21より適用済みです。
4-7  7.ScopeTreeViewerではTree表示にもかかわらず、深い階層の信号
   までTOPからのフルパスで表示される。折角の階層表示なので、フル
   パスではない表示モードも用意し、見やすくしていただきたい
Ver1.19 Ver1.19よりフルパスでない表示モードに変更しました。
4-8 8.下の方にT1,T2,T2-T2の値表示があるが、3桁毎にカンマをつける
   表示モードも選択できればありがたい。(桁を数えるのが面倒)
Ver1.19
Ver1.19よりカンマ付きに変更しました。
4-9 9.VeriPadでEOF、改行表示、行番号の有無、フォント/サイズの変更、
   背景、文字色変更など、要はユーザがカスタマイズできるように
   していただきたい(出来るのかも知れませんが。。)


エディタに、Verilogテンプレート機能を付加する予定はないでしょうか?
Ver1.28


VeriPadのオリジナルは、GreenPadで、NYSLライセンスで公開されています。 Veripadは、それに、Veritak GUI IF、ブレークポイント、ツールチップ等を付加しているだけです。

NYSLでは、ALPHAというEditorもあります。
また、NYSLではないものの、TeraPadは、ソースがDelphiで公開されています。


=>オリジナルGreenPadの仕様書を読むと、設定できるようです。設定方法をチュートリアルに追加しました。VeriPad VC7ソースも公開しました。Veritak GUIは、一般的なWindowsの通信方法を用いていますので、開発言語に限定されず、(その気になれば)ご自分のEditorからの操作も可能だと思います。Veritakユーザは、高機能なWZ Editorを常用されている方が多いようです。どなたかTRYしてみませんか?

確かに、(Viewerもそうでしたが)、背景が白だと目が疲れますよね。

テンプレート機能について、実装予定はありません。
$fopenのパラメータ変数対応に。 1.16A 済み
modelsimのように波形並びは、
別ファイルでテキストで編集できると、非常にありがたいです。
Interim Solution.
Ver1.19

Ver1.29

Waveviewをいじると、内部的には、Saveformatの変更になりますので、Waveviewの実装が落ち着いた後とさせてください。
(代替えにはなりませんが、)とりあえず、プロジェクトファイルの手動バックアップ用に「名前をつけて保存」をメニューに追加しました。

=>Ver.1.29で テキストでSaveする機能を実装しました。
プロジェクト全てのパラメータは実装できませんでしたが、波形の並び、Radix等は、大丈夫です。なお、生成したテキストファイルは、MODELSIM(b)でも読み込めるようにしたので、自宅でVeritak、会社でMODELSIMを使われる方には、便利だと思います。
右辺と左辺で、代入のビット数が違っ
たり、比較で、if( abc < xyz ) などとしたとき、abcとxyzのビット数が違った
場合、ワーニングが出るようにならないでしょうか。

Version1.19
lint機能みたいですね。「lint付きシミュレータ」、コンパイラの深いところなので、難しいところがありそうですが、実装してみました。(実験的機能です。)


VeritakのVerilogコンパイラ・実行エンジンは、
  • 字句解析
  • 構文解析(文法Check)
  • Elaboration(意味解析、インスタンス展開)
  • Code Genration(インタプリタコード生成)
  • RunTime Check(実行時)
となっています。このうち、Lint機能は、Elaborationフェーズに付加します。RunTimeでないと分からないもの(変数の配列のバウンダリアクセスCheck等)を除き、Bugの温床となリ得るビット幅の相違の検出が、コンパイル時に可能になると思われます。


仕様的には、以下の通りとしました。

Project OptionでLint機能Onとします。

NET系(WIREでのアサイン)とEXPR系のアサイン(BA(=)とNBA(<=))について、LHSとRHSのピン数(ビット幅)が異なるときに(Verilog言語仕様によるビット幅拡張の前に)Warning:Lint ..を出力します。

NET系とEXPR系のBinary表現でのコンペア(==、>=、<=,>、<、===、!==,!=)でビット幅が異なるときに(Verilog言語仕様によるビット幅拡張の前に)Warning:Lint ..を出力します。

NET系とEXPR系でのTernary表現(3項演算)で、True/Falseのビット幅が異なるときに(Verilog言語仕様によるビット幅拡張の前に)Warning:Lint ..を出力します

なお、Both定数(Ex.if(3'b000==4'b0000))等は、Warnig:Lintを出力しません。上記評価に行く前に、コンパイラの最適化フェーズで、if項が消えてしまう為です。

****出力例****

reg [3:0] a;
reg [2:0] b;
wire [3:0] aw=1;
wire c= (a<b);

--- Lint Option Enable時のコンパイラステータス画面

F:\regression_test\lint_test.v(4)::Warning:Lint  LHSとRHSでビット幅が異なります。LHS=4 RHS=32

F:\regression_test\lint_test.v(5)::Warning:Lint ビット幅が異なります。4ビット < 3ビット

-----------------------------