Sim's blog

電子工作はじめてみました

トライステートのプリミティブ

2008-07-03 23:56:00 | FPGA
トライステートのプリミティブのメモ

bufif0 u1(Z, A, G);
 G = 0のとき、Z = A
 G = 1のとき、Z = z
等価な記述 wire Z = G ? 1'bz : A; // wireはtriも可, G = 1または0のときのみ

bufif1 u2(Z, A, G);
 G = 0のとき、Z = z
 G = 1のとき、Z = A
等価な記述 wire Z = G ? A : 1'bz;

notif0 u3(Z, A, G);
 G = 0のとき、Z = ~A
 G = 1のとき、Z = z
等価な記述 wire Z = G ? 1'bz : ~A;

notif1 u4(Z, A, G);
 G = 0のとき、Z = z
 G = 1のとき、Z = ~A
等価な記述 wire Z = G ? ~A : 1'bz;

trireg z;
ラッチの一種、入力が全てzのときは最後の状態を覚えています。バスに使えますが、xilinxのISEでは未サポートのエラーになります。
bufif0, bufif1, notif0, notif1は等価なverilog記述がありますが、triregをverilogで記述する方法は分かりませんでした。今時、使うこともないんでしょうがとりあえずメモ。

7/4 追記 等価な記述が全部逆になっていたので直しました。のりたんさん、ありがとうございます。

最新の画像もっと見る

2 コメント

コメント日が  古い順  |   新しい順
re:等価な三項演算子 (Sim)
2008-07-04 08:55:05
のりたんさん、こんにちは
ご指摘のとおり全部逆です。直しておきます。ありがとうございます。
triregには元々そういう由来があったんですね。パズルみたいなノリで何か別な表現ができないかと思ったのですが、できませんでした。
返信する
等価な三項演算子 (noritan)
2008-07-04 08:27:56
> 等価な記述 wire Z = G ? A : 1'bz;
これ、すべて論理が逆になっていませんか?

上の例では、"G"が"TRUE(1'b1)"のときに"A"を出力するので、"bufif1"と等価だと思います。

"trireg"は、アクティブな素子ではなく、どちらかというと浮遊容量です。昔は、トライステートバスのグリッチを無視するための方便として、浮遊容量を期待した配線の記述に使っていました。今は、もちろん、使っていません。
返信する

コメントを投稿