【Verilog】記述言語で論理設計 Project5【VHDL】
乙
>>1 乙です( ・∀・)っ旦~ オチャモドゾ
HDL懐かしす 昔応援に行った部署で書いてたぉ ちなみに自分の現在の本職はJavaプログラマ 最近はウェブアプリのセキュリティ研究しています で、このスレに立ち寄ったのも何かの縁なので、質問させていただきます。 Alteraとxilinxのツール両方触ったことあるけど、xilinxの統合開発環境のエディタって糞じゃないですか? ソフト屋の俺に言わせれば、なぜ、Alteraとxillinxが肩を並べているのかわからん Quartusはそれなりに洗練された開発環境だが、iseって統一感なくないですか? ハード屋のみなさん、どうなんでしょ? FPGAとか、ハードはxilinxの方がいいのかな?
エディタはvimを使ってます
俺はWZ IDEのエディタなんて飾りですよ ツールのできは圧倒的にQuartusのほうがイイね
統合環境なんて使わないから関係ない、って人は少数派なのか。 AlteraはあくまでFPGA中心で、 そこで完結が前提の小サイズのもの作る人とかにも易しい統合環境に力いれてる感じ? XilinxはASIC流れっていうか、統合環境どうでもいいって感じ? 別CADメインな人とか、emacsでMakefileな人とか、統合環境関係ないから。
IDEのエディタなんて飾りですよ
10 :
5 :2007/03/21(水) 11:08:06 ID:VHTc3BzO
おはようございます。 やっぱり、皆さんもIDEのエディタは使って無かったですか。 ちなみに自分はサクラエディタでverilogHDLとVHDL用の設定ファイル作って作業してました。 VHDLもverilogもCっぽく、最初に変数宣言がいる、古い言語だから、自動補完とか候補選択とか簡単そうですけどね。 なんで、Quartusもiseもやらないんだろ 後は、Ruby使って、設計したステートマシンやFFを自動記述するものを作ってました。 ついでに、ブロッキング代入とか、ラッチとかステートマシンの無限ループもチェックさせてた(ソフトのできはまだまだ完成度低かったけど)。 学生時代はJava,C++,Cだけの人間だったけど、スクリプト言語を学びたくてRuby勉強してたら、思わぬ業務で役に立ち大感謝。 自分以外の人間でハード出身のひとも結構Perlに頼っている人いましたね。人それぞれですけど。 入社半年過ぎたころにHDL書く部署に応援に行き、最悪の納期前は自動記述できない部分だけで、1日5千行書いたりして、 ついでに、その検証作業も大変だったため、逃げてしまいましたが、またHDL書きたいな。 Javaは家でも楽しめるけど、HDLは個人ではあまり楽しめないですよね。 休日HDLのバイトでもしよっかな。
君の分類方法によるとJavaも古い言語なんだね
つーか 回路設計ってのは検証工程がメインで HDLのコードを書くなんてのは全体工数の1割もいかないだろ
Veritak ドーヨ? 同僚が薦めてくれた。
14 :
5 :2007/03/21(水) 12:40:32 ID:VHTc3BzO
>>11 Rubyみたいなスクリプトが最近はやっていて、Javaを時代遅れと言う意見は実際に多い。
俺自身は古い言語ではなく、「堅い」言語だと考えているが。
俺が最近仕事しているウェブアプリの分野だとRubyOnRailsのおかげでRubyはJavaの10倍の生産性を持つとか言われている。
しかし、個人的には型宣言が必要な言語は統合開発環境の支援が非常に受けやすいので、開発環境を考慮すると、RubyもJavaもそんなに変わらない気がするのだけどね
ちなみに、Cは「最初に」変数宣言がいるが、Javaは「最初に」変数宣言がいらない
最初はソースコードの最初の意味だ
for文を例にしてコードで書くと
Cの場合
int i;
for (i = 0; i < 10; i++){}
だが
Javaの場合for文が出てきた時点で
for(int i = 0; i < 10; i++){}
とかける
Javaの方がint iのスコープが限定されてバグの温床が減る
板違いだが 本当に「古い」のは
C99 なら for(int i = 0; i < 10; i++){} と書けることを知らない
>>5 の知識ということでよろしいか
16 :
5 :2007/03/21(水) 13:00:12 ID:VHTc3BzO
>>15 失礼しました
>C99 なら for(int i = 0; i < 10; i++){} と書けることを知らない
恥ずかしいことに、C99自体知りませんでした
てか、Cの仕様がいまだに拡張されていることすらノーチェックでした
漏れもRubyOnRails使ってるが結局言語がどうこうじゃなくて Frameworkや統合環境が整備されているかどうかの問題だろ だからDは新しくてもまだ一部の人にしか使われていない eclispe + HDL の話がしたいという意味なら酸性だが 話題を逸らすのが得意な香具師とは会話しにくい って激しく釣られたのか俺
いいんじゃないか? “言語で論理”のスレだし。
そういえばISE9.1の新機能にエディタの自動候補表示みたいなのがあるらしいよ
iseは思いからなぁ
エディタはxyzzyですが ise重すぎてワロタ → 次の日からquartus使ってた まあCでもソースの最初というよりブロックの最初だからなあ for(;;){ int k; k =... } でおk?あれこれもC99からだっけ?
それより int hogehoge(void){ for(int i=0; i<10; i++){ } ・・・ for(int i=0; i<10; i++){ } } って書いたとき(r
>>22 1998年ISO以降のC++とC99ではその問題は解決している。
つまりiのスコープはforの内側。
>>21 Cのブロック先頭での変数宣言は K&Rの時代から普通にOK
26 :
774ワット発電中さん :2007/03/22(木) 22:05:19 ID:ZVE4rJno
C99は途中で変数宣言がokニナッタ?
OKのはずだが。 俺面倒だからCでもC++でもg++でコンパイルしてるから なんか間違ってるかも。
g++なんて糞コンパイラ使ってるのかw プギャー
ここにも来たか・・・
30 :
774ワット発電中さん :2007/04/06(金) 18:17:24 ID:+xmh1rog
お前が出品したんだろ いまどき需要がどれだけあるかはわからんが 入札しようと思ってる香具師は くれぐれも次点詐欺には注意してくれ給へ
32 :
774ワット発電中さん :2007/04/08(日) 08:16:52 ID:f23xUPPq
これ俺持ってるけどなんか貴重品なの?
これのVGAのRGBって1bitづつしかないんだっけ?
35 :
774ワット発電中さん :2007/04/08(日) 14:33:04 ID:f23xUPPq
このスターターキットのおかげで素人もFPGA使うようになった といっても過言ではないような。 最近はDDR(2)-SDRAMなのでMicroBlazeなしには敷居が高いし。
小笠原やノリは獲得に向かうべきだったな
相談させてください。 ●言語 verilogです。 ●相談したいこと あるファイルで定数をまとめて規定しておき、 複数のmodule(それぞれ別のvファイル)からその定数を参照したい。 どんな方法があるでしょうか。 ●自分の理解度 ・定数指定というと、上位moduleからparameterで渡す方法しかやったことないです。 ・defineとかincludeとか使うのかな。defineの有効範囲がイマイチわからない。 自分が持ってる入門編にはこのあたりのことが突っ込まれてない。 イメージとして、 hoge.geファイルにparameter XXX = yy;などをいくつも記述しておいて、 include "hoge.ge";とかでその定数を呼び出せたらいいなーと思ってたんですけど……(全然違うかも)
sim開始前にperlで.vファイルの該当箇所をhoge.geの中身と置換するんだ!
40 :
38 :2007/05/10(木) 21:24:32 ID:DItlKhpU
>>39 ありがとうございます。…って、ぱーる(゚Д゚ )!?
すみません、あまりアクロバティックなことはせずに
verilogの範囲内でお願いします。。
書き忘れましたが、AlteraのQuartusです。。
>>38 既に自分で答えを出しているようですねw
処理系によっては、includeするファイルの置き場所を指定する必要があるかも。
--[param.v]---------------
`define PARAM0 2'b00
`define PARAM1 2'b01
`define PARAM2 2'b10
`define PARAM3 2'b10
--[hoge1.v]-----------------
include "param.v"
〜
--[hoge2.v]-----------------
include "param.v"
〜
---------------------------
42 :
38 :2007/05/10(木) 21:30:58 ID:DItlKhpU
>>41 ありがとうございます!!
やったーーーーーーーーーーー
43 :
774ワット発電中さん :2007/05/16(水) 21:49:00 ID:QK334Gx+
ALTERA Quartus II Web Edition はコンパイル、シミュレーションは出来ない仕様ですか?
ライセンス
コンパイルというか合成+フィッタがなければ意味無いだろこの手のツールって。 しみゅれーしょんはModelsimでやるもの
46 :
774ワット発電中さん :2007/05/22(火) 19:54:43 ID:YjMwr24G
お前らの使用シミュレータは?
veritak
modelsim
modelsim
QuartusII内蔵のwww
VCSで機能動作のアタリを付けて実機で検証w 内蔵simやMXEロハ版ライセンスの存在を知らなかったんだ・・・orz
gcc
脳内sim。 永久無料ライセンス。小規模以外無理。時々間違える事あり。
54 :
774ワット発電中さん :2007/05/24(木) 18:43:53 ID:3bbYE1Fa
55 :
774ワット発電中さん :2007/05/27(日) 02:02:06 ID:CBw8xfV2
これからはSystemCの時代
SystemC興味あるわ ぜんぜん触ったことないけど Cから合成できる時代なんだよなーすげえ
CのようでCじゃない
SpecCなら使ったことあるが、 動作合成の言語は非常に気持ち悪いですw
いや、CどころかいまやPythonで合成できるらしいぞ。
-
http://myhdl.jandecaluwe.com/doku.php サンプル:
from myhdl import *
def dff(q, d, clk):
@always(clk.posedge)
def logic():
q.next = d
return logic
まあ見ての通りVerilogで、シミュレーションやユニットテストがPython、
合成はtoVerilog関数でVerilogを出力したのをベースにしてるんだけど、
こりゃおどろいた。
この中の殆どは、仕事でVerilog使ってるの? 最近仕事で始めたけど、100万ゲート以上あって 素人には大変です。
61 :
56 :2007/05/27(日) 13:44:00 ID:gzeCI3nG
Pythonねえ いやclkとかでてくるとなんか高次合成って感じしないな それじゃVerilogと同じじゃんとかおもたw
62 :
56 :2007/05/27(日) 13:46:25 ID:gzeCI3nG
高次合成なんて言葉ないかw 動作合成っていうの?
動作合成でのパイプライン化って局所的にはウマーなんだけど 大域的に見るとぶつ切りなんだよなあ 一言語でHW/SWってどんだけ冗長なんだよ
64 :
774ワット発電中さん :2007/05/30(水) 16:04:44 ID:50oLj29Q
1ヶ月ほど前にverilogを習い始めた初心者です。 verilogで除算器を作成しているのですが、どうも思うようにいきません。 記述した主な内容は以下のとおりです。 (outputは乗算器の出力も兼ねていますので16ビットにしてあります) input[7:0] a, b; output[15:0] out1 reg[7:0] div1, div2, div3; div1 = a; div2 = 0; div3 = 0; while(div3<a) begin div1 = div1 - b; div2 = div2 + 1; div3 = div3 + b; end out1 = div2; Xilink ISE 9.1iを使用してコンパイルしているのですが、 "Use set -loop iteration limit XX"というエラーがでて通りません。 これって、どこで設定すればいいのでしょうか? また、別の除算器の方法があれば教えていただけないでしょうか?
>>64 while は合成に使えないだろ?
>Use set -loop iteration limit XX
定数ループだったら展開するって意味じゃ?
ソフト屋が入門するときの罠だが
まずはパイプライン組め。
次はステートマシン組め。
64の回路が本当に合成されたらヤだよな。 商の回数だけ回り続けるんだぜ?
完全にプログラムじゃねーかよッ アホンダラ!
>>64 回路を作くんだよッ回路をよッ
>>66 いや、順序回路になっていないから回り続けるどころか
商の数だけ同じ回路が展開される。
まあ、何個展開するのかは知らんが(笑)
まさにコンパイラが
>Use set -loop iteration limit XX
と怒っている通り。
b=0がありうるから無限に展開
なるほど while使っても個数が決まれば合成可能なのね
合成は可能なんだが、普通回路作る時ってそういう作り方しないだろ。 あんまりお勧めじゃないな。 同じ回路ならモジュールとして独立させてそいつを呼び出すとかな。 手順を書いてるわけじゃないんだから。
whileって要するにプログラム言語的な反復手順記述ではなく、 回路としてマクロ展開するための反復展開命令みたいなもんなのか
何言ってんの? すべて回路展開するための命令 シミュレーション記述以外手順の記述なんてもんはHDLにない
いやだからそこがソフト屋とハード屋のギャップってこと。 つまりソフト屋にはHDLのwhileとかもろもろは全部LISPのマクロと同じですと説明すれば きれいに理解できるようになる(のか?)
ヤレヤレ ┐(´ー`)┌ マイッタネ 何をわけのわからんことを
今時のソフト屋はLISPを知らない
>>64 はwhileじゃなくifでうまく書けば
通ることは通るかも
この手の問題はSystemCで書いても変わらない やっぱSystemCに未来はないか…
78 :
774ワット発電中さん :2007/06/01(金) 13:14:17 ID:Zn7uA93N
何かいい参考書や入門書ない? あったら教えて。
quartusやISEではVHDLで回路を記述しても最終的に要らない論理は省略されて合成されませんよね? あれを強制的に生成できるオプションのようなものはありませんか?
>79 残したい信号を出力として定義する。
>>80 ありがとうございます。
やはりそれしかないんですか。
信号線たくさんあるとめんどくさいんですよね。
verilogなら reg my_reg /* synthesis preserve = 1 */; vhdlなら signal my_reg: std_logic; attribute preserve: boolean; attribute preserve of my_signal: signal is true; 論理合成するツールによって文法が違ったりする。
83 :
79 :2007/06/02(土) 14:37:50 ID:SS4K8Z06
>>82 あ!さがしてたのはそんな感じの方法です。
xilinxでもpreserveの代わりにSYN_KEEPでいけるようです。
>>79 82が言うように合成のツールによって違ったりするからツールをよく勉強しる。
確実なのは出力にしちゃうことだよね、いらなくなったらコメントアウトしちゃえばいいし。
誰かverilogでリセット記述したときのスマートな記述知らないか?
VHDLなら othersで何ビットでも一気にできちゃうんだが、、、
>>84 0にリセットしたい場合なら、試したことないけど、 ビット数指定しないというのは?
a <= 'h0;
32bit扱いになると思うけど、多い分は捨てられるんじゃないだろうか?
>>85 あ、指定しないと埋まるんだ、、、ありがとう
どう合成されるか、だけ気になるけど今度試してみるっす。。
あぁ、これでまたVHDL人口が1人減ったか。 すばらしく良く出来た言語なんだけどなぁ・・・・・ 現状では仕方ないか。
VHDLめんどいから できれば使いたくない
emacs + vhdl-mode.el は快適だわさ。 M-x vhdl-port-copy から始まる各種のテンプレート自動生成がとっても便利。 インデント調整や構文補完機能なんてのも重宝しております。 ココ見てる皆さんの、verilog/VHDL限らずお薦め記述環境ってどんなもんがあります?
ああ、そっか。 emacs使える人は、 vhdlモードだとかverilogモードだとか ああいうので自動生成するから vhdlでもいいのか。 lispがわかれば なんたら.elとかいうのも自分で作れるんだろうしねえ
とりあえずemacsとlisp勉強せいということか...鬱になりそうorz
そんなに身構えなくても大丈夫だと思うけどw Win使いならMeadow辺りを入れて試してみるとか。(vhdl-mode.elも含まれている) VHDLがめんどくさく感じるのは、記述がいちいち厳密で冗長っぽい所ですからね。 そう言うところ(宣言文や結線記述)はツールに任せてしまえば楽できます。
>>89 emacs(meadow)+verilog-mode.elは(もっと)^100快適だわさ
VHDLなんて、商売上のmust司令以外使う意味なし
>VHDLがめんどくさく感じるのは、記述がいちいち厳密で冗長っぽい所ですからね。 記述が厳格というのはメリットもあるけど、 予約語がなんの短縮の工夫もなく原語そのまま使ってるのがいかにもマヌケ 条件コンパイルもお手軽にできねーし verilogは標準化されないかも?ってところからVHDLが期待されただけで、 IEEEで規格化された今となっては所詮Adaとおなじ運命たどるだけ 会社で強制されてるんでなければSystemVerilog使えるようになっとく方がはるかに吉
素人な俺はVHDLがいいけどなぁ。細かいエラーもガンガン出してくれるんで初学者には ありがたい。
96 :
774ワット発電中さん :2007/06/07(木) 06:55:18 ID:KALdxM4X
zsh+screen+vimが最強だとおもいます!
いつになったらビヘイビアレベルでの論理設計が一般化するんだ? VHDLとかVerilogとかSystemVerilogとか目糞鼻糞だろ
>>97 そんなもんが出来るようになったら俺らおまんま食い上げだわさ。
きっとUMLからボタンポンでASICができる時代がくるよ(棒読み キットクルヨ!
状態遷移図からHDLコード吐くツールは既にある
>>101 STATE MACHINE CADみたいなのか?
それなら高校生でもつくれるぜ
じゃ作ってみろや ちなみにMentor のHDL Designerがその手のツールだ。 お前が作って商売成立すれば大いにめでたい。 はよ作れ池沼
Verilogにもattributeがあればいいのに、と思う。
あるよ〜
VHDLの方がコーディングの量が多いって具体的に何? componet宣言とか? 言うほど変わらない気がするんだけど。 それは特に気にならないが、気になるのはツール類かな。 verilogお断りよりもvhdlお断りの方が断然多い。今後、その傾向は強まるのかね。 少し残念だ。
うちはverilogお断りのほうが多い。 昔のスケマ→VHDLにしる、ってのが多い。 verilogは「言語?どっちでもいいよ?verilog?いんじゃね?」って感じ。 あぁ、でも、5人くらいでコーディングするとき多数決でverilogになったときもあった。 VHDLはまだ初心者だけど、 Componentと、ポートに直接代入できないのがめんどいなって思う。 でもVHDLに慣れてくるとその良さが解ってくるし、 逆にverilogに戻ったときポートリスト書くのめんどいと思った。あほな文章ですまん
ソフト系から入るんでVerilogの方がCっぽいなーで本+独学でVerilog始めたんだが やっぱVHDLも出来た方が良いのかい?
VHDLできなくても全く問題なし。
どっちかできれば、もう片方もできる(ようになるのは容易)。 言語よりもテストベンチしっかり書く癖とか、言語そのものではなく 道具を使う上でのポリシを確立しとけばなんとでもなる。
>VHDLの方がコーディングの量が多いって具体的に何? 辞書の単語をそのまま使ってるのも一つだが、 何より条件コンパイルをサポートしてない。実験しようとかってときにコーディング量というより、 他のツールに頼ったりってのがメンドい
ifdefっぽい条件コンパイルは if-generate文で済ませちゃいますね。 コンパイル制御用の定数は、TOPのパッケージあたりに入れとく感じ。 まあ、Verilogに比べたら確かにめんどくさい罠w constant c_TEST_SW : boolean := true; -- Type.Aを使う -- constant c_TEST_SW : boolean := false; -- Type.Bを使う L_IF_T: if (c_TEST_SW = true) generate -- Type.A end generate L_IF_T; L_IF_F: if (c_TEST_SW = false) generate -- Type.B end generate L_IF_F;
Cのプリプロセッサ通せばいいとは言うものの面倒なことは間違いない
cpp -P をスクリプトに入れとけば特に面倒でもないような。
いまどき cppじゃなくて m4だろ cppとか gcc -Eとか言い出すなんて、オマイラ20年前から時間が止まってるのか?
m4で「いまどき」ってのもなんかすごいが・・・
20年前でもm4だよな
ところで、みなさんアサーション使って開発してる?
なにそれ
検証用モデルと仕様との一致をどうやって保証すればいいんでしょ? 実装で用いてる言語とテストに用いる言語が別の論理体系なのでさっぱりワヤですわ....orz
まさかと思って検索したら、こんなスレがあったのかw ____ / \ / _ノ ヽ、_ \ / o゚⌒ ⌒゚o \ <今日も高位合成ツールが吐き出したコードを | (__人__) | 延々検証する作業が始まるお \ ` ⌒´ / ノ \ /´ ヽ
>>123 ビヘイビアモデルを想像しているようだけど、アサーションはそこまで高機能な
ものを記述するものではなく、バスプロトコルのチェッカー辺りが費用対効果が
一番高い領域だと思う。
また、イマイチ直感に反する書き方をしなければいけない時もあるけど、
アサーション記述言語はRTLよりも思った通りの仕様を素直に書けるから、
正しいアサーションを書く事はそんなに難しくない。
本当に便利だから、使える環境にある人はすぐに使った方が良いよ。
vhdlの予約語busとかregisterってどういう使い方するんだ?
今頃vhdlなんてほったらかしとけ
最近はVerilogが主流になってるのかねぇ。
Verilogから、VHDLへ異色中 others 便利すぎわろた
130 :
774ワット発電中さん :2007/06/27(水) 22:15:10 ID:xbx6feWB
今VHDL勉強中だけど、 徐々にVHDLの需要が少なくなってるそうですね。 やはりVHDLより、これから活躍する(?)System Verilogを 勉強した方がいいんでしょうか・・・・ それにしても慣れてないせいかVHDL難しい
みなさん、業務で設計する時、まずFF+ゲート的なレベルの回路図描く? もう少し上位のブロック図は描くと思うんだけど。
>>131 上司もしくは客がそれしか理解できない系?
>>132 YES
ゲートレベル回路書いてそれをRTLにコンバートしてるんだよねぇ。
RTLじゃなくてUMLで設計したら?って思う。
emacsのverilog-mode、tabとspaceを混ぜてインデントしてくれるので 他のエディタを使ってる人からぶーぶー言われるんだよね。 インデントがめちゃくちゃになってるって。 emacs派の皆さんはどうしてますか?
つ C-xC-sのタイミングでTAB-SPC置換する つ (setq indent-tabs-mode nil) <- 効くかは知らんけど
仕様の検証なんてできるわけない。 仕様は必ず物が出来てからいじくられる。 死んでしまえー。
>>136 だな、
日本的設計手法だと
最初は結構あいまいな仕様でスパイラル的に開発が進行してくもんな。
日本人が文章の構造を考える前に書き初めて
MS-Wordは使いにくいって感じるのと同じだな。
>>137 そこで「スパイラル」って言葉使うと一見アジャイル風でカコイイなw
わが社はプログレッシブJPEGのような開発体制です(最後の瞬間になるまではっきりした姿にはなりません!)。
“あいまい開発”をサポートするツール希望(w
わが社は納品1週間後くらいに仕様が決まるよ。 だからどんな仕事でも1〜2ヶ月は遅延してる orz つーか、まず完成品持って打ち合わせしないと要求仕様を考えてくれない。
142 :
141 :2007/06/29(金) 00:58:56 ID:0jPORKR4
↑書き込み1行抜けた。 FPGA の話ね。
その期間分なり仕様変更プロセス分の成果に対応する金の払いがあるなら そういう客ということでいいんじゃね? そういう所に限って期限オーバーだからもっと早くとかテストは省略とか デバッグはバグがあるというあってはならないコト前提だから計画に 入れなくていいとかいうわけだが。
144 :
141 :2007/06/29(金) 02:16:21 ID:0jPORKR4
>>143 そのバグまみれの機器を、そのまま販売(1桁台の数量だが)されて
客の客から怒られた事があるよ。 客の担当は逃亡して、俺とユーザーでバトル。
仕様は変わることを予想して設計する
>>141 それは考えようによってはラクだ。
最終形からどのくらいデグレードした仕様を提示すればいいかのキャスティングボード握れるわけだし。
(御客の考えてる仕様をちょっと満足させないスペックにしておいて、そこをメインの改良点に承諾させれば楽勝)
ただ取次ぎで中間マージン取ってるだけのアホが、中抜けの仕様を持ってくることもあるんだよね。
そういう場合には仕様確認をどっさり持ち帰らせて取次が理解できないような質問もして
最終納品先のエンジニアと直通ラインを掘っておかないと最終段階でアボーンしたりするから気をつけろ。
>>145 そんなことは余程程度の低い仕事をしているか
余程設計や製作の実力が余っていないと無理だよ。
じゃなければ過剰品質でコストを余分に掛けてるってことだ。
まあ、お役所みたいにコスト意識ないとこに出す場合は
そういう仕様変更やアフターサービス分も盛り込んで
何倍も吹っかけて見積もりをだすけどな。
そうしないと赤字になるし不愉快でやってられなからな。
>> 131 について意見をいただけませんでしょうか? 一般的な意見をきかせてください。
>>148 書かない。
RTLレベルだとテンプレート記述がすでに在ってそれをコピペする。
テンプレートない時には
テストパターンと期待値を作るのにステート図を書いたりはする。
つか、ゲートレベルのライブラリが無い限り『回路図』を想定して設計できないべ? 超大昔にゲートアレイでやった記憶があるにはあるが......
いまどき学生実験でもなければ書かないと思う。 CADで大体欲しいレポートが出るし。 宇宙環境とかでFFの保持が絶対保証では無いケースで ステート遷移パスを冗長にする必要があるとかなら書くかもしれん。
152 :
148 :2007/06/30(土) 01:59:39 ID:Yu42PFZi
ほんとに信じられんよ。 RTLと一対一の回路図(またはその逆)を一所懸命書いてなんか満足してるみたい。 で、仕様書はというと形はあるが、殆んど内容なしの3ページ程度。 RTLにコメントもろくに挿入されてないから、読んでも何やる回路かすらわからない。 信号名も6文字程度の暗号文だし。
>>152 紙ベースのゲート回路図からRTLへの書直しは普通にある作業だと思う。
74シリーズTTLの実体配線図から起こすというのまである。
もちろん仕様書なんて1枚もなし。
何やる回路か最後まで判らなくても同じ動作さえすればオッケー。
> 紙ベースのゲート回路図からRTLへの書直し って何のメリットがあると思う?ひとつもない気がするんだけど。 >同じ動作さえすればオッケー 何と同じ動作ですか??
>>154 あなたは学生かサラリーマン?
現場って結構俗っぽいのよ〜ん。
道路を何度も掘り起こすのと同じで本当の意味でのメリットはないね
もちろん元のボードと同じ動作にする。(ように努力するw)
で、へたに人力で論理圧縮したり言語で書き直すと、突然後から “このピンの信号を外出ししたいんだけどなー”とか言われるわけだ(w
>>158 あー、分かる分かるw
昔は洗練された回路にしよう、とか一生懸命考えて美しいコンパクトなのができると
自己満足してた。
でも今は無駄に余裕持って作るようになって、急な仕様変更をすぐ受けられる
ようになったときに自己満足w
社会人になって学んだリスク回避だなぁ。悲しいけど。
>158 まだいいじゃん。ピン出すだけなら。 俺なんか「この配線部分に100pFのコンデンサ追加できるようにしてくれ。」って言われたぞ。 説明しても分かってもらえないから無理やり作ったけどな。その後どうなったかは知らん。
>>160 そういうのはEMC対策でよくあることだよね。
次のボードのラッチが前のボードのゲート遅延を期待してて
書き換えるとホールドタイムが足りなくなるのも常に想定して作ってるよ。
>>158 でも、実は非同期カウンタとか書き直せないんだよね。
真面目にやろうとするとCADでワーニングの山が出るんだが
出たままだと御客に渡せないのでごまかすのに一苦労とか。
163 :
160 :2007/07/01(日) 00:37:50 ID:Y7+I2ueX
EMC対策じゃないっすよ。 デバイスの中の配線、論理合成したら圧縮されてどう展開されるか分からないような部分。 下手すると消えてしまうかもしれない配線。 途中までの回路を記述して、一旦ピンに出してPCBでCR挟んで、また中に戻ってくるような回路。 デジタル回路じゃ無いよな〜これって。
論理合成したら、行き着く所は、無の境地 ですね?
165 :
774ワット発電中さん :2007/07/01(日) 01:17:48 ID:apwyPKFK
>>163 いや、そういうもんだと諦めろwwww。
まあディレイ回路か微分パルス回路なのだろうが、
それをデジタル回路に置き換えるのが仕事のうちなのだよ。
お金の元になるのだよ。
>> ID:apwyPKFK 糞が、デジタルなんてほざく奴が人様の教育なんざぁ百年早いんだよこのゴミ 会社も考えたもんよ。糞にこそ新人教育させる 簡単に首切れねぇからなぁ
ID:KZ0Behu9は他のスレでも煽り入れまくりだな。 あぼーん設定したらスレの見通しの良いことw
Meadow + verilog-modeで C-c C-t mしてmodule名入れるとエラーになる。 内部的にskeletonの展開で無限再帰呼び出しになってる。 最近のverilog-modeって何か動作変わった? それともMeadow側(skeleton.el側)の問題かなぁ?
お家PCでVerilogの記述をシミュレーションしたいときに (記述もうちょっとだけど終バス来ちゃうから15分くらい早く切り上げたいなとか) cygwin上でcVerでも使おうかなと思うのですがどのバージョンを使うのが良いでしょう? (評判ではかなり?みたいですがVeritak買うほどじゃないということで) 他にこんなの使っているよというアドバイスあればよろしくお願いします。 条件としてはシミュレーション単位は1000行行かない。 シミュレーションはディレイは無考慮で良い、PLLみたいな非同期動作も不要 専用マシンじゃないのでメモリは512M位でシミュレーションできる 時間は超劇遅じゃなければXLの10倍掛かってもOK 最終確認はXLでできるので特殊条件でのバグは許容。
>>170 QuartusII Web editionでダメ?
>>170 verilator
ただしライブラリは使うのかどうなのか
仕事持って帰るのはダメ
178 :
170 :2007/07/07(土) 23:53:08 ID:2tvEaDL7
みなさんありがとうございます。
>>171 QuartusII でVerilog使ったことないので試して見ます。でもメモリ使いすぎっぽい印象です。
>>172 ,
>>174 verilator だとVerilogのデバッグという枠を外れてしまうので×です。
>>173 Icarus は検討したのですがcVerよりダメっぽい感じでした。
>>176 一応前提条件としてVeritakは外したのですが、やっぱりVeritak買うのが無難かな。
ご意見ありがとうございました。
>>178 印象を並べる前に使ってみろって感じです。
単に2chに期待しすぎて失望しただけだろ。すげえ回答でも期待してたんじゃないのかw。 一定レベル期待するならFPGA BBSとかで質問しないと無理だわさ。
ずっとネタがないから、食いつきはいいね・
>>170 どのバージョンでも、フリーなんだから試してみれば。
よく分からんなら、最新を使えばいい。
俺の場合はたいてい、cver で事足りてるけど。
183 :
ひっし :2007/07/19(木) 17:45:12 ID:K06d3+Z0
だれかSynopsys VCSのシュミレーターの事、詳しい人、いませんか? 来月からSynopsys VCSのシュミレーターを使うのですが、触った事のなく、 見た事もなく、非常に不安です。ネットでマニュアル見てもさっぱり・・・。
>183 不安とか言っても、何が知りたいのか書かないと答える方も答えられないと思うが。
185 :
774ワット発電中さん :2007/07/19(木) 21:51:45 ID:G16I76ml
186 :
774ワット発電中さん :2007/07/19(木) 23:24:49 ID:/owkDuOJ
quartusとmodelsimを無料で落とすにはどうすればいいですか?
無料で落とせばいい。 わざわざここで質問するほど難しいことじゃないと思うが・・ ん?ネタを提供してくれたのか?
多分英語を見ると蕁麻疹が出るタイプの人じゃないか?
proxyサーバを通してダウンローダを使うとだめだったような気がする。
なんでFPGAすれでVHDLのことやってんだ?w こっちでやれよ
こっちに書かないであっちで誘導しないとわからないだろw
最近、VHDLの勉強を始めたのですが、よく分からないところがあります。 1) component HOGE ... end component; としたとき、HOGE はどこから、どうやって探してくるのでしょうか? 同じディレクトリ (プロジェクト?) に entiry HOGE が書かれているファイルが 複数あった場合は、どうなるのでしょう? 2) architecture ... of HOGE is の ... の部分は何を書くべきなのでしょう? てもとにある本では「複数のアーキテクチャ部を切り替える場合の識別子」 と書かれているのですが、そのような場合の例が無いため、結局どのように 使われるのかが良く分かりません。 非常に初歩的な質問だと思いますが、よろしくお願いします。
>>193 1) ツール(コンパイラ等)が探してくるから、ツールのマニュアルを読め。
2) 自分でわかりやすいように適当に決めて良い。RTL記述ならRTLとか、
Behavior記述ならBehavioralとかsimとか。
シミュレータとか合成ツールとかは、topレベルのentity(architecture)を
指定するようになっているから、その指定の仕方を調べると分かると思う。
195 :
193 :2007/07/25(水) 20:38:15 ID:G4074WxP
>>194 レス、どもです。なんとなく分かってきましたが、まだすっきりしない部分があるので、
さらに質問させて下さい。
1) については規格 (IEEE 1076?) ではどのように規定されているのでしょう?
2) について、
> シミュレータとか合成ツールとかは、topレベルのentity(architecture)を
> 指定するようになっているから、その指定の仕方を調べると分かると思う。
ということは、基本的にはプロジェクト単位でのきりかえということでしょうか?
例えば、
entity HOGE1 は architecture V1 で (V2 もある)、
entity HOGE2 は architecture V2 で (V1 もある)、
はできないということでしょうか? (この辺もツール依存?)
具体的にそういうことをやりたい訳ではないのですが、気になってしまって。
この辺も規格での規定について分かれば嬉しいです。
よろしくお願いします。
http:
>>195 規格を自分で読むとかするつもりはないの?
(2)の...の部分は、最近のツールは読まないって本に書いてあったけど。 乱暴な例だけど「aaa」でも「bbb」でもプロジェクト内で混じっていてもエラーにはならない。 俺はRTLとsimしか使わない。規格については知らない
>>197 >
>>195 > 規格を自分で読むとかするつもりはないの?
(簡単に) 入手できるんだったら、もちろんそのつもりはあるけど、IEEE の規格って
簡単に手に入る?
どこかに PDF でも置いてあれば読むんだけど… (探してみたけど、みあたらなかった)
おそらく有料になると思うんだけど、正直なところ、そこまでして知りたいというほどでもないし
(金額にもよるけど)、 そもそも、どの規格を読めば良いかが分からない。
(本当に IEEE 1076 で良いのか? 1076.[12346] とかもあるようだけどこれは必要ないのか?
(Extension っぽいから↑の目的では不要っぽいけど))
どこかに (できれば無料で) 置いてあるんだったら、どこにあるか是非教えて下さい。
200 :
193 :2007/07/25(水) 21:29:06 ID:G4074WxP
>>198 > 最近のツールは読まないって本に書いてあったけど。
そういうもんなんですね。
ぐぐってみたら、それっぽいことが書かれたページもありました。
あと、今私が使ってるツール (VHDL Simili 3.1) は、ドキュメントを斜め読みした
限りでは、(たぶんプロジェクト単位で) 指定できるみたいです。
結局のところ、あんまり気にしないで適当に書いておけばOK、なのかな?
ちょっとすっきりしないけど…
あそこは本当はcomponentでインタフェースベース設計をしたら、 後は合成ツールが全体最適化をかける時に組み合わせとしてベストな architectureを選択するぜ!これで同種IPの自由な交換・流通とか できちゃったりして、ここまで考えたオレってsugee! ・・・ということだったんだろうな。 時代の先を行き過ぎて結局使われなかった(それとも使われたけど あんまり効果出せなくて廃れた?)。
>>201 インタフェース設計して、最初はarchはBLで動作を検証。
その後RTLに入れ換えて論理検証・合成ってことを考えてたのだと思う。
verilog2001で負の定数を書きたい場合、 例えば、"-5"だったら、 8'sd_-5 と書くのか -8'sd_5 どっちがいいのでしょうか? こういうことをネット上で詳しく書いてあるところってないですかね?
>>203 2001を意識したこと無いからそんなの出来るのしらなかった。
RTL見やすくなりそうだね。
調べて報告してくれぇい
>>203 d の直後に _ を持ってきたり、d の後に負の値が書けるんだ
最近あまり Verilog 書いてないからすっかり忘れているな
206 :
203 :2007/08/03(金) 10:39:59 ID:GkstIZvM
>>204 私は、QuartusIIで、
8'sd_-005
などとやったら、負の数としてバス信号できました。
(コンパイルオプションでverilog2001にする必要あり)
ただし、今回は結果オーライでできましたが、
2の補数表現かどうかとか、明示した記述でないので
かなり曖昧さを含んでると思います。
207 :
774ワット発電中さん :2007/08/03(金) 14:23:36 ID:IuWqR5gy
上の記述は、 BNF(2005)からすると decimal_number ::=unsigned_number | [ size ] decimal_base unsigned_number | [ size ] decimal_base x_digit { _ } | [ size ] decimal_base z_digit { _ } なんで通るのか分からない。VCSでも通るの?
208 :
774ワット発電中さん :2007/08/09(木) 02:09:27 ID:CGRJMj+P
VHDL variableとsignalの違いはなに?
解らんうちは、signalだけで記述すべし
spartan3について質問させてくだされ IO_L01P_5/CS_B って端子を汎用ポートとして使いたいんだ。 だがコンフィギュレーションしてみると常に出力が"H"にしかならない。 記述はまぁ一般的にVHDLで この端子 <= '0'; で書いているので間違いは無いと思う。 データシートに 「コンフィギュレーション後は、汎用ピン (DIN/D0-D7、DOUT/BUSY、 INIT_B、CS_B、および RDWR_B) をユーザー I/O として使用でき ます。 これを可能にするには、BitGen オプション〜」 と書いてあるんだけどこれを設定していないから使えないのかな? 先輩が作ったファイルだとちゃんと動作するのでハードウェア的には問題ないと思う。 (今先輩とは連絡が取れないのです) 誰か助けて下さいまし
VerilogでCPU作りたいんだけど、難しいかな?
簡単ではない、でも自分が欲しいだけの機能を持ったマイコン程度なら作れると思う コンパイラどうするとかは知らん
なるほど コンパイラうんぬんまで行けたら十分すごいですね
性能云々言わなきゃ簡単でしょ。 パタヘネ読んどけばパイプラインまではわりと作れる。 キャッシュとか例外とか泥臭いところは、それこそ手間だろうが。
うぉ、こんなん昔はあったのか。 最初1bit?4bitじゃないのとか思ったら、オペコードから加算とかが男らしくカットされている・・・
217 :
215 :2007/08/10(金) 03:53:04 ID:2QdIldrk
昔(厨房のころ)、標準ロジック規格書(小遣いで買うには高かった!)に載っていた これを見て、ぜひ買って使ってみたい(使い方ワカランかったけど)と思っていたが、 いつ雑誌の広告を見ても取り扱いされているのを見掛けたことがなかった。 ある意味思い出、ある意味まぼろしの石だ・・・
218 :
774ワット発電中さん :2007/08/11(土) 07:09:57 ID:SNsXa0fq
PROC_Timer : process ( RST_N, CLK) begin if ( RST_N = '0' ) then counter_reg <= (others => '0'); time_over_reg <= '0'; elsif ( CLK'event and CLK='1' ) then if(timest_reg = '1') then time_over_reg <= '0'; counter_reg <= x"0001"; else if ( counter_reg = C_TIMCT ) then counter_reg <= (others => '0'); time_over_reg <= '1'; elsif( counter_reg = x"0000" ) then time_over_reg <='0'; else counter_reg <= counter_reg + 1; time_over_reg <= '0'; end if; end if; end if; end process PROC_Timer; 初心者です。 一応動いているみたいですが、ifの使い方とか間違っていませんか? なんか問題ないですか?
PROC_Timer : process ( RST_N, CLK) begin if ( RST_N = '0' ) then counter_reg <= (others => '0'); time_over_reg <= '0'; elsif ( CLK'event and CLK='1' ) then if(timest_reg = '1') then time_over_reg <= '0'; counter_reg <= x"0001"; else if ( counter_reg = C_TIMCT ) then counter_reg <= (others => '0'); time_over_reg <= '1'; elsif( counter_reg = x"0000" ) then time_over_reg <='0'; else counter_reg <= counter_reg + 1; time_over_reg <= '0'; end if; end if; end if; end process PROC_Timer;
>>219 オレが書くならcounter_regとtime_over_regは別processにする。
processを分けることによって、片方のsignalのみ代入されるネストが無くなるので。
time_overしたあとtimest_regが入らないと、C_TIMCT後にもう一度time_over_regが'1'になるけど桶?
一度でよければC_TIMCTになったらcounter_regはholdしてtimest_regが入ったらそっから動くようにする。
time_overはパルスにならないので微分する。
何度も出ていいならcounter_regはC_TIMCTで0に戻してフリーランさせて、time_overはC_TIMCTと一致を見るだけ。
if(counter_reg = C_TIMCT)then
time_over_reg <= '1';
else
time_over_reg <= '0';
endif;
余談:
合成エンジンによっては、合成時に変数名の最後に"_reg"を追加するものがあるので、signal名に_regはつけない方がいい。
netlistではcounter_reg_reg[0]とかって名前になっちゃうので(苦笑)
221 :
774ワット発電中さん :2007/08/11(土) 13:07:15 ID:SNsXa0fq
>processを分けることによって、片方のsignalのみ代入されるネストが無くなるので。 意味が分りませんが、どういうことでしょうか? >time_overしたあとtimest_regが入らないと、C_TIMCT後にもう一度time_over_regが'1'になるけど桶? オーバーするとカウンター=0で、カウンター0の時はカウントしないようにしています。 ですから次のスタートが来るまで0のままです。 >一度でよければC_TIMCTになったらcounter_regはholdしてtimest_regが入ったらそっから動くようにする。 >time_overはパルスにならないので微分する。 holdってどうやるんでしょう。 微分って別プロセスでやるのでしょうか?
222 :
774ワット発電中さん :2007/08/11(土) 13:07:53 ID:SNsXa0fq
PROC_Timer : process ( RST_N, CLK) begin if ( RST_N = '0' ) then time_over_reg <= '0'; elsif ( CLK'event and CLK='1' ) then if(timest_reg = '1') then time_over_reg <= '0'; else if ( counter_reg = C_TIMCT ) then time_over_reg <= '1'; else time_over_reg <= '0'; end if; end if; end if; end process PROC_Timer; PROC_count : process ( RST_N, CLK) begin if ( RST_N = '0' ) then counter_reg <= (others => '0'); elsif ( CLK'event and CLK='1' ) then if(timest_reg = '1') then counter_reg <= x"0001"; else if ( counter_reg = C_TIMCT ) then counter_reg <= (others => '0'); elsif( counter_reg = x"0000" ) then else counter_reg <= counter_reg + 1; end if; end if; end if; end process PROC_Timer;
223 :
774ワット発電中さん :2007/08/11(土) 13:20:04 ID:qmjE97Ja
ifの中の条件式って、「==」ではないのでしょうか? あとthenではなくてbeginだし、 clockのエッジ方向は、posedge(↑)、negedge(↓)ではないでしょうか。
224 :
VHDL初心者 :2007/08/11(土) 13:45:18 ID:SNsXa0fq
↑こら、茶々いれるな。
223って茶々なの? 痛い子かと思った。
226 :
774ワット発電中さん :2007/08/11(土) 20:17:40 ID:jkJiToYJ
質問させてください。 Verilogのテストベンチで、テストするモジュールの内部信号を テストベンチ内で処理したいのですが モジュールにoutputのポートを追加せずに直接引っ張り出す方法とかありますか?
モジュール名.内部信号 で見れると思うが
Pascal?
Modula-2じゃね?
Eiffel
231 :
220 :2007/08/12(日) 21:01:54 ID:jl0mHeWT
>>221 > 意味が分りませんが、どういうことでしょうか?
プロセスを分けたいのは、カウンタとフラグは動作条件が違うから。
elsif( counter_reg = x"0000" ) then
time_over_reg <='0';
例えばこのネストでcounter_regが定義されてない=この条件はカウンタには必要ない=動作条件が違う。
動作も合成も問題なくできるけど、不確定要素を極限まで減らしたいので。
> オーバーするとカウンター=0で、カウンター0の時はカウントしないようにしています。
> ですから次のスタートが来るまで0のままです。
仕様がわかってなかったわ。
これだったら、イネーブル作ってカウンタ回す。
カウンタの条件がすっきりするし、検証するときに分かりやすいから。
counter_regが1clock遅れるからC_TIMCTを1減らす必要がある。
#constant宣言の方で減らすか条件の方で減らすかは好みで。
##time_overをFFで叩かない(when分で書く)ことでC_TIMCTをいじらないで同じ動作にすることも可能。
イネーブル:
timest_regが'1'のとき'1'
counter_regがC_TIMCTと一致したら'0'
elseは書かないでokだが、書きたければ'0'にする
カウンタ:
イネーブルが'1'のときは+1
それ以外は'0'
フラグ:
カウンタがC_TIMCTと一致したら'1'
それ以外は'0'
>holdってどうやるんでしょう。
カウンタ値がC_TIMCT以下のときのみカウントするという条件にする。
elseは記述しない。
今回書いたイネーブルを使うやり方なら必要ないです。
>微分って別プロセスでやるのでしょうか?
別プロセスです。
詳しくは立ち上がりエッジ検出回路を調べてください。
232 :
220 :2007/08/12(日) 21:10:41 ID:jl0mHeWT
>>231 >イネーブル:
>elseは書かないでokだが、書きたければ'0'にする
'0'にしちゃダメです。書きたければenable <= enable;ですね。
>when分
when文ね。
233 :
220 :2007/08/13(月) 12:03:08 ID:l/ZX2Zbs
余分なイネーブルなんてないバージョン。作りたいのはこれですね。 RTL書くのはためにならないと思って書いてたけど面倒になったのでRTL。w しばらくVHDL書いてないので文法的な間違いあったらごめんなさい。 考え方の肝は各々の信号が動作する条件がわかってるかということ。 無駄な論理(条件)は極力削ること。 P_CTR : process(CLK, RST_N) begin if(!RST_N)then counter_reg <= (others => '0'); elsif(CLK'event and rising_edge(CLK))then if(timest_reg = '1')then counter_reg <= 1; elsif(counter_reg > 0 and counter_reg < C_TIMCT)then -- ここの論理が膨らまないか心配 counter_reg <= counter_reg + 1; else counter_reg <= (others => '0'); end if; end if; end process; P_FLG : process(CLK, RST_N) begin if(!RST_N)then time_over_reg <= '0'; elsif(CLK'event and rising_edge(CLK))then if(counter_reg = C_TIMCT)then time_over_reg <= '1'; else time_over_reg <= '0'; end if; end if; end process;
234 :
774ワット発電中さん :2007/08/13(月) 12:15:44 ID:wc9KAAOB
お返事ありがとう。色々考えていて丁度貼り付けようと思ったところでした。 自分なりに全体を書き直してみたんですが、どうでしょう?(timest_reg は微分されているという条件で) PROC_Timer : process ( RST_N, CLK) begin if ( RST_N = '0' ) then time_over_reg <= '0'; conter_en <= '0'; conter_clr <= '0'; elsif ( CLK'event and CLK='1' ) then if(timest_reg = '1') then conter_en <= '1'; conter_clr <= '1'; time_over_reg <= '0'; end if; if ( counter_reg = C_TIMCT ) then conter_en <= '0'; time_over_reg <= '1'; end if; end if; end process; PROC_count : process ( RST_N, CLK) begin if ( RST_N = '0' ) then counter_reg <= (others => '0'); elsif ( CLK'event and CLK='1' ) then if(counter_clr = '1') then counter_reg <= (others => '0'); elsif(counter_en = '1') then counter_reg <= counter_reg + 1; end if; end if; end process PROC_count; ここで conter_en、conter_clrはこの場合レジスターになると思う。 しかし単なるnode(ネット)にすることも可能と思うが其の時はどうすればいいのだろう。 timest_regがレジスターなのでconter_en、conter_clrはNode(ネット)の方がいいと思うが CLKeventの中に書くとレジスターになるようなきがする。
すまんけど、日本語でやりたいこと書いてくれない?
日本語VHDLか日本語Verilog作ってくれたらね
237 :
774ワット発電中さん :2007/08/18(土) 13:56:08 ID:4evQ/EEC
ModelSIM使ってる HVDLファイルが20個ある。でそのうちの一つのファイル が全くブレークポイントがかからない。何でだろう。 ブレークポイントをつけるには行番号が赤くなる必要がある。そのファイルは 行番号が全く、赤くならない。コンパイルはもちろんOK。とくべつ問題は なさそうだが、なぜだろ。
エスパーさん、ご指名です。
エスパーさんは、明日まで盆休みで帰省らしいよ。
> HVDLファイル VHDLファイルのことだと仮定して > 行番号が赤くなる必要がある。 メモ帳では色はつけられません。
241 :
774ワット発電中さん :2007/08/18(土) 22:53:29 ID:eQwuQIBD
ここはひねくれ。
242 :
774ワット発電中さん :2007/08/18(土) 22:55:12 ID:eQwuQIBD
VHDLみたいな糞つかってたら、ひねくれてもやむえ。
VHDL って、小官吏が「こうやれ・こう書け」という規則を押し付けたような気がする。
とVHDLもかけない人達が申しております。
-- おまえら -- そろそろ -- 仲直り汁
>>243 元々はDARPAの仕様記述要請から始まってるわけだから、当然と言えば当然。
そのVHDLがコードの移植性でVerilogより勝っているからな。 厳格な仕様記述のおかげであまりメーカーにとらわれない論理設計ができるのは歓迎すべき。
>>247 そうか? オレはVHDLの先行きが不安なんですけど。
Verilogはアナログとの統合模索してるのにVHDLって止まってる気がする。
VHDLに将来性があるとはいってないぞ。VHDLにはこういうよい特徴もあったといっているだけ。 ソフト系の言語もやってる側からするとと、VHDLみたいな無茶苦茶な言語はさっさと モダンな言語に入れ替わってほしいw
将来、需要も機能も伸びる事はなさそうだが、 ながく残りそうではある。
>モダンな言語に入れ替わってほしいw そのためには批判をおそれないことだ。 100万人が糞糞糞と叫んだら、世界は変る。さも無くば、糞に群がる 糞バエの一匹に成り下がるかだ。
せめて日本語BAISCくらいにはなってほしいもんだ。
ググる先生に聞くと、勝手に「日本語BASIC」の結果が出てきてしまいます orz
254 :
エスパー :2007/08/20(月) 21:32:24 ID:OWJGKhxa
>行番号が全く、赤くならない。コンパイルはもちろんOK。とくべつ問題は >なさそうだが、なぜだろ。 Modelsimの場合エラーチェックが甘い。他のコンパイラでチェックすると ワーニングが出ていると思う。ワーニングを解決すると治る。場合によっては その行を移動するだけで解決する場合がある。
255 :
774ワット発電中さん :2007/08/27(月) 01:11:50 ID:LzK2Tt1j
>>255 通りすがりです。これが原因じゃないかもしれないけど。
HOST <= sg_host_a when A_RD = '1' else (others => 'Z');
HOST <= sg_host_b when B_RD = '1' else (others => 'Z');
は、
HOST <= sg_host_a when A_RD = '1' else
sg_host_b when B_RD = '1' else
(others => 'Z');
257 :
774ワット発電中さん :2007/08/27(月) 12:35:59 ID:JRQE3wS4
>>256 なるほど、ありがとうございます。
指摘頂いた箇所についてですが、記述の
変更により意味が変わるのでしょうか?
a. 簡略図にHOSTはひとつしかない。 b. HOST <= sg_host_a when A_RD = '1' else (others => 'Z'); HOST <= sg_host_b when B_RD = '1' else (others => 'Z'); ↑これだとHOSTがふたつあることになる。 意味は違う。 っていう説明じゃ納得できない? ちょこっと電気の勉強するとすぐ解ると思うです。
259 :
774ワット発電中さん :2007/08/27(月) 20:31:49 ID:JRQE3wS4
>>258 ありがとうございます。
簡潔な回答でわかりやすく、納得できました。
合成の時ワーニングが出ていたような気がしますが、
エラーにならなかったので気にしていませんでした。
別件ですが、今、ISE8.2i Webpack使用しています。
合成したあとに、RTL Schematicで配線の確認って
してます?
>>259 配線の確認
自分は、
小規模回路のとき:なんとなく見ておく。
大規模回路のとき:見ても手のつけようがない。
もひとつ、
仕様にもよるけど、自分だったらこう書くな。
HOST <= sg_host_a when (A_RD = '1' and B_RD = '0') else
sg_host_b when (A_RD = '0' and B_RD = '1') else (others => 'Z');
A_RDとB_RDが同時にアクティブ(=1)になってしまったとき、
sg_host_a とsg_host_b がぶつかるから。
261 :
774ワット発電中さん :2007/08/28(火) 11:32:37 ID:8ar4g4Nt
>>260 レスどうもです。
そうなんですよね、指摘された私の記述だと
HOST <= sg_host_a when A_RD = '1' else (others => 'Z');
HOST <= sg_host_b when B_RD = '1' else (others => 'Z');
矛盾していた事に気がつきました。
HOST <= sg_host_a when (A_RD = '1' and B_RD = '0') else
sg_host_b when (A_RD = '0' and B_RD = '1') else (others => 'Z');
だと、間違いないですね。
度々有難うございます。
配線確認ですが、記述の仕方によって見難い場合があるので、
見易くなるように記述を修正する癖がついてしまいました。
どうも気にし過ぎなようで、皆さんはどうなのかと聞いてみました。
色々どうもです。
> A_RDとB_RDが同時にアクティブ(=1)になってしまったとき、 > sg_host_a とsg_host_b がぶつかるから。 ぶつからないよ。
263 :
774ワット発電中さん :2007/08/30(木) 00:53:17 ID:vjGUKJsi
fight!
264 :
774ワット発電中さん :2007/09/01(土) 12:58:05 ID:rhNM7rmU
hoshu
ぶつからないよね? HOST <= sg_host_a when A_RD = '1' else (others => 'Z'); HOST <= sg_host_b when B_RD = '1' else (others => 'Z'); が間違いっていうのが、しっかり理解できてないんじゃない?
HOSTがbusならいいんじゃね?
267 :
774ワット発電中さん :2007/09/03(月) 21:06:37 ID:iOM1u+Cx
ほしゅ
チップ内で'Z'使ったら、なんか言われなかったっけ?
269 :
774ワット発電中さん :2007/09/16(日) 10:39:21 ID:u6i4TWes
>>268 ワーニング出るよな。
となるとだ、8255のようなパラレルI/OのIPはそのへんどう処理してるんかが気になる。
'Z'が使えなかったら内部バスがモデリングできないだろ。 よくわかって無いやつが多いな。トライステートくらい普通に集積されてるのに。
できるからって実際に使ってよいかどうかは別問題。 内部のバスをトライステートになんてしたら、フルスキャンテストできないじゃん。
FPGAしか使った事ないんで良く知らんのだが、内部バスにトライステート使ってるような ものってあるんですか。ASICでは普通に使えるの?
内部バスで'Z'使っても実際にはセレクタやらに変換されると 聞いたが、特定のツールだけの話かもしれない。
FPGAはものが無いからMUX等で代用。 CPLDはPIAの部分にあるからそのままだと思う。
275 :
バカ晒し上げ :2007/09/16(日) 16:33:08 ID:/xzi4ZEO
>>269 ワーニングってのはアリゲータですかそれともクロコダイル?
ワーニングだろうがウォーニングだろうが、 正しい発音と全然違う点では一緒。 とでも言って欲しいのだろうか?
277 :
バカ晒し上げ :2007/09/16(日) 18:43:41 ID:/xzi4ZEO
↑バカ言いわけに必死
あらら・・・ どこで覚えたか知らないが、ググってみ。 賛否あるから。
初めて使う「晒し上げ」が嬉しくってたまらないんだよ そっとしておいてあげようよ。
この間民主党の原口議員もワーって言ってたよ。 ワー発音は和製英語ってことでいいじゃん。
> この間民主党の原口議員もワーって言ってたよ。 それはむしろ、バカ晒し上げバカに加勢してしまうネタかもw
>>ID:kb5Ormc2 バカ確定
ASICは俺がお願いすれば何だってやってくれる。
魔法回路 りりかるASIC
285 :
774ワット発電中さん :2007/09/17(月) 01:00:51 ID:wdnfFJnO
ID:wdnfFJnO = ID:kb5Ormc2 必死なのはお前。カタカナ表記はカタカナ表記なんだよ。 Vはブイじゃないってレベルの駄レス。
「Vはブイに決まってるだろう」と言ってキかないレベルに言われたくないな。
どうでも良いがそれはこのスレでするような問題なのか? 言語スレに同じような不毛なスレがあった気がするので自主的にそちらに移動しようと思わないのか?
289 :
774ワット発電中さん :2007/09/17(月) 11:06:24 ID:gzGeS55+
そもそも、Vの発音なんて日本語にないものを、わざわざ誰もとりあげてない warningをワーニングと表記する時点で日頃から全く読めてないことを公表してるようなもん ID:kb5Ormc2 は日々ワークマン聴きながらシュミレータの出すワーニングに悩まされてるんだろ? すなわち バ カ 確 定
おまえが馬鹿なのはよく分かった
すごい馬鹿だな。 warningというのは何もHDL設計のとき以外からワーニングという表記で 普通につかっているものだった。実際、Googleで検索すると ウォーニングよりもワーニングの方が多い。 Vもそうだが、他にもreviewをレビューと書くかリビューと書くか、 どっちで書いても、原音の発音に忠実なわけじゃない。 英語がぺらぺらで発音もいい人はいちいちカタカナ表記どうこうにはあまり執着しないぞ。
おまえも馬鹿なのはよく分かった
そうだな、warningは「ウォァニン」が正解だな。 「ワーニング」なんて読んだら英語ネイティブに爆笑されるよな。
おまいらいい加減に言語スレでやれと###############
レビューに関してはもう日本語になってる気がする。 ワーニングに関しては、わざわざカタカナで書かないで もう素直にwarningってアルファベットで書けば こんな問題にならんのに。。。
普通はどう書こうが日本人に伝わりゃ問題にならない。 問題になるのはそれをわざわざ問題にする奴の存在。
馬鹿の言い訳にしかならんけどな
ゲルマニウムもペンティアムも受け入れる日本語は市民権を得た方が正しい。 アイロン、ミシン、ブリキは正しい。 よって、ワーニング、アワードは正しい。
最近の電電板はスルー力検定試験ばっかw
アイロンミシンブリキは正しいとしても、 ワーニングやアワードは(まだ)正しくないんだろね。
「ワーニング」って使ってる例を示せばいいと思ってるところがまた馬鹿っぽい。
馬鹿はお前。 ワーニング・レターとかもそうだし、普通につかわれてるよ。 単に出くわしたこと無いやつが違和感感じてさわいてるだけ。
バカはお前 >ワーニング・レターとかもそうだし、普通につかわれてるよ。 使われてるかよアホ >単に出くわしたこと無いやつが違和感感じてさわいてるだけ。 アホの文章なんか読む必要ないもんな。アホじゃあるまいし。 アホの集いで何の問題もないと思って、世の中に持ち出すな。 アホのID:vhHBz9nI
>>303 おまえ、自分が的外れなことばっかり言ってるっていい加減気づけよ・・・
そのうち「検索結果でワーニングが多いからってワーニングを使う馬鹿」 なんて言い出すかな。
>>304-305 英語を発音するときにカタカナ表記で考えたりしないし、
ワーニングでもウォーニングでも通じればいいんだよ。
君らが頭固すぎで協調性が無いだけ。実社会にでればそんなことにいちいち
噛み付いているやつ中二病のやつなんていねぇよ。
おまえらいい加減カナ文字スレに移動してくれお…
310 :
774ワット発電中さん :2007/09/17(月) 16:07:46 ID:gzGeS55+
<⌒/ヽ-、___・・・・・・ /<_/____/
なんだか、俺も「ワーニング」を使った方が無難な気がしてきたwww
晒し上げ君、スレたてたよwww
結局、ワーニングって書いてる奴はバカ確定ってことでいんだな?
まぁ普通ワーニングだな。
>>314 GCCはクソ君ですか?
ここではなんですから一緒にあっちに行きましょう。
317 :
774ワット発電中さん :2007/09/17(月) 16:30:36 ID:ZB29qGo4
ええい、なんでmodelsimのバージョン6xはこんなに使いづらいんだ 5.8に戻そうかな #最近S/N落ちてますなぁ
318 :
774ワット発電中さん :2007/09/17(月) 16:37:37 ID:LGC8msQ4
>>308 >実社会にでればそんなことにいちいち
>噛み付いているやつ中二病のやつなんていねぇよ。
中学生レベルの学力を後ろ指さされていることも気付かない真正バカ
322 :
スレ立て人 :2007/09/17(月) 17:34:04 ID:1VS+o0hV
学問版でワーニングなどと戯言をほざき 指摘されても居直るゆとり世代バカ>>ID:vhHBz9nIに我慢ならなくてスレ立てましたッ
HDLに関係ないから、メールかなんかで個人的にやりあってろよ、おまえら。
公開罵倒チャットはヤメレ ISE 9.2ってどうなん? 7.1使ってるんだが新デバイス使わない限り更新不要のような気がしてる 最近は代理店にDVDクレ!というと翌日宅配で送ってくるので手軽に試せるのだが テスト用サブマシンに入っている8.1を使ってみてあまりメリットなさそうなので更新止まってる。 modelsimは制限緩くなってるみたいだが 各ベンダOEMで一番緩いのはxilinxでok?
三行であらわすと 凄い 勢いで 落ちる
326 :
pagex :2007/09/21(金) 03:09:25 ID:8CoQa1bO
なんでGHDLでやれねーの ADAだから?
327 :
774ワット発電中さん :2007/09/22(土) 22:34:22 ID:4OrVo57z
さすが糞VHDLや糞VERILOG使いだな。スレのレベルが低い。 糞扱ってると人間も糞になる。 シュミレートで噛み付く馬鹿を釣るのが流行っていたが、今度は ワーニングでも釣れる。糞でも食いつくドンコだな。
本当に釣られやすいやつだなw
urinate into the pants
331 :
pagex :2007/09/23(日) 11:30:51 ID:ClHazeZz
HDLのシミュレートは、キャラクターベースにかぎる。 WINDOWSもXもつかわない。 GHDLだと、はやい、やすい、とまらない。
GHDL をコンパイルしようと思ったんだけど、Ada をコンパイルするのに Ada が 必要ってどういうことよ? ということで、いまだに GHDL を使ったことない orz
333 :
pagex :2007/09/23(日) 15:16:22 ID:9Akf1/6I
debianだとsargeでGHDLがstableになっていて そのままapt-getできたけど、etchになったらtesting に降格。しかたなく、chrootでsargeでGHDL。 GHDLのhomepageのバイナリは、debian/etchでは、 Adaのライブラリーの関係で動かない。 コンパイルしなおせば、いいのだろうけどやってない。
GHDLで生成したバイナリの内部信号て見れない? いちいちライン引っ張ってこんといかんのかな
まさか、このスレでWindows使ってる人なんかいないよね
使っていますけど。 MS-Windows用の合成ツール、MS-Office、Putty、Cygwin X、coLinux、VNCなど。 あまり困りません。
Windows以外でゲームするとか有り得ない
これからverilog勉強するから、一週間でマスターできる本教えろ。
猿でも出来るVerilogHDL
>>338 ハードを知ってるならどの本でも1週間もかからん。
341 :
774ワット発電中さん :2007/09/28(金) 09:48:28 ID:JB5B63bY
それが真実ならスケマからHDL設計についていけなかった奴なんかいなかったわけだが
条件:年寄りは除く
一週間で解らなかったら、そいつはハードを知らないんだ。 というトートロジー。
>>343 3年前期の情報工学実験でVerilog HDLを習うまで
電子工作を全くやったことが無かった俺はどうなる・・・?
半年後に気づいたら家にオシロや安定化電源と
手ハンダで作ったマイコンボードのとなりに
Spartan3Eの評価ボードがあるような人間になってたorz
お前らが半導体なんて発明してなかったら俺も人間でいられたのに(泣)
つーか質問。信号線の宣言は
module mips_top(CLK, data, address, nReset, ....);
input CLK;
inout [15:0] data;
....
って書くように習ったんだが、
インターネッツで人の書いたコードを見ていると
module mips_top(
input wire CLK,
inout wire [15:0] data,
output reg [19:0] adderss,
...);
ってな感じに書いてあるソースが多いんだが、こっちのほうがいいのk?
2002だかなんだかの仕様から、そう書けるようになった。 書きたきゃそう書けば良いんじゃない? Cと同じで書き方の答えはないかと
>>345 ということは教官の好みか。
どうせなら二つ教えてくれてれば良かったのに。
加えて質問。インターンシップに行った友達は派遣先でVHDLを
使ってなんかを組むトレーニングを受けたらしいんだが、
Verilogを中心に使うにしてもVHDLのコードも読めるように
なっていたほうがいいのですk?
多分基本は同じだと思うんだけど、VerilogでRTL記述と動作レベル記述を区別せずに
勉強してしまったのでそこら辺が厳しそうなVHDLを理解できるか不安なのですが。
if文とか平気で使うんでハードをきっちり意識して条件代入文だけで書いてる
人のコードを見ると時々不安になる。ISEやQuartus IIで論理合成できればいーやじゃだめk?
RTL設計スタイルガイドを読めばおk
もっと新しい版があった筈。 買った方が良いよ。無駄にはならない。 俺が買った1刷には 糞みたいな誤植(文字化けwww)があったが さすがにもう治ってるだろうし。
>>346 前から疑問だったんだが
Verilogって動作レベルで記述出来るって言っていいのか?
>>349 とりあえず図書館の奴を見てから財布と相談して頑張ってみます(;´_`)
もしかしたら集積回路研のほうに最新の版が置いてあるかも知れないので
そっちで見せてもらえるように頼んでみるかもです(・。・)
>>350 すいません、どっからどこまでがRTLかって僕もわかってなくてorz
352 :
774ワット発電中さん :2007/09/29(土) 17:18:35 ID:UTp2N5cu
process(reset, clk) begin if reset='1' then c_state <= idle; elsif clk'event and clk='1' then c_state <= n_state; end if; end process; どうせお前らの世界はFFとゲートで出来てるんだろ。 なんでFFとゲートで書かんのだ。 elsif clk'event and clk='1' then c_state <= n_state; end if; これはなんだこれは。馬鹿じゃあるまいか? c_state(3:0) is ff; c_state().reset = reset; c_state().clk = clk; c_state().d = n_state; この方が直感的でわかりやすい。そう思わんか?
↑ 頭大丈夫?
思わんね
>>352 「おれはVHDLよくわかんねーんだ」と言いたいのは痛いほど解った。
356 :
774ワット発電中さん :2007/09/30(日) 07:47:46 ID:7wz65yVZ
早く馬鹿だと気が付け。 ついでに言うなら module mips_top( input wire CLK, inout wire [15:0] data, output reg [19:0] adderss, ...); こういう仕様を考える馬鹿ども。一体こいつらは何を考えているんだ。 wireは接続関係だろ input属性を着けるなんて邪道もいいとこだ。
>>356 なにこれw
こんな書き方今できるの?
他人の読むとき大変だ
荒しはスルーで。 荒しにレスする人も(ry
いいからおまえは新しい論理記述言語の仕様を作る作業に戻るんだ
もう論理記述言語はいいだろw 必要なのは機能記述だ
おれならこう書きたい state=new ff::c_state(3:0); state.reset(reset); state.clk(clk); state.d(n_state);
回路はすべて永続オブジェクトなんだから newとかdeleteとかアリエナイだろ
じゃじゃ俺はこう 10 DIM C_STATE[3:0] AS FF 20 REM 30 LET C_STATE.RESET=RESET 40 LET C_STATE.CLK=CLK 50 LET C_STATE.D=N_STATE
366 :
774ワット発電中さん :2007/10/02(火) 06:03:04 ID:3h4CRDYy
process (state, in1) begin case state is when s0 => out1 <="000"; if in1 = '1' then next_state <= s1; else next_state <= s0; end if; ステートマシンでこのように書いている例が多いんだけど、このelseはいらない でしょう。 なんで。 なにか理由があるんだろか?
367 :
774ワット発電中さん :2007/10/02(火) 06:05:30 ID:3h4CRDYy
process (state, in1) begin case state is when s0 => out1 <="000"; if in1 = '1' then next_state <= s1; else next_state <= s0; end if;
つまりif文でin1が0とXの場合の両方を書けっていうのか?
369 :
774ワット発電中さん :2007/10/02(火) 12:38:29 ID:Ppfit/Vf
いやelseの場合は入らないってこと。 「条件がそろはなければ前の状態を保持する」のだからS0にとどまる。 それなのになんでわざわざ next_state <= S0 って書くのか。 その神経が分からない。ってことだろ。 つまり次の方がよい。 process (state, in1) begin case state is when s0 => out1 <="000"; if in1 = '1' then next_state <= s1; end if; にもかかわらずVHDLerはやたらとelseを入れる。
合成ツールの出来が悪かった頃は else節がない記述だと 面積でかくなったりしたんだよ 今のツールなら差は出ないんだろうけど 書いても害がないなら書いてもいいよなってノリじゃないの?
RTLチェッカーでelse書いてないとWarning出す場合がある。
373 :
774ワット発電中さん :2007/10/02(火) 19:49:18 ID:Ppfit/Vf
>ちょwwwおまえ笑われるぞ。 お前以外にも笑ってる奴がいるんだが、どっちが折の中かってことだな。 昔からの奴はelseを書くらしい。気持ち悪いなー。
書かないと最適化でたまに勝手に削られてたり、他のロジックとマージされたり ひどい場合がある。
ステートマシンでelse無いと万が一の異常状態から復帰できないだろ…… ツールがとかWarningがとか何考えてRTLやってんだよ
未記入ステートがない方がデバックでの勘違い等が減らせると思うが? 非明示的な記述を嫌うのはVHDLスタイルとしては普通じゃねぇの?
>>370 が正解。
合成ツールをどこまで信用するかってことやね。
Cコンパイラほど信頼性は高くないのよ。
だから、その数行でリスク回避できるなら書いておこうって話。
ISE 9.1でintegerを使うと論理合成までは できるのに、Fittingで死ぬんですが・・・何故でしょうか。 マクロセル数が足りないんじゃなくてマクロセル間の結線が足りない? みたいな不思議な失敗をします。
>>378 それはもう、エラーログ見て問い合わせるなり調べるなりするほうが手っ取り早い
>>369 なんかソフト屋的発想の臭いがするなぁ。
ソフトだと変数の値は代入されない限り値を保持するのが当たり前だが
ハードじゃゲートなりFFなり入力が確定しないと出力も不定になるだろ。
in1が'1'じゃ無い場合はnext_stateの入力が不定っておかしくね?だからelseで
ちゃんと指定しようぜ!って発想はハード屋にとってはごく自然な考え方だと思う。
>>372 やっぱりワーニングは全部消さないとな。ジョエルも言ってたし間違いない。
>ハードじゃゲートなりFFなり入力が確定しないと出力も不定になるだろ。 言ってることが変だ。出力は0か1に確定してる。 どちらになっているか判らないから不定として表示してるだけだろ。 実際FFはセル毎に大体倒れる方向決まってるJTAGで解析してみ。
つうかジェネレータがelseでも同じ回路生成してくれるならいいじゃん。 どうせ生成した回路でも検証するんだし。
383 :
774ワット発電中さん :2007/10/04(木) 10:12:53 ID:yQAfw8Px
>やっぱりワーニングは全部消さないとな。ジョエルも言ってたし間違いない。 出た出たワーニング馬鹿 なんか中卒的発想の臭いがするなぁ。 中卒だと a があったらローマ字そのままで読んで "あ"をアサインしたくなるんだろうが ちょっと英語知ってたらaward なんかの発音と同じってことに気づくだろ。
一般的に「警告」が出ないようなソースを作るのはいいことだろう。 しかし相手にもよるね。「警告」出まくりのソフトウェアなんて使わないこと。 人にたとえれば、つき合わないってことさ。
警告もワーニングかアラートか コーションかで対応違うし、 警告レベルの設定にもよるし。
>>385 厨が湧いてくるからワーニングという言葉は
使わないでほしい。ウォーニングな。
warningをワーニングと読むのは、
Star Warsをスターワーズ、
cautionをカウチョンと読むのと
同レベルの間違いだから恥ずかしいぞ。
ワープ(warp)もウォープと書かないとダメすか? 実際母音部は war と同じ発音なのだが 英語にも方言があって warとかwarpとかwarningが 日本語のワーっぽい発音する国/地域もあるけど そこんとこはどーなのよ
>>387 warn と warは語源が同じ。
warpとは語源が異なる。
訛りは仕方ねーずら
You see?
語源と発音は関係なかろうよ つーか語源至上主義ならラテン語風発音が正しいってことになるべ ジーザスじゃなくてイエズスだろ みたいな
>>388 語源って何だよ。そこまで説明しろよ糞野郎!
ググッてやる!
また発音厨荒らしか。 自演もスルー。
発音だの語源だの言うくせにingを「ング」と言うのはなぜなんだぜ?
394 :
774ワット発電中さん :2007/10/04(木) 18:34:59 ID:vSLsjDZR
ノシュットオールマンコホール
395 :
774ワット発電中さん :2007/10/04(木) 18:52:40 ID:vSLsjDZR
>ハードじゃゲートなりFFなり入力が確定しないと出力も不定になるだろ。 不定不定って成りもしない不定にビクビク、オドオド。 不定じゃないだろ。そりゃ不安だろが。 じゃあ、process文内で厳密に不定になるロジック書いてみろよ。 書けるもんなら書いてみろよ。アホー。
module hoge(asdf); input asdf; assign asdf = 1'bz; endmodule
こりゃ不定だな
誰がアホーなのか、はっきりしましたね。
出力が不定になる記述で困るのは実機動作じゃなくてシミュレーションの方だ modelsimのwave窓がXだらけになるぜ
>>396 process文内でって書いてあるのに・・・
>>395 process(clock)
begin
if clock'event and clock='1' then
ff0 <= not ff0;
end if;
end process
これ ff0を初期化するコードがないからシミュレータではずっと不定値のまま
もちろん実機ではちゃんとクロックを2分周した波形が出力されるわけだが
402 :
774ワット発電中さん :2007/10/05(金) 08:44:17 ID:WxpIBEJT
>>399 ,401
折角盛り上がりそうなのにシュミレータ、シュミレーションと書けよ
あほだなぁと思いつつ職場ではワーニングだとかpingをピングと言って周りに合わせている俺。 最近反抗期なのでピングーと読んだりしてます。
暇なので昔AHDLで書いたコードをVHDLに書き直して遊んでた AHDLって型もへったくれもなくて楽だな
> pingをピングと言って周りに合わせている俺。 しゃべり言葉で「ピン」って言うと、余計混乱しそう。
粘土のペンギンかよwww
408 :
774ワット発電中さん :2007/10/06(土) 04:31:24 ID:jfj5TcqT
>これ ff0を初期化するコードがないからシミュレータではずっと不定値のまま >もちろん実機ではちゃんとクロックを2分周した波形が出力されるわけだが 全然厳密じゃねえじゃん。「厳密に」って書いてあるだろ。 よくよめ。アフォー これはただシミレータがアフォだからじゃん。
「ping」をピンと言うのもピングと言ってるのと大差ない。「pin」と発音違うし。
>>408 実際に波形が出力されるのと、時間軸上に波形を描けるのは別。
どんなシステムと環境で利用するのか分からないのに
クロック発振開始がわかるのならシミュレーションではなく予言だな。
_| ̄|_| ̄|_| ̄| A
| ̄|_| ̄|_| ̄|_ B
HDLってのはもともとシミュレーションを行う目的で作られた言語だからな まともにシミュレーションできない記述はダサいって心理が働くんだろ 論理合成はHDLのシミュレーション記述から そのまま回路ネットリストが作れるって 魔法の弾丸のようなものを目指して作られたもの 残念ながら現状では全然魔法の弾丸のレベルには達していないのだが…
新規の論理設計をするのはバカ。基本はパクリンチョだ。
<ヾ`∀´> 朝鮮人がこのスレに興味をもったようです
>>410 だからシュミレーションと言って盛り上げろと言ってるのに!
>>411 基本は
パクリンチョン
だろ?
414 :
774ワット発電中さん :2007/10/06(土) 12:35:14 ID:jfj5TcqT
//実際に波形が出力されるのと、時間軸上に波形を描けるのは別。 //どんなシステムと環境で利用するのか分からないのに //クロック発振開始がわかるのならシミュレーションではなく予言だな。 // //_| ̄|_| ̄|_| ̄| A // //| ̄|_| ̄|_| ̄|_ B アフォー。設計者が開始位置が関係ないって言ってるのだからSimulaterの 如きは、設計者の意図をチャンと理解しろってこと。 それに、お前は暗黙の了解ってのを知らないのか? 暗黙の了解がなければ 世界はなり立たない。それはある時は空気、である時は常識だ。いまは厳密を要求 されていんだ。 ff0 <= not ff0; ff0の初期値が0なら次のクロックで1だし、ff0の初期値が1なら次のクロック で0だし、何処が不定なんだ。あーん。お前のような脳タリンは2つのことを同時に 考えられんらしい。だったら半分にしてやろう。 いいか初期値は0だ。世界は0から始まる。これが仮定だ。 もう一度言う。 じゃあ、process文内で厳密に不定になるロジック書いてみろよ。 書けるもんなら書いてみろよ。アホー。
暗黙の了解で本来バグもしくはバギーなものをあぶりだしてくれんかったら、 シミュレーションの意味がないがな 鑑賞用のスピーカとかヘッドフォン使って録音モニタができないのと一緒 >いいか初期値は0だ。世界は0から始まる。これが仮定だ。 あのー ID:jfj5TcqTってバカなん?
ヲイヲイ! 14Vはそんな間抜けなことは言わん。 あと、悪意の全くない嘘もつかん。 なんでそんあことがわかるかって? なぜなら俺が14Vだから。
わかったよ。 こう言えばいいんだろ 14V乙!!
もっと言うと14Vは具体的な解説は出来ない。
アホバカマヌケエタヨツゴミギャハハ中卒高卒無能知障賤民Metcal〜がよ を見かけたら全部まとめて14Vでいいんじゃね? 何人かいたとしても、どうせ脳味噌の程度は同着最下位なわけだし。
>>422 >アホバカマヌケエタヨツゴミギャハハ中卒高卒無能知障賤民Metcal〜がよ
↑とお前が罵倒されたのか?悔しい悔しいのー
424 :
774ワット発電中さん :2007/10/06(土) 19:53:18 ID:sF/z3Ooh
414に誰も回答できんのですか?
回答してもまたH丸出しで新しい条件付けしたお題出してくるの分かりきってる 回答したけりゃ勝手にしたら?
426 :
774ワット発電中さん :2007/10/06(土) 20:37:38 ID:sF/z3Ooh
根をあげるのが早過ぎると思いますよ。 かなり重要なことだと思います。 彼が意図していることは、「想定内の不定は不定じゃない。」って ことです。想定外のことが起こるとき厳密に不定なのです。 だからシミュレータが簡単に発見する不定は不定の内に入らない。 「シミュレータが1と判断しているのに0になるような回路があるのか?」 というのがテーマに近いです。 実際問題としてもそういう回路が問題なのであって、シミュレータが容易に発見する 不定は問題ないでしょう。 理想のシミュレータがあればこのようなことは起こらないのです。理想の一歩手前の 完成度のシミュレータをだます回路でしょう。そういう回路がかけるかという問いかけ で、これはかなり難問ではないでしょうか?
理想論バカ HDLもシミュレータも単なる道具だろ 何を作るかどうやって作るかが大事だと思うんだが
>>414 > いいか初期値は0だ。世界は0から始まる。これが仮定だ。
この仮定そのものが厳密におかしいだろ
実機で必ず成立すると限らない仮定を導入したら
シミュレーションと実機の動作がずれて当然だ
初期値は0って…、回路設計者の発言とはとても思えないなw
SRAMタイプのFPGAだとコンフィグした時点で初期値は確定してるから、 実回路とシミュレーションを一致させるため「だけ」の非同期リセットは使いたくない。 機能上で必要なリセットには同期リセットしか有り得ないし。 でも最近は、設計スタイルごっこが流行っていて社内基準として非同期リセットを義務付けられている。 無駄を極限まで省いた美しいコードを目指しているところに、そんなおまじないを強要されると はげしくやる気が失せる。
生産台数によってはASIC化もあるわけで そういう意味では非同期リセットにする意味はあるよね というか、同期リセットならコードが美しくなって非同期だとそうならない ってシーンが思い浮かばないな そもそも、目指すべきはコードの美しさではなくて回路の美しさだと思う
回路の動作とは全く無関係にシミュレータの都合で、 使用されることの無い非同期リセットを付加するのを美しいと思う人もいるのかな?
>そもそも、目指すべきはコードの美しさではなくて回路の美しさだと思う 俺としては美しさの基準は人による場合があると思うので、ちがうと思う。 汚くてもかまわないからとりあえず期待通り動く事が望ましい。 それが出来る上で読みやすいのが望ましい。
目指すべきは美しさなどではなく安定動作である。
目指すものは売り上げである。
目指すものなぞない、ただクレームを処理するのみ…
不定の定義が不定なのではっきりさせようや。
シミュレーションでの不定はある特定時間での値が不明なのであり、
0か1の信号ではあるけどどちらであるか不定。
アナログ的にMOSの閾値レベルを十分に超えて無くて
PMOSもNMOSも半開き状態で信号電圧がLowレベル(GND)とHigh(VDD)の
中間にあり次に繋がるロジックでも同じように半開き状態になり伝搬していく
LowでもHighでもない不定。
前者はすでに例があげられているとおりで、
後者の場合は高周波クロック入力や同期ずれで寄生容量がチャージされる前に
入力信号を切り替えれば不定になる。
寄生容量考慮し遅延情報を与えたシミュレーションならどんなprocess文でも
不定を発生させられるが、遅延情報なしの場合は
>>401 のように
process(asdf)
begin
asdf <= 'Z';
end process;
ハイインピーダンス作ってSiウェハからゆっくりリークしていくのを待つしか
ないんじゃないのか。
>>430 コンフィグ直後はいいけど、ECCメモリとかがあるようにロジックでも確率的にエラーが発生するのに
設計バグなどを含めてエラーが出た場合にどうやって復帰するの。
非同期リセットじゃなくて同期リセットを発生させるような外部信号入力だけにしたいってこと?
すまん記述がおかしかったので変更 process(asdf) begin if (asdf='1') then out <= '1'; else out < 'Z'; end process;
後者と言いたいであろうsetup time/hold time違反で起きる現象とは メタステーブル状態という大変嫌らしいシロモノであって 半開き状態が伝播していくとかいう生易しい話ではないんだぜ メタステーブル条件においては確率的な要素が入り込むので 厳密なシミュレーションは無理っぽ 非同期FIFOが面倒な理由のひとつ
>>438 実デバイスの内部でZ出力とか無理じゃね?と隅をつついてみる。
>>440 最近はASICにもFPGAにも内部で3state(内部bus)が使えるものがあったりするよ
便利な世の中になったもんだ
>>440 全然変じゃない。配線領域を減らすために時分割バス方式も使う推奨はされないが。
>>431 っていうか、せっかく言語設計してるのに、その素子特有の初期状態をあてにしてるってダメだよな。
>>444 全然わかってないなぁ。
実回路の初期状態は同期リセットで確定させるんだよ。
非同期リセットの記述が必要なのは、あくまでも一部のシミュレータでの制約。
素子特有の初期状態をあてにしているのではなくて、
一部のシミュレータ特有の不具合を回避するための記述なんだよ。
設計スタイルガイドを読み直してみ。
同期リセット以外認められないという原理主義者?
実回路で非同期リセットを採用するシステムも珍しくないというか
むしろ多数派って気もするが、
>>445 の知ってる世界はせまいのだなぁ
という感想しか出ません。
もちろん同期リセットを否定するわけではないが、その場合は
同期リセットに適したツールを使えばいいだけの話ではないのかね
>設計スタイルガイドを読み直してみ。 このスレ前から見てるけど、 世界的になーんにも認定されてないような設計スタイルガイドを さも、金科玉条の如く持ち出すアホがいるよな。バカなのか?
>>447 starcに頼らないとasicおこせない程度の財力しかない環境にいると
RTL設計スタイルガイドが金科玉条に見えてしまうのだろう
懐が寂しいと心も貧すという典型例
というか世界的に何の認知もされてないもんを 水戸黄門の印籠のように持ち出して、"あれ見てみろ"っていったいどういうオツムしてんだ? C言語のコーディングスタイルとしてK&R見ろってなら理解できるがね。
文字化け(笑)している状態で平然と販売するような スタイルガイドなんて(ry ついでに言うと「コーディングスタイルとしてK & R見ろ」も理解できない。
なんで?K&Rが設計者なんだから、そこにこそ設計思想がある 設計思想も知らずにスタイルを論じるなんてお笑いだ
もっというと、 原典をあたらず、 それを解説本読んでわかった気になってるなんて、間抜け以外の何物でもない 言語のコーディングスタイルごときにその価値があるかどうかは別にしてな
>>445 システムの論理初期化と素子単位の値確定を混同してる模様。
スタート時に『外部動作不定』のまま走り出すのを避けるのは非同期リセット使うだろ?マジもんの実回路では。
同期リセット(セット)は所定動作の為の初期値を与えるのに使ってるぞ。ソフト側から発行させてる場合が多いと思うが。
シミュレータ要求による非同期リセットの要請とは関係なく、“実際に必要な入力”として設計に盛り込まれて
他の入力同様に検証されるものだと思うぞ>>非同期リセット
つか、電源監視からのリセット要求とか、クロック信じられない状況でどうやって同期リセットで止めるよ?
454 :
774ワット発電中さん :2007/10/07(日) 15:17:39 ID:OBI8V+py
別に間違ったこと書いてある本じゃないから 迷惑ってことは無いと思うが。 必死だな、とは思う。
K&Rはきちんと解説してあるから読んでおくべきだと思うが、基準として考えるにはちょっと。 ま、頭っから否定するやつと妄信するやつは、相手にしない方がいいけどな。
同期リセットで不具合の起きるシミュレータって何? あと、Cの原典はISOでK&Rは入門書な。
>あと、Cの原典はISOでK&Rは入門書な。 馬鹿も休み休み言え。K&Rを入門書?お前読んだことないだろ。 良著と言われながら、難解でもっとも完読率の低いのがK&Rだ。 それとだ、ISOはいろんな変遷を経ての結果だ。 設計思想なんてもんは基本的に仕様書には書かれてないことぐらい覚えとけ。 その調子だとStraustrapもModern C++ Designも論文の類も読んだことないだろ? 仕様書は辞書代りに引くもの、じっくり読むのは設計思想が書かれてる原著の方だ。
>>454 古いものを盲信するって?文章をまともに負えない知的障害者が何ほざいてる
人の設計思想を理解する姿勢のない奴は、まともな設計はできないことは保証してやるぜ。
K&Rに難解な点があるとすれば、規格表に書いてあることがK&Rには 書いてないってことかな。読んでためになったから、入門書には いいと思ったよ(当時は)。今更読もうとも思わない。JISならいつでも ただで読めるしね。 ISOが変遷の結果とすれば、変遷の結果であるCの思想は、K&Rに 書いてないのでは?
461 :
恥晒し上げ :2007/10/07(日) 17:50:40 ID:oScaHJyF
>>457 ハァ?ISOがCの原典って?
ID:/8Jy555/ は日本語理解できないのか?
こういうアホが技術屋やってりゃ日本の将来真っ暗だな。
s/8Jy555//g
一般にはJIS規格書はタダではない
K&Rはともかくストラウストラップは1,2,3もannotatedも持ってるんだが、 今の若い子はいきなり机の上にVol3を置かれてあれでC++をマスターしようって気になるのか? こっちはpure Cから順番に長い年月かかってやってきたからなんとかついていけるようなものの。 いきなり千ページ越えじゃやる気が失せないのかね?
そういう俺は最近JavaScriptに目から鱗で勉強中 なかなかいいやんこれ!
リセットは解除のタイミングが重要だよ
FPGAのリセットってどうやってやるの? 電源落とすとか、JTAG経由でなにかやるとか? アホな疑問でスマソ。
ROMに書いたら普通に電源落す FPGAに直接書いたら勝手にリセットかかる
xilinxのvirtexなら INITXという非同期リセット端子がある コンフィギュレーション動作からからやり直すよ
どうでもいいようなことをキーキー言い合いして ガキかお前ら
遅れて来た酔っ払い乙。
>>466 解除タイミング丁度にクロックエッジが!(w
コンフィギュレーション動作からやり直すようなデバイスそのもののリセットを
>>470 は望んでたのか?
普通はそのレベルからのリセットなんかされたら困る場合が多いと思うが?
非同期リセットはロースキュー配線を使わなければいけないことを知っている 人は1/20ぐらい。
1/20ぐらいに初詣に行く?
>>476 そんなことはあるまい。
FPGAばっかりな人でも、リセットラインだけ特別な配線リソースが
与えられてるくらいの事はデータシート見るだけでも分かるぞ?
479 :
774ワット発電中さん :2007/10/08(月) 18:13:11 ID:kDYFxalM
VHDLもそこそこ使える。しかし一番のネックは変数の隠蔽だな。 Blockとシェアード変数で出来るんじゃないかって検討している奴がいたが、 どうなんだろうな。
論理設計で使うRTL記述では変数使わないよな スレ違い?
VHDLはじめたばっかりだけど std_logicとstd_logic_vectorの違いがよくわからん 1ビットの信号をstd_logic_vectorで宣言してもコンパイラは怒らないし じゃあ全部同じでいいじゃんと思ってしまうのですが どこかおかしかったらしゃぶってください
全部同じでいいよ。
483 :
774ワット発電中さん :2007/10/09(火) 23:49:46 ID:2KnLDI1N
Cとかで要素がひとつしかない配列も配列として宣言できるような感じじゃないか
後々パラメタライズ設計をする時に効いてくるので std_logic_vector オススメ。 Recordタイプの初期化も (others=>(others=>'0')) とかで済むからねえ。
485 :
774ワット発電中さん :2007/10/10(水) 04:04:00 ID:A284TC0G
Recordタイプってなんだよ。(others=>(others=>'0')) こんな 書き方始めてみた。
データの内部構造を抽象化する時に使います。要は構造体ですね。 architecture RTL of TEST is type t_PIXFMT is record MVF : std_logic_vector(0 downto 0); MSK : std_logic_vector(0 downto 0); RED : std_logic_vector(9 downto 0); GRN : std_logic_vector(9 downto 0); BLU : std_logic_vector(9 downto 0); end record; signal r_PIXEL : t_PIXFMT; begin -- RTL L_LATCH: process (CLK) begin -- process L_LATCH if CLK'event and CLK = '1' then -- rising clock edge if RST = '1' then -- synchronous reset (active high) r_PIXEL <= (others=>(others=>'0')); -- メンバにstd_logicが混じってるとコレがツカエネー else r_PIXEL <= PIXEL_I; end if; end if; end process L_LATCH; PIXEL_O <= r_PIXEL; end RTL;
へー。こんなことができるのか。すげー。全然しらなかった。 早速使わせてもらおう。 ありがとよ。
リセットの話はFPGAしか知らない人と ASICやってるひとじゃ話が通じないな
そして毎回ループ
>>488 ASICやってる人というよりは基板を含めた
回路設計やってる人とじゃ話が違うと思う。
>>490 非同期リセットの解除タイミングの話とか、セット設計/実装屋の方で問題発覚する類いの物だしな。
電源瞬断試験でリセット信号のライズタイム規格オーバーが見つかったり(ry
>>491 おらあんまり経験ない上にstarcしか知らんもんで後学のために教えてけろ
>非同期リセット解除タイミング
これ問題になるのはリセット解除時にクロックがすでに動いてるシステムですよね?
その場合非同期リセット入力を2段FFで同期化して、それをFFの非同期リセットに
使う方法でも問題になることはありますか?
>ライズタイム
Schmitt triggerの入力パッド使っても問題でたりしますか?
×リセット解除時にクロックがすでに動いてるシステム ○リセット解除時にクロック動作がどうなってるか保証がない >非同期リセット入力を2段FFで同期化 論外だろ リセット印加時にクロックが動いていなかったらリセットかからん
>Schmitt triggerの入力パッド使っても問題でたりしますか? 問題は電位レベル閾値ではなくて解除タイミングなのだから シュミットトリガ使っても何の解決にもならないよ
クロック動いてないとリセットかからないから クロックがすでに動いてるという前提での話です。 個人的にはそういうシステムは扱ったことなくて リセット解除後にクロック開始なのでもちろん 同期化なんてしてませんです。 これstarcにのってる方法なんですが starcはやっぱり駄目なんですかねw
設計の都合で勝手な前提を導入すんなよ starcのデザインガイドは悪いんじゃなくて適用範囲が狭いというだけの話 安く作ってやるからシステムの方が石の方に合わせろって上から目線なんだよ
クロックが動いてなかったら解除タイミングは関係なくないですか? 実際にリセットのタイミング違反を避けるのはどうやってるんでしょう。 色々考えてはいるのですが、良い方法が思いつかなくて 皆はどうやってるのかなあと。
クロックが動いていなかったら確かにいつリセットを解除しても 構わないけど、普通そんな事はしないだろう。 PLLがロックする前のどんな波形になるかまったく予想がつかない クロックを入力されても誤動作しないような回路ばかりだったら それも可能だろうけど、普通はそんな事はないからPLLが ロックしてクロックが安定するまでリセットをかけ続けるだろう。 リセットのタイミング合わせは解除のタイミングだけを同期化する。 Lowでリセットの場合は、同期化のF/FとANDゲート一個で作れる。 あと、全てのF/Fの入力がF/F出力の初期値と一致している保証が あるならば、解除タイミングを全く気にしないという荒業も使える。
リセットで重要なのは、クロックモジュールに供給するクロックが安定するまで、 クロックモジュールをリセット->解除、 クロックモジュールからの出力が安定した後に、そのクロックを使う回路のリセットを解除する事です。 (FPGAだけで処理出来ない) あとは回路が意図しない挙動を示した時に動作回路を正常化すること、通知することです。 (ブービートラップ、本来は当たり前のようにあるべき考え方) 回路内で復帰可能なことと、そうでない事がありますから・・ Zですが、inout宣言してもこの記載がないと単なる出力ポートになります。 コンパイルしてRTL回路みれば、すぐにわかるんだけど・・
システム最初のリセット解除はCPUすら動いてませんから、 電圧が所定の位置まで上がってきて、水晶(セラロックもあるけどね)が安定発振するまで、 リセットICでリセットしています。 これはCPUと水晶とリセットICと基板と電源回路の設計値から決めます。 なお、リセット解除とリセットではヒステリシスを持つので意味が違います。 回路が異常といってもロジックで異常なのか電圧電流ノイズ熱で異常になるのかの検証が必要です。 ジャンクション温度は主に内部回路の消費電力に依存しますので・・
大学のゼミでVerilogを勉強することに決めました。 しかし、一体何から手をつけて良いのかわからなくて・・・ シングルサイクルCPUとマルチサイクルCPUは回路図を用いて設計したことはあります(MAX PLUS仕様 とりあえずQuartusUをインスコしてコンパイル、シミュレーションの手順は把握 参考書読んで勉強していくのが一番ですかね?
それ以外にないような・・・
>>501 デジタル回路の初歩的なことを理解する事、デジタルを除いたアナログの勉強をする事、
色々な人たちとコミュニケ-ションをとる事、正しく見積もりが出来る事、
自分で考えられる事は自分で考える事。これらを特に推奨するよ。
どれも一見HDLの理解には関係ないけど君が社会人としてやっていくには
必要な事だね。これからよき技術者としてやっていけるよう頑張ってください。
>>501 はゼミで使うだけで、就職は全く別分野に1票
使うだけのひとタイプ
メモリの使用方法に関して質問させていただきます。 ターゲットデバイスがVirtex-5はです。 Virtex-5でのQDRUSRAMインターフェースの仕様書はあったのですが、 それを実際どのように実装してよいのかがわかりません。 よろしければご教授お願いいたします。
>>501 回路図を用いてCPUを設計した経験があるなら、
まずはそれをHDLで起こし直して見る事から始めるのもイイかも。
記述がどのような回路に落ちるのか・・・を意識しながら勉強していく感じ。
>>506 CoreGenに含まれるMiGでMemoryInterfaceを生成するのがお手軽です。
508 :
ど素人 :2007/10/15(月) 12:35:55 ID:z8/m8P9J
>>501 >>507 CPUの設計って”回路図(SCH.CAD?)※”で
簡単に設計できるものなの・・・????
※ 結線図外ではテキスト形式又は記述の様な表し方
どういうレベルのものかはまではわからんが MAXPLUS使用で回路図と言うからにはGDFで書いたんでしょ HDLで書き直してみるにはいい題材と思うぜ なにせ間違いなくMaxplusでコンパイルできるからな
HDLを覚えると回路図入力が億劫になってかなわん。 トップレベルはGDFでブロック図代わりになっていいんじゃね?とか思ったが 想像以上にめどいんであきらめた。
>>510 TOPは面倒でも気合でGDF入力してる。「ブロック図ブロック図」って煩い上司がいるもんで・・・
逆に考えるんだ TOPをGDFで書けば、ブロック図を書かずに済むと
513 :
501 :2007/10/16(火) 13:43:22 ID:WThxZgAY
皆さんありがとうございます .gdfで書いたものをHDLで書き直してみたいと思います
514 :
イカロス :2007/10/17(水) 16:16:54 ID:cVfIx5C6
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity hitoketa is port ( CLK : in std_logic; SEG7LED : out std_logic_vector(7 downto 0)); end hitoketa; architecture RTL of hitoketa is signal BIN4 : std_logic_vector(3 downto 0); signal CNT : integer range 0 to 32999999; signal T1S,RESET,STOP : std_logic;
515 :
イカロス :2007/10/17(水) 16:17:24 ID:cVfIx5C6
begin process (CLK,STOP) begin if (CLK' event and CLK= '1') then if(STOP='1')then CNT<=CNT elsif ( CNT = 32999999 ) then T1S <= '1'; CNT <= 0; else CNT <= CNT + 1; T1S <= '0'; end if; end if; end if; end process;
516 :
イカロス :2007/10/17(水) 16:18:35 ID:cVfIx5C6
process ( T1S , RESET) begin if (RESET ='0')then BIN4 <="0000"; elsif(T1S' event and T1S= '1') then if( BIN4 = "1001" )then BIN4 <= "0000"; else BIN4 <= BIN4 + 1; end if; end if; end process;
517 :
イカロス :2007/10/17(水) 16:19:54 ID:cVfIx5C6
process (BIN4) begin case BIN4 is when "0000" =>SEG7LED<= "00000011"; when "0001" =>SEG7LED<= "10011111"; when "0010" =>SEG7LED<= "00100101"; when "0011" =>SEG7LED<= "00001101"; when "0100" =>SEG7LED<= "10011001"; when "0101" =>SEG7LED<= "01001001"; when "0110" =>SEG7LED<= "01000001"; when "0111" =>SEG7LED<= "00011111"; when "1000" =>SEG7LED<= "00000001"; when "1001" =>SEG7LED<= "00001001"; when others => null; end case; end process; end RTL; 10進1桁カウンタ回路を作ろうと思ってます。何度試行錯誤しても動きません。 どなたかご教授おねがいします。。。
分周出力が次の段のクロック入力っすか? やめようよ.......
>>517 動く動かない以前にコンパイル通らないだろ。
エラー無くなるまで直して再提出な。
CNTのリセット追加とintegerをstd_logic_vectorへ、 記述が分かれていても'eventに使う信号は1つのみで何種類も使わない。
>>'eventに使う信号は1つのみで何種類も使わない 全体を一つのものとして考えるとそうだが、彼の場合は本人の言ってる通り、 目的はあくまでも10進カウンタの部分だけであって、分周している部分は 学校かどこかの実機で動作確認するための都合とも考えられる。 つまり載ってる発振器の周波数が高すぎて目視じゃわからないので遅くしているとか。 もしそうなら現状の方が適当だろう。
resetとstopは何処から与えられるんだ?
霊界とか黄泉の国とか・・・・
こういう時って、RESETはデフォールトで'0'なんだろうか? これはワーニングかエラーでるよな。
525 :
774ワット発電中さん :2007/10/18(木) 21:36:56 ID:7Bm7z3QO
↑ワーニング低学歴バカ発見
>>515-516 T1Sをクロックにしてるのがすげぇ気持ち悪い。
>>516 は
process( CLK,T1S,RESET )
begin
--リセットは省略
elsif( CLK'event and CLK='1' and T1S='1' ) then
だろ。
>>527 早朝から釣りですかw
釣りです。
シュミレート、シュミレーター、シュミレーション
シミュレーションがシュミレーションだと思っていた高校3年生の夏。
逆起電力は起きますか?
そりゃ逆でも起電力ですから。
warningは「尾張」と読むのが正しい。
>>524 デフォールト→デファウルト
エラー→エロー
誤読するなら、これぐらい徹底しようよ。
エロルじゃなかったのか
536 :
イカロス :2007/10/19(金) 14:58:48 ID:5qDhjbar
process( CLK,T1S,RESET )
begin
if (RESET ='0')then
BIN4 <="0000";
elsif( CLK'event and CLK='1' and T1S='1' ) then
if( BIN4 = "1001" )then
BIN4 <= "0000";
else
BIN4 <= BIN4 + 1;
end if;
end if;
end process;
こうしたけどエラーがでる><
>>526
どんなエラーが出る?まずはそこからだ。 クロックがおかしいって言われてねぇ?
エラーには普通、行番号が書いてあったと思うけど、気にしない前向きな性格?
周辺回路設計、電源設計、Verilogって全部やってる人って結構多い?
電源はやらない
俺は全部やる。 基板設計もやるし、外注に出すところは実装くらい
542 :
774ワット発電中さん :2007/10/21(日) 10:20:27 ID:k2GcMwXn
俺は実装だけだな。後は全部外注。 VHDLなんて誰でもできるし。
実装業者かよ
実装設計屋なのかアセンブリ屋なのかはっきりしろ。 両方一貫でやってくれるアリガタイ業者なら尚よし。
この板にいる方は社会人の方ですか? 詳しそうな人がいっぱいいそうです><
542は、設計の話をしてるところに颯爽と工員が登場 っていうギャグだと思ったんだけど違うの?上げてるし。
547 :
774ワット発電中さん :2007/10/22(月) 13:04:28 ID:eGXl3v0e
sageデフォ脳か
開き直りage厨か。
549 :
536 :2007/10/23(火) 14:08:48 ID:n4aHg+oc
Error (10500): VHDL syntax error at hitoketa2.vhd(35) near text "elsif"; expecting ";" をクリックするとelsif ( CNT = 32999999 ) then を表示するの と Error (10500): VHDL syntax error at hitoketa2.vhd(43) near text "if"; expecting "process"をクリックすると end if;を表示します。 解読不能です><
近所の中学生に1000円ほど払って読んでもらうといいんじゃないか? でも見知らぬ子に声かけると犯罪者と間違われるから要注意な。
解読する必要なんか無いぞ hitoketa2.vhd(35) 35行目前後を調べる。 hitoketa2.vhd(43) 43行目前後を調べる。 これで十分。
CNTがsignalだからじゃね?
だからsyntax errorだっていってんでんだろうが
こんなに詳しく親切なエラーメッセージなのにまったく活用できてないんだね
>>549 にとっては
?SN Error in 35
だけのエラーメッセージと同じことなんだろうな
ちょー懐かしいな、そのエラーメッセージww
あれだよ、if文の評価式の右辺が型指定されてないからだよ!
グローブボックスの下
マジレスすれば elsifの前(34行目?)で ; が抜けてて そのせいで if - end if;の対応がずれてしまってるとかいう話だろうな つーか、ネタバラシするの早すぎたらゴメン
560 :
774ワット発電中さん :2007/10/26(金) 10:31:21 ID:lnW5Kuzd
↑尾間塩谷和歌欄だろか巣。
562 :
イカロス :2007/10/26(金) 14:58:51 ID:ExakaBRP
>>559 マジサンクスm(__)m
プログラミングって難しい><
expecting ";" expecting ";" expecting ";" expecting ";" expecting ";" expecting ";" expecting ";" expecting ";" expecting ";" expecting ";" expecting ";" expecting ";" expecting ";" expecting ";" expecting ";"
難しいのプログラミングではなくてイカロスの英語読解力だな
ああ、if〜elsif〜end if
何でelseifじゃなくてelsifなんだろうな?>VHDL
perlもelsifだっけ。
パーサがelseifだとelse ...とelseifの区別にはelseの次まで見ないと いけないが、elsifならその必要がないから・・・という貧乏な理由だったり。 else if と elif/elseif/elsif ならぶら下がり問題がないからだけど、 elseifとelsifだとよくわからん。
>>568 人間が読むときもelsifのほうが分岐の深さを気にしないで読めるけどね。
elseif だと else if と読んだ時の音同じになるから elsif にしてるんじゃないのかね?
構文決めたの昔の話だし
好みの問題じゃねーの?
VHDLは使う側は大変だろうが、チェックしたりする時にソフト処理するのには 単純で、都合がいいね。
VHDLのような型が強い言語は融通がきかない だがそこがいい
VHDLの仕様決めた偉いセンセたちは、TAB=space*6で使っていたからに決まっている。
うまいこと言い過ぎるとレスが止まるので注意。
575 :
774ワット発電中さん :2007/10/30(火) 09:34:50 ID:/WfVnL43
vhdlで std_logic_vector(7 downto 0); と宣言した信号を std_logic_vector(0 to 7); と宣言した信号にまとめて代入するにはどうしたらよいでしょうか? 1ビットづつ代入するしかないのでしょうか?
こんな感じでいかが? architecture demo of sample is signal downvector : std_logic_vector(7 downto 0); signal upvector : std_logic_vector(0 to 7); begin upvector <= downvector(0 to 7); end demo;
>>576 ありがとうございます。
以下ソースでやってみました。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity test is port(
in1 : in std_logic_vector(7 downto 0);
out1 : out std_logic_vector(0 to 7));
end test;
architecture rtl of test is
signal tmp:std_logic_vector(0 to 7);
begin
tmp<=in1(0 to 7);
out1<=tmp;
end rtl;
quartusでは14行目のin1(0 to 7)のところで以下のようなエラーになってしまいます。
range direction of object slice must be same as range direction of object
オブジェクトのスライスの方向(アップかダウンか)は(代入される)オブジェクトの方向と同じでなければならないという意味ですよね?
実際に同じ方向にそろえてあるのですがなんでエラーになるか解りません。
答えはわからんけど、やりたいこともわからん。 in1(0)を、out1(0)に入れたいのかout1(7)に入れたいのか。
in1宣言時と逆方向に並べた時点で文句いわれてるんじゃね?in1(0 to 7) 地道にfor文で1ビットずつ入れる方が安全かと。
普段"to"って使う? 混在するとややこしいことになるから"downto"で統一しろと教わったなあ。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity conv is generic ( DWID : integer := 8); port ( DAT_I : in std_logic_vector(DWID-1 downto 0); DAT_O : out std_logic_vector(0 to DWID-1) ); end conv; architecture RTL of conv is begin -- RTL L_GEN_CONV: for i in 0 to DWID-1 generate DAT_O(i) <= DAT_I(DWID-1-i); -- DAT_O(0) <= DAT_I(7); -- DAT_O(i) <= DAT_I(i); -- DAT_O(0) <= DAT_I(0); end generate L_GEN_CONV; end RTL;
581 :
575 :2007/10/30(火) 22:39:37 ID:0onhVnTr
>>578 上の例の場合はin1(0)をout1(7)に入れたいです。
用途は、ひとつのベクタ信号をある変数に代入するときにフラグが'1'か'0'かによって昇順降順を切り替えたいのです。
一発で入れ替える方法が無ければ
>>579 さんのおっしゃるように1ビットづつ入れ替えてもいいのですが、
一般的に使われそうなのでコンバート用のマクロなどがあるかと思いました。
"range direction"で探してみますと、以下のようなのがみつかりました。
Note the inverse range directions (FAQ Part 4 - B.193) of the slices (FAQ
Part 4 - B.222) and the arrays "r3" and "r4". The 87 LRM does not clarify,
if this is legal, but the official interpretation of the 87 language (VASG)
says that the directions of slices must match the direction of the array
being sliced. So it is not legal code. This decision is reflected in the
VHDL'93 LRM.
http://www.sigda.org/Archives/NewsGroupArchives/comp.lang.vhdl/1999/Dec/comp.lang.vhdl.26156.txt すくなくとも93年版のVHDLだとオブジェクトの宣言時のdirectionとそのスライスのdirectionは同じじゃないといけないということでしょうか
582 :
575 :2007/10/30(火) 22:44:20 ID:0onhVnTr
>>580 ありがとうございます。参考にさせていただきます。
VHDL関係の本はCQ出版とSTARCしか知らないんですが、 VHDL'93とかVHDL'98 ?のリファレンスってどこかで入手可能なのでしょうか。 本を読んで回路は書けるようにはなったものの CONV_ 等の記述が不足してたり 索引がしょぼくて機能が見つけにくかったりしますし、 ソフトに依存しない便利な記述があるなら積極的に使って分かりやすくしたいなと。 ソフトに依存する部分はそれはそれとして分けてあるといいんですが。
VHDLでTESTというout信号に対して TEST <= '0' when (条件1) else 'X'; TEST <= 'Z' when (条件2) else '1'; ※↑process文の外 というように同時に違う条件で値が代入される書き方ってダメですよね? 人様が書いたコードの中にこのようなところがあったのですが・・・。 コンパイルもTEST信号に問題があると言われて通りませんし。 コメントアウトし忘れたのでしょうか??
普通にOKだよ。 ORになる。
このスレ見てるとVHDLが多そうだけど、Verilogの方が少数なの??
588 :
585 :2007/11/01(木) 07:03:45 ID:e5U8B0Qz
>>586 おお、そうでしたかw
もう一度よく見直してみます。
ありがとうございました。
Multi-sourceの記述がorに落とし込まれるかどうかは、合成ツールの実装に依存するんじゃないかな。
>>585 の元ソースを書いた人も、使っている合成ツールによって下記のような記述に落ちる事を
想定して記述したのだとは思いますが、どんなツールでも通る様に記述しておくのが無難だと思います。
TEST <= '0' when (条件1) else
'Z' when (条件2) else '1';
>>583 > ソフトに依存
ってなんですか?
conv_云々などの使い方なら、std_1164.vhdとかnumeric.vhdとか、そんな名前の
ツール付属の標準ライブラリのソースを見たらいいんじゃないでしょうか。
アルテラにだけ有るROMだかのツールとかそう言う事じゃない?
>>584 せっかく紹介してもらったのですがIEEE会員になるのは敷居が高いです。
593 :
584 :2007/11/01(木) 21:36:10 ID:zbBZt9jW
>>592 会員にならなくてもPDFあったでしょ?なかった?
IEEE memberじゃなくてもOK 誰でもIEEE web accountの登録が可能 そうすればIEEE規格書を購入できるよ
>>594 JTAGの規格書買おうとしてあまりの高額さに泣いたよ。
そんなの払うくらいならIEEE memberになってやる!と思って調べると
IEEE Computer Society(こっちの方が自分には近い)はIEEE本体とは
別組織ですみたいな感じでまた泣いたよ。
http://yamazaki3104.seesaa.net/article/22970350.html ■ハード屋の祭り
ハード屋の方で珍しく祭りが起きていた。いや、普段から祭りのようなのだが
俺たちが気付いていなかっただけだった。
何でも、ブレッドボードの作成&評価日程がスケジュールから押し出されて、
一気にハードだけでも最終製品に仕上げてしまうとの事だった。
俺にはそれはどれほど大変な事なのか分からなかった。所詮はハードの話だ。
所詮はハード、俺たちには無関係。そう思っていられたのは、ES製品のASIC
(プロセッサ内臓)に付いているはずのJTAG-ICE端子が基板設計ミスによって
ボード上に繋がっていなかったと知るまでの間だった。
「ICEが繋がらない?」
「端子にジャンパ線繋げれば出来るはずだろ?」
「それがBGA品なんです。ジャンパは不可能です。」
それを横で聞いている時には、意味が分からなかった。
--------
デスマーチにハマるのは、ソフトウェア開発という仕事だけではありません。
ハードウェアの開発部隊であっても、スケジュールがタイトであれば、
ソフトウェア開発と同じようにデスマーチになるわけです。
おそらく、デスマーチにハマるのはシステム開発という職種が発症する
特別な病気ではなく、規模が巨大で、スケジュールが短いプロジェクトでは、
業界の職種を問わず発症する病気なのでしょう。
規模が巨大なため仕様が曖昧になり、何をすればいいのかわからなくなり、
やってもやっても作業は減らず、報われず、疲労とストレスが溜まり、
ひたすら体力勝負の全力疾走を強いられ、これが与えられた仕事だから、
周りに迷惑をかけたくないから……といった正義感だけで体を支え、
鞭を打って働く。これは、決して個人の能力の無さによって発症するのではなく、
単純に「金さえあれば規模や短納期の問題は乗り越えられる」と考える
一部の視野の狭い管理職の判断ミスから発症しているのです。
ハードって無理なものは無理だからな 勝手に上がスケジュールの線を縮めてもすぐ無理が露見するだけ 修正コストが高いからこそ、設計の検証をきっちりやってて ミスが露見しにくいだけであって、簡単な仕事をやってるわけではない 最悪出荷した後でも修正がきくソフトとは大違い
金さえあればと考える管理職なんてマシ。 今は何が何でも金を出さない管理職が蔓延してる。
599 :
774ワット発電中さん :2007/11/06(火) 01:54:42 ID:zM7sFVZl
>>598 人をかければ何とかなるんだろう、人を呼んできて…
と言うが、人を呼ぶための金の話になるとトタンにそんなに出せん、と言う。
人件費の感覚がマヒしてるんだよな。自分の所が、「定額制」だから。
いくら忙しく残業を増やしても、人件費は変わらないんで。
簡単に金で人材は買えないよ。 頭数増やしても納期は縮まらないのにな。
>>601 金で人材は買えるが、単にそこまで出せないだけ。
宝石店の前で「ウワァーン、10000円も出すのにダイヤの指輪買えない!」と
泣き叫ぶようなもん。お前にはガラス球ですらもったいないわ!といいたい。
603 :
774ワット発電中さん :2007/11/07(水) 15:43:47 ID:QRKcUUfm
w
604 :
774ワット発電中さん :2007/11/07(水) 16:14:47 ID:qFR6NDkj
俺俺。月120万の契約で助っ人に入ったが、待ち状態で、仕事がない。 漫画読んで、2chやっておしまい。
>>597 でも、言語設計してるとハードも納入後に変更が効くと思ってる奴がいるんだぜ?
勘弁して下さい........orz
>>605 効くじゃん。初期費とリペア費を払ってもらえば。www
人手に関しては似たりような会社が多いって事かorz
必要の無いときには「人手が足りなければ雇えばいい。」って大きい事言ってるくせに
土壇場になると「予算が無い。」とか言い出しやがる。
細かい仕様は実物が出来てから決めればいいと思ってる 馬鹿客が多いのが困りものだ。 このての輩は、その期に及んでもろくに考えていないから 思いつきで作らせては変更を繰り返し、上司が何か言うとすぐに意見を変える。
「最近はあれだろ?FGPAとかで出荷後でも修正できるんだろ?」
仕様が天から降ってくるのを口を開けて待っている馬鹿ってほんとつかえねえよな
610 :
774ワット発電中さん :2007/11/11(日) 08:46:15 ID:/acDCb/P
自動車も出荷後に修正が出来れば楽なんだけどな。 ・・・・リコールすれば出来るけどな。つか7割はリコールだが。
時々エンジンの自動アップデートしてくれる時代がもうすぐ来ますよ
排気ガス規制が強化されるたびにパッチが当たるのですね
トラ技に出てた“ノーパソ繋げっぱなしのECU”を思い出した(w
失礼します。 Verilogで、シングルポートSRAMの動作モデルを記述すると、 inとoutでポートが異なるのが一般的ですが、 実際のシングルポートSRAMはinとoutで同じポートです。 設計時にはこの違いのどのような点に気をつけるべきですか? また、動作合成及び配置配線時に、何かソースに手を加えないといけないことがありますか? ご教授願います。
inoutとかってポート指定は無いの?
>>616 inoutという、ポートの種類はあるんですが、
RAMの動作記述では、多くの参考書ではinoutが使用されていません。
下記のように、書き込み用と読み出し用にデータポートが分かれています。
module sram1 (clk, wr_en, data_in, addr, data_out);
parameter DATA = 8;
parameter ADDR = 8;
input clk, wr_en;
input [DATA-1:0] data_in;
input [ADDR-1:0] addr;
output reg [DATA-1:0] data_out;
reg [DATA-1:0] ram [(2**ADDR)-1:0];
always @(posedge clk)
if (wr_en)
ram[addr] <= data_in;
else
data_out <= ram[addr];
endmodule
実際のSRAMの構造と違うので、合成の段階で何か特殊な操作が
必要なのかと思い引っかかっています。
たしかISEでinout使うとIOバッファを作らないみたいなオプション入れないとコンパイルできなかったな 趣味のレベルの人間だから良くわからんけど
>>618 そうですか。ありがとうございます。
配置配線時にメモリマクロを使う場合、問題は起こらないでしょうか?
メモリマクロって事はオンチップのメモリの事?
>>620 その通りです。
計算でどうしても必要、というかぶっちゃけた話、FFTの回路で使おうと思っているんですが、
どうしても実際のRAMと動作モデルとのメモリインターフェースの違いが気になって仕方ないんです。
オンチップメモリのマクロはFPGAだったら、in out別だよ。 ASICは知らないけど、。
>>622 参考になりました。
ありがとうございます。
参考資料のRAMの動作モデルの記述がinとoutが別なのは、
FPGAをターゲットにしてるからかも知れません。
自分としては、シングルポートSRAMの構造に従って、inoutで記述してみようと思います。
なんでわざわざ内蔵RAMをシングルポートにしたいの? 意味ないよ 外付SRAMデバイスが双方向シングルポートである理由は 単にI/Oパッドとデバイス間配線のコスト問題 将来的に大きいサイズの外付SRAMを使う予定でもない限り in/out別の参考資料の通り使えばいいよ
>>624 そうなんですか。
確かに大きい外付SRAMを使う予定はありません。
気にする必要が無ければ、inとoutが別の方が格段に考え易いので、
そちらにしたいと思っています。
大変参考になりました。ありがとうございます。
44ピンのパッケジーに60ピンのRAMを入れたいのだが
cpld挟んで上のほうのアドレス固定してやれば?
「パッケジー」に「60ピンのRAM」・・・質問です氏かなぁ。
629 :
774ワット発電中さん :2007/11/13(火) 16:13:34 ID:braUWCUL
エラーを小出しにするんじゃねえぼけ>quartus
糞なソース書くんじゃねえよ
小出しって・・・そんなにいくつもw
エラー:お前のコードは汚すぎてコンパイルできない。一昨日きやがれ。 とか?
wait for -2 * 24 * 60 * 60 sec;
ちと苦しいトランスレーションだな、それw
少なくとも合成はできません
636 :
774ワット発電中さん :2007/11/20(火) 23:07:25 ID:X9b0VIn3
みなさんどこに勤めてるの?でんきめーか?
無線機器メーカですー。
土建屋です。
飲食店
638-639 マジだろうか? 俺ガラス店(家業)
641 :
774ワット発電中さん :2007/11/21(水) 15:12:18 ID:dX5WpAc3
同じくガラス店(家業)
ガラス店を使ってる工務店
643 :
774ワット発電中さん :2007/11/21(水) 22:38:08 ID:uAR+ru9t
最近のガラス店は凄いな
644 :
774ワット発電中さん :2007/11/22(木) 00:17:17 ID:nNtUutkB
大学につとめてます。
>>615 実際のS-RAMってのは、ICのことだろ。
FPGAやASICの中ではスリーステートバスは使えないのが常識。まあ、昔は使えてたが。それに、同期RAMしかないだろ、いまどき。
あ、オレ、家電メーカな。
農家です。
お客様の中で自宅警備員か住職の方はいませんか?
>>645 そうすると
inout bus;
reg busdata;
assign bus = busdata;
busdata = 1'bz;
とかは合成不可能なんでしょうか?実機なし、シミュレータのみの
畳上趣味Verilogger入門者ですが、プログラムとして書ける内容と合成可能な
書き方に結構落差があるようでなかなか馴染めません。
上も最初は tri 使うのかと勘違いしてはまり、その後で force/release を
使ってはまり、そしていまトライステートはそもそもできないと読んでややorz・・・
畳上趣味Verilogger入門より先にやることあるんじゃね!?
いま
>>649 が上手い子と言った(なぜか変換できない)
>>648 トップモジュールでtriバッファ使用ならfpgaのピンはHiインピーダンスに
なるんじゃないかな。階層化した子モジュールではやるべきじゃない。
651 :
774ワット発電中さん :2007/11/23(金) 16:53:11 ID:LU5JCeai
quartusのwebエディションってインクリメンタルコンパイル使えないの?
settingの項目がインクリメンタルoffしか選択できない。
>>648 >実機なし
DWM買わなかったのかい?
>>648 Quartus あたりで試してみたら?
スリーステートバスは、マルチプレクサーに変換してくるかも。
>>651 DWMは買いましたが、いまだ旧式ノートのままなんで遅くてどうもならんです。
QuartusとかISEとか、ありえんて感じ。まあPCは新調するんですが、今はLinuxの
Verilog環境で書き方とかシミュレータレベルで修行中。なので畳水練。
こないだバス接続の実現方法としてZ入れてる例を参考書で見て「なるほどこうするのか」と
思ったばかりだったので反応したんですが、シミュレータ(&脳内)で動くのと合成可能の間の
ギャップが大きい。このギャップが逆に面白くて手を染めてるわけですが、3度目の正直で
わかったと思ってた所に「それ昔の話」となってorzでした。
同じプロセッサ使ってるならModel Sim の速度は Win < Linuxだよ
>>653 まあなんだ、Verilog の記述がそのまま全部回路に出来る訳じゃないしな。
FPGAならFPGA、ASICならASICの固有の問題もあるし、実際の回路を
イメージ出来ないと合成までやるのはむずいかもな。
ソフト屋を連れてきて、システムCで書かせりゃLSI出来るって思ってる
お偉いさんたちからして間違ってるわけだが。
まあ、頑張って精進してくれ。同志として応援しとるよ。
ASICで意図せずにHiZライン作ってしまって消費電流増えてた事があったな。
modelsimで、各種パラメータが宣言してあるverilogファイルをinclude しているverilogファイルをコンパイルすると、includeを使っている verilogファイルがすべて、includeしているファイルを開くことができません というエラーがでるのですが、解決方法ご存知の方いらっしゃいましたら 教えてください。宜しくお願いします。
>>657 なぜ開くことができなかったのかが不明だが。
パスを確認。あるいは、多重定義ならifdef せよ。
>>657 特許の請求項みたいで、何を言いたいのかよく分からん。
具体的には`include "./mig20_parameters_0.v"としていて、 実行ファイル(〜.ise)がある場所と同じ場所にmig20_parameters_0.vを 置いて、ISEにもmodelsimにもaddしてあります。 それで`include "./mig20_parameters_0.v"←この記述を使っているファイルが modelsimでコンパイルエラーになってしまうという状態です。
modelsimの実行ディレクトリはそのファイルがおいてあるディレクトリかい?
iseの実行ファイル(プロジェクト)がある場所には、全てのverilogファイルが置いてあって、 modelsimを起動してiseの実行ファイルがある場所からverilogファイルを参照しています。 なのでmodelsim.exeがある場所とは違うところにファイルがあります。 C:\Modeltech_xe\win32xoem\ フルパスでいうとここにmodelsim.exeがあって C:\Xilinx_ISE9.2i\projectfile\test\ ここにシミュレーションしたいverilogファイルと mig20_parameters_0.vがあります。
modelsimのプロンプトでpwdコマンドを実行して、 表示されるディレクトリがファイルの置いてある場所と違ってたら、 1) Workspaceにてマウスの右クリックで表示される [ Compile > Compile Properties ] を選択しProject Compiler Settingsダイアログを表示する。 2) ダイアログの中の [ Other Verilog Options ] にて、[ Include Directory ] ボタンをクリックし Includeファイルの参照フォルダを指定する。 一緒の場合は、原因はちょっとわからない。 後、includeされるファイルはaddしなくて良い(Compile時に自動的に読まれる)
ありがとうございました。 無事コンパイルできました。
665 :
774ワット発電中さん :2007/12/04(火) 15:55:39 ID:LNM5BD/G
VHDL から C で記述された関数等を呼びたいんですが、 インターフェースは規定されてないんでしたっけ? Verilog における VPI みたいなのが規定されていると嬉 しいんですが。
modelsimでVHDLからC関数の呼出ができるのは知っているが IEEE規格にはなってないような気がする
667 :
774ワット発電中さん :2007/12/05(水) 12:01:07 ID:M87xa0r8
>>666 昔調べた時は simulator 依存だったんですが、その頃から
変わってないということですね…。
669 :
774ワット発電中さん :2007/12/06(木) 00:39:13 ID:7x3aZ1Sv
Verilog使用のCPLD初心者です。2weekも壁にぶち当たっています。 Altera MAX2 でGlobalCLK 75MHzを入力し150MHz動作を実現したい のですができません。クロックを1/4サイクル遅延してEXORする事 で倍速駆動できないかと内部遅延を考えましたが実現できません。 何か上手い手はないでしょうか?
>>669 どうやって 1/4サイクル遅延させようとしたのか興味ある。
意味無い記述って事でコンパイラに消されてる予感。
外部に逓倍器、或いはPLL内臓のFPGAへ変更が妥当。
>>669 もしかして、外部75MHz→CPLDとして、CPLD内部で1/4移相、exorしてる?
1/4移相の方法はどんなふうにしたの?
clk_d = #3.3 clk; だろ、普通 w
674 :
774ワット発電中さん :2007/12/06(木) 17:08:03 ID:NcU8yY+g
>>668 >何を持って規定されている
VPI のように IEEE 等で規格化されていることを規定されて
いると言ってました。
張って頂いた URL は GHDL と呼ばれる処理系のもので、
これを使えば C と Ada が扱えるというもののようですね。
商用のシミュレータと同程度に高速なのならば良いんですが、
これって実用に耐えうるだけの速度が出せるんでしょうか?
私も以前調べて知っていますし、666 にもあるように
modelsim では使えるようなので、そちらを利用する方向で
考えます。
ところで、emacs の VHDL mode って、verilog mode
における auto wire や auto reg のようなモジュールの自
動接続ってできないんでしょうか?できない場合は、それに
代わるツールとかって無いんでしょうか?
>>670 その予感に快感1票。
>>669 lcellとかいうのをport mapで数珠繋ぎにして、内部遅延させたことがあるよ。
・・・あ、これはVHDLだね。verilogは知らん。MAX7000でリングオシレータをやりました。
とりあえず電源電圧ぐらいしかいじれなかったんだけど、結構敏感でしたね。
MAX2とかの(実質)FPGAだと、またちょっと性質が変わってくるかも知れないけど、
75MHz→150MHzは「一時的に実験してみるレベル」は脱せないと思う。
このやり方ではね。
>>674 verilog-modeの自動接続機能についてはよく知りませんが
入力支援機能として M-x vhdl-port-*** が重宝します。
最初に entity の所で「M-x vhdl-port-copy」を実行し portmapを覚えさせた後で、
下記のコマンドを実行していきます。
1. コンポーネント宣言の生成 (M-x vhdl-port-paste-component)
2. 信号リスト宣言の生成 (M-x vhdl-port-past-signals)
3. インスタンス宣言の定義 (M-x vhdl-port-past-instance)
全自動とは行きませんが、結線記述で多少は楽ができるかと。
(おまけ) テストベンチの雛形生成 (M-x vhdl-port-past-testbench)
>>676 eが抜けてた(;´Д`) > vhdl-port-paste-***
678 :
774ワット発電中さん :2007/12/06(木) 23:53:03 ID:7x3aZ1Sv
>>669 の者です。
皆様、有難いアドバイスを頂き有難うございます。
下記の様に記述し、コンパイルは無事通るのですが、
見事に遅延は無視されている様です。
always begin
XTAL_D <= #3.4 XTAL;
end
正攻法で行くならやはりデバイス変更となりますが、
内部or外部で数珠繋ぎを実験的にやってみようかと
考えています。
もし内部数珠繋ぎのやり方をご存知の方がいましたら
この初心者にご教授下さいませ。
ちなみに使用デバイスは"EPM570T100C5"です。
>>678 無視されるもなにも、そりゃシミュレーション記述だ。
誰か書いてたけどlcell繋げばいいんじゃないかね しかし遅延量なんか全然保証されないぞ デバイスのばらつきや温度の影響をうけまくる
681 :
774ワット発電中さん :2007/12/08(土) 01:29:39 ID:69cLEjj2
lcell u_lc1(.in(A), .out(B));
とりあえず書き方だけ。
lcellは配線領域が足りなくなったときのためのもの。
遅延セルではないので
>>680 のいうとうり遅延量の保障はされない。
(でも大体3nsぐらいの遅延だったような。)
構造上、クロック信号だと入力できないかもね。。。
久しくFPGA触ってないので、間違ってたら失礼。
682 :
774ワット発電中さん :2007/12/08(土) 08:26:14 ID:9Pixs2RO
>>669 です。
lcellで1/4サイクルの遅延が出来ました!
一つの壁を乗り越えられたので実験を進めて行きます。
とてもいい勉強ができました。
皆様、的確なアドバイスをこの初心者に頂き有難うございました。
初心者に間違った知識与えてどうするよ。 クロック専用線使わずに150MHzだと同期がとれずに結局使えないんじゃ。
そのクロック専用線とやらには、クロック入力ピンからもロジック出力からも
入力できたと思ったが、最近のMAX2ではできないのか?
>>684
>>682 悪いことは言わん。
「150Mhzの波形を見たい」だけ以外ならば、素直に
クロックダブラーICを使うことを強く強く勧める。
「安定した1/4遅延」はlcellでは絶対に無理だ。
TIの CDC5801Aなんかが使えそう。
IDT2308はMAXが133Mhzだった。
俺ならオシレータを交換するぜ
実験つってんだからやらせときゃいいだろ。 安定しないっていうのは初めのレスから書かれてること。
689 :
774ワット発電中さん :2007/12/10(月) 22:35:07 ID:ba8n58bm
>>669 です。
皆様、頂いたアドバイスは全て有難く、心から感謝します。
実際には150MHzクロックモジュールか外部2逓倍するデバイスを探していた最中です。
PLLもDLLもないMAX2ですが開発環境含めC/P面で魅力ですのでもうちょっと続けてみます。
>>686 さん、情報有難うございます。検討してみます。
内部逓倍は並行してあくまでも実験として進めてみます。
おかげでAltera DSEも初めて使ったしクロック専用線やFitter Optionも色々と興味が沸いてきました。
HDLを始めて1month未満の超初心者ですがワンチップマイコンプログラムとは全く別物だと体で感じました。
初心者の無謀をお許し下さい。
> クロック専用線やFitter Optionも色々と興味が沸いてきました。 興味云々するようなしろもんじゃないと思うが、7400の回路構成に感動する 人もいるだろうから、まぁいいかw
691 :
774ワット発電中さん :2007/12/14(金) 22:55:25 ID:/uO7/YCS
NIOSでバスとノードを接続する方法を教えてください。 1.2ビットのPOを作ると、そのピンはPO[1..0]と表現される。 2.これらを、たとえばPIN1(BUZZER_OUT)とPIN2(LED_OUT)に接続する 2.でFPGAのPINをOUT[1..0]と定義し、ノードで接続するのはNGです。
↑ ピンネームにカンマ区切りで複数入力
verilog で 下記の VHDL の A のように特定のビットの値は '1' & その他は '0' みたいな記述、できましたっけ? signal A : std_logic_vector (7 downto 0); A <= (3 => '1', 5 => '1', others => '0' );
>>693 verilog に 'その他' ていう扱いあったんだっけー?
A <= 8'b0010_1000; あたりしか書けない気もー。。。それとも !?
VHDLの知識ナシなんだが、othersってどういう場面で便利に使えるんだろう。
>>693 くらい単純な例だと
>>694 のように直接bit列を書いた方がよさそうだし。
無理やりそれっぽいコード書いてみたんだが、こんなのでどうか。
integer i;
reg [7:0] A;
always for (i=0; i<=7; i=i+1) case(i) 3,5: A[i]<=1; default: A[i]<=0; endcase
文法チェッカ通してないしシミュレーションしてないし合成できるか
わからないが、方向性として。
othersの方がスマートな記述でシミュレーションへの負荷が軽そうな
気がするのは間違いない。
> A <= (3 => '1', 5 => '1', others => '0' ); ツール依存の記述じゃないの? これ。
MIG(Xilinx Memory Interface Generator)でSpartan3のDDR SDRAMのインターフェイスを生成し、 Model Simでシミュレーションを行いました。 そこで、実機でMIGで生成したインターフェイスをFPGAに実装し、動作確認を行いたいのですが、 どのようにすれば比較的簡単に実装確認ができるでしょうか。 MIGから生成されたテストベンチを実機用にもっていければいいのですがうまくいきません。 ただFPGAとDDR SDRAM間のやりとりが出来ていることが確認できればいいのですが… MIGに関してご存知の方宜しくお願いします。
>>695 レジスタのビット位置/初期値とか define で指定しておけば、ビットの
入れ替え時に直接ビット列書くより楽かな/見た目くらいかな!?
あるとどれだけ便利かより、VHDL と verilog 両方使っていて自分の中で
対応する機能が空欄のままなのが others なので気になっているのです
サンプルコードありがとう、後ほどで試してみます
>>697 コマンド発行が出来てるかどうかを確認する程度でしたら
ChipScopeProでDDRに行く制御線をプローブするのがお手軽ですね。
ISEでのエラーのことについて質問したいのですが、 Xilinx ISE9.2iでImplement Designを実行すると ERROR:NgdBuild:924 - input pad net 'sys_clk_p' is driving non-buffer primitives: pin C on block syncro/q0 with type FDC, 〜 というようなエラーが出てきて、Xilinxのサイトで調べてみたところ、 ソリューション Spartan-3 デバイスでは、ループバック タイミング信号を作成するために、 外部で DDR2_DQS_DIV_I および DDR2_DQS_DIV_O 信号を使用する必要があります。 この信号が接続されていないと、IBUF に含まれる IBUF への入力が内部グランドに接続されます。 これが原因で、グランド信号に複数のドライバが作成され、IBUF とパッドの接続が不正になります。 とあったのですが、具体的にどのようにすればいいかご存知の方いらっしゃいましたら ご教授願います。 よろしくお願いします。
そのエラーについてはよく分からないけどどんな回路が作りたくてsys_clk_pって何に繋いでる何の意味を持つ信号? クロックっぽいのは分るが 情報小出しは分る人が居ても答えて貰えない場合が多いよ
Verilog-HDLで「parameter」宣言した場合のスコープは何処までですか? トップモジュールで宣言した場合、下位モジュール全てに有効でしょうか?
下位モジュールにパラメータを渡したいなら、インスタンスを作るときに明示的に渡さないとダメ。
いつになったらWindows版のGTKwaveはリロードで死ななくなるんだ。 Unix(Linux)版に離される一方だな。 しょうがない、シミュレーションはLinuxでやるか。
エンティティ宣言の信号名の前にsignalが付いているのは一体何なんでしょう?? signalというと、ロジック内部間での接続に使う信号用に宣言するものだと思うのですが・・・
port宣言のsignalって、普通は省略するだけで本当は付けるのが正式なんじゃなかったっけ?
709 :
707 :2008/01/21(月) 00:15:28 ID:j6jHMiIB
>>708 うわー!そういうことでしたかw
ありがとうございました!
FPGAにbitファイルを使って書き込む時、 Impactのオプションでmskファイルを生成するように設定すれば 正しく書き込めますよね?
702です XilinxのMIG(メモリインタフェースジェネレータ)を使用して メモリのインターフェース回路を生成してみたのですが、いざFPGAで 実装確認しようと、生成した回路に自分で書いてみた回路を追加 したところ出てきてしまったエラーです。 'sys_clk_p' というのはボードについている発信機からのクロック 信号です。 自分で書いてみた回路は、FPGA上で動作確認するため、ユーザプッシュスイッチで FPGAの出力端子から出てくる信号を切り替えるための回路とプッシュスイッチのシンクロ 回路だけなのですが… MIGから生成されたrtlに付属のISEプロジェクトを生成して、各種プロパティの設定をしてくれる バッチファイルを使えばMIGから生成された物を、そのままならXSTからIMPCTまで可能で、FPGAに実装 できたのですが、そのままボードに実装しても何も確認できないので、取り敢えず assign pin packageを実行してみたら Command line parameter '" -p xc3s2000-fg676-4 C:/Xilinx92i/projectfile/MIG_0116/ mig20/user_design/rtl/mig20.v -uc mig20.ucf -intstyle ise' is not valid and will be ignored. という警告が出てきて、ピン配置ができないエラーもでてきてしまいます。 それでなくても回路を追加すると702のようなエラーがでてしまいます。 どうしようもない状態です。
ふ〜ん
がんばれ〜
がんばらなくていい〜
>>711 まずは MiG の初期化完了ステータスフラグ出力ピンを LED に LOC する事から初めてはどうか。
それだけの回路にXC3C2000とは。
大きなお世話だぜ
>外部で DDR2_DQS_DIV_I および >DDR2_DQS_DIV_O 信号を使用する必要があります。 > この信号が接続されていないと、IBUF に含まれる IBUF への入力が内部グランドに接続されます。 つなげばイイんでねの?
>>718 まぁそうなのですが…
マニュアル読んでみてもその信号の使い方がよくわからないんですよね。
というか、MIGで生成されたものをどうやって使っていったらいいものか・
verilogで生成して、プロジェクトにxcoで読み込んで
トップモジュールの下に置きたかったのでトップモジュールに
mig20(モジュール名) inst_mig20(インスタンス名)(
.インターフェースとの接続〜
);
で宣言して、MIGのucfをトップのucfにコピーすれば使えるものかと
思っていたのですが、
HDLCompilers:87 "トップモジュール名.v" line 115 Could not find module/primitive 'mig20'
という具合にエラーがでる始末です。
このツールを使うときに、他に参考にできる資料やサイトご存知の方いましたら
教えてください。
インスタンスが生成されてないとかじゃないだろうな?
>>719 コンポーネントがミツカラネーヨと言われる点は、「Synthesis Options」の「Verilog Include Directories」で
MiG の RTL が置いてあるディレクトリを指定すれば良いと思います。
階層構造も正しい構造をしていて、RTLが置いてあるディレクトリ指定して やっても同じエラーがでました。 .iseが置いてある場所にMIGのrtl全部コピーしてみてもだめでした
肝心の MiG のネットリストのコピーをし忘れてたw・・・というオチは無いか。 xco 経由でネットリストにしたIPコアを読み込ませるのではなく、 RTL を全部 Project に登録してしまい、コントローラコアを ユーザーロジックと一緒に合成するのが確実なんじゃないかな。 コンパイル時間はもちろん延びるけど・・・。 私は VHDL ですが、そうやって MiG を利用してます。(クロック生成とかは自前)
それではxco使わなくてもrtlをプロジェクトに追加してしまえば、 それで出来てしまうんですね。 とりあえず動かしてみるなら、rtlをプロジェクトに追加して 自作のトップモジュールにMIGをインスタンス化する記述を書いて、 MIGのucfの内容をトップモジュールのucfにコピーする以外 必要なことってありますか? MIGの記述の変更やプロパティの変更など あと、MIGのucfの入出力ピンの記述を変更しても、何か他に影響及ぼさないですよね?
>>724 >MIGのucfの内容をトップモジュールのucfにコピーする以外
>必要なことってありますか?
問題を切り分けるためにも、最初は sys_clk_p に対する PERIOD 制約と
DDR2信号ピンの LOC・IOSTANDARD指定のみに留めるべき。>UCF追加
LOCで指定するピン番号も、MiGが自動生成したピン番そのままではなく
ちゃんと「自分の基板のピン配置」に直してね。
>MIGの記述の変更やプロパティの変更など
MiG の GUI 上で自分が使う DDR2-SDRAM 品種を選択して Generate したのであれば、
DDR2の各種パラメータが記述された include 用の .v が出来てるハズ。ソレを使えばOK。
>あと、MIGのucfの入出力ピンの記述を変更しても、何か他に影響及ぼさないですよね?
状況によりけり。
どっちにせよ、ピンのLOC指定は自分の基板のピン番号に直さないとダメですね。
直した結果、PARのバンク配置規則から逸脱していた事が判明したらご愁傷様です。
S3 はわかんないけど、V4/5用のコントローラは、BUFIO を使う関係上 DQS信号が
CC I/O ピンにアサインされてないとダメポでした。
なので、MiG 登場前に作られた様な評価ボードでは実装できない事があるかもね。
726 :
774ワット発電中さん :2008/01/30(水) 08:36:14 ID:hu3PMW51
留年しそうなんだけど、俺でも回路設計者になれるかな?
卒業できたらな
728 :
774ワット発電中さん :2008/01/30(水) 23:51:47 ID:hu3PMW51
SFL素晴らしい
729 :
774ワット発電中さん :2008/01/31(木) 00:36:04 ID:dZYucowN
>728 2年前だったか、使うのをやめた。 同期回路に限定して記述も簡単だが、あの閉鎖性が気にくわない。 来年どうなるか、わからないという状態では、使う気が失せる。 ユーザー数は減少の一途だと思うよ。
ってか、ユーザーいるの?
731 :
774ワット発電中さん :2008/02/06(水) 17:25:02 ID:fvYflb0j
使用OS:WinXP-Pro,ソフト:Web-ISE 9.2i,FPGA:Spartan2 XC2S15-5VQ100C
長文になりますが、Web-ISEの表示で質問です。
ttp://monoist.atmarkit.co.jp/fembedded/fpgastartup/fpgastartup01/fpgastartup01c.html のcase部分を改変し、3個のボタンの位置と、8個のLEDの右側3個のLEDの点灯位置を1対1
で一致させるために
case(~{A,B,C})
3'b000:Y=~(8'b00000000); //無点灯
3'b001:Y=~(8'b00000001); //右端が点灯
3'b010:Y=~(8'b00000010); //中央が点灯
3'b100:Y=~(8'b00000100); //左端が点灯
endcase
としたところ、Web-ISEの「Implement Design」に警告マークが現れました。これを展開して
みると「Place & Route」に警告があり、ここのプロパティを見ると
http://1rg.org/up/5227.jpg の表示が出ました。また、「Warnigs」タブを選択すると以下のように出ます。
WARNING:Place:837 - Partially locked IO Bus is found.
またPlace:837は下の表示が出ました
Place:837 - Partially locked IO Bus is found.
Following components of the bus are not locked:
Comp: Y<7>
Comp: Y<6>
Comp: Y<5>
Comp: Y<4>
Y<4>〜Y<7>は、元ソースでは残りの(左側の)LED用I/Oです。
これは何を意味しているのでしょうか?
よろしく願います。
なお今回の改変ソースをFPGAにダウンロードしたところ、ボタンとLEDの点灯位置は
一致しましたが、Y<4>〜Y<7>に相当する残りのLEDは常にボヤ〜と点灯しています。
Ooops! I've found a warning-boy!
>>729 来年どうなるか(笑)
そんときゃ自前でRTL生成ツール作ってでも使うけどな
ISEは、9.2でもエディタ上の漢字使用はNGでしょうか? まだISE7で使ってる私。
>>731 (A,B,C) = (On,On,Off),(Off,On,On),(On,Off,On),(On,On,On) の時は
どういう表示をさせたいん?あと、ABCに不定が入った時の扱いは?
>>734 最初から Unicode には対応している見たいです。
EUC や SJIS は普通に化けちゃってイヤンな感じ。
今度出る ISE 10.1i ではどうなんだろう・・・。
すみません、酔った勢いで質問。 FPGAキット等で、FPGA周辺にリセット回路が無い(リセット入力が無い)場合 記述する回路のリセットはどう行うのでしょうか?(どう記述するのか?) 仕事で起こす基板は、外部回路に PowerOnResetとConfig後のResetを置いてしまうのだけど。 昔、やっぱりリセット入力の無い基板をもらったことがあって、そのときは、 FPGA内のPLL_lockedをリセットに割り当てて誤魔化したんだけど(既に時効)、 普通はどうするのかな、って。
737 :
731 :2008/02/06(水) 22:39:27 ID:ux2pID25
>>735 レス有り難うございます。
元ソースには (A,B,C) = (On,On,Off),(Off,On,On),(On,Off,On),(On,On,On) の際の処理が
書かれており、それに見合った(LED点灯用の)ピン配置も書かれています。
しかし今回は動作実験ということで、731以外の(735さんのABCの組以外の)ピン配置を
ISE上で行わず処理も書かなかったことが原因のようです。
実際、(A,B,C) = (On,On,Off),(Off,On,On),(On,Off,On),(On,On,On) の処理を書き、相応の
ピン配置を行うと今回の警告は無くなりました。
なお、ABCに不定が入った時の扱いは default:Y=8'bxxxxxxxx; で処理しています。
>>734 vファイル表示のタブでのことでしょうか? この場合なら、Web-ISE 9.2iは漢字OKです。
>>736 DDRがあったらddr_init_doneを使う。
なければ外部入力信号でリセット条件を作る。
1本でなくて数本の条件にすれば何とかなる。
CPUとつながっていればソフトウェアリセット条件でリセットする。
FPGA単体の時はカウンターでカウント値を数えて設定値になったら内部リセットを発行する。
これは最後の手段なのでお勧めはしないけどFPGA単体でテストパターンを出力するような場合はこれしかないと思う。
ほかになにか良い方法があれば俺も聞きたい。
739 :
736 :2008/02/06(水) 23:56:02 ID:mC9g4VCt
>>738 ありがとうございます。
やはり何かしらのResetを自分で作るんですね。init_doneはなるほどです。
今度キットでも買って遊ぼう〜と思ってスペックを見ていたのですが
普通にリセット入力が無くて、「これが普通なのか???リセットどうするの???」と悩んでました。
>カウンターでカウント値を数えて
これ、カウンタの初期値は保証されないわけですよね(だから最後の手段)
設定値に悩むところです
今回はキットなので(好き勝手できる)、doneにCRで遅延させようと思います。
ありがとうございました
740 :
774ワット発電中さん :2008/02/07(木) 00:04:38 ID:UTpM1aZV
ModelSim Xilinx Edition III を使い始めるところですが、ここで使用する テストベンチファイル(xxx.v)には、Verilogと同じようにコメントを //〜〜 と書いてももいいのでしょうか?
>>740 いんじゃないでしょうか。
書いたらエラーでもでたの?
>>741 ModelSim Xilinx Edition III 6.2g で試したところ、コメント開始は //
で認識してくれています。
但し、日本語は不可で、文字化けします。
743 :
774ワット発電中さん :2008/02/08(金) 15:30:58 ID:7ziFxdnd
inout のバスに直接値を代入しようとして、ModelSimでなにをしてもUになってしまうので困っています。
この手のトラブルはコードの記述がいくない。 in側のセットしただけではダメ。出力される側の信号をちゃんとセットする。 当然I/O制御信号もやる。 おっと忘れていた、出力信号を見る時にはin側の指定をzにしないと出力信号とぶつかったときUになるけど此れかな?
あー。いま、簡単なコード書いてて、自己解決してた。
>>744 どもです
entity a1 is
Port (
B : inout std_logic;
C : out std_logic
);
end a1;
architecture RTL of a1 is
begin
C <= B;
B <= 'Z'; -- ←この記述が無かった
end RTL;
勉強になった。
747 :
774ワット発電中さん :2008/02/09(土) 03:16:38 ID:10DLWwBM
使用OS:WinXP-Pro,ソフト:Web-ISE 9.2i,FPGA:Spartan2 XC2S15-5VQ100C ボタンを押すことにより点灯している2つのLED両方を消すVerilogを書いていますが、 片方のLED1しか消えません。 ※すみません。ソース全体を下に貼ります。 module led_onoff_2(Btn1, LED0, LED1); // input Btn1; // スイッチ入力 output LED0; // LED出力 output LED1; // assign {LED0, LED1} = !Btn1 ; //2つを反転で消灯する // endmodule LEDとボタンが1対1のソースでは問題なく消えます。 どうしたら良いでしょうか?
>>747 {LED0, LED1}
これ2ビット
>>748-749 さんきゅうです。
ポート宣言と動作記述を下のように改変したところ、1つのスイッチで2つのLEDを
同時に消すことが出来ました。
input [1:0] Btn1; // スイッチ入力
output LED0; // LED出力
output LED1;
//
assign LED0 = !Btn1[0];
assign LED1 = !Btn1[0];
しかし今度は、論理合成で WARNING:Xst:647 - Input <Btn1<1>> is never used.
という警告が出ます(配置配線とFPGAデータの生成は成功しています)。
今回はBtn1<1>を担当するピンを未定義にましたが、こような警告が出ないスマートな
記述にはどのようなものがあるのでしょうか?
>>750 なんでスイッチ入力ポートを2bit幅にしたん?
Btn1<1>を担当するピンを定義してみれば。
753 :
749 :2008/02/09(土) 19:43:15 ID:A1pj6zAv
>>750 何と言うか、発想が固定化しちゃってるんだな。
assign {LED0, LED1} = {!Btn1, !Btn1};
>>731 =
>>747 Warning くらい気にしないで先に進めよ。
まずは、自分でやってみろ。
どれだけスレ消費するつもりなんだ?
回路設計を意識しないで“コード書き”に陥ってる予感。 宣言や書式が何を意味してるかイメージできるようになると良い気がする。
>>751-755 レス有り難うございます。色々試した結果、1つのスイッチで同時に4つの
LEDを消灯できるようになりました。 以下がそのソースです
module led_onoff_05(Btn1, LED);
//
input Btn1; // スイッチ入力
output [3:0] LED; // LED出力
//
assign LED[0] = !Btn1;
assign LED[1] = !Btn1;
assign LED[2] = !Btn1;
assign LED[3] = !Btn1;
//
endmodule
まぁなんだ・・・とにかくオメ
>回路設計を意識しないで“コード書き”に陥ってる予感。 それ以前の問題と思う
今、VHDLで簡単なCPUを作っているんだが、 どうすればPCから16進数ファイルをROMに書き込むことができるか教えて!! VHDLにfile構文があるから、使えると考えているのだが・・
760 :
759 :2008/02/10(日) 14:55:28 ID:FGf872Ju
補足:OSはWindowsで、FPGAにファイルをRomに書き込んで実行したい ちなみに、16進数ファイルはテキストファイルに書いています。
hex2vhdl でググってみればええんでなかろうか?
>>759 ROMってのがFPGA内部につくるのならsignalの初期化で
type rom_type is array (0 to ROMSIZE-1 of std_logic_vector (DATASIZE-1 downto 0);
signal ROM : rom_type :=
(X"なんたら", X"かんたら",・・・); -- 16進ファイルを整形してコピペでどうぞ
ってかんじでいくんでね。
外部にあるROMならシラネ。
file構文はシミュの時しか使ったことないな(俺が知らんだけかも)。
>>761 hex2vhdlでググってみたけど僕にはよくわかりませんでした orz
>>762 やっぱりそれしかないですね。外部Romに書き込むのも考えていたんですが、難しそうなので、
FPGA内部のRomに直接書き込むことにします。
二人ともありがとう!!
>>759 XILINX の場合
ROM を CORE Generator で作っているのならば、メモリ初期値を定義する
COE ファイルを用意しとけば OK です。COE の構文は簡単なので、
HEXファイルから COE に変換するスクリプトを作っておくと便利です。
SIM 中のROM初期値設定を汎用的に file 構文で記述したいということならば、
RESETアサート中に readline/read でHEXファイルから1行づつEOFまで読み出し
ROM(実際はRAMだけど)に書き込むのが良いと思います。
起動後にPCからダウンロードを始めるっていうのはどう?
766 :
759 :2008/02/10(日) 16:37:22 ID:FGf872Ju
<<764 とりあえずそれで、できそうなのですが、16進数テキストファイルをどのようにして、HEXファイルに変換すればいいのかがわかりません。 HEXファイルを調べたんですが、よくわからなかったんで・・・ <<765 当初は、その方法でやろうと思っていて、16進数のテキストファイルをハイパーターミナルでシリアル通信をして送ろうとしてたんですが、 ハイパーターミナルは16進数のAをASCIIコードのAで送信してしまい、16進数のまま送ることができなかったので、ファイルをRomに書き込もうと考えたのです。
HEXフォーマット とか Sフォーマット とかでぐぐれ >ハイパーターミナルは16進数のAをASCIIコードのAで送信してしまい、16進数のまま送ることができなかったので そりゃそうだろう
>>764 , 767
ググったらある程度わかったので、もう少し自分で調べて、Rom初期値設定の方法でやってみようと思います。
細かく説明してくれてありがとうございます。
>そりゃそうだろう
さっき知ってかなりショックでした orz
769 :
774ワット発電中さん :2008/02/10(日) 23:41:23 ID:YvLVP2Oi
使用OS:WinXP-Pro,ソフト:Web-ISE 9.2i,FPGA:Spartan2 XC2S15-5VQ100C デザインウエーブの本を見て、LEDがスイッチにより 点灯⇔消灯 になるようなVerilogの FFコードを書きました(ポート:SW0, LED0)。Web-ISEで作業したところ、Impement Designで 以下のエラーが出ました。 ERROR:MapLib:93 - Illegal LOC on IPAD symbol "SW0" or BUFGP symbol "SW0_BUFGP" このサポートページを見たところ ソリューション この問題は、GCLKIOB がないサイトを使用する場合、パッドが IBUFG ではなく、IBUF を駆動 するように指定することで回避できます。 このように指定するには、次の制約を含む合成制約 ファイル (.xcf) を作成します。 と書いてありますが、意味が分かりません。 どなかたか解説願います。 なお、always部分の記述は always @(posedge SW0) begin LED0 <= !LED0 ; // レジスタ出力の反転値を代入する end で、LED0はreg宣言しています。
770 :
769 :2008/02/11(月) 01:48:23 ID:TsRElycA
回避方法については、検索したアンサーデータベースの XCF 記述例がそのものズバリなんだが、 どの部分が分からないのかな。 合成ツールは、回路記述から類推したクロックネット(この場合 SW0)に対して、自動的に IBUFG を 使って駆動しようとするんだけど、SW0 を割り当てた PAD はクロック入力専用 PAD じゃないので IBUFG を利用できない・・・コレMAPデキネーヨ!! というのがエラーの概略。 それならばということで、「SW0 の buffer_type に汎用入力バッファの "IBUF" を使うよう明示しろ」 というのがアンサーの内容。 FPGA の UserGuide とツールのドキュメントぐらいは軽く目を通しておいた方がイイと思うな。 HDL記述の文法がOKなら万事OKというワケにはいかないので。
772 :
769 :2008/02/11(月) 22:26:09 ID:ZjTnPkFd
>>771 有り難うございます。単語でいうとグローバルバッファやパッドの意味が分からな
かったのですが、レスと併せて「開発システム リファレンス ガイド 9.1i」
http://toolbox.xilinx.com/docsan/xilinx9j/books/docs/dev/dev.pdf を読んでエラーメッセージの意味が分かってきました。
ここで、XCFファイルを作成したいのですが、この例文は以下のようになっています。
BEGIN MODEL "entity_name"
PIN "signal_name" loc=string;
NET "signal_name" buffer_type=ibuf;
END;
今回の "signal_name" は SW0 だと思うのですが、"entity_name" は何になるの
でしょうか?
引き続きよろしくお願いします。
すいません。 直リンのURLを書いてしまいました。
>>772 Verilog: module
VHDL: entity
いちいちこのスレで質問しないで少しは自分でヤレよ。 その記述が合成できたにしろ、swのチャタリングできちんと点滅しないから。
どうも。
デザインウエーブマガジンの
ttp://www.cqpub.co.jp/DWM/contents/0095/dwm009501300.pdf のvファイルと同じプロジェクトフォルダにXCFファイルをLED_DISP.xcf
という(module名と同じ)名前で置きましたが、やはりImpement Design
で同じエラーコードでエラーになります。中身は以下の通りです。
BEGIN MODEL "LED_DISP"
PIN "SW_in" loc=string;
NET "SW_in" buffer_type=ibuf;
END;
念のため、vファイルと同じ名前、WebLED0.xcfで試しましたが駄目でした。
今までにコードを微妙に変えて20回近く試した上に、このXCFファイルでも
駄目だったので、今回はここで止めることにします。
お手数をお掛けしました。
スイッチ入力を別のピンにすれば,解決しそうな気もするナ。
>>776 XCF ファイルは XST 用の制約ファイルであり、XST Synthesise Options にて
使用するかどうかを指定します。デフォは「使用する」だけどファイルは未指定状態。
Check: [Use Synthesis Constraints File] / [Synthesis Constraints File]
あと、制約ガイド(cgd.pdf)の「LOC制約」についても、ちゃんと目を通した方が良いとオモウ。
SpartanIIって"string"って名前のPADがあるん?string=文字・・・UCFにも同じような行(ry
どうしてもわからないので質問します。 process(RomData, endALU, CLK) begin if (endALU'event and endALU = '1') then BIT_CNT <= (others => '0'); end if; if(CLK'event and CLK = '1') then 処理 end if; end process; このようなプログラムを書くと Signal BIT_CNT cannot be synthesized, bad synchronous description.や、unsupported Clock statement. と出ます。一つのプロセス内に、複数のevent文を入れることはできないのでしょうか? 知っているから教えてください。
>>779 実際の回路を紙に書いてみるんだ
クロック2つあるDFFなんて普通使わないだろう?
プログラムって誰が言ってるんだ
<<780 やはり書けないようですね。確かにVHDLはプログラムじゃなく回路を記述しているのを忘れてました。 他の方法で試してみることにします。 レスありがとう
782 :
774ワット発電中さん :2008/02/14(木) 01:25:10 ID:NptAAtS+
ほほう、そうすると どのようになるべきだと思うの? +1していって、最大値を超えたらさらに上に増殖していけばいいの? だとしたら「reg [10:0] divide」で11bit確保している意味がなくなっちゃうよね。 ソース上でreg [10:0] divideと書くと、11個のD-FFを内部の回路に 用意してくれるわけだ。その後さらにdivide<=divide+1と書くと、 今度はその11個のD-FFをカウンタ用に配線してくれるわけだな。 D-FFって、0か1しかセットできないのよ。だからもし今1つのD-FFが0だったとき、 次のclockで+1されて、そのD-FFは1になる。そしてさらに次のclockで+1されて、 2になりたいけど、それは無理でしょ。0になってしまう。それが11個のD-FFでも 起こっているわけね。
>>783 ソフト的に考えたら、桁あふれしたところでランタイムエラー吐き出して止まったりするじゃん?
ハードウェアは桁あふれても一周して0になることを勝手に期待しちゃうって記述に明示性を欠くんじゃね?
という問いかけではないかと好意的に解釈してみる(w
reg 宣言をしたからと言って、D-FF を用意してくれる訳じゃないだろ。ラッチかもしれないし、ただのノードかもしれない。verilog の気持ち悪いところでもあるが。 最大値って言っても、その値をどう解釈するかにもよるしな。このソースは違うけど、signed の時とか。
今更ですがMIGについてアドバイスくださった方ありがとうございます。 もうちょっと試してみます。
逆に考えるんだ! Verilogさんはのregは、一生懸命桁上がりの処理をしてくれてるんだ! だから1111の次の桁上がりは放置(−o−b
>>788 レジスタ+内蔵加算器でカウンタが実装されて、
フィットさせるデバイスよって微妙に挙動が
変わったりしてな。
ビット数がある幅を超えると突然桁上がり処理が
遅延しはじめるとか。(しかも0に帰る時だけトラブル)
ソースは同じなのに(w
Verilog の場合、ビット長は左辺に合わせて演算が行われたはず。 あと、桁あふれは見事に無視されるから、+1に限らず、加算でも 乗算でも上位のビットはなくなってしまう。 オーバーフローしたときに、0xFFFF に張り付いていて欲しかったり しても自動では出来ないから、その分の回路は書かなきゃなんない。 プログラマーでも、アセンブラーをやっている人だと馴染みやすいんだ ろうけどね。
HDL使ってる人は増えてるけどアセンブラ使ったことある人は 減ってるのかな、C++からじゃレジスタとか見えないだろうし
仕事でアセンブラ使う人はどんどん減ってるだろうね。 ホビー用途へのマイコン普及のおかげで、アマチュアレベルでは逆に増えてるだろうけど。
>>791 HDLならましなほうで
SystemCとかで澄ましてるのも多い
NormalのCならunsignedでOverFlow起こしたら0に戻るがな、singnedでOverFlowしたら負になるし・・・ 普通に考えたらこうなると思うのだが、今時の普通は違うのか?
とりあえずSystemCの合成ツールが使い物になってきた?段階で 試してみようともしない所は今後もHDLでヒィヒィ言ってそうだな HowToとかたまってなくて SystemCみたいに気を使う言語は気持ち悪くて使いたくないけど
>>794 なんでソフトウェアでの普通の話をしてるんだ?
HDLでunsignedもsignedも無いだろうに
あるのはビット幅と1と0とツールの解釈の違いだけだ
ふつーにあるだろ > HDLでunsignedもsigned つーかなんで無いと思えるのか?!
>>797 Verilogはよう知らんのだが、
素のVHDLにはsignedもunsignedもない。
定義しているのはieeeなどのライブラリ。
ライブラリのソースは公開されてるから、
ソース読めば振る舞いはわかる。
俺様ライブラリを作って
独自の振る舞いをさせることも可能。
つか、『宣言されたビット幅で表せる最大値を法として(ry』というのをシステムが 保証してくれてないのは論理屋さんから見ると気持ち悪いんじゃないか? 結果的に同等の動作をしていても。
ソフトの論理屋はそうかもしれないが ハードの論理屋さんはそんなこと気にしない
ああ、誤解されそうだな 「気にしない」っていうのは「気持ち悪い」とは思わないってだけで 考慮はしてるよ
>>976 >あるのはビット幅と1と0とツールの解釈の違いだけだ
オレは、Verilog しか使わないが、VHDL にも X や Z は
あるだろ。それに、ツールの解釈の違いをなくすために
標準化をしてるんじゃないのか?
「実装依存」と定義するのも標準化のうちだけどな。
よし、今こそLispベースのハードウェア記述言語を(ry
>>803 ソフトなら高速化のためとかでそれが許されるけど、
HDL でやられたら困るよなあ。
>>804 個人的には FORTH がいいかな。
>>802 メジャーなHDLにはXもZもあるけどレスの流れ的にそれは関係ない
あと完全な標準化は無理、bit幅が違うときの実装なんてそれぞれ
言語もツールも決まったものしか使わないのなら問題ないんだろうけど
>>798 素のVHDLってなんなんだ?
IEEE定義の標準ライブラリも含めてVHDL規格だろ?
特定の処理系の実装ローカルの話と規格の話をごっちゃにしないでくれ
趣味でFPGAを使ってみたいと思っているのだが SystemVerilogとかSystemCの開発環境は有償なのか? 複雑な物理シミュレーションを行なうプログラムをFPGAを使って 高速化しようと思っているので、なるべくなら抽象度の高い言語で 書きたいのだが。 FPGAをやるに当たって開発環境、言語についてお勧めがあれば教えて。
ハードに突っ込めば速くなるなんてのは幻想です ソフト屋にはそれが分らんのです 簡単な計算をいくつも同時に大量にこなすならともかくね 複雑な〇○なんて個人がチョチョっと書いてどうにかなるもんじゃないんで諦めた方が… それでもやるって言うならまずは適当なスターターキット買えばいいかと VerilogとVHDLとなんか図で書く奴はザイリンクスもアルテラもメーカ純正ツールは無償である(無償のは使えるデバイスに制限あるんだっけ? でもSystemCとかは有償で、それもその言語で書いたのをVHDLにコンバートしてそれをメーカ純正ツールでコンパイルだったはず 非常に複雑なもの書くためのものだから直接Verilogとかで書いたほうが速くなるかと スターターキットで言語覚えたりハードウェアについて覚えて、PCI-Eキットで通信覚えてそのままPCI-Eデバイス開発の流れかな?
MMXだけで早くなるかもね
>>809 回路の論理記述そのものを抽象度が高い言語でやる必要はない
抽象度が高いI/Fを用意すればいいだけの話
デバイスドライバ本体を抽象度の高い言語で記述してもロクなものはできないだろ?
I/F設計さえ妥当ならば実装はアセンブリ言語やC言語で書きゃいいってのと同じ話だ
>>809 >複雑な物理シミュレーションを行なうプログラムをFPGAを使って
>高速化しようと思っているので
それが目的なら、FPGAを使うという選択が誤ってるだろ。
DSPかCellに行けって。
>>810 > 簡単な計算をいくつも同時に大量にこなすならともかくね
複雑な計算だけど並列化は見込める演算なので、ハード化、特にFPGAで実装する価値のある
処理だと考えてます。
SystemVerilogのほうは開発ツール/環境は有償ですか?
>>811 同じ処理を複数やるわけではないのでMMX/SSEでは速くなる見込みはないです。
>>812 > 回路の論理記述そのものを抽象度が高い言語でやる必要はない
非常に複雑な(難しいという意味ではなく、コードのステップ数が多いという意味で)計算なので
なるべく抽象度の高い(記述力のある)言語で書きたいのです。
>>813 > DSPかCellに行けって。
物理計算と書いたのが誤解を招いたようですみません。 > all
やろうとしているのはあいにくDSP向きの処理ではないのです。
また、途中計算自体は1000個ぐらいに分割し(その1000個はそれぞれ異なる計算)、
並列化できるのですが、その途中計算自体が次の段の計算に必要なため、
CellのSPEが全く生かせないのです。
FPGAなら1サイクルでこの1000個の計算を一気に求めることが出来ると考えてます。
演算部分だけ、Cっぽいので書いて、HDL に変換出来るツールがあれば 便利だと思う。モジュールコンパイラーを使えばいいのかもしれないけど。 結局、SystemC って、Cだけど構文がすごく限定されるから書きにくい。
>>810 > 簡単な計算をいくつも同時に大量にこなすならともかくね
物理屋の計算っていったら普通は簡単な計算をいくつも同時に大量にこなすなんじゃねえの?
天体の重力の計算とかだろ?
まずはMATLAB/simulinkで演算処理のフローを書いてみたら? 自動的にHDLに変換できるよ。 でもMATLABは高価だから個人的趣味では無理かも… 「抽象度の高い」ってのがイマイチどっち方向に高いのかよくわからんのだが ソフトウェア的な複雑な条件判断を含む繰り返し手続きコードを書いておけば そのまま回路に落ちるって意味なら、そんな銀の弾丸は存在しない。 泥臭いけど地道に計算フローのデータパス設計するしかないと思うよ DSPやCELL以外にもIPFlexのDAP/DNAなんつーデバイスもあるぜ
>>818 DAPDNA2は以前購入を検討しましたがPEが少なすぎて
FPGAで実現するほうが高速だと考えています。
>>819 TILE64はチップ間のデータ通信にかかるコストが許容できないのです。
(前段での計算結果を次段で参照するため)
やりたいことは、簡単にモデル化すれば、
In[N+1 , i ] = Out[N , j ] ・ K[i,j]
このような計算で、前段のすべての計算結果にそれぞれ一定の係数を掛け、
それらをすべて足し合わせたものを次の段の入力に使うのです。
(実際は掛け算ではなくひとつひとつが異なる数式の、もう少し複雑な処理です)
一定の係数を掛けて足し合わせる部分は並列化できるのですが、
並列化をプロセッサの分割によって実現すると通信オーバーヘッドが膨大になります。
条件判断はほとんど必要ではありません。
しかし数式自体は別のシミュレーションの結果から持ってくるので頻繁に
変わります。そのたびに再コーディングはやってられないので、その部分を
自動化する必要があって、なるべくなら記述力のある記法で書きたいと思っています。
スレ違いなツッコミだけど > 並列化をプロセッサの分割によって実現すると通信オーバーヘッドが膨大になります そんなことないだろ? 全ノードを共有バス型ネットワークに接続してやって 各ノードについて自分が計算した結果を自分以外の他ノードに ブロードキャストで通知してやりゃあいいだけの話 計算結果をブロードキャストするだけなら 通信オーバーヘッドなんて高が知れてると思うがいかが?
数式自体が頻繁に変わるとすると、全ての場合に対応するように回路を組むか、再合成が必要になるんでねの?
再合成しなきゃいかんのは大前提で、その元になる記述のレベルをなるべく数式に 近いものにしたいってことなんでしょう。 しかし、その(簡易)モデルだと、演算はブロック化できるんでは。 そしたら通信オーバヘッドはある程度隠蔽できそうな気がするんだけど。 FPGA使うにしても元値の入力と演算結果の出力では結局通信オーバヘッドが生じるし、 オーバヘッドの少ないチップ内通信(ステージ間のデータ転送とか)ですべてまかなえるほど データ量が小さいわけでもないだろうから。
>>821 > 計算結果をブロードキャストするだけなら
各段の計算結果は10KB程度あります。1段終了ごとにその10KBをbroadcastすると
100Gbpsのバスでつないだとしても 100Gbps / 10KB = 1.342MHzしか出ないのです。
ハードには詳しくないので、もっと速度が出るということでしたらすみません。
>>822 確かに、数式自体は頻繁に(1日に一回ぐらいのペースで)変更になるので、
FPGAでやろうとした場合、数式の変更ごとに再合成は必要になります。
再合成自体にかかる時間はなるべく少ないほうが良いですが、1日に一回なら
寝る前に開始しておけばいいのではないかと思っています。
>>823 > オーバヘッドの少ないチップ内通信(ステージ間のデータ転送とか)ですべてまかなえるほど
> データ量が小さいわけでもないだろうから。
最終的な演算結果(10KB程度)を次段(次のクロックで行なわれる計算)の入力に回したいだけなのですが
こういう処理はFPGA向きではないですか?
1ステップの計算所要時間が1μ秒以下の状況を想定している?? O(n^2)の演算を高速化したいっていうから少なくとも1分よりは長いと思ってた そんなに1ステップあたりの演算量が少ないなら並列化しても効果薄いんじゃないか? 最新のインテルアーキテクチャのCPUでぶん回すのが一番速そう
>>826 演算は O(n^2) ですが、nはそれほど大きくありません。(nは1万ぐらいで、ほぼ固定)
現在、Xeon X5355の8コアでx64環境で計算させてますが、
コアの分割による並列化がほとんど生きないのでそれほど速くないのです。
せめてあと10倍速くなれば..と思うのですが。
現在、1段のパイプラインの実行に要する時間が 1μsec程度。
私の試算によると、この計算の1段のパイプラインは50万LE程度のFPGAであれば1クロックで
実行できるので10MHzぐらいで動作してくれれば10倍ぐらい速いことになるのですが。
828 :
774ワット発電中さん :2008/02/18(月) 12:43:43 ID:B2V67uem
マンション分譲 株式会社アジャクスなど2社 事業停止、自己破産申請へ 負債122億8000万円 神奈川県横浜
>>827 「パイプライン」が何を指しているのかいまひとつわからないなぁ
1クロックで実行とはどういう意味なのか?
演算パイプラインのスループットが1出力/1クロックっことなのかな?
パイプラインの深さ(段数)はいくつくらいの見積?
いったい何本のパイプラインを用意するの?
係数データ k(n,n)はどう配置するつもり??
演算は固定小数点 浮動小数点?
浮動小数点なら1クロックで動く加算器を作るの大変そうですね
演算パイプライン1本について、乗算器と加算器を並べた図を描いてみた?
→それを自動化したいというならそんな魔法の弾丸はないと(以下略
なんか昨日書こうと思ってたことが書いてあってワロタwww
結局は
>>829 ですよね精度とか必要だろうに
話の流れをブッタギル様でスマンが。
>>790 VHDLはしらんがVerilogでは加算のオーバーフローは
暗黙に1ビット確保される。
assign [n+1:0] = [n:0] + [n:0] な感じ。
合成ツールによっては、オーバーフロー考慮しない
加算回路は"ビット幅が違う"警告をくれるぞ。
832 :
774ワット発電中さん :2008/02/19(火) 19:34:25 ID:apW/Gxdd
OS:WinXP-Pro,Mem:1GB,ソフト:Web-ISE 9.2i 使用 4個の7セグメントLEDで右から順にゼロを移動させながら表示したく思っています。 一応、リセットのボタンを押すと目的の動作はするのですが、初期状態から移動点灯 の動作をさせてたく思っています。 つまり、無点灯の7セグメントLEDを [ ] で表現すると、 [ ] [ ] [ ] 0 → [ ] [ ] 0 [ ] → [ ] 0 [ ] [ ] の感じです。現在は、0 0 0 0 から 開始してしまいます(左端に行くと、右端に戻る)。 ボードのマニュアルでは、無点灯LEDにするにはハイ・インピーダンスを与える必要が あるので assign SA = 4'bzzz0; //初期条件 を信号定義とalways文の間に書いたところ エラーになりました。これを削除すると、0 0 0 0 からリセットで移動点灯します。 どうすればよいでしょうか? ソースは、クロックをCLK,リセットをRST,セグメント選択信号をSA,セグメント内LED 信号をSegとしたとき、以下の通りです(抜粋)。 assign Seg = 8'b0000001_1; // 初期条件。0を表示 always @(posedge CLK or negedge RST) begin if(!RST) //RSTが0のときリセット begin divide<=0; SA_tmp<=4'bzzz0; end else begin //SAでセグメントLEDの遷移状態を記述 end アドバイスを願います。
省略はいかん
出力信号にzを代入するんじゃなくて、 出力をtristate bufferにして、 enableをnegateするんじゃないの。 よくわかってないので間抜けなこと言ってたらスマン。
大抵こういうのは 自分で関係ないと思って省略している部分に問題がある
837 :
832 :2008/02/19(火) 21:23:48 ID:apW/Gxdd
>>833-835 レスありがとうございます。
VerilogのRTL記述全体をUpしました。
http://1rg.org/up/7034.txt この中で //assign SA = 4'bzzz0; のコメント記号//を外すと、
ERROR:Xst:528 - Multi-source in Unit <SevenSegs2b> on signal <SA<0>>
というエラー表示が出ます。これをコメント化すると 0 0 0 0 から始まります。
どうやら、SA<0>に問題があるようなのですので、このエラーコードをザイリンクス
のHPで調べると
http://japan.xilinx.com/support/answers/14264.htm のように
なっていますが、内容がよく分かりません。
※ソリューション1で「競合が回避されるようにコードを修正してください」とのこと
ですが、どうすれば良いのでしょうか?
出来ましたら、解説願います。
上から順位実行されると思ってるな 文字通り「初期条件」のつもりで書いたんだろうけど ソフトウェアじゃないから assign SA = 4'bzzz0; assign Seg = 8'b0000001_1; assign SA=SA_tmp; これじゃぶつかる
839 :
774ワット発電中さん :2008/02/19(火) 22:30:03 ID:1F14oDK0
if(!RST) //RSTが0のとき の上に if (SA_tmp==4'b0000) SA_tmp <= 4'bzzz0; をいれたらどう?インチキだけど。
インチキだけど begin if (SA_tmp[3] == 0) SA_tmp<=4'bzzz0; else if (SA_tmp[0] == 0) SA_tmp<=4'bzz0z; else if (SA_tmp[1] == 0) SA_tmp<=4'bz0zz; else if (SA_tmp[2] == 0) SA_tmp<=4'b0zzz; else SA_tmp<=4'bzzz0; end
レジスターにZを入れるという感覚が理解できない
まもなくリセット論議が開始されます
お題 リセットはフツー非同期だろ? いやいやプロなら同期だろ?
いや、最近の流行は調歩同期だろ。
んにゃ これからは無手順たれ流しじゃよ
お題 イマドキ正論理だよな?いやいや、TTL時代からリセットは負論理だよ。
最近Verilog-HDLのRTL設計見習いになったのですが、疑問が。 今課題出されてるのですが、今日RTL書いてる際に上司から 「1bitはバイナリで書くこともあるが、それ以外はヘキサで書く」と言われたんですが。 ヘキサって0-Fまでのヤツですよね。ヘキサで書くのって4bit以上の信号だと思ってたんですが、 2bitとか3bitの信号も、3'h4みたいに記述するんですか?
べつに、バイナリで書こうが、16進で書こうが、10進で書こうが、いいんでねの? 無理にヘキサで書く必要は感じない。っていうか、分かりやすく書くことが大切。 ビット2を立てたいなら、3'b100 でいいし、レジスタに4を入れたいなら、4'h4 でも 4'd4 でもお好きに。 まあ、社内ルール(ってか、上司の脳内ルールw)があるなら、したがったら?
あ、あと、casex 文では、バイナリーで書く必要があるじゃなぁい?(ギター侍風に)
>>838-841 ありがとうございます。
838さんの指摘の「ぶつかる」というは、具体的に
どういう状態になるのでしょうか?
なお、目的の動作自体は、839さんの記述でOKでした。
>>850 別解として
信号定義の部分で
reg [3:0] SA_tmp = 4'bzzz0; //セグメントLED用Reg
としてうまくいかないかな。
ASICだとだめだと思うけど、FPGAなら
デバイスのコンフィグ時に面倒見てくれそうな希ガス。
>>850 always文と10行目の代入文は同時に実行される。
multiplexerを介さずに複数の信号を入力することは無理。
一般のCPUによる逐次処理とは違う。
>>850 話がそれるけど、
このボードってHi-ZだとLEDが無点灯になって、'0'を与えると点灯するの?
じゃあ、'1'だとどうなる??
'0'で無点灯、'1'で点灯で良いように思うのだが。
MOSはチャンネル長が同じならNチャン(CMOSでのL出力)の方がドライブ能力が高いので、CMOSでLEDを 直接ドライブして点灯するときは、L出力で点灯という回路設計をすることが多い。
単に TTL時代の電流吐出し能力は低いが吸込み能力は大きい頃の名残じゃないか? CMOSはドライブ能力を対等に作るものだから(だからこそ complementary-MOS) 吐出しも吸込みも同じに設定してあることが多い。 つーか同じになるようにnMOSとpMOSのチャンネル幅/長を変える。 そうじゃないと H→LとL→Hの遷移時間が同じじゃなくなってイヤな感じ。
多い少ないは分からんが、データシート上でCMOSデバイスで吸い込みのほうが 多いやつも、両方同じやつも、どっちも普通にあるな。 しかし吐き出しのほうが多いやつは見たことがない。であれば、吸い込みのほうが 「少ないことはない」と考えるのは妥当だろうね。
>>856 いまさら「1+1は2である」とか自慢げに書かれても困ってしまいます。
だれも「違う」なんて言ってないんだから。
858 :
774ワット発電中さん :2008/02/21(木) 20:11:55 ID:8jbd1S6T
「carry chain」について調べている途中で、イネーブル(enable)信号と キャリー信号の違いが分からなくなりました。 どなたか、解説願います。
>>855 つか、オープンコレクタドライバの名残なんじゃね?>>L点灯
負論理だし(w
電子とホールの移動度の違い
861 :
774ワット発電中さん :2008/02/22(金) 01:00:26 ID:OKQ04IKo
言語:Verilog ソフト:Web-ISE 大きな数値の表現で質問です。 例えば6GHzの60億をパラメーター FRQ に定義するとき、 parameter FRQ = 6000000000; などと書くことができますが、 もっとスマートな表記法はないでしょうか? 例えば、 FRQ = 6*10^9; ( ^ はVerilogではEx-ORですが) な感じで。
6.0E+9
864 :
861 :2008/02/22(金) 04:07:23 ID:OauL8eg7
すいません。エラーになりましたので再質問です。 クロックが6MHzなので parameter OneSec = 6.0E+6; // 6MHz と書いたところ、論理合成で下記のエラーが出ました。 FATAL_ERROR:Xst:Portability/export/Port_Main.h:127:1.17 - This application has discovered an exceptional condition from・・・ Process "Synthesize" failed OneSec = 6000000; とすると問題無いです。 もしかして、Web-ISEはこの 6.0E+6; の表記をサポートしていない、という ことはないのでしょうか?
わろす
6 * 1000 * 1000 * 1000 でいいじゃんか
そんなことにこだわるよりも、ほかに勉強すべきことがたくさんあろうに。
6_000_000_000
w = Ci ・ Xi (Ciは定数 , XiはBIT , i=0..N-1 , N=1000ぐらい) というような足し算を高速化したいのだが w0 = C0・X0 + C1・X1 w1 = C2・X2 + C3・X3 w01 = w0 + w1 のように2個ずつ足し合わせようと思っている。 この場合、加算ブロックが、log2 N 段必要になる。 2個ずつではなく M個ずつ足し合わせたら(log2 N)/(log2 M) 段で済むので、 そこでM個ずつ足し合わせるようにしたいのだが、APNAか何かで高速に M個まとめて足してくれるライブラリはないものか?
869=827かい? 2入力加算器 と M入力加算器(M>2) では速度も面積もぜんぜん違うよ ブロック図での見た目の段数で論じても無意味だと思う つーか、演算したいデータが固定小数点なのか浮動小数点なのか ビット幅はどのくらいなのか まだ回答されてないけど そういうところ無視して検討されても机上の空論以前で答えようもない 1クロックで演算がすべて終わる幻想 まだ捨ててなかったのかと…
加算器程度だったら遅延覚悟で組み合わせ回路にしてしまえる。 fmaxを向上させるのかトータルのレイテンシを重視するのか 自身のアプリと相談だ。
>>871 固定小数点ならそうかもしれないが、浮動小数点の場合
加算器は乗算器よりも複雑かつ遅い回路となるのだよ
873 :
869 :2008/02/25(月) 11:47:18 ID:lpPGZXEk
>>870 俺は827とは違う。
俺は8bit程度の正の整数の足し算をしたいだけ。(合計は最大で16bit程度)
演算回路と聞くとすぐに浮動小数点とか言い出す香具師は何なの?おまいはコプロでも作ってろよw
FPGA設計者ってIT系のソフト開発よりも給料が高いのでしょうか? 自給7千円もらえるって聞いたんですけど(??)
固定小数点(=正の整数演算)で Ci * Xiが8bitに納まり 1000個累算したwが16bitに納まるってことでOK? Ci と Xi はそれぞれ何bit幅?
FPGA の設計をしたいなら、Altera か Xilinx に就職したほうがいいよ。日本法人じゃダメだけど。
Xiは1bitかよ! それだったらテーブル作ればいいんじゃないの? Xi〜i+11 までの12bit入力 10bit出力くらいのテーブル用意すれば たかだか40kbitのブロックRAMから参照するだけで12入力の乗算/累算が完了するぞ
>>880 1) テーブルを参照するコストはARITHでコード生成したものより小さい?
2) 12入力の乗算/累算をしたあとは結局どうすればいい?
>>882 1)いわゆるブロックRAMを使うならテーブル参照の方が全然小さい
しこしこ計算するにしたってCiを格納するレジスタファイルが要るわけだしな
2)1000/12=83.3だから 84種の12入力のテーブル参照回路を用意して
結果をすべて足せばいいんじゃないの?
12入力がいいのか 8入力がいいのか 16入力がいいのか
そこらへんはどんなデバイスに実装するかを含めて
検討してみる必要があるだろう
>>872 高卒でいきなり浮動小数点の加減算組まされたので
そのへんの講釈は結構っす。
# 三角関数のCORDICもな!
>>873 まっとうに組めば合成でそれなりに最適化されるハズなのだけど
逆に、この手の演算を効率よく落とせるノウハウがあったら知りたいところ。
>>883 1)については了解。ありがとう。
2)について、84つの結果を足し合わせるのに、うまい技法があれば知りたいのだが。
何か適切なライブラリがないようなら、ARITHで N 変数の和を求めるコードを生成して、
N ^ M ( >= 84 ) と M段で求めようと思うのだがこのときの{ N , M } として { 10 , 2 }ぐらい
にするか、{ 4 , 4 } ぐらいにするか何がいいのかさっぱり指針がなくて困る。
実際、論理合成してみればいいのか..そうか..
くどいけどしつこく助言するぜ すべてを組み合わせ回路(1クロックで演算)って構成やめた方がいいと思うよ 無駄に面積食って遅いだけ なんでそんなに組み合わせ回路にこだわりますか?
小規模な回路をgenerate文でたくさん生成しているんですが、FPGAの容量に余裕がなくなってきました。
単位となる回路を少しでもスマートにできれば効果は大きいと思うのですが、そうするためのコツみたいな
ものがあればご助言願いたいです。
処理アルゴリズム自体をスマートにできればそれが一番なんでしょうけど、微妙な記述の違いで
変わるとか(C言語であれば2で割るとき、「/2」と書くよりも「
>>1 」と書くほうが速いというような感じ)でも
効果的だと思うのでお願いします。
どんな回路か分からないと助言のしようもないけどさ。 そのFPGAの構造に合った記述にすると効率的だよ。 使い回しが利きにくくなるけど。
>>887 業務で"なるべくたくさんのモジュールを目一杯詰め込む"は
やっちゃいけないことだな。
セオリーでは、性能を決めて、それに合うデバイスを
余裕を持って使う。
もちろん趣味でやるなら、俺自身が99%まで詰め込んだことがあるので
できなくもないけど、Fittingで試行錯誤(Seedをひたすら変更とか)
することになる。
もちろん配線の自由度ががっくり下がるので、速度は期待できなくなるぞ。
QuartusIIのばあい、モジュール毎に最適化オプションを変えられる。
そうそう。仕様変更やバグフィックスで入りきらなくなったら、泣くしかない。
>>887 最近のツールじゃ記述方法によるサイズの違いはほとんどないと思うな。
容量が足りなくなったら設計側で地道にロジックを削るしかないと思う。
簡単なのは余分なレジスタを削除する。
たとえば6ビットしか使わないレジスタがあっても書き込み側が16ビットだと16ビットで記述しているとかないか?
>>887 アップカウンタをダウンカウンタや乱数カウンタに置き換えるとか。
関係ないけどスマートの使い方間違ってない?
パチンコかよ! > 乱数カウンタ
895 :
887 :2008/02/26(火) 22:54:26 ID:n5Y9ifjX
>>888-894 みなさん、たいへん有意義なご助言、ありがとうございました!!
これでだいぶ喰らいついていけそうです!
今回こんなことになったのは、FPGA選定当初は容量に余裕を持ったデバイスを選んだのに、
仕様の詰めが甘かったようで思わぬ変更が入り、回路が増えてしまったからなんです。
何とか抑えてみます。
ありがとうございました。
そゆ場面でケチって詰め込むノウハウを訊きたいなら 始めからそう言ってくれい。 つワケで、どんな回路か、差し障りのない範囲でこぼすといいとオモ あと、デバイス名とか、要求性能とか。
みんなどれ位余裕を持ってデバイスを選ぶのか教えてくんろ。 おいらの場合はこんな感じです。 CPLD程度であれば仕様検討段階で必要なカウンタやレジスタ数で5−6割程度で決める。 FPGAなどになるとRAMとかレジスタ数で決まるので、必要とされるRAM7割くらいで押さえておく。 当然デバイスを選ぶ時には同じピンでサイズのでかいのがあればそれを選んでおくようにしている。 検討段階でTQFPで一番大きなFPGAを選ぶよりもBGAを選んで一つ上に置き換えできるようにしている。 昔はデバイスが大きくなるとスピードがガクンと落ちてタイミングがNGとなるケースが多かったが、最近はサイズが大きくなってもスピードはほとんど変わらないのでありがたい。
どうしてもFPGAではレジスターが余りがち。というか、FFを使わずLUTだけ使うセル/エレメントが多くなる。そういう意味で乱数カウンタ(M系列のことだよね)は効果ある。いかんせん、デコード値が分かりにくい。 FFを多用すると意外とエレメント数では小さくなったりするよ。
>当然デバイスを選ぶ時には同じピンでサイズのでかいのがあればそれを選んでおくようにしている。 ってのは、同じパッケージで最大のを選ぶという意味? セオリーとしては逆のような希ガス >検討段階でTQFPで一番大きなFPGAを選ぶよりもBGAを選んで一つ上に置き換えできるようにしている。 って書いているので日本語の問題だと思うのだが…気を悪くしないでくれ。
>>898 20bitカウンタとかでも半分のリソースで済むよね
チャタリングマスクが多いときなんか効果大!
でもいかんせんデコード値が分かりにくいので、generic文でコンパイル時に
カウント値からエンコードしてくれないかなと試したけどうまくいかなかった
結局バッチスクリプトで生成して埋め込んでる
基本、シフトレジスタだからね。initial 時に for 文で回してできないかな?やったことないけど。ヒマをみて試してみます。
902 :
774ワット発電中さん :2008/02/28(木) 05:48:16 ID:vmF1n63s
テストベンチでのファイル出力(書き込み)で質問です。 WinXP-ProでModelSim XE III 6.2gを使用。 本やWebを参考に、シミュレーション結果をテストベンチと同じディレクトリにある Sim.txtに書き込むため、テストベンチのendmoduleの前に以下のように書きました ・・・ ・・・ integer fp; initial begin fp=$fopen("Sim.txt"); $fwrite(fp,"Sim.txt"); $fclose(fp,"Sim.txt"); end endmodule この記述では、 「・・・$fclose : Wrong number of arguments.」と出て、エラー表示 「# Error loading design」が出ます。 どのように修正すればよいのでしょうか?
closeにファイル名は要らないんじゃないすか?
904 :
887 :2008/02/28(木) 21:44:59 ID:TWNKP7KU
>>896 すみません、まだその回路の理解が不十分なので、取り組んでいく中で助言をお願いしたいことが
出てきたら、そのときにまたお願いします。
ありがとうございました。
905 :
902 :2008/02/28(木) 22:23:42 ID:qen/8UG7
>>903 どうも。
自分なりに修正しました。
integer fp;
initial
begin
fp=$fopen("Sim.txt"); //用意していたSim.txtを開く
$fwrite(fp,$stime," ENABLE=%b ins1=%h LED=%b", ENABLE, ins1.COUNT_tmp, LED);
// Sim.txtに 時間,ENABLE, ins1.COUNT_tmp(カウントのレジスタ値), LED の4つを書き込む
$fclose();
end
※全文は
http://upload.jpn.ph/img/u12908.txt これだと、Sim.txtの最初の1行は 0 ENABLE=x ins1=x LED=xxxxxx になっていますが、その後が続きません。
すいませんが、再度ご指摘願います。
その後って? open → 1行書く → close してるんだから 1行しかないのは当然だろ?? もし既存のファイルに追加書込みしたいなら$openの代わりに$openaを使え
質問です。 VerilogRTLレビューで修正点が出た場合のコメントの付け方は、 皆さんどうされてるのでしょうか? 私はheader部分に、version 日付 本文中に"//verxx" (xx:数字)で 書こうと思っているのですが。
質問です。 VerilogRTLレビューで修正点が出た場合のコメントの付け方は、 皆さんどうされてるのでしょうか? 私はheader部分に、version 日付 本文中に"//verxx" (xx:数字)で 書こうと思っているのですが。
909 :
907 :2008/02/29(金) 06:57:54 ID:3r2KW8K/
すいません、書き込みエラーが表示されたので更新したら 重複書き込みしていました。
普段の修正と同じく、CVS や Subvsesion の ChangeLog で管理かなあ。 RTLにもコメントを残したいという時は、本文中に"// $Log$"で自動追記。
いちいちバージョン管理なんてしねーよ
>>911 アマチュアはそれでいいが、プロの場合はバージョン管理しないと、
思い違いで、とんでもないバグを紛れ込ませて、めちゃくちゃ痛い思いをするよ
HDLに限らずソフトウェア、設計書、ドキュメント管理では必須
関わる人が自分だけなのか複数なのかでも違ってくるよね > リビジョン管理 まぁ独りでやってる場合でもリビジョン管理やってると助かることは多い
少なくとも自分のとこのバグは取ってからリリースしろよ、っと。
>>911 作って動けばOKメンテなしだったら問題ないけど、半年ほどしてから手直ししてと言われる場合には管理は重要だよ。
それで終わればいいけどまた半年後に手直しがはいる。
きちんと管理していないと何回かメンテを繰り返すと提出した時期とバージョンがだんだんわからなくなってくる。
俺がやった失敗でこんなのがある。
デバックでソースを修正しながらFPGAの変更をやっていた。
動かないのでA0->A1−>A2とbitfileを変更していった。
当然ソースは上書きしてた。
A2で動かないと悩んでいたら、相手側にバグがあった事が判明。
ためしにA1を書いてみたら動き始めた。bitfileは保存していたがデバッグ中だったのでA1のソースファイルはない。orz
A0のソースはあるけど、A0のbitfileでは動かない。
記憶を頼りに手直ししてみるが、A1と同じソースは復活できなかった。なぜかA0でも動かない。
そのときからデバッグ中でもソースファイルはバックアップを取りながらやるようになった。
とりあえずデバッグ中でもソースとbitfileはバックアップを取りながらやっている。
バックアップはさくらエディターのバックアップ機能を使うようにしてから戻れなくなる事は無くなった。
>>906 ども。
initialの下に always #() を使い、"〜"内にバックスラッシュを使うことによって、複数行
のファイル出力に成功しましたので報告します。
initial文とalways #()文両方に全く同じ記述をする必要はなく、UpしたTxtのように最初の
行(initial文)のみをコメント付き行として扱うことも出来ました。また、カンマを入れること
ができましたので、CSVファイル化もできます。
http://upload.jpn.ph/img/u12944.txt なお、$openaは$fopenaと共に使用不可でした(予約語として認識されないようです)。
>>916 「バックスラッシュを使う」と言っているのは、\nを入れたことを言っている?
だとしたら全然関係ないよ。
複数行出力されるようになったのは、alwaysの中にも$fwriteを記述したから。
あと、alwaysの中でも$fopenしているけど、これは間違い。
今動いているのは使っているシミュレータがものすごく親切だから。
本来だったらエラーになっても文句は言えない。
余談だけど、initial内の$fwriteで一行目が書き込まれるのは、厳密に言うと
言語仕様上は保証されていない。仕様上はalwaysをinitialの前に実行する事も
許されている。まあ、知っている限りでは、そんなシミュレータは聞いた事ないが。
>>917 使用しているのは、ModelSim XE III 6.2g(フリー版)です。
alwaysだけだと、最初の1行が抜けてしまうので、回避処置としていれています。
あと、\nは最初エラーになりましたが、試しに\\nを入れると1行に連なった状態で\n
が「文字列として」テキストファイルに書き込まれていたので、もしやと思い
再度\nにすると改行してくれました。
次回はalwaysの$fopenは外してやってみます。
本文中のコメントは 大幅な改変か機能アップならバージョンかなと思うが、 修正ならバージョンで書くよりも日付かな。
920 :
774ワット発電中さん :2008/03/04(火) 19:48:17 ID:FUj4hU0g
すみません。Verilog初心者の素朴な疑問に答えてやってもらえませんか。 それはalwas@()の中身についてです。 買ってきた本のソースや、ネットにあるVerilogソースを見ると、 たていてが、always@()の中身が少なく、複数入っているんです。例えば、 modeule A(....); always@(posedge clock ....)begin if(.....)begin ..... end else begin ..... end always@(posedge clock ....)begin if(.....)begin ..... end else begin ..... end always@(posedge clock ....)begin if(.....)begin ..... end else begin ..... end endmodele という感じで、always@()を複数使い、さらにその中身はif() else end のように2通りだけです。 僕が思うには、全部のalways@()が同じclockで一緒に動くんだから、1つのalways@()の中に 複数のif()を入れればいいのではないか、と思うのです。 また、ifの中身についても、trueかfalseの2通りの流れだけでなく、 else if() else if() else if() と、いくつも使えば良いような気がするのですが。 僕の考え方では、何かまずいことがあるのでしょうか? 宜しくお願いします。
ひとつのalways内で変更されるレジスタは1個だけにした方が ソースが読みやすくなるからじゃないの? else ifでいっぱい条件書かないのは 論理合成したときに問題が生じるからかと。 あとは、詳しい人のちゃんとした説明を 俺と一緒に待とうw
922 :
774ワット発電中さん :2008/03/04(火) 20:39:47 ID:FUj4hU0g
>>921 ありがとうございます。
あまりに細分化した記述だと、何をしているのかわかりにくいと思うんです。
でも、みなさん そうしているところを見ると、何か理由があると思うんですが。
Cの記述でも、画面2ページ分ぐらいのif() else if() else if() else だったら、
僕は書いています。だって、わかりやすいから。
>俺と一緒に待とうw
激しく笑ってしまいました。すみません。でも面白かった。
2ページに渡るってそれネスト無しで? それはSelect文の出番じゃ… ネスト有りだとしても一個間違って消した事でバグとかありそうだし、後の人が大変そうだな
>>920 まあ、書き方のスタイルだから、好きに書けばいいと思うよ。
個人的には、その本に書いてあったみたいに、同じクロックで
動作するものを複数書くのはイヤだけどな。
ただ、非同期リセットがらみだと、最初にリセット条件を if 文で
書かなきゃいけないという決まり(というか、合成ツールの制約)が
あるから、どうしてもいきなり if(reset) で始まるのは仕方ない。
always@(posedge clock or posedge reset) begin
if(reset) begin
:
end else begin
:
end
end
>>922 if() else if () のネストにすると、条件に優先順位が付くから、
回路規模が大きくなることがある。注意したほうがいいよ。
case 文にしたほうがいい。
>>923 Select は、VHDL ですかね。そちら方面はよく知らないんですが。
あれ?Cってselect文じゃなかったっけ? ゴメンもうCやらVBやらLUAやら半端に弄ってるせいでもう訳分らないんだ
>>923 Cのselectってあのデバイスポーリングの関数のこと?
>>924 920です。
> まあ、書き方のスタイルだから、好きに書けばいいと思うよ。
さっそくありがとうございました。ちょっと安心しました。
同一clockなのにalways@()でいくつも分けて書くと、
・合成の早い
・回路規模が小さくなる
とかはあるかもと思うのですが、
1つのalways@()のときでもツールが分けて考えてくれればよいのでは?と思っています。
あくまでも、人間が見やすいように書きたいと。
C言語はswitchだろw
コンパイラがジャンプテーブルに変換してくれれば高速
alwaysに全部入れちゃうと回路規模大きくなるしな
>>922 は質問するよりまず自分で試した方がいい
初心者全般に言えることだけど
>>927 ソフトやってる人からは信じられないくらいコンパイラの性能悪いよ
このくらい分かれよ、みたいなのが全然分かってくれない。
この業界の人の持ってるノウハウって、こんなソースを書いたら
こんなオブジェクト(回路)が出てくるみたいな知識の集積だ。
その昔、どんな機械語が出るか分かってないと効率のいいFortranプログラムが
書けなかったとか、そんなイメージだよ。
Doxygen の VHDL サポートキテタ━(゚∀゚)━!
931 :
774ワット発電中さん :2008/03/05(水) 06:36:16 ID:XxNtuX8D
>>924 コードの再利用を考えた場合のコピペのし易さ。
一瞬なるほどって思ったけど コピペするような再利用の仕方は良くないような。
>>927 一つのalways文に全部詰め込むと 、合成後の回路を考えにくくなんないかな?
HDLはあくまでもシミュレーション用言語だからね 頭の中に最終形の回路があって、それを機械がシミュレーションできるような 形式に書き下していくためのもの 少なくとも現在のHDLは、信号のビヘイビアを記述すれば 自動的に回路が設計されるみたいな代物じゃない
それはどうかな
>>929 ソフトやってた人は信じられないような記述をすることがあるからね。
FPGAの合成ツール類は十分な最適化を施してると思う。
無償ツールであっても。
# ソフトやったことがない連中も信じがたい記述をするケースあり
> この業界の人の持ってるノウハウって、こんなソースを書いたら
> こんなオブジェクト(回路)が出てくるみたいな知識の集積だ。
この点には同意。
HDL屋さんは処理系の最適化性能に無頓着な希ガス
コンカレント動作である点を考慮するくらいで、あとはC言語の感覚でVHDL書いてるんですけど、 みなさんはこの信号がレジスタになってとか、ラッチが生成されるとか考えながら書かれてますか?
ラッチは生成されないように気を付けてはいる。
>>920 >>922 >>924 ひとつのalwaysに2つ以上のifやcaseを並べて書くのは禁物。
例えば、あるif文で処理した内容がほかのif文の条件になってたりすると、
たとえ不要であったとしてもプライオリティ回路が生成されてしまったりする。
また、すべて違う信号の処理であっても、1回のクロックで実行されるのは
一つのブロックに限定されるような書き方をした方がいいらしい。
つまり、alwaysにbegin〜endはあるべきではないと。
else ifを続けるのが特に問題になるというのは聞いたことがない。
ソフトの経験があるとどうしても考え方がソフト的になってしまうけど、
HDLでの設計はまったく別物なので、アタマの切り替えには時間がかかると思う。
詳しくは次の書籍を見てみてくれ。
ttp://www.starc.jp/bookstore/index-j.html ちょいと高いが、相当なノウハウが詰まってる。俺も欲しいんだけど…。
おいおい、スタークかよw
STARCは確かに参考にはなるが、決して聖典視してはならないね 反面教師としてアラ探しするのには、いい教材といえる
最近VerilogHDL始めてるんだけど言語としてまだまだこなれてないというか、 コンパラにおもねったコーディングをしないとまともな回路が出てこなくないですか?
そんなもんだ
>>943 ネットリストからデバイスに落とす時にもう1プロセス。
残念だが同一コードでもターゲットデバイスによって最適解は違う
あきらめれ。
>>943 コンパラってなによ。
コンパイラーに文句言うやつに限ってまともなソース書いていない場合が多いと思われる。
とりあえず気になるソースどこかにうpしたら添削してやるお。
ハードを完全無視しようとするから思ったようにならないんじゃねーか? ハード側から思考を巡らせりゃそれほど悩まねーぞ。
質問があります。 今カウンタ回路を作っています。 ・10進UPカウンタ ・任意の値を設定可。ただし任意の値を設定する場合は、 LOAD信号の立ち上がりを検出して値を設定する。 信号の立ち上がり検出をbit連接とbitshiftの場合で書いてみたのですが、 bit連接で書いた方は、SIMを走らせるとLOAD信号の立ち上がりを検出しても 設定値が読み込まれないことがありました。 立ち上がり検出に部分を下記のようにしています。 load_inをregにしているのは、カウンタブロックで、 条件文として使用している為です。 ※ LOAD:カウンタに任意の値を設定する時に使用する信号。 load_in:LOAD信号の立ち上がりを検出する為の内部信号 reg [1:0] load_in; always @(posedge CLK or negedge SYSRESET) begin if (SYSRESET == 1'b0) load_in <= 2'h0 ; else assign load_in = { load_in[0], LOAD } ; // load_in <= load_in << 1; // load_in[0] <= LOAD ; end bit連接は左辺をwire宣言して使用するというのが本に書かれていました。 誤作動しているのは、wire宣言の所をreg宣言している為なのでしょうか。
>>948 >bit連接は左辺をwire宣言して使用するというのが本に書かれていました。
なんて本?
950 :
948 :2008/03/06(木) 03:27:20 ID:fp2TyyYK
>>949 入門Verilog HDL記述(CQ出版)です。
bit連接を左辺で使う場合、右辺で使う場合の例が記載されていました。
答えだけ書くと、regのままで、assignの代わりに<=で代入な。 ところで、論理合成ツールをコンパイラって呼ぶのは違和感あるな。会社でもフツーに使われてるけど。
つ デザインコンパイラ
コンパイラの一種のような気もする。 合成ツールて言うとマヌケに聞こえるし シンセサイザて言うと別分野の用語に聞こえてしまう。 ロジックシンセサイザ…長い。
>>951 はなんと呼ぶのがええと思う?
おいらは違和感ないよ。
だって、HDLで書いた論理を圧縮してさらにそのロジックをデバイスの内部ロジックに置き換えてくれる。
ここまで複雑な変換をしてくれるのをコンパイラーと呼ぶ以外考えられない。
ソフトウェアをやる人には一緒にして欲しくないのかもしれんが、そんなのかんけぇねぇ!
シンセサイザがいいと思う。 「変換」という意味的にはコンパイラでもおかしくないんだろうけど 一緒にして欲しくないとかでなく、違和感はある
合成ツールじゃだめなの? ついでに言うと、「最適化」ってのも、最適になるわけじゃないから気持ち悪い。
HDLで書かれたソースコードをシミュレータで動かすために 中間コードまたはバイナリコードに変換する処理がコンパイル RTL形式で書かれたHDLソースコードをネットリストに変換する処理が論理合成 全然違う
組み合わせ回路をalwaysで書くとき、case文にdefaultは必須ですが、 順序回路でcase文を使ったときにdefaultは必要なんでしょうか? というか、順序回路で、どの値にも当てはまらないときは何も処理したくないので、 defaultを書かなくていいならそれだけでいいのですが。
何も処理しないってことを書いときゃいいじゃん。
別に必須じゃないだろ。 全部の条件が書いてあれば無問題。なければラッチw
defaultでX入れとけ
>>958 何もしたくないときは"何もしない"ということを明示しな。
記述に絶対の自信があって検証もちゃんとできるなら X 入れて ktkr
X入れるのは、シミュレーションで分かりやすくするのと、回路削減へのわずかな期待。
964 :
958 :2008/03/06(木) 18:28:23 ID:upXGD61x
レスありがとうございます。 どうやらFF使う順序回路ではdefault書かなくてもいいみたいですね。 今書いてるのは制御部分で、caseに当てはまらない値が不具合だけでなく 普通に存在するので、不定にするのはまずいのです。 verilogで何もしないことを明示するにはどうするんでしょう? 空のbegin endを書いとけばいいんでしょうか。
出力を入力に突っ込めばいいんじゃないの?>何もしないことを明示
;
967 :
958 :2008/03/06(木) 21:38:00 ID:upXGD61x
>>965 それが一般的のようですが、一部のコンパイラなどのツールでは使えないことがあるそうです。
>>966 やっぱそれですかね。
968 :
948 :2008/03/06(木) 22:59:01 ID:fp2TyyYK
>>951 回答ありがとうごさいます。
確かにassignを除いて、"="を"<="に変更したら期待通りの動作をしました。
ただ原因が分からないのが相変わらず。
6回試行してみたのですが、結果は4/6(○×○○×○: ×読み込み不可)
なんでこんな中途半端に動作が変わるのか。
まだ論理合成もかけてないので、ゲート遅延でタイミングが間に合わない
という事態は起きないはずなのですが。
>>968 “=”と“<=”で、代入がどのタイミングで行われるのか(文法の)違いを調べてみよう
>>968 いいこと教えてあげよう。僕も君と同じくらいの初学者なんだけど、
<=と=の違いは、以下のように理解している。
<= は、次回の予定を表している。a <= a + 1; だとしたら、
次回のaは、今回のaに+1したものにしてね、ということ。
= は、今すぐの動作を表している。a = a + 1; だとしたら、
その行(正確には、そのかたまりの中)にであったら、スグに
a+1になる。
で、次回というのは何かというと、ズバリclockの変化したときね。
always@( posedge clock )から、対応するendまでの世界。
そう考えると、<=は、その世界の中にしか置けないし、=は、
その外側に置くことがわかる。
で、この「次回の予定」って、どういうことかも考えた。
これすなわち、D-FFのD端子のこと(だと思う)。
そのFFのD端子の1/0がQに伝わるのは、clockの↑の一瞬だけだから。
例えば、Qを反転して自分自身のDにつないだときは
現在の値Qは1だけど、「次回の予定」は0。で、clock↑になると、
現在の値Qが0になるけど、「次回の予定」は1。これで分周器のできあがり。
すごく親切で丁寧でほめてあげたいんだけど、 ちょっと違う
え゛ーっ? 何か違ってますか? ぜひ教えてください。
=は配線の接続を表しているだけ
はい、そうだと思っています。74HC00のNANDなどのように、 clockの関係ないものの出力を表しているのだと思います。 なので、assign Q = ~( A & B )のように書くのだと....。 これらは、常時接続というか、D-FFのように次回のclockの↑まで堰き止めておく制御が できないので、alwyas@()〜endの中には書けない(書かない?)のだと思います。
「=」:普通のプログラムで言うところの代入文ぽいヤツ(代入してから次の行を実行) 「<=」:同じ時刻だったら(右辺を評価した後に)同時に代入が行われる ハードの特徴である「並列性」を表現するにはどうすれば良いか、 どんな記述が必要となるかを考えていくと、ノンブロッキング代入文「<=」の 必要性や「=」との違いが認識し易いんじゃないかなぁ。
初学者には「次回」=「次のクロックエッジ」と理解した方が混乱は少ないだろうし、 今の例やその他ほとんどのケースでそれは成り立つので、今はそのように 理解していても良いのだけど正確には違う。 多分今説明しても混乱するだけだし、ここで説明できるほど簡単でもないので 説明しないけど、テストベンチを書く時になって、alwaysの順番を変えたら シミュレーションの結果が変わったとか、シミュレータによって結果が違う といった事におそらく一回は嵌る事になると思うので、その時に「デルタ遅延」 というキーワードを勉強して欲しい。
>>974 alwyas@()〜endの中でも、=を使うよ。
<=と混在はさせないが。
A,B,Cそれぞれ0でスタート B=A+1 C=B+1 A=C+1 普通に計算してみると B=1 C=2 A=3 でもコンパイルすると “ループしてますエラー”
B = Aは #define B ((A)+1) って理解しとくとOK?
>B = A B = A+1 のつもりでした。。。orz
微妙に分かりやすく書かれていて 初心者には受けが良い説明なんだろうけど 決定的な間違いがあるから 初心者が誤解したまま覚えてしまうとかなり危険 > = は、今すぐの動作を表している。a = a + 1; だとしたら、 > その行(正確には、そのかたまりの中)にであったら、スグに > a+1になる。 違う >次回のclockの↑まで堰き止めておく 違う
否定厨キター 正解の解説をかけよ
レジスタ代入に、ブロッキングとノンブロッキングの両方でできるようになっている言語仕様が悪い。ついでに、レジスタにならないものをreg宣言させるのもいくない。
>>981 どのように違うか、教えてください。
確かに、a = a + 1 はヤバイと思います。
a = b + 1 なら、まだいいんですが。
次回のclockの↑まで堰き止めておくというのは、その1つのD-FFについての説明で
その出力Qが、レベル動作素子(andとかorとかの組み合わせ回路)につながっていれば
それらは動いてしまいます。
a = a + 1 とか書いてる人はちゃんと頭の中で回路図も描いてるの? 単に記述動作だけでデザインやってるってものすごく怖い
>>981 > > = は、今すぐの動作を表している。a = a + 1; だとしたら、
> > その行(正確には、そのかたまりの中)にであったら、スグに
> > a+1になる。
> 違う
漏れもどこが違うのか知りたい。ちなみに以下は遅延制御なしのブロッキング代入文を
どのように処理するかという定義をVerilogのLRMからコピーしたもの。
if it returns immediately if no delay is specified, the process performs the assignment
to the left-hand side
これ以外の遅延なしブロッキング代入文の動作があるのならば知りたい。
>>977 のように分かってやってるならいいと思うよ
すまんけど、VHDL的に言うところの、:= と <= の違いかね?
>>988 それ、シミュレータ動作から見た説明になってるんで、回路作りたい人用には分かりづらくね?
なんつーか、抽象度上げっていうか。
Veritak ユーザーのオレは勝ち組
VHDLに関し、お勧めの書籍はありますか? 初心者用の本は読んだのですが、なかなか地元の本屋に中級者用の書籍がなくて困っています。
>992 森岡澄夫 『HDLによる高性能ディジタル回路設計』 とか…というか、その初心者用の本て何よ。
>989 そういうこと。 シミュレーション用は別として 回路で = は使うなってことだ。
ちなみに、ブロッキング代入とノンブロッキング代入というのがありますよね。 なんで「ブロッキング」と言うのでしょうか。 しかも、「=は、ブロッキング代入」「<=は、ノンブロッキング代入」って、 何かイメージと違う気がする。
>>990 だから、初心者は今知る必要はないし上級コースだよと断っているでしょう。
でも、racing問題にはそのうち必ずはまるので、その時には結局はシミュレータの
動作が分かっていないと根本的対策は打てない。
問題を起こした信号に#1のユニット遅延を付加することで直ることは直るけど
それではいつまでたってもモグラ叩きでしょう。
>>994 >回路で = は使うな
?
普通に使うよ。
>997 中間変数使って速く処理したい場合とか便利ですよね。 あなたは使っても無問題。 新人にはレイアウトを経験させてから使わせてる。 基本的に、頭の悪い俺は自分の作った回路が あとで見て、わけわからなくなるからつかわん。
うめ
うめ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。