std_logicまたはstd_ulogic?


24

世界はVHDLでビットを表すデフォルトの方法std_logic(およびstd_logic_vector)を決定したようです。代替案はstd_ulogic、解決されないでしょう。

通常、あなたがしているので、これは私を驚かせない記述バスをあなたが複数のドライバーを使用しないでください、あなたがする必要はありませんので、解決信号を。利点は、std_ulogic複数のドライバーがある場合、コンパイラーが早期に警告することです。

質問:これは単なる文化的/歴史的なものですか、それともstd_logicを使用する技術的な理由がありますか?


3
世界は間違っている。スマートエンジニアは、正しいセマンティクスを持つため、std_ulogicを使用します。
wjl

@wjlこれを「文化的/歴史的なもの」と解釈します。以下の回答は、ここまでのコメントよりもはるかに役立ちます。
フィリップ

最初にコメントを書いてから、より詳細な回答を残す方が適切だと考えました。申し訳ありませんが、私はそれが少し軽快に聞こえると思います。しかし、私のコメントは、ほとんどの人がstd_logicを使用して始めたので、それを学んだので、しばらくしてからstd_ulogicについて疑問を持ち始め、それを調べて意味論を理解し、それに変換します。=)
wjl

回答:


16

STD_LOGICはstd_ulogicのサブタイプであると持って、正確に 1つの余分プロパティを:複数のドライバがある場合、それが解決しています。

一般的な慣行に関係なく、std_ulogicは、9値のロジックを必要とする未解決の信号に使用する正しいタイプです。(多くの場合、「ビット」の使用はさらに正確です。たとえば、「X」や「U」などの機能を持たない一部のFPGAアーキテクチャでは)。

基本的に、最善の方法は、ジョブに正しいタイプを使用することです。多くの場合、悪い慣行は、他の人が使用するスタイルを単にオウムしている人々によって広まりますが、その理由を理解せずに行います。


8
アーキテクチャには「U」がない場合がありますが、誤った初期化を見つけることができるようにシミュレートすると便利です。+1は「仕事に最適なタイプを使用する」ことですが、「ベスト」について学習する傾向があります:)
マーティントンプソン

8

私の歴史はこれです:

私が始めたのは(1999年頃のIIRC)いつも使っstd_ulogic*ていました-あなたが説明した理由だけで、それは正しいことだからです。

それから、私はすべてがすべてのインターフェースを持っている多くのウィザード生成ベンダーIPにインターフェースしなければなりませんでしたstd_logic。これは(_vector要素の)ポートマッピングでの変換を意味し、私は怠け者になり、の使用に移行しましたstd_logic*

しかし、私は非常に少ない「ダブルドライバー」の間違いを犯すように思えるので、std_ulogic思ったほど見逃していません。また、Modelsimのdriversコマンドを使用すると、ときどき必要なときに「誰が何を運転しているか」を簡単に見つけることができます。


ええ、IPコア(および特にVerilogから自動的に変換されるもの)はstd_logicを使用する傾向があります。あなたの答えは、その理由の大部分が「文化的/歴史的」であることを示唆しているようです。
フィリップ

ポートでstd_logicとstd_ulogicの間で変換する必要はありません。std_logic_vectorとstd_ulogic_vectorの間で変換する必要があったのですか?
wjl

@wjl:すみません、そうです。投稿を更新します。
マーティントンプソン

私の知る限り、std_logicとstd_ulogicは同じ基本型を持っているため、割り当て互換です。したがって、手動で変換する必要はありません。
ヴァル

@Val:それはwjlが言ったことです(そして私は同意します)-しかし、*vectorポート部分はまだ変換が必要です
マーティントンプソン14

4

IIRCは、有名な再利用方法論マニュアルを推奨std_logic(_vector)しているため、企業などの方法論グループは、それを(必須の)コーディングガイドの形でさらに広めています。個人的には、std_ulogic可能であれば+1 。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.