【Verilog】記述言語で論理設計 Project4【VHDL】
2get?
3 :
774ワット発電中さん:2006/03/22(水) 22:38:29 ID:bCsqYBkC
4 :
774ワット発電中さん:2006/03/22(水) 22:39:27 ID:bCsqYBkC
5 :
774ワット発電中さん:2006/03/22(水) 22:40:35 ID:bCsqYBkC
ほとんどノーチェックだから、
チェック&追加情報よろ
>>3-5 乙 ( ・∀・)っ旦~ オチャモドゾ
veritak
さて、トラ技を2冊買ったところで何を作ったモンかな。
テンプラ貼り乙でつ。
RTLとNETの等価が取れなくて泣きそう(´Д⊂
Verilog独学で構文くらいは分かったつもりだが。
サンプルソースとか何から見たらいいのか分からんね。
コメントが日本語がないのが痛い。
ソース読むとっかかりみたいなコツとかあったら教えてください、先生方・・・。
日本語はあきらめろ
最初から、コメント見なきゃわからんようなソースを参考にする必要は全然ない気がするんだが。
>>10 ソースを眺めても何も生まれない。
ひたすら追っかけて解析ノートを作るしかない。
14 :
774ワット発電中さん:2006/03/24(金) 18:51:54 ID:UzgA6pvH
Verilogやっている研究室に配属されたわけだが、
内部ではC言語班とVerilog班に分かれているみたいで
どちらに入るか悩んでいるわけだ。
現時点でCなら10000行くらいは組めるのだが
Verilogは30行が限界。
苦労してVerilogを一からやるだけの見返りはある??
アドバイス木盆
BasicでOK
>>14 自分が将来やりたいことに合ったほうを選べば!?
>>14 両方とも道具なんだよ。道具は目的で選ぶ。
19 :
14:2006/03/24(金) 22:22:26 ID:UzgA6pvH
>>16 将来やりたいことっていうと、
やっぱり、ものを設計したり作ったりしたいわけだ。
Cの方に進むとどうやらSEとかPGがメインらしく、
マ板などを眺めていると、もの作りとは程遠いような気がするわけよ。
だから、Cは趣味ということにして、Verilogをやってみたいのだが、
LSI系のエンジニアになるとして、需要とかはあるの??
20 :
14:2006/03/24(金) 22:25:33 ID:UzgA6pvH
>>18 研究室の間は間違いなくCのほうが苦労は少ないと思うが、
SE/PGになることを考えたら、
将来的には今Verilogやっておいた方が、楽できる雰囲気。
一体どっちをやればいいんだ orz
結構、今が人生の岐路のような希ガス。
22 :
14:2006/03/24(金) 22:38:16 ID:UzgA6pvH
>>21 そうか、あるのか。
研究内容はGAプロセッサの開発とかいう、
分からんことをやっているみたいだが、とにかくやってみることにするよ。
が。
調べても分からんことあったら、ここに聞きにくる。
そんときはヨロ。
GA=遺伝的アルゴリズム!?
24 :
14:2006/03/24(金) 22:49:11 ID:UzgA6pvH
>>23 そそ。
後はLSIのフロアプラント問題とかもやっているみたい。
25 :
14:2006/03/24(金) 22:50:02 ID:UzgA6pvH
×プラント->プラン
26 :
774ワット発電中さん:2006/03/24(金) 22:58:22 ID:gCmZSmEW
cができるならverilogも余裕な気がするが。文法的には。
俺の場合は
C(++,java)⇒vhdl⇒verilog
の順で覚えて行ったな。hdlを覚える前にディジタル回路を勉強すれば
覚えるのが早い。
>>20 >一体どっちをやればいいんだ orz
>
>結構、今が人生の岐路のような希ガス。
C、verilogは人生の岐路にはならぬ。分からないときは両方やるのが正解。
安易に分からないと言うエンジニアにはなってもらいたくないな。
つーか
>SE/PGになることを考えたら、
>将来的には今Verilogやっておいた方が、楽できる雰囲気。
なんじゃそら
29 :
14:2006/03/24(金) 23:12:46 ID:UzgA6pvH
>>26 たしかに、文法は似ているなぁ。
春休み中、入門VerilogHDL記述(小林優)なる本を図書館で借りてきて
勉強していたわけだが、文法は一通り分かった希ガス。
ただ、C言語みたいにこういう機能をを作りたいと思っても
すぐに、どうやって設計したらよいかイメージが浮かんでこないのだ。
コレは慣れの問題???
漏れは今の段階で
C -> C++ -> java
だし、このまま続ければ何とかなるのか。
ディジタル回路ってANDとかFFとか?
これは学部時代に結構やった。
ANDとかFFとかだけじゃなくて、それを使ってどうデジタル回路を作るのか?という問題のような
サンプルソースが多数掲載されている本を見ればいいじゃない
まずはカウンタのサンプルソースとか
しかしVerilogやるならSE/PGというよりはハード屋だろう
SE/PGもハード屋も一歩間違えればデジドカだが、そういうのになりたいのか?
それでもCもVerilogも知っておいて損はないだろうけどな。難しくないし
32 :
14:2006/03/24(金) 23:47:18 ID:UzgA6pvH
>>27 わかりやした。これからはVerilogに力を入れようかと。
>>30 OK、やっぱり始めはサンプルを読めばよいわけね。
カウンタのソースは理解できたつもり。アップカウンタとダウンカウンタの
機能が混在したやつも、(苦労したが)なんとかできた。
>SE/PGもハード屋も一歩間違えればデジドカだが、そういうのになりたいのか
研究室的にはそっち系だからな。こればかりは。
しかし、VerilogもCも別に嫌いじゃないからよいと思っている。
>>31 たしかに、そうだな。
Cはある程度できるようになったから、今度はVerilogやってみるわ。
>難しくないし
文法は分かったが。。その後が難しそうな。。まぁがんばるさ
次はSRAMのデータシートでも読んで、セットアップタイムとホールドタイムについて(少しだけ)学び、
実際に接続してカキコして読み出すとかするべきなのか
そしてステートマシンなど学んだり、
大きな同期回路は
FF->組み合わせ回路->FF->組み合わせ回路
のように作るという事が判れば、そこそこのものが作れるような希ガス
ファンアウトが大きくなると動作が遅くなるとかいうことも知るべきラスィがw
34 :
14:2006/03/25(土) 00:06:47 ID:2rjRostT
>>33 正直、今の漏れには何が書いてあるのかほとんど理解できん。 orz
>FF->組み合わせ回路->FF->組み合わせ回路
って所だけはちょっとピンと来た気がするが気のせいだろう。
よし、今から勉強する。
みんな回答サンクス!
引っ張ってスマソがw
ケキョークデジタル回路設計の本も読んだ方が良いんだろうね
>FF->組み合わせ回路->FF->組み合わせ回路
FF(フリップフロップ)->組み合わせ回路->FF->組み合わせ回路->FF
の方が良かったな
「組み合わせ回路(ANDとかORとかNOTとかの塊でFFがない)」を信号が通る時には遅延が起きるでそ?
そして回路のどこを通るかによって遅延の大きさが変わるから、
「組み合わせ回路」の出力が複数あると、すべての信号出力が正しい値に落ち着くまで時間がかかる
よって「すべての信号が正しい話に落ち着いた時」を見計らってFF(フリップフロップ)に値を取り込むのね。
まあまだ説明が良くないかな。勉強してくれw
Cがそこそこ出来るなら、忘れない程度に覚えときつつVerilogやるのがいいな。
入力パタン&期待値生成とか、設計後に発生する諸々の単純作業の自動化とか出来ると楽だし。
別にPerlでもJavaでも何でもいいけど。
経験的な話なんだけど、
C→Verilog とやると、やっぱハード的なイメージがわかなくて苦労すると思う。
VerilogはCぽくみえるかもしれないけど、あくまでそれは見た目だけで、根本はデジタル回路。
なので、同期回路、非同期回路、ステートマシン、順序回路、組み合わせ回路、といった
デジタル回路から入ったほうがスムーズだと思う。
FFが分かってなければ、理解してVerilogも記述できないと思うわけで。
それはそれとしてソフトの知識があると売りになる。直接的には役にたたないように
思えるかもしれないが、
>>36にあるように、作業時間を大幅に減らせる可能性がある。
ちょっとした機能確認のためにCでモデル作って軽くうごかしてみるとか、
数百のファイルを一括修正する際にスクリプト言語使うとか、シミュレーションをバッチで流すとか、
そういうことが出来る&発想に至れるメリットはでかいと思う。
>>14のデジタル回路についての知識レベルが明らかになったのが
>>34あたりなので、お前がイラついた所で仕方がない
40 :
774ワット発電中さん:2006/03/25(土) 08:59:38 ID:BKWvLm/i
俺はhdl覚える前にとりあえずallディジタル回路(max plus)で設計したな。
最初はn進カウンタ、次はFIFO,RAM見たいな感じで。
hdlを始めたときは、回路をhdlに変換する感じだった。
今はhdlで書いても論理合成がどうなるか大体わかるし、逆も然り。
>>39 は?
>>14 >Verilogやっている研究室に配属されたわけだが、
>内部ではC言語班とVerilog班に分かれているみたいで
>どちらに入るか悩んでいるわけだ。
>
>現時点でCなら10000行くらいは組めるのだが
>Verilogは30行が限界。
>
>苦労してVerilogを一からやるだけの見返りはある??
>アドバイス木盆
この瞬間に知識レベル見えてるだろ?
なのに延々と引っ張ってるからイラついてたんだよ。
俺は論理回路なんてブール代数と標準ロジックの本ちらっと見ただけだな。
最初はHDLでビヘイビア記述して、次はRTL記述して論理合成みたいな感じで。
HDLをはじめたときからずっと、仕様をRTLに変換する感じだった。
今はHDLで書いても論理合成はツールに任せきりだし、
バイオレーションしたら設計を直すだけだ。
43 :
37:2006/03/25(土) 15:29:46 ID:fuZAPW26
あと、個人的な意見としてはVHDLのほうが記述量が多い分、勉強にはなるのでは
と思っている。
>>44 新卒数ヶ月のプログラミング未経験者がCやらJavaのプログラマとして
実戦配備されるのと同じく、IP関連も新卒数ヶ月の派遣エンジニアがHDL
書いてるわけさ。今のシステムLSI開発現場なんてそんなもんだ。
そんな人たちに汎用ロジックレベルで論理を考えて回路を組んでからRTLに
起こすなんてことはしない。最初からRTLで記述してしまうか、ビヘイビア
あるいはCシミュレータで検証してからRTLに直す。
そこがHDLの良さで、細かいテク知らなくてもツールで論理合成して動くもの
になる。シミュして動けばどう書いても動くし、合成が破綻したら動かない。
それだけ。
つまらんと思うか、すばらしいと思うかは任せるが、
HDLに対応した開発環境ってのはそういうものだ。
すばらしい世の中ですね
思えば遠くへ来たもんだ
遠くへ来たもんだ。
実際のとこロジック回路やブール代数の知識はそれほど必要無い。
あればあったで合成の時間を短くできたりすることもあるが、
一時間かけて考えて最適化したロジックなんて論理合成ツールに
かかれば数秒とかからずに最適化してくれるわけで。
リアル厨房のときに汎用ロジックIC組み合わせてよくわからんもの
を必死で作って将来回路設計する仕事に就くんだとか本気で考え
ていたが、実際やってみたら、経験としては役に立ったとはいえ、
そんな苦労する必要はなかったんだ。
今、HDLがりがりやってても、将来その必要が無くなってるかもな。
その兆しはすでに見えてるわけで。SystemCとか。
>>19 が言っていることは当たらずしも遠からずなんではないかな。
ふと思ってみたり。
>>45 だからバグ取りで破綻しているだろ。バグすら気がつかないかもね。
>>48 そうさ。あえて書かなかったが、48が指摘したので追記する。
実際のIP資産なんてバグだらけ。
Javaの未経験プログラマのソースと同じレベルだ。
コメント無い、設計仕様と違う、なんてざら。
テープアウト前はデスマーチ。
中身わからんから、唯一のより所はシミュのテストベンチとその結果なわけ。
今のHDLをとりまく環境って、
>>9 >>13 >>40 的発言が当たり前のように出て
くるような状況だから、そうなるんですけどね。
ほんと、すばらしいHDLの世界なんてどこにあるんでしょうね。
とっととHDLなんか捨ててUML+SystemCになってしまえばいいのに
なんて思う。ま、間違いなく次世代の開発環境も同じ状況になるわけだが。
今のHDLの仕様はせいぜい構造化構文止まりで
Javaのようにエレガントに記述できない。
言語仕様上は構造化Basicより劣ってるんじゃないか?
劣っているのは言語仕様だけではなくて、コーダーの能力も
なんとかコードを書いてテストとVerilintを通すことで精一杯。
ソースをリファクタするとか、コメントをきちんと書くとか、ドキュ
メントを整備するとか、ソフト開発では当たり前の方法論がまだ
あまりなされてない。ま、ソフトでもきちんとできてないけどね。
こんな状況では、バグの無い完璧な回路を自分で考えてから
HDLを記述、なんて流暢なことはできないってこと。
長文失礼。
本来こんなことは恥ずかしすぎて人には知られたくないところだ。
でも、これが現実。それとも、こんなのは自分のところだけかな?
>こんな状況では、バグの無い完璧な回路を自分で考えてから
>HDLを記述、なんて流暢なことはできないってこと。
訳も分からずHDL書き始めるよりそっちの方が安全じゃないかな。
LSIのバグを突いてセキュリティ突破の事件が起きればおまいら有名人だ。
>>51 もちろん、無い状態から作り出すときは構成も考えるさ。
でも、普通の現場ではすでに実績のあるHDLでできた資産てもんがあるわけ。
動作についてはインターフェースレベルでまがりなりに仕様が決まってるの
でブラックボックスとして、そのまま使えば動くものになる。
すでにきちんと動くものがあるのに、毎回作り直すなんてことはしないだろ?
よほど時間をもてあましているか、ものすごくバギーなブロックで無ければ。
たとえ中身がよく分からなくても、無い状態からはじめて同じものをノーバグ
で仕上げるよりはるかに楽だから。
これもHDLの良さってもんだし、ここが一番重要なところ。
>>52 大規模のLSIならエラッタなんかいくらでもあるはず。
中にはチップ全体を停止させたり、不定の状態に導く危険なものがあるかもしれない。
もっとも判明した部分はマイクロコードやソフト、あるいは仕様の変更で通常表面化
しないように隠されてるが。
それに一般的には、ハードのバグよりソフトのバグのが多い。
>>51 カン違いされるといけないので、53一行目を補足。
ちなみに、ゲートレベルで回路を考えてRTLに直すことはナンセンス。HDL開発の禁じ手。
RTLで書いた動作はそのまま論理合成されるのだから、完璧な回路はRTL記述時には不要。
開発者はバグの無いRTLでの記述に集中すべきで合成後の回路は推定するのみでよろしい。
C言語でソフトを組むときにアセンブラで書いてからCに直す、ということはしないのと同じ。
>>55 >>51は合成後の回路を推定できるようになるためにって
ことじゃないのか!?
>>56 そうとも推定できるな。
いくら回路を意識せずにRTLで動作を記述できるとはいっても、今のところは、
まったくデジタル回路を知らずに設計ってのもこれまた無理だし。
将来ビヘイビア記述でも現実的に論理合成できるようになってきたら
もっと状況が変わると思う。それこそ回路の推定なんて不要になるかも。
バグ発覚後、レイアウト中/済NETのEC箇所の当たりを付けるのには必要な気が。
そのころにはレイアウト期間も超・短縮されてて、再合成からでも時間かからんかもしれんが。
たしかにあんまり構文はエレガントじゃないよねぇ >HDL
でも、今はあんまり複雑な記述はできないほうがいいんじゃないかな・・と思うことはある。
合成ツールとかが追いついてきて、デバイスの密度も濃くなってきたらそうなっていくんだろうけど。
>>49 >実際のIP資産なんてバグだらけ。
パックンチョしてるくせに文句言うな。
HDLは型チェックが強い方がいい
どちらかって言うと設計記述というよりはテスト検証用の言語だから
合成ツールがテスト仕様記述から実装を逆に生成するっていうすごいツールなんだよ
>>53 自己矛盾してますよ。
リファクタリングのことすっぽり忘れてますね。
っていうかやるべきことを仕事に追われてやってないだけなのを
自分に都合のいいように言い訳してるだけですね。
>>62 残念ながらHDLで実現可能な理想とはかけ離れた状況になっているのが
ASIC開発の現状というもの。自己矛盾しているのは十分承知。
本来ならドキュメント整理やテスト項目の追加やらリファクタ
(こんな言葉は現場ではお目にかからない)もしないといけない。
だからこそ次世代の開発環境に対する要求があるし、今のおかしなところが見えてくる。
そうでなければこんな屁理屈出るわけないでしょ?
Java使えば平和で快適な開発ができるなんてことないのと同じだ。
十分な暇があって、一人でFPGAを使ってるくらいならともかく、いまいちな言語仕様の
HDLとCVSを使って多人数で限られた予算と時間とライセンスとリソースを使って開発
するってことがどういうことか考えてみな。
>>63 リファクタリングなんていうキーワードを使う人たちは霞を食って生きていけるから
現実を話たって無駄だよ
>>64 その通りだわ。
納期は正しく守り、不明なコードは使わないでノーバグでリファクタリングもドキュメント整備も完璧、
そしてチームにも己にも言い訳しない、もちろん不要な残業はしない人材だけでチームが構成されて
いればHDLだろうとABELだろうとJavaだろうと問題ないはずだ。
あと、人をかまない、コミュニケーション力も必要だな。最低限。
>>47 >一時間かけて考えて最適化したロジックなんて論理合成ツールに
>かかれば数秒とかからずに最適化してくれるわけで。
この辺の感覚が漏れと違うなぁ
いまの合成ツールはCコンパイラの最適化ほどには何でも最適化してくれない印象
強力な部分は強力だが、全ては任せられない感じ。
いつも面積に影響しない範囲で階層を残して回路と対応が取れるように合成してる。
Synopsysを使ってる漏れがもう古いのか?
回路記述するHDLはこれ以上あんまり発展しなくても良いと思う。
回路記述よりも検証のベンチ記述してる時間の方が圧倒的に多いから
そっちは進化する必要がある。
回路は当分RTLで十分で日経なんとかを読んでる上司が喜びそうな
Cベース設計はピントがずれていると思う。
せいぜいプロトタイプモデルとの差し替えが容易になるように、インターフェースや
トランザクションの抽象化が導入できる程度でいいよ。
うちだとCベースは、今の所は検証部分だけだなぁ。
HDLでリファクタリングが浸透しないのはTestFirstが困難だからだと思う。
テストベンチ記述は最初に手を着けるにはかなりシンドイ。
UnitTestに変わる方法論が必要だけど、
この頃ではAssertionがそれにあたるのかな。
形式検証の導入などSoftwareより先行している部分も有るんで
ソフトとは別のメソドロジを構築していく必要がある。
UML+SystemCは好みじゃないなぁ
>>68 Cベースの検証は方向性としては悪くないと思うんだけど
専用の検証言語と比べてどうなんでしょ。
制約付きのランダムトランザクション生成とか、
機能カバレッジ定義とか、
テスト対象のプロービングとか。
昔のTestBuilderみたいな環境が有るの?
あとeXtream Programingの教えにテスト対象とテスト記述の言語は
同じにしろと言う訓えがあったと思うけど、HDLの場合はどうかなぁ。
設計とテストでは頭を切り替える必要がソフト以上に有るんで言語は
別々でいい気もする。
>>66 そのあたりは開発するものや環境によるんじゃないかな。
自分はバカだから決められたとおり動きさえすればいいって思ってるが。
>>67 今はHDLでRTL記述してテストから合成までの流れが定着してるが、
このスタイルも10年以上経つわけで。ABEL以前からLSI開発していた人が
HDLでの開発についていけてない現実を見ると今HDLでRTLを扱うスタイル
で安住しているってのがどうかと思うわけよ。
各種ツールやマシンパワーの増加だけでより大規模に対応してくなら
いいけど、いわゆる開発手法の変革が起こった場合は
>>14のような
新人類に淘汰されるか新技術を習得して生き残るかのどっちか。
ま、今すぐの問題でもないが。
>>14 好きなほうにすればいいと思うが,Verilogで数百万ゲートくらいはすぐに書けるようになるよきっと
73 :
42:2006/03/26(日) 22:50:52 ID:Zxj+i3Bt
思ったより伸びなかったな。
やっぱりHDLを仕事に、遊びに使っている人の多くはにちゃんなんか見てないんだろうか。
オープンソースIPなんてのも最近は増えてきたが、現場のおかしなところはソフ開よりも表に
出てこないし、実際の開発現場がどういうものか、少しは他の人の目に晒すのも必要かと思った。
HDLでの開発を生業としている者はIT土木として最下層を支える重要な使命があるのだ。
また明日から仕事が始まる。
ノシ
2ちゃんが一番の情報源です
上から見下ろすようなカキコだから、のびなかったと思いますw
>>66 ASIC作ってる人はそんなもんだとオモ
今HDLがJavaみたいになっちまったら、何がどう合成されるか見えなさ過ぎるだろう
>>41 それじゃハードの知識はサパーリわからんし、お前がイラついてもしょうがないのも変わらないw
レイアウトのツールがあと2世代くら進まん限り、合成結果が見えない設計言語は怖すぎて使えないでふ…。
>>78は2世代進んだその時もそう言ってるに違いない。
修正時にレイアウトが今より大幅に早く終わるようになれば、ってことだな。
再合成からやり直しても変わらないなら、必死にNETを修正しないで済む。
むしろそこまでギリギリの設計にしなければ(ry
歴史は繰り返す。
83 :
774ワット発電中さん:2006/04/02(日) 13:14:44 ID:dchMqOPg
3/33
もう見てないんちゃう?
今度くるとしたら、GWあけに泣き言いいにかな!?
30行しか書けない、の意味が未だにわからん。
順序回路しか書けないって意味だろ?
89 :
774ワット発電中さん:2006/04/13(木) 18:26:26 ID:RFmjzTq1
「組み合わせ回路しか書けない」じゃないのか?
みんな設計はエクセルでやるよね。
おれは自分の頭で
紙とエンピツでカルノー図
裏紙と鉛筆で状態遷移表。
設計は温泉でやるよ?
IDが555か、とおもたらmaxもいて、ちょっとしあわせ
96 :
774ワット発電中さん:2006/04/20(木) 15:17:57 ID:DFmDvYni
96
97
98 :
774ワット発電中さん:2006/04/22(土) 21:42:24 ID:gQ3UzhHD
新刊記念age
個人的にはこの人の解説書は出来がいいと思う
「アサーション検証の効率化のために Verilog-HDLによるテストベンチ」
ISBN:4-924998-66-4
本体価格:\3,000
発売日:2006/04/24
著者:枝 均
宣伝おつかれさま。
101 :
774ワット発電中さん:2006/04/23(日) 12:31:17 ID:s3wCB2dB
VHDLとVerilog-HDL どっちを先にやり始めたほうがいいの?
最初、VHDLの本買っただけどさ
他の本にVHDLとVerilog-HDLのサンプルコード書いてあってさ
どうもVerilog-HDLの方が記述量少ないけど最初はVHDLでガリガリ
書いたほうがいいの?
俺はVerilog-HDLの方が好きなんだけど(見た感じ)
Verilog-HDLから入っても問題ない?
それとも両方わかっておいたほうがいいのかな・・・
ウダウダ言いながら、どっちも使えないヤツが一番ツカエナイと思う。
そして、どっちも使えるやつが一番ツカエル・・・
って当たり前だが。
どっちでもOKよ。とにかくやってみることが大事ね。
ある程度できるようになると「オレVerilog派だからVHDLわかんない」
と言うヤツがいるけど、これがいけない。
あっちができれば、こっちもできるようになるし、
少なくとも読むことはできるようになる。そうならないといけない。
最初ならオレはVerilogを進める。VHDLに比べると参考書籍は1/3だが、
あえてVHDLにしなければならない理由は何もないんだよ。
VHDLに比べてタイプ量が圧倒的に少ないし、ソースも短くて
視認性がよい。また表現が直感的にわかりやすいからね。
> VHDLに比べてタイプ量が圧倒的に少ないし、ソースも短くて 視認性がよい。
裏を返せば、ツールの裁量が大きい、ってことかな?
>>101 両方必要なら、VHDLからはいるのをすすめる。
VerilogからはいるとVHDLって面倒(記述が増えるし)って感じで手をつけない
ような気がする…
107 :
774ワット発電中さん:2006/04/23(日) 20:41:07 ID:EXOC4Gmi
>>101 両方必要ないなら、Verilogからはいるのをすすめる。
VerilogからはいるとVHDLって面倒(記述が増えるし)って感じで手をつける意味がまったくない
ことにはっきり気づく気がする…
仕事なら必要な方、そうでなければ好きな方
109 :
774ワット発電中さん:2006/04/23(日) 21:23:58 ID:KioFeROV
ASIC/LSI屋さんならVerilog、SUN のソースは、Verilog
FPGA屋さんならVHDLの方が多い気がする。趣味だったらVerilog。
既に本買ってるのに、未だに迷ってる時点でダメ。
結局どちらも使えずじまいで終わるに200カノッサ。
両方必要ないなら、VHDLからはいるのをすすめる。
VHDLからはいるとVerilogって面倒って感じで手をつけなくてよいことがわかる…
Verilogの本たくさん出てますね。
いい時代になりました
仕事でもないのにVHDLやる奴 <=== 見通しの悪いマヌケな奴、死ね
Verilog --> SystemVerilog めっちゃ簡単、これからはSystemVerilogだね。
VHDL ---> オワタ、将来なし、マヌケな規格変更予定、将来性まるでなし。チョイスする奴の人生そのもの
115 :
774ワット発電中さん:2006/04/24(月) 00:17:12 ID:A2JMlB5f
>>113 俺だw
いや、adaっぽい言語を使ってみたかったんです
あげてしまった
やっぱVerilogがいいんかな・・・
うちの会社では全部Verilogです。
取引先も、全部同じく
宗教論争か
119 :
104:2006/04/24(月) 01:35:34 ID:ASBi0xDj
みなさん!ありがとうございます!!
>>109 の言っていることは昔のインターフェイス読んで書いてあった
そこに書いてあったことに漏れはびっくりしたよ
「VHDLの方が厳密な記述であるが、実際選ぶのは個人の好みに合わせるべきだ」って
今までC言語とかHTMLはスタンダードにあわせて勉強してきたけど
こう、幅広い選択が出来る体験は初めてで初心者に言語の評価をしろってのも難しい・・・
実際趣味なんだけどさ・・・趣味ってか学生なんだよね・・・
就職とかするときに有利かな〜と腹黒く考えてるけど
やっぱりC言語やってるとVerilogが読みやすい!
VHDLは軽く読める程度にしてVerilogはじめようかな!
ところで「Verilog」ってどう読むの?
CPLDはシーピーエルディーであってると思うけど
FPGAってエフピージーエーっていいの?
まあRTL記述ならそんなに大差はないと思うが
>>119 Verilogはヴィリエログって発音する
>>119 就職も考えて勉強するのは腹黒くもなんでもなく、
ある意味やって当然なこと。
VHDL,Verilogの違いが大問題と思っているのが問題。
就職に有利な勉強をすることが「腹黒い」と思っているのが問題。
「腹黒い」の意味を取り違えたまま社会人になろうとしているのが問題。
VHDLの78%は見栄で出来ています
VHDLの10%は回路で出来ています
VHDLの5%は濃硫酸で出来ています
VHDLの4%はお菓子で出来ています
VHDLの3%は言葉で出来ています
Verilogの58%は見栄で出来ています
Verilogの31%は赤い何かで出来ています
Verilogの6%はミスリルで出来ています
Verilogの4%は理論で出来ています
Verilogの1%は言葉で出来ています
126 :
104:2006/04/25(火) 00:33:59 ID:T5XjwBx9
ごめん腹黒いっていうのはイヤラシイってかそんな感覚だった・・・
工業大学なのにそういう勉強周りやっていないからセコイ人間だな〜と思ってしまう漏れ・・・
でも勉強して損なさそうだから ありがとうございます!
仕事ではVHDL、趣味ではVerilog HDLな俺
みなさん こんにちは
ちょっと質問させてください
Inverter
+------o<|------+
| |
| ________ |
| | | |
+--- |D Q|----+-----Half Frequency Ouput
| |
| |
Clock Input ----|CLK |
|________ |
D-Flip Flop
D-フリップフロップと インバータをこのように接続した
簡単な 分周回路は、Verilogでは使用できないんでしょうか?
この回路では 入力したクロック周波数を 半分にしたものが
出力から出てくるというものです。
ところが、Verilogで記述してシミュレーションすると、出力からは
不定値(x) しか出てきません。
Verilogでは、セット・リセット信号付きのフリップフロップしか
使えないようになっているんのしょうか?
>Verilogで記述してシミュレーションすると
ちなみにどんなふうに記述したのか
> Verilogでは、セット・リセット信号付きのフリップフロップしか使えない
べつにそんなことはないが、何らかの手段でリセットするしかない。
D入力にAND入れて、リセット期間中は一方を無理矢理0にしとくとか。
>>129 こんなふうに書きました。
フリップフロップとインバータは、ライブラリの部品を使います。
module bunsyuukairo( clockin, halffreqout )
input clockin; // クロックを入力してやる
output halffreqout; // 半分の周波数で出力する
wire invout;
DFLIPFLOP dff1( .CLK(clockin), .D(invout), .Q(halffreqout) );
INVERTER inv1( .A(halffreqout), .Z(invout) );
endmodule
module testbench;
reg nyuuryoku;
wire syuturyoku;
parameter STEP = 100;
bunsyuukairo undertest1( nyuuuryoku, syuturyoku );
// テスト入力
always #(STEP/2) nyuuryoku = ~nyuuryoku; // クロックを作る
initial begin
#0 nyuuryoku = 0; // 初期
#(STEP * 32) // ほどよい時間 動かして
$finish;
end
initial $monitor ( $stime, " nyuuryoku=%b syuturyoku=%b ", nyuuryoku, syuturyoku );
endmodule
----------------------------------------
(いま手元ではコンパイラやシミュレータのソフトが無くて
試してたコードもなくて 打ち直したものなので
間違い あるかもしれないですが)
>>130 ありがとうございます。
そうなんですか。
回路を書き換えるしか方法は無いのかな。
テストベンチ部の工夫だけで できないかと
かなり調べて回ったんですが、どの本もWebの情報も
リセット有りフリップフロップを使ったものばかりでした。
回路検証シミュレーションの為に 回路を書き換えてしまうと、
それは果たして ちゃんと元の回路を検証してることになるのか
という問題がありますよね。
ちょっと手を加えて、検証が終わったら 元に戻す というのは
ミスが混入する可能性が必ず残ってしまう。
>>132 Verilogじゃなくても、どんなシミュレータを使おうと結果は不定になる。
考えてみ、たとえばこの回路で10ステップ後に出力はどうなっている。
HighかLowか分かんないだろ。だから不定という結果が正しいのよ。
それっぽく、スイッチングする波形を出しても、結果と合わないのなら
シミュレーション結果としては嘘だろ。
>>133 そういう問題か?
>>128の回路はあくまでもD-FFなんだから回路としては問題ない。
クロックで値が確定するんだからRSのような襷がけとは違う。
出力が不定になるのは初期値が確定して無いからじゃないのか?
Dの入力にセレクタでもつけて、初めに初期値を与えて、何クロックか後に
Inverter側に切り替えるかすれば不定値はなくなるんじゃないか?
それを同期リセットと言うんじゃ
>>134 初期値が確定してないというのは、その通りよ。リセットかけないで、出力が
不定なのはおかしいだとかいう人物に、そんな説明は通じないと思ったんで、
だめな例をあげたのよ。
VHDLだと、
signal AAAA : std_logic :='0';
という風に、シミュレーション用に初期値を与える記述があるよ。
Verilogは使ってないから有識者の人よろ
ModelSimでシミュレーションしてるなら、
FourceやChangeコマンドでシミュレーション時に任意の値を設定できるよ。
>>132 念のため
不定('X')のインバート結果はやっぱり('X')なので、いつまでたっても不定のまま。
たまに、x と、同じ信号の not x の積は 0 にしてくれよと思うこともある
>>137 Verilog でも同様の機能はあるよ。
でもリセットをかけないこと自体がおかしいんで、そんなことを
するのは、意味ないでしょう。
ゲートアレイやカスタムLSIを設計しているエンジニアだとありえないんだが。
FPGAやCPLDを設計しているエンジニアだと、こんなでもOKなのかな?
>>140 > Verilog でも同様の機能はあるよ。
どんなふうに書いたらいいか、ぜひ 教えてください。
Verilogで シミュレーション用の初期値 与えられたら すごく助かります
PLLか?
>141
ヒント
initial または force & release
144 :
137:2006/04/26(水) 13:46:07 ID:x/MWoKDR
CPLDやらFPGAは初期値が保証されてたりするからねぇ
FPGAなんかはどうせコンフィグ書き込みするし。
でもASICでもリセット無しFF使ってます。箇所はある程度限定されるけど。
>>139 ちょっと違うがFPGAのLUTで、出力が0か1に決まる場合でも
入力のどれかがxだとxになっちゃうんだよな〜
>>140 まあ後で書き直せるからな>>PLD
普通リセット入れるが
マスタークロックを分周して8種類の周波数が決められたクロックを作らなければなりません。
一番低いマスタークロックの周波数はどうやって決めればいいですか?
愛かな
愛だね。
>>148 32.768kHzにすればいいと思うな
kHzじゃ何をするにもトロいから、3.579545MHzぐらいがいいよ。
MSXかよ
カラーNTSCで遊べていいね!w
155 :
774ワット発電中さん:2006/05/11(木) 01:39:00 ID:CHYQ674N
VHDLでDDRメモリのアクセスモジュールを作っているんですが、
ModelSimで使えるDDRメモリのモジュールってどこかにありますか???
自分で作れる自信はない・・・(・ω・`)
ビヘイビアモデルでいいならメモリメーカのサイトを探せば見つかる
157 :
774ワット発電中さん:2006/05/11(木) 17:00:13 ID:CHYQ674N
>>156 ビヘイビアモデルってIBISとかいうやつでしょうか?
なんかmicronのサイトでverilogのシミュレーションモデルは見つかったんですが、
VHDLで記述したロジックと連結することでけるのかな・・・。
>>157 ModelSimのライセンスがVerilogとVHDL両方あれば
混在Simはできる
>>157 >ビヘイビアモデルってIBISとかいうやつでしょうか?
違う。それは伝送モデル
>>155 ところで、なぜDDRにしたの?
特に制約がないのならば、DDR2の方がお奨め。
値段も今はそんなに違わないし、何よりもDDR2には
Posted CASがあるので設計が圧倒的に楽。
DDRがいっぱい余ってるから
ダンスダンスレボリューション
モバイルDDRを使いたいから…とか。
あれ、DDRとDDR2って同じコネクタにさせるんだっけか?
×
166 :
774ワット発電中さん:2006/05/24(水) 03:33:50 ID:zFdQma4V
Spatan3を、Xilinx ISE7.1で、Verilogで使っていますが、
一つ教えてください。
ピン出力をLVDSで使いたいのですが、どのように設定すればよいのでしょうか。
1. Verilog上で何かをインクルードみたいなことが必要?
2. ソースは特に何もせずに、PACE上でUCFに何か設定をする?
3. そのほかどこかに設定する箇所がある....とか
宜しくお願いします。
英文のヘルプをググレば記述例がでてくる
情報収集はdesign waveだけで十分かな?w
とら技についてきたおまけをようやく開けてVHDLの勉強し始めたものです。
すごくくだらない質問なのですが、
a vector(7 downto 0)
b vector(3 downto 0)
とかの信号があったとして、
a <= '0' & b & "000";
とかってしますよね?
こういう時に使う ' ' と " " ってどういう風に意味が違うのでしょうか?
よろしくお願いします。
言語仕様読んでから質問しろよ・・・
171 :
774ワット発電中さん:2006/05/30(火) 09:36:54 ID:UR48H1KI
すいません。ちょっと質問させてくださいー。
entity DDR_3TOUT is Port(
clk: IN std_logic;
d0: IN std_logic;
d1: IN std_logic;
en0: IN std_logic;
rst: IN std_logic;
q: OUT std_logic
);
end DDR_3TOUT;
architecture RTL of DDR_3TOUT is
signals_PWR : std_logic;
signals_GND : std_logic;
signalq_data :std_logic;
begin
s_PWR <= '1';
s_GND <= '0';
U0_FDDRCPE : FDDRCPE
port map(
D0=>d0,
d1=> D1,
CE=>s_PWR,
C0=>clk,
C1=> not clk, --Error!
CLR=>rst,
PRE=> s_GND,
Q=>q_data
);
q <= 'Z' when (en0= '1') else q_data after 2860 ps;
end RTL;
ModelSimでシミュレーションさせようとすると、not clkの部分で、
The actual for formal 'c1' is not a globally static expression.
というエラーが出てしまいます。
今まではこんなエラーでなかったと思うんですが、
ModelSimのバージョンを6.0dにアップしてから発生するようになりました。
何か仕様でも変わったんでしょうかねぇ。。
他にも今までOKだったものが同じ感じでエラーになってしまい
シミュレーションできなくなってしまいました。。
同じような症状の方いらっしゃいませんか??
うまくいくわけない気がするのは漏れだけ?
173 :
774ワット発電中さん:2006/05/30(火) 13:34:54 ID:UR48H1KI
だめなんですかね??
ちなみにコレだと大丈夫でした。
C1=> "not" (clk)
あと、
generic map(
DLL_FREQUENCY_MODE : string := "LOW"; -- error near ":": expecting: ')' ','
STARTUP_WAIT : boolean := TRUE -- error near ")": expecting: ';'
);
でもエラーが・・・。
論理合成は出来るのに、なんでシミュレータではだめなんだろう・・。う〜ん
あ、いや・・ごめんなさい。
generic mapについては書き方間違ってました。。
・・・なんでISEで論理合成できたんだろう
>>173 port mapになぜnotがある?
signal inv_clk;
begin
|
|
inv_clk <= not clk;
label :port map(
|
c1 <= inv_clk,
図形一筋で10年設計してきた、VHDLの2年生です。
まだまだHDLは未熟者です。XC3S1000、使用率80%
コメント以外でソースコード3万行の非同期回路設計&
合成をしたら、大分慣れました。図形のみで設計してきた
自分にはステートマシン以外は論理合成する前からどんな
回路になるかは分かる様にもなりました。ステートマシン
を多用して、階層が深過すきのとても読み辛い他人ソースを
モディファイしなければなりません。仕事なのでやるしかない
ですが・・・。
質問です、generate文ってステートマシン以外使いますでしょうか?
訂正 =>の向きが違った
label :port map(
|
c1 => inv_clk,
>>175 使えるけど、いろいろ面倒なこともあるので使わない。具体的に何があったかは
忘れた。
例えば同じブロックを数個インスタンスするのにfor generateでやったりできるけど、
同じモノを何度も書くのが面倒ってレベルだったらperlでHDL吐かせたりしてる。
非同期設計ってどんなんでしょ?ラッチ多用してボロー計算してって感じでしょうか?
verilog pli/vpiのよさげな
書籍、サイトってありませんか。
なんかサンプルみたいなのが
見つからなくて。
質問です。
まずこちらの画像を見ていただけますか?
ackが1の間だけ正しいdataが出力されている回路です。
http://sugachan.dip.jp/img/src/20060616115013.gif このdataをレジスタに保存したいと思います。
そこで、Verilogで、
input clk;
input ack;
input [1:0] data;
reg [1:0] data_reg;
always @ (negedge clk) begin
if (ack == 1'b1) begin
data_reg <= data;
end
else begin
data_reg <= data_reg;
end
end
のように書いてみました。
クロックの立ち下がり時にackが1なら
dataをdata_regに取り込むように記述しました。
これで一応シミュレーションではウマく行くんですが、
クロックの立ち下がりを見て動作するような回路は問題ないのでしょうか?
しかも、他の部分についてはクロックの立ち上がりを見て動作しています・・・
また、この方法で駄目だとしたら、
他にどのような方法で
あるクロックの立ち上がりから次のクロックの立ち上がりまでしか
正当でないデータをレジスタに取り込めば良いのでしょうか?
よろしくお願いします。
普通にnegedgeをposedgeにしてみたら?
>>181 レスありがとうございます。
しかし、posedgeだとdataが変わる瞬間であるため、
きちんとデータを取り込めないと思うのですが。
ackとdataを出力している回路もclkをクロック信号として動いてるんだと
考えてたんだけど違うの?
>>182 そのためにホールドタイムを取るのですよ。
ちなみに、なぜ
data_reg <= data;
であって
data_reg = data;
でないかは理解できていますか?
後者のような書き方をするとシミュレーションでもご指摘のようなことが起きます。
それを防ぐためのノンブロッキング代入なのです。
昔、まだ<=が使えなかった頃は
data_reg = #1 data;
のようにディレイを入れてシミュレーションしていました。
(年寄りの昔話ですが・・・・)
しかし、凄く冗長な書き方ですね。
私だったらこうするな。
always @ (negedge clk)
if (ack ) data_reg <= data;
>>181 いま試してみたところ、
posedgeでうまくいきました。
すみませんでした。
いまから
>>182以降のレスを読ませていただいて、
もう一度考えてみます。
みなさん、ありがとうございました。
論理的なタイムチャート図と物理時間を考慮した波形図を混同している??
ディレイゼロのシミュレーションをしているとハマリ易い。
丁寧な説明をしていただいたおかげで
何となく分かってきたような気がします。
ちょっと確認をお願いしたいのですが、
1.
外部モジュールからの入力信号は、
クロックの立上がりや立下がりより
セットアップタイム時間分 早いタイミングで入って来ている。
2.
内部のレジスタなどは、
クロックの立上がりや立下がりより
ホールタイム時間分 遅いタイミングで更新される。
・・・というような理解で良いんでしょうか?
また、このことは回路を記述する際に積極的に利用して良いものなんでしょうか?
なんかタイミング的に凄くシビアな感じがするんですが。
>>188 勝手に早かったり遅かったりしません。配線遅延などを計算して、必要に応じてディレイバッファを挿入します。
これは合成時に調整するものなので、RTLでは気にしません。
同期設計の場合はクロックとデータが同時に変化しているように見えてもクロックエッジに対してデータが
hold time以上遅れて到達するものとして考えます。
190 :
774ワット発電中さん:2006/06/16(金) 23:42:46 ID:Fmo8Ad9q
ackがクロック同期してるかどうかって事を聞いてるんじゃまいか?
理想的な完全同期回路ではすべてのFFが同じクロックに接続される
実際の回路でもゼロディレイバッファなどを使って理想に近い状況を作ることが可能
せっかく説明してもらってるのに
ぜんぜんおっしゃってる意味が理解出来ない俺がいる・・・
ダメポorz
フリップフロップはクロックエッジに対して
・規定のセットアップ時間より前に入力データが確定しなければいけない。
・規定のホールド時間が過ぎるまで入力データは変化してはいけない。
という決まりがあるのです。
今話題になっているのはセットアップではなくホールドの方。
で、実際の回路にはディレイがあるのでホールド時間は確保できる、
と思うのは甘いです。クロックの方にはスキューがあるので、後段の
フリップフロップのクロックの方が遅いなんていう状態が普通に発生
します。この遅れがデーターの遅れより大きいとホールドタイム違反に
なるわけです。この場合、データのパスにディレイを入れて誤動作しない
ようにするのだけど、RTLの時点では関係ない話です。
って、文字だけで説明するのは難しいね。
>なんかタイミング的に凄くシビアな感じがするんですが。
タイミングはシビアですよ。だからパス解析をするのです。
パス解析でホールドタイム違反が出ないようにしないと
チップがまともに動くことは期待できません。
ところで、そもそもRTLを書いた後はどうしたいの?
おはようございます。
> フリップフロップはクロックエッジに対して
> ・規定のセットアップ時間より前に入力データが確定しなければいけない。
> ・規定のホールド時間が過ぎるまで入力データは変化してはいけない。
> という決まりがあるのです。
この点単体についてならば、
なんとか分かったような気がするんですが・・・
じゃあ結局、(どういう理由で)どういった風に考えて
どういうつもりでRTLを記述すれば良いのかが分かりません。
凄く丁寧に説明してもらってるのに・・・orz
また今夜、もう一度レスをじっくり読ませてもらって考えてみます。
> ところで、そもそもRTLを書いた後はどうしたいの?
実は学校でVerilogを勉強しているだけなので、
RTLを書いた後はありません。
>>194 私も初心者ですが、、、以下の考え方で書いてます。、
以下、n番目のクロック(エッジからエッジの区間)における状態をstate(n)として、
state(n)の信号状態をstate(n-1)の信号状態を利用して
ノンブッキング代入で記述する。
同期回路のRTL書いているのであれば、あまりエッジ前後のFFのセットアップ
ホールドを気にしすぎる必要はないと思うのですが、、、
Quartus II 6.0になってからPins設定がやりにくくなったorz
まえはLocationのセル選択して「A10」とか打ち込むだけでよかったのに、
6.0になってからはそれができなくなった。
ほかの簡単な方法があるんですか?
テキストエディタで編集
まず、以下を前提とした回路を想定する。
・Ack,DataはFF出力
・すべてのFFはCLKの立ち上がりで変化
・すべてのFFのCLKはまったく同じタイミングで入る
すると、こうなる。
| ┌──┐ ┌──┐ ┏──┐ ┌──┐
|──┘ └──┘ └──┛ └──┘ └── CLK
|───┬─────┳━━━━━┳─────┬────
|───┴─────┻━━━━━┻─────┴──── DATA
| ┏━━━━━┓
|─────────┛ ┗────────── ACK
| 配線遅延├┤ ↑このタイミングで取る
|
|───────────────┳━━━━━┳────
|───────────────┻━━━━━┻──── DATA_REG
だから、問題ない。(前提を満たしていればね)
ずれた。メモ帳で見てくれ。
>>194 Verilog HDLでシミュレーションできればいいのであれば
皆さんが書いているように難しいことを考える必要はありません。
フリップフロップ(reg)は
・入力はクロック立ち上がり直前のデータを取り込む。
・出力はクロック立ち上がり直後に変化する。
これだけです。
ちゃんと動くようにするのは論理合成以降のお仕事なので
細かいタイミングは無視しましょう。
学生さんがRTLのお勉強をするならそれで十分です。
多少気持ち悪くても、そういう割り切りが必要です。
もっとも、実際の設計ではRTLの段階でも稀にホールド
タイムを考慮することもありますけどね。それは上級編の話。
論理回路の質問もここでしていいですか?
偽
宣伝乙
>>204 宣伝乙
でもな、プロセッサを設計する人は訳書でなく原書を読むべきだろ?
CQの付録基板みてると本もだめだめかな!?と思ってしまうw
まずは設計者を検証する。
>>204 設計と検証は別物だよ。
それに出たのはもう3ヶ月位前だよ。
この手の手法はリスピンを減らすためにはあまり役に立たないね。
ただ、駄目上司に「ここまでやってますから」と言うためには有効。
211 :
774ワット発電中さん:2006/06/27(火) 23:37:44 ID:vAn7mFd5
みなさん、しょーもないことですが、教えてください。
Velilogを始めたのですが、always@( )のセンシティビィティーリスト内に
3つ書いたら、ISEが変なエラーを吐いてきました。本もあさってみたのですが
みーんな1つか2つしか書かれていません。
なぜ2つまでしか書かないのでしょうか?
3つとか4つとかorでくくって書いてはいけないのでしょうか?
例えば、こんな場合です。
A) OKというか、よくある例
always @( posedge clock or negedge reset) begin...
B) ISEが怒る例
always @( posedge clock or negedge reset or posedge SW) begin....
SWの↑変化でも非同期で処理をして欲しいのですが。
次に、宣言無しだとデフォルト32bitという話を聞いたのですが、
次のような書き方でもゲート数を無駄に食うでしょうか?
reg [7:0] hoge;
:
:
hoge <= 2; という場合と、
hoge <= 2'b10; という場合です。
どちらも先頭で[7:0]と定義してあり、8bit幅のレジスタなので、
代入時は2でも2'b10でも同じではないのかな?と思うんです。
どうでしょうか。宜しくお願いします。
m9(^Д^)プギャーーーッ
説明できないんだったら黙ってれば?w
m9(^Д^)プギャーーーッ
>>211 Vipperだったここで
ちょwおまw
とか言っておきゃいいんだろうなあと思わせるような質問ですね。
>>211 ISEのエラーを読んでみたらいかがでしょう。
回路を知ってる人はそういう書き方はしないと思います。
ゲート数のほうは、両方の記述のレポートを比較すればわかります。
>>211 ターゲットデバイスが何だかわからないが・・・
Vertex-4のユーザーズガイドを見るとSRとREVを使って
非同期セット/リセット付きフリップフロップを実現
できるみたいなので、問題はセンシビリティリストじゃ
なくて、論理の記述にあるんじゃないか?
SWと他の信号で論理を組んでいるとか?
ただ、同期回路では一般的には非同期のセットとリセットを
同時に使うことはないけどね。
ま、「変なエラー」って時点で
質問させてください。
SDRAMのシミュレーションモデルをVHDL作ってみようとしているのですが、
最初のデータ宣言すらわかりません。
カラム100、ロウ100、データ16ビットはどのように宣言すればいいのでしょうか
ググってSDRAMのモデルをみつける
拾ってきたモデルがどうしてるか見ればOK
ちゃんと努力すること
最初のデータ宣言すらわからないなら、SDRAMのシミュレーションモデルなんて
夢のまた夢だから作ってみようとすることをやめればいいと思うな。
>>211 ライブラリに非同期2系統のものがないからテクノロジマッピングに
失敗するんだろ。
もしあれば成功はする、けどASICとかもそうだが普通はない。
1系統なら必ずある
そういうテクノロジに依存した記述はNG
>>221 目的は何?
シミュレーションモデルというのは一般に外から見て本物と同じように動けばok。
でも、「カラム100、ロウ100、データ16ビット」ってSDRAM内部の構造を忠実に再現しようとしているよね?
レジスタ10000個で・・・
228 :
774ワット発電中さん:2006/07/03(月) 19:12:58 ID:1JhJr9Ni
わざわざ作らんでも、
SDRAMのHDLシミュレーションモデルならMicronあたり探せばいくらでもあるがな。
メーカにゴォラーって言えばOK!!
verilogの話なんですが、
function文でもalways文でも
組み合わせ回路を書けるのは何でですかね?
alwaysで順序回路を書いたつもりが
状態が1個しかなくて組合せ回路と等価になってしまっただけでは?
そりゃ、functionをぽこぽこ置けた方が記述が楽だからじゃないの。
合成後の回路を考えずに乱用すると痛い目に会うけどね。
そんなRTLを押し付けられた人が…orz
VHDLって何のために存在しているんだろう。
はっきり言って糞以下。ゴミ言語だと思うんだが・・・
早くこの世から消えて欲しい。
馬鹿の一つ覚え。
「↑ 日本語でおk」の繰り返し乙。
236 :
774ワット発電中さん:2006/07/12(水) 00:11:32 ID:dAz9bMeP
ハイインピーダンスってものが調べてみてもいまいち
つかみきれないんですけど、教えてくれませんか?
電流が流れていない状態のこと。
以上。
>>237 > 電流が流れていない状態のこと。
かなり違うんジャマイカ
「流れていない状態」だと、ショートしてても給電されてなきゃ該当してしまうよ。
電流が「流れれない」状態でねえの。
TrやFETによってドライブされていない状態
「入出力インピーダンスが高い状態」以外のナニモノでもないだろ?
これがわからなければ足洗った方が良い
物理的には繋がっているが電気的には繋がっていない状態
VHDLに関する質問です。
architecture ARCHITECURE_NAME of ENTITY_NAME is
(略)
のARCHITECURE_NAME部分についてですが、
下位モジュールをインスタンス化して使うときにはStructure
そうじゃないときはRTL
テストベンチのときはStimulus
という認識であってますか?
また、このARCHITECURE_NAME部分は、
可読性を上げるためだけに書いてるんでしょうか?
StructureだろうがRTLだろうが
シミュレーションはうまく動いてるんですよねえ・・・
>>244 何でもいい、変数名みたいなもので動作には関係ない
246 :
to:sage:2006/07/13(木) 02:04:44 ID:VHpgcMqY
みんな、カッコいい…
>>245 そうでしたか。
ありがとうございました!
>>244 ひとつのentityに対して複数のarchitectureがあるとき、
上位からARCHITECURE_NAMEを指定して選べたような気がする。
icarus verilogの公式が落ちてるようだが
公開停止ってことは無いよな?(゚Д゚)
>>250 cverでいいじゃん。pliも使えるし。
cverか・・・
確かに、オープンソースの方が公開停止
になる可能性が低い分だけ安心だよなあ。
個人のフリーソフトなんていつ停止するか常にガクガクブルブルだ。
>>250 普通につながるけど…
おれが見てるとこ、違うのかな!?
>>253 もう、復旧してるっぽ。
一時的に落ちたか、鯖メンテなだけだったっぽい。
255 :
774ワット発電中さん:2006/07/25(火) 01:29:44 ID:vMIE7VuM
この言語とC言語との違いを3つおしえてくれ
日本語と英語とフランス語の違いと同じだよ
ほとんど一緒
根本的にシーケンサか並列処理かの違い
テクノロジマッピングまで可能なフリーの合成ツールある?
259 :
774ワット発電中さん:2006/07/26(水) 21:43:34 ID:+GNIHNwu
sfl(PARTHENON)とかどうなんだろう
261 :
258:2006/07/26(水) 22:51:27 ID:i+cBTBAy
PARTHENONはフリーじゃないことない?
いろいろ探し回ったんだけど、フリーでどうにかするって無謀だったかも。
ちょっと癖のあるデバイス向けに合成する必要があったので。
フィット以降は自力でやるつもりだった。
在野の論文をもとに自ら実装するしかないかなあ。
あるいは手動で(笑
昔のトラ技にParthenonで書かれた6502が載っていた。
1994年7月号
263 :
774ワット発電中さん:2006/07/27(木) 03:19:40 ID:xChzKjr7
PANTHEONはクラッカー
264 :
774ワット発電中さん:2006/07/27(木) 20:00:07 ID:SEXs5n2z
すみません、、教えてください。お願いします。どこをどーすればよいやら。。。
やりたいことは、CIOと名付けた双方向のバスにAinpの値を出力してやったり、
Boupにバスの値を与えたいのです、、、、
どーやってもシュミレーションで不定になってしまいます。
3ヶ月ほどちまちまやってましたが、わからずじまいです。
おねがいします。
www.seibu-kg.pref.hiroshima.jp/kensyu/fpga/buff_hd.html
こういうのとは違うと思うのです。
library ieee;
use ieee.std_logic_1164.all;
entity buff is
port(
oe, clk, rs : in std_logic;
Ainp : in std_logic_vector (7 downto 0);
Boup : out std_logic_vector (7 downto 0);
CIO : inout std_logic_vector (7 downto 0)
);
end buff;
architecture buff_body of buff is
begin
process (clk, oe, rs) begin
if rs ='0' then
CIO <= (others => '0');
end if;
if oe='1' then -- in
CIO <= Ainp;
else -- out
Boup <= CIO;
end if;
end process;
end buff_body;
>>264 なにをしたいのか理解に苦しむが、こういうことをしたいのかな?
process (clk) begin
if (clk'event and clk='1') then
if rs ='0' then CIO <= (others => '0');
elsif oe='1'then CIO <= Ainp;
else Boup <= CIO;
end if;
end if;
end process;
チト違うか。リセット時のBoupの不定もついでに消して。
process (clk) begin
if (clk'event and clk='1') then
if rs ='0' then CIO <= (others => '0'); Boup <= (others => '0');
elsif oe='1'then CIO <= Ainp;
else CIO <= 'Z'; Boup <= CIO;
end if;
end if;
end process;
BoupがCIO出力時もダダ漏れでもよければこうか?
process (clk) begin
if (clk'event and clk='1') then
if rs ='0' then CIO <= (others => '0');
elsif oe='1'then CIO <= Ainp;
else CIO <= 'Z';
end if;
end if;
end process;
Boup <= CIO;
特にclkで叩く必要なければこうか?
process (oe,Ainp) begin
if oe='1'then CIO <= Ainp;
else CIO <= 'Z';
end if;
end process;
Boup <= CIO;
267 :
774ワット発電中さん:2006/07/28(金) 00:42:01 ID:I8N/aESD
>265-266
回答ありがとうございます!ただ家のPCではできないので、明日やってみます。
何がやりたいかってのは、、、なんて説明したらよいのでしょうか。。。
DigitalIOボードの入出力とFPGAのinoutを結んで、IOボードで、FPGAの先の回路を
動かそうとしてます。
だからCIO = DigitalIOボード、Ainp = Dinputしたい、 Boup = Doutputしたい
みたいなかんじです。rsは非同期リセットです。
明日ダメだったらまた一週間後になります。。。。
双方向I/Oは入力時にはHiZになってないといけないことが理解できてない??
CIO <= x"00" when rs='0' else -- こうやりたそうな雰囲気なので
Ainp when rs='1' and oe='1' else
(others=>'Z');
Boup <= CIO when rs='1' and oe='0' else
(others=>'0');
Verilog-AとVerilog-AMSって別物ですか?
なんか急にVerilog-Aについて勉強しなきゃならなくなったんですが、
図書館にはVerilog-AMSの本しかないんです・・・
普段デジタルしかやってないのに
急にアナログ回路のHDL記述の勉強をはじめてすぐに理解出来るのか不安なんですが、
なにかおすすめの書籍があったら教えてくれませんか?
271 :
774ワット発電中さん:2006/08/06(日) 02:40:55 ID:kzkpu7eQ
土日プログラマーですが、質問させてください。
今日「階層構造の記述」を勉強しました。要は、module内に他のmoduleを組み込むことです。
手元の本のソースをそのまま入力してコンパイルしたのですが、エラーで止まってしまいます。
どのようにしたらOKになって.bitの生成まで行けるのかが知りたいです。
module top ( ck,....) // topモジュールを書く。
:
FF FF1 ( .ck(ck), .d(d), ......); // 下位モジュールを呼び出す
:
endmodule
module FF ( ck,....) // 呼ばれるモジュール FF を書く。
:
endmodule
試したことは、
1) 1つのファイルtop.vに、topモジュールだけを書いて
もう一つ別のファイルFF.vに呼び出されるモジュールを書いて、topと同じフォルダにセーブ。そしてコンパイル。
XSTはOK出ますがTranslateでエラー。FFが見あたらないよ、という内容。
2) では、FF.vをtopの中にインクルードしてコンパイル。XSTの段階ですでにエラー。
どの本を見ても、呼び出されるモジュールの置き場所について特に書かれていないのです。
どこに置けばOKが通るものなのでしょうか? いろいろですみません。 宜しくお願いします
・top.vとFF.vを完全に晒した方が良い
・コンパイルに使用したソフトの具体的な名前を書いた方が良い
・・・と思いますよ。
俺は、あまりFPGAに焼くところまでやらないし、
よくて論理合成までって感じなんだけど、
コンパイルがどうのってことは、
>>271はFPGAに焼く用のファイルを作ろうとしてるのかなあ?
単純にソフトにそれらのファイルが登録されてないだけって気がしたりしなかったり。
ところで、Verilog-AMS使ったことある人は皆無?
ひょっとして、もう使われる見込みの無い、死に行く定めの言語?
> ・コンパイルに使用したソフト
XSTといっているから、ISEを使っていると思う。
ISEだと、ファイルを追加しないとだめだよ。
274 :
774ワット発電中さん:2006/08/09(水) 04:17:24 ID:rEJt1hrG
271です。
コメントありがとうございます。
>>272 コンパイラ(って呼ぶのでしょうか)は、ISE8.2です。
>>273 そうなんです。その「ファイルの追加」という行為は、いったいどのようにすれば良いのか
さっぱりわからないんです。
>>272でも書きましたが、
・1つのソースファイル内にそれら2つのモジュールを書いてみましたが、でめでした。
当然ですが、`includeもだめでした。
・1つのホルダの中にtop.vとFF.vのファイルを置き、top.vをコンパイル→だめです。
雰囲気的に、ISEの左上のウインドーの中にあればよいと思っています。
ucfファイルのように、何かから┗型の線で結ばれたもののような気がしますが
デバイス名、top.v、その他どれにくっつければ良いかわかりません。
何かツールの使い方がわかっていないような気がします。
このあたりの使い方を説明したものは、どこかにあるのでしょうか?
ザイリンクスのページにも行ってみましたが、探し切れませんでした。
みなさんはどのようにして覚えたのでしょうか? ツールをスイスイ使える人って尊敬してしまいます。
よろしくお願いします。
>>274 WindowsベースのEDAソフトは使ったことないんで
参考にならないだろうけど、組み込み系の
ソフトウェア開発環境なんかでは
Project Managerみたいな名前のメニューがあって、
そこでソースプログラムを登録するようになってる。
(そのソフトがTclをサポートしてるなら、set search_pathやら
read_fileやらするのが楽かもしれないけど、まあ、Tclなんて
サポートしてるとは思えないw)。
276 :
774ワット発電中さん:2006/08/15(火) 00:21:20 ID:dNAd9B4p
>>271です。
コメントありがとうございました。ご回答がおそくなってすみません。
教えて頂いた内容をもとに 今日1日いろいろ試して
やって、やっとコンパイルが通るようになりました。
ありがとうございました。ソースは以下のような内容です。
練習ですので、中身に意味はありません。
調子に乗って、Spatanの中のブロックRAMも使ってみたいと思っています。
ありがとうございました。
module MUX2( in_clock, sel, a, b, out_result );
input in_clock;
input sel, a, b;
output out_result;
reg out_result;
inv g1(sel, selb);
aoi g2(sel, a, selb, b, fb );
inv g3(.a(fb), .f(f) );
always @( posedge in_clock ) begin
out_result <= f;
end
endmodule
module aoi (a,b,c,d,f);
input a,b,c,d;
output f;
assign f = ~((a&b)|(c&d));
endmodule
module inv(a,f);
input a;
output f;
assign f= ~a;
endmodule
Verilogで、
always @ (posedge clk) begin
count <= count + 1;
if(count == 5) begin
:
end
end
とするのと、
always @ (posedge clk) begin
if(count == 5) begin
:
end
count <= count + 1;
end
とでは、何か違いがあるでしょうか?
ぼくの理解では、 <= は次回のクロックの時のデータ準備なので、
どちらも同じだと思うのですが。どうでしょうか?
同じだろ・・・何処からどう見たって。
279 :
774ワット発電中さん:2006/08/17(木) 14:53:21 ID:RPDgl/PK
同じだけどさぁ、カウンターってステートマシンの一種なわけよ。
んで、if文はそれをデコードしているのね。
ステートマシンとデコーダが同じalways文になっているというのはあまり関心しないな、ワシは。
280 :
774ワット発電中さん:2006/08/17(木) 16:34:06 ID:4O2v8y3U
>>277 どちらにしても全く問題ないよ
>ステートマシンとデコーダが同じalways文になっているというのはあまり関心しないな、ワシは。
こういうやつっているんだな。
デコーダであってもステートマシンですが何か?ステートマシンの意味も理解してないと思ったら、
>カウンターってステートマシンの一種なわけよ。
技術用語の表記の仕方も知らんようで。
281 :
774ワット発電中さん:2006/08/17(木) 17:17:09 ID:P1rqiOt0
>>277 昔なら always を分けろと言っただろうけど、今時のツールなら問題ないかと。
大昔は、ツールのバグが出にくい記述方法というのがノウハウだった(w
283 :
774ワット発電中さん:2006/08/20(日) 05:31:05 ID:KS3oWGzU
ちなみに、同じソースをアルテラとザイリンクスのツールでコンパイルすると
どっちが お利口さんでしょうか。
生成されるゲート回路なんていちいち見ないから分からんなあ・・・
スライス数とかでは単純に比較できないし・・・
動作周波数とかだったら比較できるんですかねえ・・・
>>283 その比較は意味ないでしょ。ターゲットデバイスで使えるコンパイラ決まってるわけだし。
Symplfyみたいな汎用コンパイラとベンダのコンパイラを比較するなら意味あるけど。
>>277 関係ないけど、
>ぼくの理解では、 <= は次回のクロックの時のデータ準備なので、
<=って今回のクロックまでにデータを準備しときました、すぐラッチしやがれ、ってタイミングだと私は思う。
シミュレータとしては、clkが来たら0nsで右辺とかif文を評価して、0ns経過後に<=を実行する、っていうイメージだと思う。
DWM買ってVerilogかじってみたんだけど、VerilogってC言語みたいに洗練されてる感が感じられないんですが、みなさんどうなんでしょう?
もっと組み合わせ回路と順序回路をいっしょに書けた方が楽そうな気がするし、どうみてもつぎはぎ文法に見えるし。
287 :
774ワット発電中さん:2006/08/25(金) 22:30:35 ID:oYFeaT5Y
コンパイラ次第
>>286 洗練されてる感って何?
例えばどんな風に書きたいの?
>>288 main( clock clk, reset !rst, input clk2, output[7:0]out )
// この関数内のD-FFのクロックはposedge clkになる。
// いちいちalways文を書かなくて良い。
{
reg[7:0] data=0, status=0, a; // rstがloになったら非同期クリア
sub sub1( input clk, rst, load_a, [7:0]in, output[7:0]out1 );
// これでload_aとinとout1のwireが宣言できる。
sub sub2( input clk, rst, 0, 8'hx, );
// ブロッキング・ノンブロッキング代入が分かりづらい。
// reg宣言した変数はD-FFの出力端子である、としてregへの代入は必ず<=、
// wireへの代入は= を書かなければエラーにすることにしたい。
if( ++status == 100 ) // regなら +1値を <=代入。wireなら =代入。
status = 0;
load_a = 0;
case(status){
0: // begin end不要
load_a = 1; // 二回代入したら最後の代入を有効とする(<=も)。
in = data - 1; // status != 0のときはinは 8'hxになる。
data <= out1; // 組み合わせ回路と順序回路を一緒に書ける
3:
sub sub2( , , 1, data, out ); // こういう書き方も見通しがよいかも。
} // status != 3 のときのoutは8'hxになる。
sync( !clk2 ){ // この中のD-FFのクロックはnegedge clk2になる。
a -= 2;
}
}
>>289 まさかここまでちゃんとレスしてくれるとは!ありがとう!
でも洗練されている様には見えないんだけれど。。。
かえって分かりづらい。
欲を言えば、
「Verilogで書くとこうだが、
>>289案だとこう書ける」
みたいな例が欲しいなあ。
>>290 例として適切ではなかったかもしれませんが
>>289をverilogで書くとこうです。
まず、行数が長いですね。
module main( input clk, rst, clk2, output[7:0]out );
reg[7:0] data, status, a;
reg load_a, load_b; // always文で組み合わせ回路を書くためreg。
wire [7:0] in, out1; // モジュール呼び出しの引数
// (どこでどのように使う変数かは追わないと分からない)
always @( posedge clk, negedge rst ) begin // 順序回路
if( !rst ) begin // リセットもいちいち記述しなければならない。
status <= 0;
data <= 0;
end
else begin
if( status == 99 )
status <= 0;
else
status <= status + 1; // ここでようやく +1していることが判明
case(status) begin // このcaseだけ見ると意味不明なので、
0: data <= out1; // 下の組み合わせ回路のcaseと一緒に書きたい
end
end
end
always @* begin // 組み合わせ回路(順序回路と一緒に書けない)
load_a = 0;
load_b = 0;
in = 8'hx;
in2 = 8'hx;
case(status) begin
0: begin // begin endなんて書かなくたって一意にきまるのに…
load_a = 1;
in = data - 1;
end
3: begin
load_b = 1;
in2 = data;
end
end
always @( negedge clk2 ) // 違うクロックを使うときは
a -= 2; //
>>289ではsyncを使う
sub sub1( clk, rst, load_a, in, out1 );
sub sub2( clk, rst, load_b, in, out );
endmodule
292 :
sage:2006/08/26(土) 22:58:56 ID:tLnM2qcu
そもそもC言語自体が洗練されているとは思えないからな。
思ったのは、
「なんかコーディングスタイルが変じゃね?」
ってことと、
「
>>291が求めているのは
RTL記述できる言語じゃなくて
動作記述できる言語なのかな」
ってこと。
>>292 同意。
↑みたいなことしか言えんでごめんね。
気に入らないなら俺言語策定して
Verilog へのトランスレータ作ればいいのでは?
ああ、確かに。
Verilogへ変換、なら、
論理合成だって出来るしなあ。
見た目のスタイルに拘ったコンパイラってないね。
パッと見てわかりやすくて、パッと見てカッコイイ言語とか。
見た目やスタイルを決めるのはコンパイラじゃなくて言語仕様だからな。
コンフィグレーションデータを直打ち
こういう言語やってると英語圏の国に生まれたかったといつも思う。
せめて各言語でもう少し文法を統一してほしかったw
わかるわかる。
でもそれだと、言語が複数存在する意味が無いような。。。
固有のキーワード関連はそのままで、かぶってる
キーワード関連だけでもw
>>291を見て、なんだろうこの記述は?ってところが何か所か合ったんだけれど、
それらはすべてVerilog-2001で追加されたものだったんですねえ。。。
古い参考書で勉強してそのまんまにしておくと、
せっかくの便利な記述を使えないままになっちゃうんだな。
訓練次第ではヒューズマップを直にかけるようになるかも知れん
>>300 もし自分が英語圏生まれでこの記述みたら、もっと違和感感じないかな〜。
昔、日本語BASICっての見た事あるけど俺は凄く気持ち悪かったぞ。
日本語Verilogを想像してみ。使いたいと思うかな?
他国語の方が、一種の演算子として捉えられるから楽かもしれんよ。
塊 主( 入 拍子, 再始動, 拍子2, 出[7:0]出力 );
保持[7:0] 情報, 状態, イ;
保持 読み出し_イ, 読み出し_ロ; // 常に文で組み合わせ回路を書くため保持。
接続 [7:0] 入力, 出力1; // モジュール呼び出しの引数
// (どこでどのように使う変数かは追わないと分からない)
常に 於( 正縁 拍子, 負縁 再始動 ) 始 // 順序回路
もし( !再始動 ) 始 // リセットもいちいち記述しなければならない。
状態 <= 0;
情報 <= 0;
終
さもなければ 始
もし( 状態 == 99 )
状態 <= 0;
さもなければ
状態 <= 状態 + 1; // ここでようやく +1していることが判明
場合分け(状態) 始 // この場合分けだけ見ると意味不明なので、
0: 情報 <= 出力1; // 下の組み合わせ回路の場合分けと一緒に書きたい
終
終
終
常に 於* 始 // 組み合わせ回路(順序回路と一緒に書けない)
読み出し_イ = 0;
読み出し_ロ = 0;
入力 = 8'hx;
入力2 = 8'hx;
場合分け(状態) 始
0: 始 // 始 終なんて書かなくたって一意にきまるのに…
読み出し_イ = 1;
入力 = 情報 - 1;
終
3: 始
読み出し_ロ = 1;
入力2 = 情報;
終
終
常に 於( 負縁 拍子2 ) // 違うクロックを使うときは
イ -= 2; //
>>289ではsyncを使う
副 副1( 拍子, 再始動, 読み出し_イ, 入力, 出力1 );
副 副2( 拍子, 再始動, 読み出し_ロ, 入力, 出力 );
終塊
308 :
774ワット発電中さん:2006/08/28(月) 19:51:03 ID:OzZNozRz
FEPが無い環境じゃコーディングできないだろw
>>307もっと徹底したらどうか
= -> 「代入」
<= -> 「転記」
- 1 -> 「1 減ずる」
- 1 -> 「1 加える」 とかとか
コンパイル「翻訳」のメッセージは英文のみだったりしてなw
>>300 英語圏の人は単語を形でとらえている。漢字と同じ。
意外と変数名だけ日本語にできれば十分かも。
読み出し
読みだし
読出
読み込み
とかで、文法誤りがたくさん出そうだ。
313 :
306:2006/08/29(火) 20:23:02 ID:kqsxApHF
>>307 ・・・・・・・・・・ (゚Д゚;)
ま、とりあえず俺の脳内イメージを具現化して頂いた事を感謝しておく。乙!
「塊 主( 」はgoodな訳ですね。
>>312 だからー、母国語だといろんな言い回し知っててダメなんだよ。
知らない国の言葉のほうがコーディングしやすいと思う。
中国語Verilogとかあったら、日本人はコーディングしやすいかもよ〜。藁
314 :
774ワット発電中さん:2006/08/29(火) 23:35:38 ID:tHSRsGMA
しかし、VerilogってCに似てるのはいいけど、begin end 多すぎ。
そこまで似せてるなら、Cみたいに{ }でいいじゃん。連接の{ }は「」で代用。
あと、counter <= counter + 1; もいいけど、
counter++; とか counter += 2; とか許して欲しい。
それと構造体もね。
文字タイプ数がVHDLに比べて少なくて済むのは◎
15 downto 0 → 15:0 これは評価できる。えらいぞVerilog
2chlogを制定しよう。
拡張子は .w
式がどう解釈されてるか調べるの面倒だな。インタプリタってないものですかね。
とりあえず「全てのオペランドが、signedでないとsignedにならない」ってのを今日覚えた。
でもたぶん忘れてまたはまる.w
>>314 記述は楽かもしれないが、ハード動作が訳分からなくなるんじゃないか。
それに、counter++ や counter+=2 を追加 したら counter++< counter+<=2 が必要だし、
構造体を導入したらハード馬鹿食いするとしか思えない。
SystemC使うかソフトウェア組んでたほうが良くないか。
まあ 15 downto 0 → [15:0] は記述が減って可読性もあがりそうだけど。
wireの構造体は賛成
VHDL使っているけど、何回も同じ内容を書いていたりするな。
コンポーネントとかコンポーネントとかコンポーネントとか
>>319 プりプロセッサでも使ってマクロで記述するとか
>>319 パッケージにコンポーネントまとめて、それを呼ぶようにしる。
322 :
774ワット発電中さん:2006/09/01(金) 19:16:15 ID:MWfTcivx
>>314 すべてSystemVerilogで解決
323 :
774ワット発電中さん:2006/09/01(金) 22:17:23 ID:3h+1Bhs0
■「でたらめトップ」(=団塊の世代)に精神を破壊されるサラリーマン■
精神を病むサラリーマンが増えている。
その理由として、社会経済生産性本部は、仕事がハードになったとか、責任
が重くなったのに権限が小さい…など、いろんな理由をつけている。しかし、
最大の理由は、弱い立場の部下に、無茶な目標や仕事を与えたり、自分のミス
の責任を押しつける「でたらめ上司」が増えたからだと思う。
なぜ増えたかというと、同様の「でたらめトップ」が増えたからである。そ
の証拠に、会社の80%以上、すなわちトップのほとんどが、「会社の業績が
悪いのは、社員が怠けているからだ」と決めつける成果主義や、「能力開発は
社員がやれ」と説くコンピテンシー論に飛びついた。
そして、「限界を超す高い目標にチャレンジすることで、能力が飛躍的に高
まり、現状をブレークスルーする革新的な成果をあげることができる」といっ
た精神論を楯に、高い目標設定を強制し、追い立てる。あげくは、大きな成果
をあげるか、そうみせかけるのが上手な社員以外は、怠慢かつ無能な人間だと
決めつける。
これでは、誠実な社員の意欲と誇りが踏みにじられ、精神がゆが
められ、破壊されていって当然である。しかも、トップは、「他社もやるから
うちもやる」と思うだけで、自分がいかにひどいことをやっているかに思い至
らない。
http://www.yukan-fuji.com/archives/2006/08/post_6730.html
324 :
774ワット発電中さん:2006/09/01(金) 22:35:54 ID:X0DCU0r9
>>322 ホントですか?
XilinxのISEに組み込んで使うようなことも出来るのでしょうか?
>>317 >まあ 15 downto 0 → [15:0] は記述が減って可読性もあがりそうだけど。
記述量を気にするくらいなら、upto 使えよ。
てか、15 downto 0 も [15:0] もタイピング時間は変わらんだろ。
VHDLは記述量が…っていう奴にリアルでもよく会うけど、
まともな設計者でそんなこという奴に会ったこと無い。
違う部分での優劣は聞くけどね。
タイピング時間もdowntoといちいち書いた方が掛かりそうなもんだが、
それより場所を取るのが嫌。
ごちゃごちゃとした記述は面倒だし気持ち悪い。
どうしても使えって言われない限り、
極力VHDLは使いたくない。
327 :
774ワット発電中さん:2006/09/02(土) 01:10:32 ID:LrJtfBlS
>まともな設計者でそんなこという奴に会ったこと無い。
まともな設計者で工数に直結するコーディング量を無視する奴に出会ったことないね。
328 :
774ワット発電中さん:2006/09/02(土) 01:22:55 ID:LrJtfBlS
VHDL == 終わった言語
SystemVerilogの登場でほぼ完全死。南無阿弥陀仏
つーか仕様が固まった時点で既に終わってたけどな。。。藁
既に広く使われてたVerilogとほとんど変わらんくせに書かすわ書かすわ。マジで糞
プリプロセッサ機能ぐらいは持たせろバカ
Adaオタの国防総省のためだけに存在意義がある。ペンタゴンとは付き合いないんであしからず。
よかったよかった平和な仕事してて♪
コーディングなぞ単なる作業ですよ?
入力時間ごときは設計時間に比べたら微々たるものです。
>>329 まあ確かに、Cとかとは違う気がする。HDLは。
Cとかでのソフトウェアプログラミングの場合は、
プログラミング言語は思考のための道具って感じだけど、
HDLは、既に考えた設計を単にその言語で実装(?)しているだけっていうか・・・
でもやっぱVHDLの方がめんどいし、
そもそも設計時間との比較は見当違いじゃない?
XilinxのEDKのIPライブラリが全部VHDLだから仕方なくVHDL使ってるんだが、
動作設定をパラメタライズして合成時にパラメータを指定して好みの動作を
させるような記述はVelirogだとちょっと足らないのかな?と思う
Simは絶対Velirogで書きたい
どっち使っても良いなら
まともな技術者ならVerilog選ぶだろうな。
トップ設計は図形
コーディング量の話ですが、タイピング時間の問題ではありません。
デバッグや改造の時に眺めなければならない分量が少ない方が良いと思うのです。
きまりきんときの呪文を書くなら省略しても良いようにして欲しい。
なんか一年ぐらい前と随分様相が違ってきたな。
そのときはVHDLがゴミとでも言おうものなら突っかかってくるバカが多かったんだが、
今はかなりの香具師が糞仕様ぶりを納得してるみたいだな。
そもそもCが普及したのだって、書きやすさだからな。
HDLであろうがプログラム言語であろうが、コーディングが楽なものが普及して当然だ。
>>330 >Cとかでのソフトウェアプログラミングの場合は、
>プログラミング言語は思考のための道具って感じだけど
それは
>>330がそういう目的にCを使ってるからだろ?
例えばシミュレーションとか。
でも組み込み実装の場合は既に考えた設計をその言語で実装するだけだ。
HDLはプログラムではないが、実装まで慎重に考えたコーディングが求められた場合、
>>330の感想は必ずしも正しくない。
HDLはネットリストと、動作タイミングを記述するもの。
プログラム言語は手順を記述するもので両者は異なるものという認識には同意するが。
横にずれるけど
確かに扱いやすさからCが普及したのはそうだけど
資産引継ぎで考えるとCは厳しいな
ある程度タイピング量が多くてもコーディング仕様がある程度決まってるのがいい
>>338 その通りなんだけど、デジタル土方にはそれが理解できない。
だからこその土方なんだろうけど。
>資産引継ぎで考えるとCは厳しいな
書きやすいが読みにくいからな。
人に正確に伝えるのであればVHDL > Verilogかもしれんし、
巧みの技をあんまり発揮しようのないFortran > C、Pascal > Cかもしれんが、
最終的に書きやすい言語が普及したんじゃないか?
はっきり言って、VerilogももっとCをパクッてbegin,endのかわりに{}にすべきだった。
連接のほうはもっと別な記述法を考えればいくらでもあるんじゃないか?
見た目のフィールまでぱくるのはなんかマズイのかね?
>>339 >デジタル土方にはそれが理解できない。
まぁ、まともなエンジニアはデジタルとは死んでも言わんな。
ろくすっぽ論文も技術誌も読んでない証拠。つまり
>>339 == "デ ジ タ ル" 土 方
そのものってことか?
デジタルぐらいで何をそんなに一生懸命になってんだ?
使いにくければコンバータ作ればいいじゃない
ある道具だけでやろうとするから無理がある
でも統合環境も捨てがたいし。
え、それも作れって?うぇ〜ん
>デジタルぐらいで何をそんなに一生懸命になってんだ?
そいつのレベルが一目瞭然でわかるからさ。
統合環境使うなら自由度が低くて当然
まさか統合環境付属のエディタ使ってるとか……
たかが記述言語の乗り回しでゾウガメはやっとれん
348 :
774ワット発電中さん:2006/09/03(日) 01:21:30 ID:eQCUyHN9
VHDLは面倒なんだけど・・・
趣味でやってるっていうのと、この不可思議さが好きでVHDL使い続けてるww
まあHDL始めたときに集めた本がVHDLだったからっていうのもあるんだけど
この擦れに軽石が混ざっている。玉石混交。
趣味でVHDLって凄く几帳面そう
設計は几帳面なくらいの人じゃなきゃ任せるの大いに不安
歳をとると、エラーチェックが厳しいVHDLの方がチョンボを防げる(w
記述が面倒って言ってる人って、補完が効くエディタ使っても面倒なの?
354 :
774ワット発電中さん:2006/09/03(日) 09:15:52 ID:cZn3Ut4m
補完が効くエディタでプリプロセッサの代わりができるかよ
読む分には「補完が効くエディタ」は無意味だしなあ。
質問です。
parameterの配列というのは
どう使えば良いんでしょうか?
試しに、以下のようなものを書いてみました。
data_inが0のときは1を、data_inが1のときは0を出力するモジュールのつもりです。
cverでシミュレーションしてみようとすると、
parameterの定義部分で
ERROR** [687] parameter array p illegal - explicit type declaration required for parameter arrays
というエラーが出ました。
module Test_Test( // テストベンチ
);
reg data_in;
wire data_out;
initial begin
data_in = 1'b0;
#10;
data_in = 1'b1;
#10;
$finish;
end
initial begin
$monitor("%b -> %b", data_in, data_out);
end
endmodule
module Test( // data_inが0のときは1を、data_inが1のときは0を出力するモジュール
input data_in,
output data_out
);
parameter p[0:1] = {
1'b1,
1'b0
};
assign data_out = p[data_in];
endmodule
VisualStudioなんかだと統合環境がバックグラウンドコンパイル走らせてるからなあ。
プリプロセッサというより統合環境のエディタを使うこと自体がコンパイルのパスの一つになってる。
その他の開発支援機能も含めて単体エディタの単なる辞書機能とは異なるんだよ。
単体エディタで書いてメイクするほうがいいとかっていう 346,357みたいの見るとHDLをとりまく
環境ってソフトの開発手法を手本にしてるとはいえ、まだまだ出遅れてるなって感じ。
357は自分だ(w。たしかに自身もそうだけど。
>>354としたかったのでした。
適当ですが、こう書き直したら
とりあえずシミュレータは走りました。
でもparameter integerって・・・integerで良いんでしょうか?
それに、parameter配列のインデックスに変数が使えないなんて・・・
module Test_Test(
);
reg data_in;
wire [1:0] data_out;
Test Test(
.data_in(data_in),
.data_out(data_out)
);
initial begin
data_in = 1'b0;
#10;
data_in = 1'b1;
#10;
$finish;
end
initial begin
$monitor("%b -> %b", data_in, data_out);
end
endmodule
module Test(
input data_in,
output [1:0] data_out
);
parameter integer p[0:3] = {
2'b00,
2'b01,
2'b10,
2'b11
};
// assign data_out = p[data_in];
assign data_out = (data_in == 1'b0) ? p[3] : p[0];
endmodule
気になったので調べてみた。
wire[1:0] p = 2'b10;
integer data_in_int;
always@* data_in_int = $rtoi($bitstoreal(data_in));
assign data_out = p[data_in_int];
ウルトラ高価なツールのライセンス考えたら、すべてがテキストエディタで、
すべてがバッチ処理。流すのはシェルスクリプトの仕事。
HDLを取り巻く環境は、ソフトウェアに10年以上遅れて、キータイプ数は十倍多く必要で、
マウスの操作は百分の一だ。
ファイル圧縮一つとっても、キーボードからtarでパイプだのgzipだのクレイジーです。
ガバッとマウスで選んで->「ここに書庫を作成」で済む話しじゃないですか。まったくUNIX好きは
度し難い連中が多いねと。そんなにキーボードが好きか。
さらに開発環境を整えるどころか、コーディングルールでがんじがらめだ。業界団体があるぐらいだからな。
順番が逆だろって言いたいね。仕方ないけどさ。
めまいがするほどの膨大な検証に、群雄割拠の無数のツール。しかも操作のルールもまちまち。
アホみたいに長い工程の間に次々と増えて行く無数のファイルフォーマット。
しかもテキストファイル多し。何万行あるんだよこのファイルって感じ。
そしてマシンは厳重に管理されて、ちょっとした便利ツールをインストールすることすら許されない。
自宅でFPGAをフリー(制限付きとか)のGUIツールで開発する環境に比べたら、業界最先端は石器時代ですよ。
それに習得必須のツールの数も倍増しますぜ。アホみたいに増えます。
何が言いたいかというと、利用者の意識改革が無いと、HDLを取り巻く状況は変わりそうもないって感じかな。
ソフトウェア業界より変化が激しいってこともあるんだけどね。
でもね、verilogHDLを『たくさん書くだけ』ならIDEはいらんのも事実だよ。
仕様書が出来たら、あとはそれを見ながら頭に浮かんだ回路を書くだけだからね。予約語に色が付けばじゅうぶん。
シーケンサもツールでコード生成するしね。
>>361 ツール屋の餌食になってるって言いたいの?
結論:361はキーボードが大好き
364 :
774ワット発電中さん:2006/09/10(日) 04:33:00 ID:2M66E7Uu
間抜けな質問ですみません。
FPGAはマイコンの役割を果たすのでしょうか?
ロボットを作りたくてセンサやモータの制御、
パソコンとの通信がしたいのです。
>>364 FPGAはユーザが回路を作り込めるデバイスです。
マイコンにしようと思えばマイコンにもなります(ただし、アナログ入力はありません)。
ただ、マイコンで済むのならマイコンを使った方が楽です。
#IDがM66でロボットとは、なかなかのセンスです
366 :
774ワット発電中さん:2006/09/10(日) 10:36:59 ID:2M66E7Uu
〉365
FPGAの方がむしろ楽なのかなと思ってました。
ハードの制約(電圧、ファンアウト等)を気にしないで組めて
マイコンの代わりにもなるとなると
回路やマイコンの勉強の負担が減るかなと感じます。
マイコンの方が楽というのはどこら辺がでしょうか?
・・・↑は、ギャグで言っているのか?
>>366 とりあえずやってみればわかるよ。
高級言語よりもアセンブリ言語のほうが自由度が高いが、色々と面倒な
ことも多いでしょ。
それと一緒でマイコンよりもFPGAの方が遥かに自由度が高いが、遥か
に面倒(それはもう限りなく・・・)なことも多い。
基本的にマイコンで出来ることはFPGAで全て出来る(容量さえ許せば)。
しかし、論理的には可能でも、作業負荷が大きすぎて現実的には不可
能に近いことも多い。
FPGAはマイコンの補助として使うと、お互いの短所を補いつつ、お互い
の長所を利用できるのでとても便利。
IPコアって簡単に使えるの?
> とりあえずやってみればわかるよ。
プログラム(本当はHDL)が書いた順に動作しないのはおかしい、とか言い出しそうだけど。
> とりあえずやってみればわかるよ。
>ハードの制約(電圧、ファンアウト等)を気にしないで
組んで動作しないのはおかしい、とか言い出しそうだけど。
こういうのはシミュは動くからさらにややこしい。
FPGAは量産では使えない。
>>366 センサ
アナログ出力ならA/Dコンバータ機能
デジタル出力なら通信機能
モーター制御
サーボ制御になるだろうからPWM機能
パソコンとの通信
RS-232CかUSB通信機能
FPGAは自由度高いけど、全てを実現するのは大変なので、
多機能マイコンを使い、足りない機能をFPGAで追加するのがいいよ。
>>369 お金さえあれば比較的簡単なものもあるよ。
でも何も内臓コアに限る必要はない。簡単なのは外部バス直結。
基板作るお金がなくて配線面倒なら、シリアル通信接続とか、普
通のポート使って自分のプロトコルで通信するとか。
最初は面倒でも一度作ってしまえば後は楽だからね。
>>372 どの程度から量産と呼べるか分からないが、メーカの話ではFPGA
乗せてる量産品も結構あるらしいよ。
平面テレビが流行りだした頃って、FPGA使ってるとか言ってなかったっけ?
>>369 契約からんできそうでウザクね?
ただの箱扱いできるわけじゃないし
デバイスメーカも数が出る民生品に使ってもらいたがっているという側面。
…もっと低消費電力で使えないものやら。
>>378 一ヵ月待てばゲートアレイで出来るだろ。
Etherとかワイヤレス等のアプリのVHDLオープンソースってあるかなあ?
試してみたいぞ。
verilog-a使ってアナログ回路のシミュレーションしてる人っていないの?
取り巻く環境が把握できない。verilogで検索かけてもほとんどディジタル回路だよね
>>382 俺もVerilog-Aについて知りたくて
ぐぐったり、本を探したりしたんだけれど、
具体的な情報はほとんど得られなかった。
(文法とか、無料のシミュレータとか)
結局、Verilog-AMSの日本語の本(絶版)が1冊だけ見つかったから、
それを図書館で借りてきて斜め読みするだけにとどまった。
使える無料のシミュレータが無かったし。
PSL>>>SVA>越えられない壁>>>>>>OVA
でFAですか?
なにそれ。いきなり。
PSL
SVA
OVA
どれも聞いたことの無い単語。
>>385 384がいきなりなのは同意だが、この板を見ているような椰子で
どれも聞いた事ないってのはヤバくないか??
アサーションって聞いた事ないか?
> この板を見ているような椰子で
香具師だけど聞いたことないです orz
VHDLぐらいはなんとか書けます
あー、自分で書いて変な日本語だと思う・・・指先でしか会話していない所為でしょうか・・・
アサーションは知っている。
Original Video Animation なら知っている。
俺も俺も
コア使って楽チンで開発している人はいるの?
全然楽チンじゃない。
ここって、朝と昼休みと帰宅後の書き込みしかないんだね。
アサーションは知っていてもPSL, SVA, それとアニメじゃない方のOVA(w)
を知らない390の知っているアサーションって何だ?OVLか?
と、また3文字略語を貼ってみるテスト。
assert.h
>>393 >>394 マウスのクリックだけでいろんなIPおよび、それを駆動するごく簡単なソフトが
自動的に作成されるものもあるよ。。
コア内蔵だから大変だと言うことは特に感じない。
400 :
774ワット発電中さん:2006/10/08(日) 07:14:19 ID:BF5CT+CF
>>399 就業中に書き込んだ方が健全だとおもったのさ
軽さんクビになるよ
クビになるよ軽さん
今VHDLでFIFOを書いてみてるんですが、
参考書等のFIFOはリードとライトを別々のサイクルに行うような仕様になっていますが、
書き込みと読み込み同時に出来るFIFOは作れるのでしょうか?
初歩的な質問かも知れませんがよろしくお願いします
>>403さん ありがとうございます。
RAMの構造とはFPGAなどのハード的な問題ですか?
それともVHDLの記述の問題ですか?
すみません
RAMを使うまでもないサイズのFIFOなら、FFで作れば読み書き同時にできる。
1RWのRAMで作るなら、本質的に読み書きどちらかしかできないから、
無制限好き勝手の同時読み書きは無理。用途に応じた工夫が必要。
FFではでかすぎるような気がするのでFIFOを使おうかと思い同時に読み書きできるか聞きました。
ビット幅32bitのFFを1024個連続でつなげるのは無謀ですかね?
前の回路で使うデータを次の回路でも使うので取っておきたかったんです。
前の回路と、後ろの回路でパイプライン処理させたいわけでして・・・
1つの回路が1024クロックかかるもので。
1RWのRAMとはどういうことなんでしょうか?
当方stratixEP1Sを使う予定なんですが1RWとはどういう意味でしょうか?
>>406 Stratixなら問題なくできる。
で、いちいち聞かなくても家のマシンにQuartusIIインストールして
ちょっと書いてコンパイルしてみれば分かるだろうに。
>>407,406さん
情報ありがとうございます。
実際に今からQuartusインストールしてみます。
因みにどのデバイスで出来るかどうかは、実験してみる以外に、仕様などで判断するには
どの部分を見ればよいのでしょうか?
>>406 良く判らんが、 ビット幅32bitのFFを二段持っていて、(カウンタで作った)1024クロックごとの信号で前段のFFから後段のFFに転送する、とかではイカンの?
>>410 書き方がわるかったですね。すみません。
前の回路からのデータは1024個ありまして、
1クロックごとに1個のデータを参照します。
1024クロック過ぎると、後ろの回路も同様に1クロックごとに1つのデータを参照します。
うーん伝わるかなぁ
何せ回路設計は初めてなもので、セロリーもなにもわからずあせっています。
designwaveが先生です。
>>411 なるほど、それはシフトレジスタが必要だろうなあ。がんがれ
>>411 シフトレジスタのオバケが必要なら処理方式を考え直した方が良いかもしれないなあ。
>>412 さんありがとうございます
orzセロリーになってる・・・
>>414さん
そうですか さすがにでかすぎますかね?
>>409 同時に読み書きできるかどうかはFPGAが持っているRAMが
シングルポートかデュアルポートかによる。
詳しくはデータシートに書いてある。
>>417さん
それは内蔵RAMにフィッティングしたときにということですよね?
単純にLUTなどのセルにフィッティングした場合は記述によりけるということで
良いんでしょうか?
>>418 ロジックセルならどのデバイスでもできる。
>>419さん
ありがとうございました。
自分が無知なばっかりに、皆さんにご迷惑おかけしました。
前途多難だな
明日、ASIC設計会社の面接なんだけど、どんな質問した方がいいの?
平均残業時間
RTLコードを読むときどんなエディタが便利良さ気?
お勧めあれば教えて欲しい
windows上でまったり読みたいんだがワードパッドしか知らない・・・w
>>424 Debussy。
あっ、でもWindows版は開発終了だな。
xyzとやら
RED
どうでも良い事だけど、HDLで書いた物って「プログラム」っていう?
「FPGAのプログラム」ってどうも違和感があるから「デザイン」って言ってるんだけど、皆はどう?
「プログラム」は避けたい。回路記述と呼んでる。
「HDLのコード」または「HDL」。
文意からマイクロコードと区別できる場合は「コード」とか。
少なくともプログラムとは言わない。
プログラムは違う
ソースという言い方も避ける人がいる
RTLとか回路とか呼んでる
HDL打ち込みはソフト業
434 :
774ワット発電中さん:2006/10/16(月) 11:08:22 ID:XXB+fkq/
ウホッ、matlabのお勉強するかな
フリーソフト?
>>434 3rdパーティのなら昔からあったよね。
いずれにせよ、浮動小数点でしょ?
コストが甘々のところじゃないと使えないんじゃないかな。
そんなもん学生とかHDLに不慣れな香具師が使うような代物で、
少なくとも吐いたHDLを改造するだけの腕がなければ製品には使えないよ。
一応世の中の標準を知る参考にはなると思うけどね。
いや、ふつーは固定小数点だろ
IPコア内蔵してscanテスト出来んのか?
物によるべ
ARM7なんかは別途テストベクタが必要
IPコアメーカが許可しない
443 :
774ワット発電中さん:2006/10/29(日) 08:21:36 ID:Dj1kYp53
誘導されてきました。
VerilogHDLを用いたMINIPSアセンブラについてですが、テキストに
1: initial begin
2: InstMem.mem_data[0] = 32'h20011234; // addi $1, $0, 0x1234
3: InstMem.mem_data[1] = 32'hac030004; // sw $3, 4($0)
4: InstMem.mem_data[2] = 32'hfc000000; // halt
5: end
という書き方と
ADDR: Instruction #Mnemonic
0000: 20010001 # addi $1, $0, 1
0004: 0061202a # slt $4, $3, $1
0008: fc000000 # halt
という書き方(InstMem.mem_data[]= があるかないか?)があるのですが、
これらはどういった違いがあるのでしょうか?
後者は$readmemhするんでしょ
445 :
774ワット発電中さん:2006/11/02(木) 11:19:29 ID:GQVCnvRJ
test
446 :
774ワット発電中さん:2006/11/07(火) 03:04:05 ID:QW0WX3KI
icarusに見下りつけ、Cver 試用始めました。
さすがに売り物下りだけあって精巧そう。
期待してライブラリファイルもマージしてコンパイル。
220model.v → クリア
altera_mf.v → ERROR!!
やっぱタダ路線はこの辺の壁通過できないのか…。
それともおいらのコンパイルがアホなのか…。
この辺クリアした人っている?
447 :
774ワット発電中さん:2006/11/08(水) 09:40:47 ID:jBkPOH5I
無理。Modelsimにしろ。Veritakでも通るけどな。
448 :
774ワット発電中さん:2006/11/08(水) 09:45:18 ID:QlEWM32t
ネタ禁止
449 :
774ワット発電中さん:2006/11/08(水) 11:25:43 ID:FrPUMKHs
quartusのエディッタって日本語文字化けするんですが、
直す設定ってありますか?
ちょっと直したりするときに他のエディッタ立ち上げるの
めんどくさいので、できるだけquartus上で編集したいのです
ソースに2Byte文字入れてるの?
俺は怖くてできないぜw
Quartusの設定で外部エディタを使える様に出来るハズなのでそこを設定してみたら?
>>446 veriwellはどう。sf.netにある。
452 :
774ワット発電中さん:2006/11/13(月) 16:59:09 ID:o1xyoW4h
これはすごいな…
是非、どういう思想の元にこういう記述にたどり着いたのか教えてくれ。
454 :
774ワット発電中さん:2006/11/14(火) 00:37:14 ID:kCeljIuo
>>451 情報サンクス
けどやっぱりaltera_mf.vの壁はこせなかったよ。
文法エラーみたいにこいてた。
完全にサイのマークのシュミレーションツールしか対応してないんだな。
むぅ。
455 :
774ワット発電中さん:2006/11/15(水) 16:39:42 ID:VV1H+VUw
process文がいまいちわかりません。2つあった場合下のprocess文は1クロック内で処理することが保障されるのでしょうか?
サンプルコードではこのようになっていました。なぜ下のprocess文をCLKで同期する回路にしなくてよいのか、わかりません。
process(RST,CLK)
begin
if(RST='1')then
各リセット
elsif(CLK'event and CLK='1') then
CURRNET_STATE:=NEXT_STATE;
case CURRENT_STATE is
when fast=>
if(HIT='1')then
NEXT_STATE=secand;
else
NEXT_STATE=fast;
end if
when second=>省略・・・・・
end case;
end if;
end process;
HIT<=HIT_1 or HIT_2;
process(RESULT_1,RESULT_2,RESULT_3)
begin
if(RESULT_1=JYOUKEN_1 and RESULT_2=JYOUKEN_2) then
HIT_1<='1';
else
HIT_1<='0';
end if;
if(RESULT_3=JYOUKEN_3) then
HIT_2<='1';
else
HIT_3<='0';
end if;
end process;
456 :
774ワット発電中さん:2006/11/15(水) 16:40:23 ID:VV1H+VUw
tabが消えてる・・・ 見にくくてすみません
457 :
書き直しました:2006/11/15(水) 16:47:59 ID:VV1H+VUw
process文がいまいちわかりません。2つあった場合下のprocess文は1クロック内で処理することが保障されるのでしょうか?
サンプルコードではこのようになっていました。なぜ下のprocess文をCLKで同期する回路にしなくてよいのか、わかりません。
process(RST,CLK)
begin
if(RST='1')then
各リセット
elsif(CLK'event and CLK='1') then
CURRNET_STATE:=NEXT_STATE;
case CURRENT_STATE is
when fast=>
if(HIT='1')then
NEXT_STATE=secand;
else
NEXT_STATE=fast;
end if
when second=>省略・・・・・
end case;
end if;
end process;
HIT<=HIT_1 or HIT_2;
process(RESULT_1,RESULT_2,RESULT_3)
begin
if(RESULT_1=JYOUKEN_1 and RESULT_2=JYOUKEN_2) then
HIT_1<='1';
else
HIT_1<='0';
end if;
if(RESULT_3=JYOUKEN_3) then
HIT_2<='1';
else
HIT_3<='0';
end if;
end process;
VHDLのことはよくわからんが、
下のprocess文は組み合わせ回路を記述しているんだろ?
1クロック内で処理される保障はどこにも無いです
最後のprocessは以下の2行と等価だと思うんだが・・・・
HIT_1 <= '1' when RESULT_1=JYOUKEN_1 and RESULT_2=JYOUKEN_2 else '0';
HIT_2 <= '1' when RESULT_3=JYOUKEN_3 else '0';
HIT_3<='0'って間違ってないか?
461 :
457:2006/11/15(水) 22:08:44 ID:BxIBejhe
皆さんレスありがとうございます。
サンプルコードを自分なりに汎用に書き換えたので少しおかしいかもしれません
>458 そうです 組み合わせ回路ですが、一つ目のprocess文で
二つ目のprocess文のHITを条件として使っているので、
1クロック内におわる保障がないとおかしいと思ったので質問させていただきました。
>459 ということはタイミグによっては一つ目のprocess文で思い通りの動きを
しない場合があるということでしょうかね?
>460 そうですね。460さんの文と等価だと思います。HIT_3 は間違ってますか?
まだ知識が浅いので間違いがわかりません。ただ、2つ目のprocess文でHITが決まり、
それを一つ目のprocessで使っているという事がいいたかっただけです。
2つ目のprocess文は組み合わせ回路なんだから
おおざっぱに言えば瞬時に値が決まっていくわけだよな。
だから動作周波数がめちゃくちゃデカい値に固定されていない限り
まあ1クロック内で処理を終えられるやん。
というか、普通、論理合成とかやるときにツールが
次にクロックが叩かれたときにレジスタの直前のワイヤの値がちゃんと決まっている様に
遅延時間を考慮して
最大動作周波数とか出してくれるんじゃなかったっけ?
463 :
457:2006/11/15(水) 22:45:14 ID:BxIBejhe
>>462さん(前の方アンカー付け間違えてすみません)
そ、そうなんですか。ツールがそれを保障する周波数を出してくれるということですね。
それなら安心です。因みにquartus使う予定です。
下の記述はどこのサンプルコードなんだ教えてくれ。
本なら買わないようにするから。
465 :
457:2006/11/15(水) 23:32:36 ID:BxIBejhe
いやいや 自分でサンプルをもとにか書き換えたんですよ。
わかり易いようにと思って書き換えたのですが、間違えてたみたいですみません。
もとはもっと長いやつです。
いわゆるステートマシンだね(元のサンプルは)
遷移状態(first,second...)がFFに入ってて、それが条件(Hitとか)によって次の
クロックでの遷移状態に影響を及ぼす。
例えばfirstの時にHitが1なら次のクロックではsecond、Hitが0なら次もfirst、みたいな。
で、質問のほうは、既に答えもでてるようだけど、
FFの出力〜組み合わせ回路〜FFの入力、までがたとえば回路遅延が10nsだったとすれば、
その回路は10ns周期が最大動作周波数ということになるわけで。
回路遅延はデバイス依存だから、結論をいうとツールにまかせておけばって話になる。
467 :
457:2006/11/16(木) 17:02:25 ID:0nq72f3a
>>466さん ソースコードのわかり易い解説ありがとうございます。
まさに自分が伝えたかったことです。
それから、質問の方ですが、わかり易い回答ありがとうございます。
理解する事ができました。これを参考にステートマシンを設計したいと思います。
本当にありがとうございます。
あーあ、STARCの低能連中は
どうしてああも、文字化けが大好きなんだろうねえ。
この間購入した
RTL設計スタイルガイドVerilog編2版なんか
誤字脱字ならともかく文字化けで読めないところがあった。
その訂正メールが来てたけど
「訂正内容は添付のPowerPointのファイルを見ろ」
・・・って、皆が皆、PowerPoint使える環境だと思ってんのか糞ボケども。
俺は結局OOoで見たけどな。
STARCの連中は普段のメールにも
兵器で機種依存文字使いやがるし、
ほんとにあんな阿呆どもに
半導体理工学研究センターなんて看板掲げる資格あんのかね?
>>468 メールも着たが、そのあと訂正用のシールが郵送されてこなかった?
文字化け部分に貼ってくださいってやつ。
> 誤字脱字ならともかく
俺は本なんて作ったことが無いからよく分からんが、
何で文字化けなんて自体になったのか不思議ではあるな。
ありゃ。設計スタイルガイドのサイトにも文字化け情報はpptファイルしか無いのか?
正誤表はpdfなのに。っていうか1版のときと同様にhtmlで記述して補助的にpdfってのが理想か。
サイト管理とかどうなってんのかな。
研究自体はそりゃ優秀な人がやってるんだろうけど
案外事務員とかはアホばっかりなのかも
研究自体は手際よくできても、それ以外は…って感じだろw
ハゲあたま
>>468 俺のところにきた訂正メールは、
HTML形式だった。
普通、テキスト形式で送るだろ・・・
と、ちょっと思った。(別に気にしないけどさ。思い出した)
STARCって
ちょっと抜けてるよね。
メールその他から受けるのは、頭悪そうな印象。
Denaliっておもしろいなーっておい 重いぞwwwwww
英語読めません!
日本語のシミュレータや、合成ツールありませんか!
RTLや合成スクリプトをいちいち日本語で書くほうが大変だと思うが・・・
>>470 >>473 事務員じゃなくて研究員自身がアホかも知れない
研究員は研究以外が無能な人結構いるからね
それだと研究員もやっていけないと思うんだけど
パトロンをだますのがうまい上司とかがいるとなんとかなるらしい
(´-`).。oO(ぴゅう太を思い出したよ…)
なんで
(´-`).。oO(日本語つながりで…)
日本語BASICみたいなのだっけw >ぴゅーた
483 :
書き直しました:2006/11/21(火) 12:33:06 ID:TWI+ZsK6
周期関数をテーブルを使って表現しようと思うんですが、
困ってます。
結果をテーブルに保存するわけですが、ひとつのテーブルの制度が8bitとして、
周期関数の範囲0〜1までしか保存しない予定なんですけど、1が正しく表現できるように
1000_0000と表現するべきか、1111_1111とするべきか、どちらがよいかわかりません。
1000_0000と表現すれば1のままで誤差はないのですが、1000_0000以上の値がないので
bitが無駄になってしまうような気がします。 こういった場合どうするのがベストなんでしょうか?
0xffを1.0
0x00を0.0 として
1/255 刻みにすればいいんじゃないの?
周期関数だから0=1じゃないのか?
486 :
書き直しました:2006/11/21(火) 16:52:35 ID:9T4bjvhk
>>484 やっぱりOxFFを1にするのがいいんですかね?
それと、255刻みとはどういうことですか?256ではないんですか?
ちなみにテーブルは4bitアドレス指定で、16テーブルの予定です。
それなので16刻みの数値を入れております。ADD:DATA こんな感じです。
0 : 0;
1 : C;
2 : 18;
3 : 25;
4 : 30;
5 : 3C;
6 : 47;
7 : 51;
8 : 5A;
9 : 62;
A : 6A;
B : 70;
C : 76;
D : 7A;
E : 7D;
F : 7F;
>>485 数値的に0から1まで扱う予定なので0も1も表現できないとだめだと思うんですよね。
一応仕様としましては、0から1までを、参照するアドレスの変換と結果の符合反転を行うことで
周期関数を実現しようとしてるのですが・・・
487 :
書き直しました:2006/11/21(火) 16:53:54 ID:9T4bjvhk
ちなみに、符号反転を後でする場合もあるので2の補数で入ってます。
値域は -1.0〜+1.0ってこと?
だったら
0x81 = -127/127 = -1.0
0xff = -1/127 = -0.00787401574803149606
0x00 = 0.0
0x01 = +1/127 = +0.00787401574803149606
0x7f = +127/127 = +1.0
で 1/127 刻みでやるのが一番精度が取れると思うよ
0x80は使わないか、何か特別な意味を持つシンボルにする
すげー。何の話しているのか
さっぱり分からねえ。
そもそも周期関数ってのが何なのかってことから
分からねえw
>489
周期的な関数・・、ぶっちゃけなにかの繰り返し波形、でいいんじゃないだろうか
サイン波とか周期関数の代表かと。
>483
もし-1〜1なら、+0と-0を真ん中に持ってくるといいことがあることもあるかもね
0111 +7
:
0001 +1
0000 +0
1000 -0
1001 -1
:
1111 -7
精度を追求するか、回路の簡素化を追及するかとかでいくつか選択肢があるとはおもうけど。
>>490 > サイン波とか周期関数の代表かと。
なるほど。そういうののことかー。Thx!!
>>490 いわゆる1の補数ってやつだね
+0 と -0 を区別できるのが特徴
493 :
483:2006/11/21(火) 23:15:21 ID:gfHTcw8f
みなさん色々ありがとうございます。
自分はSINとCOS値を出力する物を作りたいわけでして
皆さんに相談させていただいてます。
>>488 値域は0から1です。 つまり90度までの値を保持して、
指定されるアドレス上位2ビットを使って90度までのデータを符号変換したりして
360度ぶんを補おうとしてます。ちなみに4bitテーブルサイズでやろうとしてるので
>>488さんのおっしゃったとおり実装すると16刻みではなくて15刻みが良いということでしょうかね?
sin,cosだと、90度分のsinデータテーブルを持っておけば、
360度分のsin,cosテーブルが作れると思う。
単円の座標でいえば、45度分(sin,cosそれぞれ45度)
あとは単円の45度のなかにどうやって16個の点を打つかだね。
495 :
483:2006/11/22(水) 01:40:54 ID:vR7MIvje
>>494 そうですね。その予定です。
ただ、SINとCOSは同じテーブルを使わない予定なのでそれぞれ90度持たせます。
なので90度を16分割する予定です。
>>495 会社とか近所の図書館にDesign Wave Magazineのバックナンバーが
置いてあるならば、2003年7月号を見ると吉。
テーブルと補間を使ってsin, cosを求める方法が解説してある。
497 :
483:2006/11/22(水) 17:23:04 ID:CzVI3kln
>>496ありがとうございます。見てみます。
それと質問ばっかりしててすみませんがもうひとつ・・・
arrayで宣言した信号のbit指定がどうしていいのか調べてもわかりません・・
例えば
type addr_type is array (delay-1 downto 0) of std_logic_vector(size-1 downto 0);
signal addr_reg:addr_type;
で宣言したaddr_regはaddre_reg(size-1 dwonto 0)が 0からdelay-1まで生成されますよね。
そのとき、addr_reg(delay-1)の下位2bitを指定したときはどうすればいいんですかね?
ちなみにif文で if(addr_reg(delay-1)(1 downto 0)="00")then
としたらエラーしてしまいました。
どう指定すればいいかご教授ください。自分の手持ちの本には載っていません・・
498 :
483:2006/11/22(水) 17:26:04 ID:CzVI3kln
マスクすればできそうですが、直接指定する方法がありましたらよろしくお願いします。
addr_reg(1 downto 0)
500 :
774ワット発電中さん:2006/11/24(金) 11:29:06 ID:jbLOCrnV
500 get ズサー
501 :
483:2006/11/25(土) 00:05:40 ID:nTJNFpJw
>>499 レスありがとうございます。
addr_reg(1 downto 0)だとどの配列か指定できないようなきがするのですよね。
497のようにarrayで宣言してるので この例だと
addr_reg(1),addr_reg(2),,,,,,,addr_reg(delay-2),addr_reg(delay-1)
となりますよね?これで一番目を指定するときは
addr_reg(1)
となりますが、これの下位2bitをさらに指定したいときはどうなるんでしょうか?
>>501 addr_reg(delay-1)を一旦std_logic_vector(size -1 downto 0)のvariableに代入して
variableの下位2bitをif文で参照するのは?
503 :
774ワット発電中さん:2006/11/25(土) 17:34:03 ID:IW7kHU6F
ここの住人さんはプロですが、初心者にとって
論理設計は、最初は暗記科目と思うのですが正しいでしょうか?
はぁ?
505 :
483:2006/11/25(土) 17:38:30 ID:nTJNFpJw
502>>マジでありがとうございます。できましたよ。variableで一時代入して。
variableの使いどころがいまいちわからなかったのですが、こういうときに逐次処理文(でいいのかな?)
使えるわけですね。
本当に助かりました。
506 :
774ワット発電中さん:2006/11/25(土) 17:43:26 ID:McAHXTGU
今時VHDLなんて辞めてしまえや
SystemCもやめちまえ
sin, cosをこの時期に作ろうとしてるのは某大学IS 3年なのだろうか
なに?東大?
511 :
774ワット発電中さん:2006/11/26(日) 22:12:37 ID:F+/bVP1J
ACEXというデバイスがむ"ーですが、言語の習得ならどうでもいいかも。
ボードはトラ技付録の方がいいとおもふ...あれはプロダクトラインからすれば、一応CPLDか..?。
値段がわからんです
高いのは無理ですが、できればAlteraがいいです
トラ技は自分でデバイス追加とか必要だと
失敗すると終わりなので、キットが安心
>>515 不満データよりはるかに良心的な価格設定だけど、
このサイズだと、実際に何かに組み込んで使いたいサイズじゃないよな。
教育用、試作用ってとこかな?
ってボード名がそうなってるのな。
そうは言うもののボード買ったら動作チェックはしたいのでスイッチとかLEDはあったら便利よね。
配線考えるとRAM実装は必須なので、結局こういうサイズになるのかな?
518 :
511:2006/11/27(月) 00:46:22 ID:N0jmjNNc
みなさん情報ありがとうございます。
少し書籍を読んでから財布と
相談して決めます。
>>517 Alteraもようやく教育向けのテコ入れなのかなと。(すでにあった?)
それでもSP3E500よりEP2C20の方が単純に倍くらい入るようです。
コンパイル時間は半分ですみました。
>>518 まず動かして見ることですよ。
ところでなぜにAltera?
無理矢理スレタイに戻すと、XiのISEで通らなかった言語混在のやつが
QuartusIIで通ったという程度には、ISEに辟易してますが。
>>515 本体$150+US $29.2
プラス消費税分の関税と関税立替業者の手数料じゃなかった?
それで約2万円ってこと?
最近Digi-key以外輸入してないから忘れた。
525 :
774ワット発電中さん:2006/12/03(日) 18:28:40 ID:6SeZuwH/
VHDLで算術演算子をつかうとき
use ieee.std_logic_arith.all;
を宣言している場合と
use ieee.std.logic_singed.all または unsigned.all
を宣言している場合
違いがあるんでしょうか?
signed.allとunsigned.allの違いはわかりますが、
arith.allとの違いがわかりません
526 :
774ワット発電中さん:2006/12/03(日) 18:40:31 ID:6SeZuwH/
それと もうひとつなんですがQuartus2で 算術演算子/使えますかね?
どうしてもエラーになってしまいます。/以外の*、+、−などはビット幅を合わせればエラー出ません。
Error (10327): VHDL error at gha_div.vhd(31): can't determine definition of operator ""/"" -- found 0 possible definitions
527 :
774ワット発電中さん:2006/12/03(日) 20:09:17 ID:6SeZuwH/
526に対する自己レスですが
/ の演算子をサポートする論理合成ツールは少ないとのことなので
quarutsは対応してないと思われます。
>>527 lpm_divideをつかえ。
ちなみにstd_logic_unsignedやstd_logic_arithは使わない。numeric_stdを使う。
>>526 オレは普通に使ってるけどなぁ。
ひょっとしてstd_logic_vectorでやってない?
/をいったいどう考えてるんだ?合成できるとかどうかより、
仮にできたとして、除算をツール任せにしてること自体が大問題。
お前ニュートン法知ってるか?
>>529
そんなに目くじらたてんでもいいがな。(´・ω・`)
そんなすごい割り算やってるわけでもないんで、わたしのレベルでは。
ただできるよ、とだけ言いたかったので。
割り算は2^nなら合成できるよ、って何かの本で読んだな。
シフトするだけだからな
>>532 バレルシフタと加算器をいっぱい並べるんだ!(w
チューリングマシン
初心者なんですが、lpm_divideを使うのもツール任せってことにならないのでしょうか?
ツール任せじゃない割り算てどう書くのでしょうか?
11100101 / 1011 を筆算にすると
10100
1011 ) 11100101
1011
------
1101
1011
------
1001
10100 あまり 1001
これが年代差か!?
つまり
11100101 - 10110000 = 110101 ・・・ 左辺で引いた数は(1011 * 10000)
110101 - 101100 = 1001 ・・・ 左辺で引いた数は(1011 * 100)
11100101 = 10110000 + 101100 + 1001
11100101 = 1011 * (10000 + 100) + 1001
ということ
2進数の筆算に抵抗がない私はぜっぱちユーザ
なんでも相対テーブルにしようとする私は09ユーザ
ときどき間違っちゃう私は古いPentiumユーザ
FPGAの加算ではRippleCarryが最高速なのか
エンベデッド加算器じゃない?
>>538 筆算形式で除算を計算すると求める商の1,0を決める度ごとに、大小比較が必須だから、
最低、商の精度分だけはクロックが必要になってしまう。
今、インテルコンパイラなどはハードの除算機能を使わずニュートン方を使ってるはず。
テーブル持たせる必要があるし、ソフトでやるならともかくハードだと結構面倒だと思うが、
愚直に筆算形式で除算を繰り返すと、絶対パフォーマンスは上がらない。結局、このやり方でも
順序回路じゃないと実現できないので、メモリを多用できるならニュートン法が吉
もちろん、シフトだけで済む2^±nとかは別だけどな。
除算は開始場所判定回路(とバレルシフタ)を付けておくと1ビットずつ処理しても平均的には割と少ない回数で終わるよ。
538の例でも必要な引き算は2回しかない。
まぁ、実行時間がデータ依存になるからどこでも使える手ではないけどね。
548 :
774ワット発電中さん:2006/12/08(金) 00:42:43 ID:BqfgzcGX
話の流れをぶった切ってしまい申し訳ないのですが、
VHDLの記述でお聞きしたい事があります
どうしてもわからない記述があるのですが、わかる方ご教授願えないでしょうか。
LOCAL_ADはentityのportでout std_logic_vector(23 downto 0)宣言されている
SIGNALPCI_Address: std_logic_vector(31 downto 0);
LOCAL_AD<= std_logic_vector( PCI_Address( 23 downto 0 ) ) ; ←この文
という記述なんですが、std_logic_vector()でくくってる意味がわかりません。
LOCAL_AD <= PCI_Address(23 downto 0);
で問題ないと思うのですが。いったいこれはどういった意味なんでしょうか?
549 :
548:2006/12/08(金) 15:02:39 ID:BqfgzcGX
自己レスですが 試しにstd_logic_vector( )を抜いて論理合成してみたところ、
論理合成できました。
ちなみに、出来上がったバイナリファイルsofをdiffしたところ 違いがありませんでした。
結局ソースを見やすくするためのものかなんかなんでしょうか?
意味がわかりません・・・・orz
みにくくなってるとおもうよ
孔明の罠だとおもうよ
552 :
774ワット発電中さん:2006/12/08(金) 20:10:53 ID:PLmpNkI/
死せるクトゥール
夢見るまま待ちいせり
>>548 > LOCAL_AD<= std_logic_vector( PCI_Address( 23 downto 0 ) ) ; ←この文
こんな書き方ってなかったっけ? 型を変換するだか明示するだか、そんなやつ。
LOCAL_AD<= std_logic_vector'( PCI_Address( 23 downto 0 ) ) ;
554 :
548:2006/12/08(金) 21:58:43 ID:BqfgzcGX
>>553 データタイプ変換の例としては 手持ちの参考書に std_logic_vectorからinteger
に変換するものが載っていました。
A :in std_logic_vector(7 downto 0);
だとしたら 配列regfileの添え字指定で
Q <= regfile(conv_integer(A));
のように使うようです。
それと同様に考えていいんでしょうかね?
しかし、型もvectorサイズもまったく一緒なんで変換する意味が無いんですよね。
なので、さっき自分でも言ったように、代入する信号の型がわかり易いように
確認的な意味で書いているんじゃないかと思うのですがどうでしょうか?
コメントのように・・?
Javaプログラマが書いたんだろう
>>554 std_logic_vectorからintegerに直接は変換できない。やるなら
q <= regfile (conv_integer (unsigned (a)));
regfileって初めて聞いたけどなんだろう。VHDL93あたりまでの本は見たけど載ってない。
変換はconv_***だったな。これはsynopsis謹製じゃなかったかな?
標準には、to_***とかいうのもあったような。
で、記述の仕方によってはいくつかの型にとれる場合に、std_logic_vector'を付けると、
std_logic_vectorですよと明示できた、という意味だったと思う。
その場合、アポストロフィが付くけどな。
regfileっていうのはたぶん
signal regfile (9 downto 0);
とかの宣言があるんだと思う。to_integerはnumeric_stdを使うとき。
結局、アポストロフィ見落としで落着?
560 :
548:2006/12/11(月) 11:03:27 ID:IA2Pe4wD
みなさんレスありがとうございます。
自分でも不安になり 元ソースをかくにんしたとろアポストロフィーはありませんでした。
また別の部分を見ていたら、
signalRefresh_Cnt: unsigned( 9 downto 0 ) ;
で宣言された変数?が、
Refresh_Cnt <= Refresh_Cnt + 1 ;
if ( std_logic_vector(Refresh_Cnt(9 downto 6)) = "1111" ) then
Refresh_Req <= '1' ;
end if ;
という風に使われている部分があったので、 やはり型変を明示しているのではないかと思いました。
それから、試しにアポストロフィを挿入してみると、書式エラーになってしまいました。orz
ちなみに、regfileは558さんのおっしゃるとおり、
singal で宣言された配列型の信号?変数? です。
if ( Refresh_Cnt(9 downto 6) = "1111" ) then
Refresh_Req <= '1' ;
end if ;
これじゃだめ?
562 :
774ワット発電中さん:2006/12/11(月) 20:26:52 ID:QHU4pGZJ
長くてすみません。下のようなステートマシンをRTLで書いてみたんですが、
シミュレーションしてみると、STATEがクロックに同期して交互()にでてしまいます。
かくケース文でカウントする状況をつくると交互STATEがでてしまいます。
なにか間違っていますでしょうか?ぜひご教示ください。
type state is (RESET, IDLE, W_WAIT_LDACKX_LO, W_WAIT_LDACKX_HI, W_WAIT_ACK2_40CLK);
signalCUR_STATE:state;
signalNEXT_STATE:state;
signal err_bsy : std_logic;
signal tim_cnt1 : integer range 0 to 5;
signal tim_cnt2 : integer range 0 to 5;
signal tim_cnt3 : integer range 0 to 50;
process (RSTIN, CLK40M)
begin
if RSTIN = '1' then
CUR_STATE <= RESET;
elsif CLK40M'event and CLK40M = '1' then
CUR_STATE <= NEXT_STATE;
end if;
end process;
--
563 :
774ワット発電中さん:2006/12/11(月) 20:29:11 ID:QHU4pGZJ
process (RSTIN, CLK40M, CUR_STATE, NEXT_STATE, POUT2, STB2, LDACKX)
begin
if CLK40M'event and CLK40M = '1' then
case CUR_STATE is
when RESET =>
err_bsy <= '1';
tim_cnt1 <= 0;
tim_cnt2 <= 0;
tim_cnt3 <= 0;
NEXT_STATE <= IDLE;
when IDLE =>
if POUT2 = '1' and STB2 = '0' and err_bsy = '1' then
NEXT_STATE <= W_WAIT_LDACKX_LO;
elsif POUT2 = '0' and STB2 = '0' and err_bsy = '1' then
NEXT_STATE <= IDLE;
else
ACK2 <= '1';
NEXT_STATE <= IDLE;
end if;
when W_WAIT_LDACKX_LO =>
tim_cnt1 <= tim_cnt1 + 1;
if tim_cnt1 = 5 then
err_bsy <= '0'; -- TimeOut Error
NEXT_STATE <= IDLE;
elsif LDACKX = '0' and tim_cnt1 >= 3 and err_bsy = '1' then
ACK2 <= '1';
NEXT_STATE <= W_WAIT_LDACKX_HI;
else
NEXT_STATE <= W_WAIT_LDACKX_LO;
end if;
when W_WAIT_LDACKX_HI =>
tim_cnt2 <= tim_cnt2 + 1;
if tim_cnt2 = 5 then
err_bsy <= '0'; -- TimeOut Error
NEXT_STATE <= RESET;
elsif LDACKX = '1' and err_bsy = '1' then
ACK2 <= '0';
NEXT_STATE <= W_WAIT_ACK2_40CLK;
else
NEXT_STATE <= W_WAIT_LDACKX_HI;
end if;
when W_WAIT_ACK2_40CLK =>
tim_cnt3 <= tim_cnt3 + 1;
if tim_cnt3 = 40 then
err_bsy <= '0'; -- TimeOut Error
NEXT_STATE <= RESET;
elsif STB2 = '1' and err_bsy = '1' then
NEXT_STATE <= IDLE;
else
NEXT_STATE <= W_WAIT_ACK2_40CLK;
end if;
when others =>
null;
end case;
end if;
end process;
564 :
774ワット発電中さん:2006/12/11(月) 20:41:30 ID:QHU4pGZJ
インデントのつけ方がわからず、すみません。。。
565 :
774ワット発電中さん:2006/12/11(月) 23:55:49 ID:5Sh2LREu
全角でつけんだよ。やりなおせや
>>562 二つ目のProcess文は何でクロック同期なの?
普通この部分は組み合わせ回路にするから、クロック同期に
する必要は無いのだが。
というか、なんでNEXTSTATEをセンシティビティ・リストに書いてあるのだ?
ステートの推移と代入タイミングを出力させてよく見ろ。話はそこからだ。
>>563 じゃないけど清書
process (RSTIN, CLK40M, CUR_STATE, NEXT_STATE, POUT2, STB2, LDACKX)
begin
if CLK40M'event and CLK40M = '1' then
case CUR_STATE is
when RESET =>
err_bsy <= '1';
tim_cnt1 <= 0;
tim_cnt2 <= 0;
tim_cnt3 <= 0;
NEXT_STATE <= IDLE;
when IDLE =>
if POUT2 = '1' and STB2 = '0' and err_bsy = '1' then
NEXT_STATE <= W_WAIT_LDACKX_LO;
elsif POUT2 = '0' and STB2 = '0' and err_bsy = '1' then
NEXT_STATE <= IDLE;
else
ACK2 <= '1';
NEXT_STATE <= IDLE;
end if;
when W_WAIT_LDACKX_LO =>
tim_cnt1 <= tim_cnt1 + 1;
if tim_cnt1 = 5 then
err_bsy <= '0'; -- TimeOut Error
NEXT_STATE <= IDLE;
elsif LDACKX = '0' and tim_cnt1 >= 3 and err_bsy = '1' then
ACK2 <= '1';
NEXT_STATE <= W_WAIT_LDACKX_HI;
else
NEXT_STATE <= W_WAIT_LDACKX_LO;
end if;
when W_WAIT_LDACKX_HI =>
tim_cnt2 <= tim_cnt2 + 1;
if tim_cnt2 = 5 then
err_bsy <= '0'; -- TimeOut Error
NEXT_STATE <= RESET;
elsif LDACKX = '1' and err_bsy = '1' then
ACK2 <= '0';
NEXT_STATE <= W_WAIT_ACK2_40CLK;
else
NEXT_STATE <= W_WAIT_LDACKX_HI;
end if;
when W_WAIT_ACK2_40CLK =>
tim_cnt3 <= tim_cnt3 + 1;
if tim_cnt3 = 40 then
err_bsy <= '0'; -- TimeOut Error
NEXT_STATE <= RESET;
elsif STB2 = '1' and err_bsy = '1' then
NEXT_STATE <= IDLE;
else
NEXT_STATE <= W_WAIT_ACK2_40CLK;
end if;
when others =>
null;
end case;
end if;
end process;
そもそも NEXT_STATE が不要だと思う
process (RSTIN, CLK40M)
begin
if RSTIN = '1' then
CUR_STATE <= RESET;
elsif CLK40M'event and CLK40M = '1' then
この中に
>>563 の begin 〜 end process; 内のものを NEXT_STATE を CUR_STATE に全て置き換えて書く
end if;
end process;
570 :
774ワット発電中さん:2006/12/12(火) 09:13:41 ID:UWrrBFtP
Verilogで書き直せ
ああ
NEXT_STATE := hogehoge;
って書きたかったんじゃないかな
それなら
>>566 さんの言ってるようにクロック同期にしない方がいい
572 :
562:2006/12/12(火) 21:43:55 ID:jOHJKZWK
>>565 了解しました、以後気をつけます。
>>568 すみませんでした。やってもらって・・・。
>>566、
>>571 プロセスが二つだったのは、他人のVHDLを参考にしたからです。
しかもクロック同期しないとロジックが1クロック中にパラパラ変わってしまったからです。
センシティビティ・リスト・・・は、どうしてでしょうか。。。。わすれました。
NEXT_STATE := hogehoge; にしたいってよりも、参考にした他人のがそうなっていたから
なんも疑いもなく使ってしまいました。
>>567 よくみすぎて、3日もかかってしまいました。
>>570 すみません、VHDLですら精一杯です。。。
>>569 ありがとうございます!!この方法で万事解決しました!
みなさんに聞いたおかけで、次に進めそうです!
またお願いいたします!!
そんなんで良かったのか
だけど理由が分かってないと
またどっかでつまずく悪寒
574 :
774ワット発電中さん:2006/12/13(水) 12:20:46 ID:sEuOtZC0
とうとつですが quartus2で テストベンチって使えないですよね?
LPMとか 使った場合にテストベンチする方法ってあります?
>>574 ハァ?
テストベンチもHDLで書くんだよ。
一応、シミュレータが付いてたと思うけど
使った事無いけど
577 :
574:2006/12/13(水) 15:36:02 ID:sEuOtZC0
HDLでかくのは 知ってます。
xilinxで無料で使用できるmodelsimとかでは
テストベンチ使って データファイルを入力したり、
結果をファイルとして出力できたんですけど、
Quartus2だけでも 同じことができるんですか?
Arteraの論理シミュレーションのAlteraModelSimにはコードの行数制限が
あったものですから、Quartul2でできるのかなぁと ぎもんにおもったわけです。
こんなところに書き込み暇があるなら、まず自分で試せ!!
579 :
574:2006/12/13(水) 15:43:09 ID:sEuOtZC0
追記ですが、
774は HDLソースの中に 部品としてLPMで生成した回路をコンポーネントしている場合
汎用のシミュレータが使えないけど、Quarutsでテストベンチはしらせることが
出来るんですか?という質問です。
580 :
574:2006/12/13(水) 15:44:05 ID:sEuOtZC0
自分のやり方では 出来なかったもので・・・・
582 :
574:2006/12/13(水) 22:48:46 ID:sEuOtZC0
>>581 Xilinx版のWEのModelSimに、AlteraのModelSimのライブラリを組み込むってことでしょうか?
それは、Altera版の期間限定無料提供されているModelSimを使うより、利点があるんですか?
行数制限がなくなるのかな?
もうWindowsのシミュレーターでの検証はできないからだになってしまった
ModelSimもSE、VCS NC・・・
お前ら、何の仕事をしていらっしゃいますか?
学生ですが何か
うんこ製造業
2歩進んで3歩退がる業
589 :
774ワット発電中さん:2006/12/14(木) 01:46:35 ID:woXhg7ew
21.477MHz のクロックから 12.000MHz のクロックを生成する回路を
HDLで書くとどうなりますか?
DLL/PLL一発
VHDLの勉強中なのですが、よく入力端子名でclr_bというようなものを見かけますが
この_bというのは何か意味があるのでしょうか?
負論理を意味する。
つまり、clr_b = 0のときにクリアで、
clr_b = 1のときにクリアしていないということを表す。
595 :
774ワット発電中さん:2006/12/15(金) 01:24:23 ID:PE0axI2a
>>582 少し前までは、ModelSimの無償版は、Xilinxのみだった。
今もAltera版は期間限定だから、この先はまた無くなる予定。
だから、Xilinx版を使っていただけ。
PROCESS(hoge)のhogeの部分に書くものにはどういったものがあるのでしょうか?
クロックやリセットといったトリガになるものがかかれているときと
入出力が書かれている場合とがあってよく分からないのですが…
入力だけ書く
> 入出力が書かれている場合とがあって
その一例を挙げてください。
出典も明記して。
procedureと間違えてるんじゃないの?
inoutを組合せの入力として使ってるんだろ
これは、記述言語云々の話じゃ無いのかもしれませんが…
検証済みだけれど内部仕様の詳細がわからないRTLがあって、そのIF仕様を変えたい場合、
既存のRTLに手を入れるのと、仕様差を吸収する回路を外付けするのと、どちらが良いと思いますか?
回路を外付けした場合の回路規模・消費電力へのインパクトは、ほとんど無視できるとします。
以下詳細。
外部からデータを16bit×2cycleで受けて処理をする回路の、Verilog記述のRTLが手元にあります。
どうやら「32bit×1」で処理する箇所に、「16bit×2→32bit×1」の回路を付けている構成のようです。
それほど複雑な作りではありませんが、内部仕様書は存在しません。設計者もすでにいません。
ただし、検証済&実績有ということで、これをこのまま使うのはOKということになっています。
これを使って、外部からデータ幅8bitで受ける回路を作りたい場合、
1. 「16bit×2→32bit×1」の部分を取り払って、「8bit×4→32bit×1」の回路を作って入れ換える。
2. 「8bit×2」を渡す回路を作って外付けする。
私は、工数に多少の余裕があっても、2の方が安全で良いかと思うのですが、
しっかり検証すれば問題ない、1にして無駄を省くべき…と言われると、なかなか反論出来ず。
遅延は?
>>602 2の方が良いと思われるならそれを納得してもらうべきでは?
結局検証が必要だから安全かどうかは保障できないと思いますが。
2だとアクセス速度落ちるんだろうな、きっと。
>>602 全部作り直せ。どうせバグでお前のせいにされる。
?
♥
>>602 修正した回路を使い回す場合、今回は気にならなかった回路規模が、次の開発では回路規模で
ネックになる可能性があるので、工数が取れる今のうちに修正したいという考えもある。
IO周りの回路をparameter化すると楽しいかも。
「検証済」ってところが本当にそうなのかが問題だと思う。
本当にそうなら、検証に使用したテストペンチ環境やテスト仕様があるはずで
RTLに手を入れた後にそのテストベンチ使って再検証すればいいだけ。
もし検証済みで信頼していいと*聞いているだけ*だったら
それはもはや宗教や信仰の問題。とても「検証済」という状態ではない。
そうだったら「聖なるゆえに不可触なコード」として扱って外付け回路で
なんとかすればいいよ。実際に動くかどうかはわからないが
信仰心は満足されることだろう。
>>603-609 回答、ありがとうございます。
そうですね…2でバグ出したら、
>>605さんの言う通りになるんだろうけど、
作り直したがためにバグ出しても、当然責められるんで…。
間違いなく動きさえすれば、速度も遅延も大きさもほぼ問題にしないので (例えば、2の回路で100cycleかけちゃってもOK)
今回は外付けで作って、その後に次回以降のために修正を検討する…という方向で説得してみます。
相手はただただ、無駄な回路が存在することを嫌悪してるだけなので。
>>609 使用する機能を限定した検証環境は残されてて、それは問題無さそうなので、
その範囲で使う限りにおいては「検証済」としています。
…これ、使わない回路が「無駄」になってるんですけどね。それは良いらしい。
ただ、それ以外の機能の検証が出来ないので、
後戻り出来ないところまで進んでから、出来るなら他の機能も使いたい…となった時(よくある)、
改造によってその機能が使えなくなってた…とかだと嫌なので、中はいじりたくない、という思いもあります。
現時点で使用する予定がないので、その理由では受けいれてもらえないのですが…。
もちろん、別途時間取って検証環境は作るもりですけど。このままなら使える、という根拠が手元に全く無いので。
今回には間に合いませんが。
>>610 >相手はただただ、無駄な回路が存在することを嫌悪してるだけなので。
いや、当時の設計担当者も仕様書もない得体の知れない回路を捨てたいんだと思うよ。
>>610 検証済みの回路に外付け回路を付加して検証済みの回路の検証環境が利用できるのかなあ
だったらだれも苦労しなかった
動いてるものは神が宿ってるから、触らぬ神に祟りなし
このコメントを外したり変えたりするとビルドが通らない、呪いのコメント
割り込み失礼、液晶に "Hellow world"って表示したいんだけど、文字列定数ってどう書くの?
VHDLでストリングス型をstd_logic_vectorに代入しようとしたらnumericじゃないって怒られた。
Verilogでもいいので教えてくだちい。
生きていればイイコトもある
しかし、嫌なことはもっと もっと いっぱいある
617 :
614:2006/12/18(月) 00:13:16 ID:H4WZD5rU
verilogだと
reg [8*13-1:0] stat="Hellow World!";
って書くと入るみたい。合成できるかな。
VHDLは
library IEEE;
use IEEE.std_logic_1164.all;
entity HellowWorld is
port( dat : out std_logic_vector(7 downto 0) );
end HellowWorld;
architecture RTL of HellowWorld is
signal s: string(13 downto 1) := "Hellow World!";
begin
dat <= std_logic_vector(s(1));
end RTL;
って書くと、ModelSimで
# ** Error: C:/eng/xilinx/bin/test/TestFrqgen.vhd(15): Illegal type conversion from character to std_logic_vector (non-numeric to array)
ってなってしまう。
つまり
std_logic_vector(asc(s(1)))
みたいに書けば通る可能性がある訳ですな
use ieee.std_logic_arith.all;
...
signal dat : std_logic_vector (12 * 8 - 1 downto 0);
...
dat (12 * 8 - 1 downto 11 * 8) <= conv_std_logic_vector (character'pos ('H'), 8);
dat (11 * 8 - 1 downto 10 * 8) <= conv_std_logic_vector (character'pos ('e'), 8);
dat (10 * 8 - 1 downto 9 * 8) <= conv_std_logic_vector (character'pos ('l'), 8);
...
620 :
774ワット発電中さん:2006/12/19(火) 00:51:10 ID:S2FhNCWT
RTL素人です。
ラッチをつくりたいのですが、
Latch ( gin, din, qout )
input gin;
input [7:0] din
output [7:0] qout
reg [7:0] qout;
always @( gin, din )
if ( gin )
qout <= din;
なぜか、gin=0 のとき、ラッチがスルーしdin をホールドすることがあるのです。
XILINXのISE8.2のISEsimを使用。
P&R後のネットリストSimだと、予定の動作をします。
if ( gin )
qout <= din;
else
qout <= qout;
622 :
774ワット発電中さん:2006/12/19(火) 07:41:41 ID:5xf6RMMv
解決のヒントをください。VHDLです。
process (S, R) is begin
if S'event and r = '1' then
q <= '1';
elsif R'event and c = '1' then
q <= 0;
end if;
end process;
:
のような、SとRの立ち上がりに同期したSR-FFを作りたいのですが、
このコードでは、論理合成できませんでした。
SIGNAL S cannnot be synthesized , bad synchronous description
というエラーが出ました。
ビヘイビアシミュレーションでは所定の動作をしました。
二つの入力に同期する回路はできないでしょうか?
>>622 それはターゲットデバイスに依存する話だな
FPGAで非同期SR-FFが実現できるデバイスはまずないだろう
古いテクノロジーのASICで非同期SR-FFのライブラリがあるならできるとは思うけど
新規設計だったらそんな酔狂なことは避けた方が吉だろ
補足
Sが同期でRが非同期動作でいいならできると思うぞ
非同期CLRがついてる同期FFを使えばいい話になるからな
論理合成ツールは先ず合成不可だよな。
こっちが、意図せずにフィードバック構成にしててもコンパイラが止めてくれる
非同期RS-FFのライブラリを持つFPGAってあるの?
TTL世代ならたすき掛けだ!
wire q, q_b;
assign q = ~set_b | ~q_b;
assign q_b = ~reset_b | ~q;
> TTL世代ならたすき掛けだ!
いや、それが唯一の正解じゃないの?
628 :
622:2006/12/19(火) 22:52:04 ID:dqP3ZobB
>>623 そうなんです。私も非同期回路は使いたくないのですが。。。
あと、言葉足らずですみません。実現したい回路を説明します。
動作は・・
入力:SET , RESET 出力:Q
とすると、
SETの立ち上がりでQ=1
RESETの立ち上がりでQ=0
となり、QはSET,RESETの立ち上がりでのみ変化する。
これは非同期回路ではないと不可能ですよね?
ちなみにデバイスはXC9572でModelsimXE3 6.0aを使っています。
CPLDじゃ絶対無理
630 :
614:2006/12/20(水) 00:09:05 ID:Yad1lPU+
>618 試してみたけどVHDLでもverilogでもascは無いって言われる。
リソースは食うけど、Verilogで、このあたりが実用的書き方かな。
output wire[7:0] ch;
reg [13*8-1:0] str;
assign ch=str[13*8-1:12*8];
always @(posedge clk or posedge rst)
begin
if(rst)
str<="Hellow World!";
else
str<=str<<8;
end
ビッグエンディアン?なあたりがちょっといや。メーカー依存したりしそう。
XC9500シリーズのデータシートより抜粋
The macrocell register can be configured as a D-type or
T-type flip-flop, or it may be bypassed for combinatorial
operation. Each register supports both asynchronous set
and reset operations.
非同期セット/リセットがあるんだから物理的にはできる。
論理合成は別の話。
>631
その async. set/reset はレベルだから、
RESET を上げたままの時に SET の立ち上がりを認識しない。
>>628 微分用のコンデンサ外付けで良ければ出来そう。
外付け部品使うくらいなら74xx279使えばいいだけの話
>>628 何が制約条件なのか読み取れないなぁ。
SET,RESETそれぞれの立ち上がりからQの変化までのディレイは何nsまで許されるのかが重要なのはわかっている?
非同期回路で作れば伝播遅延分だけのディレイが発生する。
同期回路で作れば1クロック以上のディレイが発生する。
従って、一般的には非同期の方が反応は速い。
しかし、1クロックや2クロックのディレイが問題になるようなシステムはそうそうあるもんじゃない。
だから同期で立ち上がり検出回路を作るのが普通だと思うが・・・
S/Rに入力される信号がクロックに同期していれば問題ないが
真に非同期なら、メタステーブル対策で2段D-FFかますと想定して
平均4〜5クロック 最悪10クロックは遅れるぞ
そもそも入力が同期してるならSRにする必要がない訳で
626 :774ワット発電中さん :2006/12/19(火) 16:01:54 ID:A2r4Gfjc
TTL世代ならたすき掛けだ!
wire q, q_b;
assign q = ~set_b | ~q_b;
assign q_b = ~reset_b | ~q;
627 :774ワット発電中さん :2006/12/19(火) 20:40:56 ID:/kvR1OmO
> TTL世代ならたすき掛けだ!
いや、それが唯一の正解じゃないの?
D−FFを2個用意して、SとRは、それぞれのクロックにつっこむ。
2個のFFのQをXOR取って、出力とする。
S側のFFは、出力が0の時にクロック(S入力)でQが反転するようにしておく
(出力が1の時は反転させない)
R側は、出力が1の時に反転するようにする。
↑どうよ
641 :
774ワット発電中さん:2006/12/20(水) 23:59:09 ID:Q++ASdUS
RS-FFで何したいのだろう?
MBM接点のチャタリング除去とか?w
RS-FFだけど実際に合成できた様に見えてても
PLDに書き込んだときちゃんと動かなかったことがある
643 :
637:2006/12/21(木) 02:49:52 ID:2BWrQQHW
>>637 ツッコミありがとう。
元々が非同期ならここだけ非同期にすることに悩むこともないんじゃないか?
と読んでいるんだけど、本人が出て来ないね。
あと、本当に非同期だとすると、SとRがほぼ同時に立ち上がることは想定しているのかどうか興味あるなぁ。
VHDLでn入力を持ちn個の入力のうち'1'になっているものが2個ある場合'1'を出力する回路のうまい書き方を教えてください
ちょうど2個のときだけ'1'でお願いします
>>644 下位ビットから0、1、2以上を引っ張って来て、上位に出す。
>>643 たしかにね
クロック周波数100MHz(T=10ns)として
非同期ドメインで、Sが立ち上がった50ns後にRが立ち上がった場合
SはSetupTIME違反でメタステーブル起こして伝播に7クロックかかったが
Rはすんなり通って伝播に2クロックだけで済んだって話になると
同期クロックドメインではSとRが同時に立ち上がったように見えてしまうよな
深く考えると難しい問題だ
>>646 ありがとうございました 0、1、2、3以上でちょうど2のときだけ'1'をできそうです
ん?それで分かったのか。すごいな。
理解するのに時間かかりましたが・・
Port( a : in std_logic_vector( 23 downto 0 );
o : out std_logic );
architecture Behavioral of test is
begin
process ( a )
variable tmp : integer range 0 to 3;
begin
tmp := 0;
for i in 0 to 23 loop
if ( a(i) = '1' ) then
tmp := tmp + 1;
end if;
end loop;
if ( tmp = 2 ) then
o <= '1';
else
o <= '0';
end if;
end process;
end Behavioral;
tmp < 3 の条件を入れるのを忘れた
なんかまずいことをしたのかと不安になってきた・・・
まずいことしたな。
マルチは死ぬように定められている。
> integer range 0 to 3;
rangeで制限してexitで抜けるより、rangeなしでそのままの方が小さくなる気がする。
Behavioralとかあるから、どうでもいいのかもしれないけど。
・・・あ、あれ?
exitなんかありえないな。
>>651とかrange 0 to 3も意味不明だ。
上のでrange取ったら正解じゃないの?
>>656 えっとbitを数えあげるのではなくて'1'が2個のときだけ'1'を出すので3は3以上という意味なので
tmp < 3で増えないようにしているんです ただ tmp が 3 のときに +1 したらどうなるか知らないので
もし3のときに+1しても3のままなら tmp < 3 の条件はいりませんが・・
これある回路で使う予定なのですが心配になってきたのでテストします・・
Xilinxのシミュレータがインストールされてないみたいなのでハード上で・・
tmp == 3 のときは +1 せずに exit だろ?
っつーか論理回路記述と普通のソフトウェアプログラミングを混同してませんか?
VHDLのfor generateは展開されるマクロみたいなイメージなんですが
process内のfor loopは理解が曖昧です・・
exitというのを知らなかったので if ( a = '1' and tmp < 3 ) のように書いてました・・・
フルアダーってあるでしょ。
あれ、3ビットの入力のうち1の数を数えて2ビットで出力する組み合わせ回路なんだよね。
この考え方を応用すると組み合わせ回路だけでnビットの入力の1の数を数える回路を作ることができる。
はい、これ書く前に書いた真理値表がフルアダーに近いやつです
n段目
AI BI 前段からの入力
AO BO 次の段への出力
IN 入力のnビット目
AI BI IN AO BO
0 0 0 0 0
0 0 1 0 0
0 1 0 0 1
0 1 1 1 0
1 0 0 1 0
1 0 1 1 1
1 1 0 1 1
1 1 1 1 1
>>662 AI = 0, BI = 0, IN = 1のときが違う。
{AI, BI}で下位桁の1の個数を表しているんだよね。
このときの出力は
AO = 0, BO = 1じゃないのか?
気づいていると思うけど。
すんません。ちょとわかる方いたら教えてもらいたいんですけど、
ARRAYでブロックRAMを利用した回路をmodelsimでシミュレーションしたんですが、
実行中にFatal Errorが出てしまいました。
↓のように型変換をしているのですが、これなんかマズイとこありますかね??
subtype DATA_32_WORD is std_logic_vector(31 downto 0);
type DATA_W_B0 is array (0 to 4) of DATA_32_WORD;
signal a_DATA_W_B0 : DATA_W_B0;
signal r_BUFF_ADDR_W: std_logic_vector(3 downto 0);
a_DATA_W_B0( to_integer(unsigned( r_BUFF_ADDR_W )) ) <=r_DATA_W;
↑ここでFatal Error...
>>665 r_BUFF_ADDR_Wは4ビット(0-15)で、a_DATA_W_B0が5ワード(0-4)だからじゃないか?
もしかするとtype DATA_W_B0 is array (0 to 15) of DATA_32_WORD; で16ワード欲しかったのか?
to_integer(unsigned( r_BUFF_ADDR_W ))
の取りうる値の範囲は?
>>666-667 あっーーー!
それでした!a_DATA_W_B0を16ワード欲しかったんですw
何を勘違いしてたのか5ワードで定義してました
直したらうまくシミュレーションできました。
あー、恥ずかしや。。的確なアドバイスどうもありがとうございました
1秒差か・・・
合成とかのスクリプト系でお勧めの本があえば教えてplz
VHDLでステートマシンを書いてるのですが、クロック信号に依存せず
一定時間待機させるような事はできないのでしょうか?
デジタル回路では無理だと思います(外部のコンデンサでアナログ的にやる以外)
ISEで論理合成の途中で1時間ぐらい掛かってるんだけどこれって普通?
1Mbit位のSRAMとROMなんだけど延々とローレベルシンセサイズ始まったところで延々と計算してる
>>671 できるよ
インバータを偶数個つなぐと遅延するよ
2個で2ns遅れるなら100個で100nsだね!
配線リソースをつかいまくるのもいいよね
>>672さんのいうCRを内部に持つようなイメージだね
まあ俺はやらないけど
> インバータを偶数個つなぐと遅延するよ
なんとなく、実際にやったことがない人のレスのような気がする。
>>671 デバイス依存、環境依存で誤差が大きくてもよければ可能。
VHDL上では、after使えば遅延は書けるが合成はできない。
通常はコンパイラ側の何らかの設定が必要。
複数のsourceに値の違うtimescaleが書いてあると、それぞれの有効範囲はどのようになるんでしょう?
次に`timescaleが現れるまで有効
>>673 BlockRAMに推定されてないな
LUTに合成してるんじゃないか?
>>676 verilogの`timescaleとか`defineは複数のソースファイルに渡って有効という恐ろしい仕様。
なので同じ記述でもコンパイラにソースファイルを読ませる順によって違う結果になったりする。
ファイルリストつくって順番を正しく管理するのが吉
大抵のSimツールは-fで読み込めるからだいじょうV
>>678 さっきバイトから帰ってきても未だに終わってなかったww
とりあえずおかしいってことか…書き直してもう一度チャレンジする。
最後になったがサンクス
>>679 Verilogには元々ファイルという概念がないからね。
Verilog-XLは一つのモジュールを二つのファイルに分けて書いてもokだった。
昔の話だから今は知らないけど。
>>675 一応、ASICのクロックラインのスキュー調整とかでやったことがあるよ。
FPGAではやったことないけど、デバイスのセルのLUTを直接記述するとかすれば
多分できるのだろうなとは思う。
ステートマシンのどこにどういう風に必要なのかが興味深いなぁ。
>>681 えー、諦めちゃうのー? w
>>683 あと、「勝手に最適化しない」みたいな設定があるツールもあったような・・・
> ステートマシンのどこにどういう風に必要なのかが興味深いなぁ。
671さん、漏れも聞きたいよ。
>>683 クロックの違うデバイスからコマンドを受け取るときやらないか
686 :
671:2006/12/24(日) 17:03:32 ID:B986QD+Q
色々レスありがとうございます
どうも無理そうなので諦めることにします
目的としてはステートマシンから制御するICの
セットアップタイム待ちをさせたいと思ってました
出力側かぁ
タイミング制約を(Xilinxなら.ucfとか)書いてやれば合成ツールが
多少がんばってくれるんじゃないかな
入力なら石によっては0.25ns刻みとかでずらせたりするのもあるけど。
シンクロナイザを作りたいのですが、わからないところがあるので質問させてください
FPGA外部の回路からの入力をD-FFを使って内部のクロックと同期させたいです。
ただし、内部のメインクロックが50MHzであるのに対し、
外部から取り込む周波数はメインクロックを分周した508=6.25MHzとなっています。
素直に50MHzで取り込まないのはカウンタを回したりごちゃごちゃしたことをやりたいためです。
この場合、完全な同期回路でないことを覚悟で、50MHzを分周し6.25MHzをD-FFのクロックとするか、
もしくは次のように行うか、どちらがよいのでしょうか?ご教授願います。
process(clk50,clk625,din)
begin
if(clk50'event and clk50='1')then
if(clk625='1')then
if(done='0')then --6.25MHzがHの時に一度も実行してなければ
----シンクロナイザの回路----
done<='1';--完了フラグを立てる
end if;
else
done<='0';--6.25MHzがLの時に完了フラグクリア
end if;
end if;
end process;
ただしclk50=50MHz、clk625=6.25MHzです。
>>688 6.25MHzをDFFのenableにする
>>689 ありがとうございます。
ですが、その回路ではDFFがenableとなっている間に、
50MHzが4回ほど立ち上がり、データがDFFを4つ分取り込んでしまいます。
私の説明不足でしたが、データは6.25MHzの周期で取り込みたいのです。
その場合、DFFのクロックを6.25MHzにすれば行えます。
ただそうしてしまうとメインクロックの50MHzと非同期になってしまうので
困っています。
50MHz で、6.25MHzの立ち上がりエッジを検出すればいいのでは?
reg d0,d1;
wire rise= d0 & !d1;
always @(posedge clk50) begin
d0<= clk625;
d1<= d0;
end
Verilog でスマソ
ふと疑問に思ったのですが、VHDLのAFTERはSynthesisする際、どのように解釈されるのでしょうか?
>>691 やはり6.25MHzの立ち上がりエッジを検出することになるのですね。
解決しました。ありがとうございます。
>>692 一般に合成時にはafter節は無視される
>>694 とゆうことはAFTERはシミュレーション用ということでしょうか?
>>695 そういうこと
言い方を変えると、afterを使ったらそれはもう合成可能なRTL記述ではないのだ
>>696 勉強になりました。レスありがとうございます
>>682 横レスですが…
Verilog-XLってそんなに古いんですか?
質問です。
HDL記述したものを論理合成ツールで論理合成したときに、
タイミング違反をチェックしてOKが出るのに、
そのネットリストから生成された回路ファイルをVerilogシミュレータに掛けると
タイミング違反を出します。
このシミュレータのタイミング違反を回避するにはどうしたらよいのでしょうか?
HDLの書き方が悪いのでしょうか?
>>698 HDLの記述法というよりは、回路設計そのものがダメって可能性のほうが高いぞ
単一クロックで完全同期回路にしてればこのような問題は起きないはずなのだが
もしかして複数のクロックドメインがあるのかな? 非同期の部分については
合成時にタイミング検証しない場合が多いよ
情報が全然ないので言えるのはこの程度の一般論だけだ
そういう質問するなら
ソ ー ス を 晒 せ
話はそれからだ
>>698 合成後のネットリストでゲートレベルsimをやっているんだろうか?
シミュレーションでタイミング違反が出るってのがそもそも少し変わった状況な気がするが、
どこかのセルかモジュールにspecifyとかの記述があるんだろうか。
テストベンチは自分で書いたの?
とりあえずこの辺に注意・・
・timescale
・入力信号の生成(特にクロック)
・遅延のないRTL記述と遅延つきのモデルが混在してるとややこしい
ふと思ったんだけど・・・
for-generateとかってラベル要りますよね。
for-loopは要らないですよね。
なんでだろ。
ラベル貼っても有効な使い道が分からない。
706 :
682:2006/12/29(金) 03:21:34 ID:LXrC3gD7
>>698 自分がGateWayのverilogシミュレーターを使い出したのは1988年だった。
ちなみにプラットホームはSun3で主記憶は16MByte。
最近はもっぱらVCSなのでCADENCEのは全くわからん。
ゲートシミュレーション時にタイミング違反が出るのは順当に考えれば
・合成の制約が間違っている
・シミュレーションで使ってるクロックの周期が間違っている。
(特にtimescaleに注意ね)
・クロックツリーがツリーがないのにシミュレーション時にidealにしていない。
・シミュレーション環境が間違っている。
ざっと思いつくのはこのあたりかなぁ。
まぁ、しかし、エラーを起こしたところの波形を見れば直ぐにわかる話だとは思うが。
>>697 そういう処理系が多いですね。
でも、言語仕様的には明確には定められていなかったような気がします。
最近のシミュレータは「プロジェクトファイル」や「リストファイル」のような
もので複数のファイルを管理するものが多いですが
`include "./piyo.h"
readmemh(mem, "./memory/piyo.mem");
のように書いても、Verilog HDLを記述したファイル(*.v)からの
相対パスで開いてくれるのは少数派で、
プロジェクトファイルからの相対パスになるものが多いですね。
#処理系依存。Verilog HDLの言語仕様には明示されていません。
まぁ、システムタスクでファイルを出力される先も同様で、
相対パスを付けても、どこからの相対パスで出力されるかは処理系依存な訳で、
この辺りは、複数のシミュレータで検証をしていたりすると
困った問題です。`ifdef でシミュレータごとの処理を分けたりするしか、
解はないと思います。
>>707 のreadmemhで思い出したんだけど、あれってシミュレーションの時にしか使えないの?
シミュレーションの時以外にも使えるならROM全部書き換えようかと思ってるんだが…
>>709 常識的に考えてシミュレーションオンリーだと思う。
もっとも漏れはシミュレータのコマンドを使って
RAMやROMを初期化しているから詳しいことはわからんけど。
プロセス文にも組み合わせプロセス文と順序プロセス文と違いがあることを知った15の夜
> 組み合わせプロセス文と順序プロセス文
順序どおり組み合わせ回路が更正されるのがprocessじゃないのか?
>>713 ラッチができるかどうかの違いみたいです
レオナルドスペクトラムで、何も考えずに合成をかけるとメモリをBRAMでしてしまうのですが
これをBRAMを使わないでLUTで合成するように指定できるでしょうか?
BRAMを使うとリソースが足りずエラーになってしまいます
>>715 マッピングはどのツールでやってるの?
配置配線は?
>>717 シンセサイズのプロパティの中にあった希ガス
今ISE入れてないPCからの書きコだからちょっと詳しくは分からない
自分で探してみて
フリーで記述チェックするツールないかな
Verilogならveritakだかveritekだかって言うのが使えるんじゃない?
回路のシミュレーションも出来る(ってかこっちがメイン)からとりあえずverilogでなんか書きたいならこれで良いとおもう
721 :
774ワット発電中さん:2007/01/17(水) 15:37:42 ID:YOkxeA04
ネタ禁止。
ところで、SVでアサーションを使いこなしているひといる?このスレじゃいないか?
723 :
774ワット発電中さん:2007/01/17(水) 22:00:03 ID:RJFOQzUE
>698
VerilogもVHDLもそれ自体が糞なんだよ。
こんな糞言語が蔓延りやがって、ほんとお前ら糞に振り回されて可愛そうな
こった。PCのソフトではMSの糞VBが消えて、かなりまともになってきたが、
ハード設計はまだまだ暫く受難だな。
ModelSimでのシミュレーションで、論理シミュレーションのときは見たい内部信号をすぐに
追加できるのですが、配置配線後のシミュレーションだと内部信号名が変わっててどれが
どれだかわからなくなり内部信号の追加に苦労します。
配置配線後のシミュレーションでも簡単に内部信号を見る方法はあるのでしょうか?
>>723 おすすめの代替言語についてkwskおながいしまう
ハード設計が遅れて泣きを見るのはソフト屋なんだよな、たいてい。^^;
いつもハード設計が遅れることを見込んで、さぼってるだよなソフト屋は…
予定通りにハード渡すと、たいていソフトができてない^^;
>>727 > さぼってるだよなソフト屋は…
その間に、別の「遅れてるハード用」のソフトやってたり(泣
>>724 合成やら配置やらの最適化を全部OFFにすれば多分見られるよ
でなきゃ無理
>>721 昔、
>>386を書いた者だけど使いこなしているかどうかは別にして使ってるよ。
それで、話を振った目的は何? 単なるsurvey?
質問おながいします
複数クロックがある回路でそれぞれのクロックの立ち上がり時に
1つのレジスタに信号を代入したいんですけど、
そういうときって↓のようなソースで正しく動作するのでしょうか?
これだとラッチが悪さして信号衝突しますかね???
process(CLK1) then
if (xRESET_IN ='0') then
elsif (rising_edge (CLK1)) then
if (r_hoge = '0';) then
r_hoge <= '1';
end if;
end if;
end process;
process(CLK2) then
if (xRESET_IN ='0') then
elsif (rising_edge (CLK2)) then
if (r_hoge = '1';) then
r_hoge <= '0';
end if;
end if;
end process;
まず試してから質問しろ、カス。
優しいお兄さんが教えてあげよう
ネットリストの合成時あたりでエラーでてとまる
複数クロックを使と解析が困難になるので回路を考え直したほうがいい。
clk1がclk2よりも高速という条件ならこんな感じで、
process (reset,clk1) begin
if (reset='0') then
elsif (clk1'event and clk1 = 1) then
clk2a<=clk2;
clk2b<=clk2a;
if (clk2a='1'and clk2b='0') then //clk2の立ち上がり相当
r_hoge<='0';
else
r_hoge<='1';
end if;
end if;
end process;
eclipse+IVIで開発してる人いませんか?
公式のExamplesやったけど新しいシュミレーションの作り方が分からないんで何か手がかりを教えてください。
>>732-734 レスありがとうございます。
複数クロックの場合、共通で使用するレジスタをどう扱うべきなのか
よくわからなかったので(R/Wのタイミングなど)
今回はclk1がclk2より早いという条件下の回路なので、
>>735さんに教えて頂いたようにclk1だけ使った回路に変更しようと思います。
どうもありがとうございますです。
>>738 ん?それでいいの?
731で書いている記述だとr_hogeはCLK1,CLK2それぞれの立ち上がりで変化している。
すなわちトグルレートはCLK1の半分より速くなる。だからCLK1だけじゃ実現不可。
というよりそもそももっと速いクロックを入れないと同期回路では実現不可だな。
しかし、タイミングチャートより先に言語記述で考えるというのが今のハード屋なのかねぇ。
×今のハード屋
○無理やりハードの仕事させられている今のソフト屋
上司「お前ハードはわからんって言ってたよな
でもいまどきはCで回路設計できるらしいぜ
お前もCは書けるんだから大丈夫だろ 設計頼むよ な?
>>723 もだが、
Cで設計できるって本気で思ってるヤシが多くて困るよな。
数値演算系はいいが、SD-RAM コントローラとかCで作ってみろよ。
むしろ System-C が C を強調しすぎてるのがマズいんじゃないかと思う
Cを強調しないと売れないんだろ
実際それ以外に特徴ないし
というか従来HDLよりむしろ劣化してるし
VerilogHDLで使えるAVRのフリーIPってPAVR位しかないのかな?
って言うか今まで参考書とかしか見てなかったから気付かなかったけど、世界的に見るとVHDLの方が主流なの?
>>745 OpenCoresは1つ以外はVHDLだったかと
それでいくらなんでも少ないよなと思って質問してみた
もしかして探し方が間違ってるのかな?
何をしたいかが先にあってハードはそれを実現する手段でしかない。
まだ道具の使い方を覚えてると思われる段階でタイミングチャートといわれてもなぁ。
ちょっとずつ覚えてハードのことも見えるようになっていけばいいんじゃない。
タイミングを考えないで作れるならそれに越したことはない、
ちまちま時間かけてコストダウンする分野もあれば、今高く売れる物をさくっと作ってしまう方がいい分野もあるわけだし。
タイミングチャートを書ける技術者も減っているしなあ
タイミングチャートって、クロックの線を引いて六角形を書くだけじゃないの?
SDRAMctrl、C風のHDLで書いたけど
initial、read、write、refresh、と機能別に書けるから分かりやすいな
ステートマシン生成するのはもうツールの役目だな
>>744 現状、EDAはほとんどVerilog版からリリースされます。その後VHDL版が出たらラッキー。
そんな状況なんで、VHDLの方が流行ってるとは思えないです。
Verilogで設計するトコに移籍した今となってはどーでもいいけど、VHDLの方が言語仕様がしっかりしてて、
RTL書く分にはトータル見ると楽だった。
儲かるのか?
>>750 VHDLしか分からない人ですが、VHDLでも列挙型ってのがあります。
> initial、read、write、refresh、と機能別
に書ける型です。
前にDesignWaveでHandel-Cでシリアルコントローラ、ビデオコントローラとか書いて
ワイヤーフレームの折り鶴を3Dで回したり、ブロック崩しをつくってみたりしてたね
(もちろん、CPUだのCPUコアだのは使わず)
全部あわせても一週間かからなかったとか
ソフトウェア用言語にたとえると
VHDL が C
Verilog は PHP
じゃあ実際に使うのはVerilogで十分だな。
ライブラリ作る人になりたい訳じゃないし
意義あり
仕様設計がきっちりしていれば、コーディングに使う言語による差はあまりないように思われ
VerilogとVHDLの両方を使ってみたことがあるが、
VerilogはVHDLに比べて
・記述量が少ない
・ビット列と整数の変換が楽
・エラーチェックが甘い(ビット幅の異なる代入を許している)
・regとwireの違いがわかりにくい
という印象を受ける。
VHDL が C
Verilog は Perl
そんな言い方したらCが可哀想。
>>759 基本的に同意です。
周りのASIC屋さんは、Verilog HDLの方が多い気がする。(これは気のせいですかね)
VHDLにはないスイッチレベル・モデルとかもありますので、
Verilog HDLの方が懐は深いと思います。
>>760 > VHDL が C
ALGOLじゃないのか(w
STARCは糞VHDLを推してるみたいだが
>>753 VHDLやVerilogの場合、出力ごともしくは一個のステートマシン記述になりがち
C風の記述だと、機能ごとにステートマシンを持つ
列挙型は単にステートを定義するだけですよね
Orcadばんざい
verilog HDLの欠点:全モジュールの扱いが一緒だからIP使ったりするとモジュール名がぶつかる。
VHDLの使いにくいところ:階層を越えたプローブができないからテストベンチを書くとき面倒。
このくらいかなぁ。
ソフトウェアで比較するなら
verilog → C
VHDL → PL/1
だと思う。
>>739 これ、DDRメモリに読み書きするデータ(64ビット*8バースト=512ビット)を
ユーザーから供給されたクロックで32ビットずつアクセスできるように
するための変換モジュールを作りたいのです。
なのでシステムクロック(CLK1)とユーザークロック(CLK2)を使うことを
考えていたのですが、
動作的にはCLK2の立ち上がりがトリガとならなくてもたぶん問題はないと思うので、
CLK1のみ使った同期回路で作ってみようと思います。
波形を見たときにCLK2の立ち上がり同期してるほうがわかりやすい気はしたけど、
自分にはクロック複数にするとわけがわからなくなりそうです。。
CLK1とCLK2は非同期なのか? それとも整数比で表現できる準同期なのか?
非同期だったら非同期FIFO使うしかない レイテンシはめちゃくちゃ大きくなるぞ
>>770 システムのイメージが掴めないのだけど、そんなに簡単なことではなさそうな気がする。
趣味で作る回路ならいいけど、仕事なら経験者にちゃんとレビューしてもらうことを強くお勧めします。
違うクロックの間のデータの受け渡しはトラブルの温床だからね。
俺も非同期では失敗したなぁ。
シミュレーションでも見つけにくいし。
各社メモリでコマンドの規格が微妙に違うし。
俺はSDRAMだったけど、DDRはもっと大変だろうな。
回路図描いたことも無いのにViRTEX5の
基盤を作ることになった。
わけわけあめ
>>773 たとえば
SDRAMの初期化で入れなければ行けないクロックの発数が
2だったり8だったり。
>>776 その違いが影響する設計ってすごいな
とてつもなくクリティカルな用途なのか?
>>777 ごめん。間違えた。
クロックの発数ではなくて、リフレッシュコマンドの発行回数だ。
> 2だったり8だったり。
三菱だったりエルピーダだったり、とか?w
微妙なところで違ってくるんだな。
マイクロンも2みたいだ。
ヤック、デカルチャ
>>775 FPGA海路そのものの設計なんて水晶懐炉図そのままでOK
電源回りだけだな。多層基板でない場合はパスコンケチらないとか。
量産とかでケチらんにゃシャーない場合もあるけど。
>>771 非同期でも周波数が CLK1 > CLK2 * 2 って条件なら
>>735みたいなのでもなんとかなるんじゃない?
>>783 非同期だとsetup timeとhold timeを保証できないのでそう簡単にはいかない
メタステーブル対策でD-FFを2段通すと5クロックくらい遅れる場合もあるので
>>735の手法は、安全係数かけて CLK1 > CLK2 * 8 くらい差がないとダメだろう
できれば16倍以上ほしい
>>770のやりたいことで、クロックが本当に非同期なら非同期FIFO使うのが定石だと思う
>>783 CLK1 = CLK2 * n ならいいけど、">"じゃ駄目よ。
784の書いているように、データの受け渡しをするのなら整数倍じゃないときは非同期FIFOにするのが定石。
スループットが低くてもいいならハンドシェークでデータの受け渡しをする手もあるけどね。
あと、メモリみたいにチップの外に行って戻ってくる信号では設計時は遅延時間が不定だから同じ周波数でも面倒な筈よ。
786 :
774ワット発電中さん:2007/01/28(日) 15:15:17 ID:CkNFuxn5
はじめまして。学校の課題で悩んでいます。よろしければご教授願います。
【ディジタル時計の設計】なのですが、仕様としては・・・
1.24時間表示の時計
2.入力クロックは1Hzが与えられるとする
3.これら以外の仕様は自由に決めてよい
となっています。
まず、自分が悩みに悩んでもできあがらない糞なソースを見てください。
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=29148 半年間講義を受けてこの程度です。
1秒生成の仕方がまずわかりません。
カウンタの意味すらよくわかっていません。
課題の提出期限が明日となりかなり焦っています。
課題そのものの解答が得られれば嬉しいですが、とにかく提出できるレベルになればと思っています。
アドバイス等々
どうかよろしくお願いします。m(__)m
475 名前:名無しさん@3周年[] 投稿日:2007/01/28(日) 15:12:27 ID:pzT5zUw1
はじめまして。学校の課題で悩んでいます。よろしければご教授願います。
【ディジタル時計の設計】なのですが、仕様としては・・・
1.24時間表示の時計
2.入力クロックは1Hzが与えられるとする
3.これら以外の仕様は自由に決めてよい
となっています。
まず、自分が悩みに悩んでもできあがらない糞なソースを見てください。
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=29148 半年間講義を受けてこの程度です。
1秒生成の仕方がまずわかりません。
カウンタの意味すらよくわかっていません。
課題の提出期限が明日となりかなり焦っています。
課題そのものの解答が得られれば嬉しいですが、とにかく提出できるレベルになればと思っています。
アドバイス等々
どうかよろしくお願いします。m(__)m
>>2.入力クロックは1Hzが与えられるとする
これが一秒だ。自分で作る必要なんかない。
>>カウンタの意味すらよくわかっていません。
わかるようになるまで、とりあえずもう一年
どことのマルチですか?
791 :
774ワット発電中さん:2007/01/28(日) 16:22:22 ID:CkNFuxn5
片方が下がったままだったので、両方に書き込む形となりました。
>>788 では、クロック自体に1Hzを与えるということをしなければいけないということですか?
いやいや、日本語をちゃんと読んでくださいよ。
「与えられる」つーのは自分以外の誰かがくれるっつーことなんですが。
ま、シミュレーションの際には自分で用意してやることになるでしょうが。
793 :
774ワット発電中さん:2007/01/28(日) 17:05:21 ID:CkNFuxn5
>>792 ですよね。
シミュレーションも自分で作らないといけないので、そこで与えることになるのかな。
パラメータで与えるものなんですか?
学校の課題なら、
課題を出す前にいろいろ教えてくれただろ。
それを聞かなかったお前が悪い。
795 :
774ワット発電中さん:2007/01/28(日) 17:28:06 ID:CkNFuxn5
すいません。
796 :
774ワット発電中さん:2007/01/28(日) 17:36:49 ID:YcM1J++l
反省しているようだから、
もう一年がんばるという意味と取らえて良いのでしょう。
それでは、この件は終了。
キャリーの考えが抜けている。
798 :
774ワット発電中さん:2007/01/28(日) 17:43:07 ID:CkNFuxn5
もう少し、頑張ります。
進展は望めませんが…
秒カウンタが59秒であることを条件に分カウンタを進める
分カウンタが59分であることかつ秒カウンタが59秒であることを条件に時カウンタを進める
800 :
774ワット発電中さん:2007/01/28(日) 18:06:47 ID:CkNFuxn5
801 :
774ワット発電中さん:2007/01/28(日) 18:30:19 ID:CkNFuxn5
カウンタを進めるというのはひと回りしてゼロに戻す場合も
含んでいると考えるべきなのでは?
君のソースだと、58分59秒になった後、59分00秒になって、
次に00分01秒になるから、こうしたほうがよいと思われ。
always @(posedge CLK or posedge RST) begin
if(RST == 1'b1) //resetかかれば0
M <= 1'b0;
else if(S == 6'b111011) begin
if(M == 59) M<= 0;
else M<= M + 1;
end
end
おっと、
>>799 に書いてあった。
804 :
774ワット発電中さん:2007/01/28(日) 18:53:32 ID:CkNFuxn5
if((S == 6'b111011)&&(M == 6'b111011)&&(H == 5'b10111))
S <= 6'b000000;
M <= 6'b000000;
H <= 5'b00000;
>>802さん
こういうことですか?
805 :
774ワット発電中さん:2007/01/28(日) 18:59:20 ID:CkNFuxn5
Veritak でも使って、シミュレーションしてみたら?
808 :
774ワット発電中さん:2007/01/28(日) 19:04:40 ID:CkNFuxn5
>>806 頭悪くてすいません。
ありがとうございます。m(__)m
809 :
774ワット発電中さん:2007/01/28(日) 19:12:08 ID:CkNFuxn5
>>807 使ったことがないソフトですが、今やってみたらコンパイルエラーがでましたorz
つ留年時計
811 :
774ワット発電中さん:2007/01/28(日) 19:24:41 ID:CkNFuxn5
選択なんで、留年はたぶん大丈夫だと・・・
812 :
774ワット発電中さん:2007/01/28(日) 22:48:56 ID:N4DB7JR5
大手企業の中でHDLと論理合成ツールのみを使って給料稼げますか?
144 名前:774ワット発電中さん[] 投稿日:2007/01/28(日) 02:56:57 ID:N4DB7JR5
HDL&論理合成ツールだけしか使えないって技術者は多いんでしょうか?
こんな設計でいいの?
リセットを同期化するFFを追加して、同期リセットにしておいた方が。。。
(クロックとリセットのタイミングによっては異常な動作をする可能性が)
また、フェイルセーフな設計になってないぞ。
(たとえば、ノイズなどでレジスタが6'b111111等になった時の動作が記述されていない。)
815 :
774ワット発電中さん:2007/01/28(日) 23:00:28 ID:CkNFuxn5
>>814 すいません。
せっかくアドバイスいただいたのに、
アホなのでどうすればいいのかがわかりません。
そんなことは気にしなくていい。
あなたはまず課題の本質の部分を完成させないことには提出できない。
817 :
774ワット発電中さん:2007/01/28(日) 23:31:56 ID:oslHH7rg
module DIGITALCLOCK(CLK,RST,S,M,H);
input CLK,RST;
output [5:0] S;
output [5:0] M;
output [4:0] H ;//;忘れてるよ
reg [5:0] S;
reg [5:0] M;
reg [4:0] H;
//秒部分0〜59秒
always @(posedge CLK or posedge RST)begin
if(RST == 1'b1)
S <= 0;
else if(S == 59)//59かどうか確認する。
S <= 6'b000000;
else
S <= S + 6'b000001;
end
//分部分0〜59分
always @(posedge CLK or posedge RST)begin
if(RST == 1'b1)
M <=0;
else if( M == 59 && S==59)//59かどうか確認する。
M <= 6'b000000;
else if (S==59)
M <= M + 6'b000001;
end
//時部分0〜23時
always @(posedge CLK or posedge RST)begin
if(RST == 1'b1)
H <= 0;
else if(H == 23 && S==59 && M==59)//23かどうか確認する。
H <= 5'b00000;
else if (S==59 && M==59 )
H <= H + 5'b00001;
end
endmodule
珍しくカキコが多いなと思ったら、宿題かよ…
現在時刻に合わせる必要はないの?
>>801 >シミュレーションに関してはやはり、1Hzのことがサッパリで...
確かに全然わかっていないようだねぇ。
シミュレーションのソースを見ると100ns周期(10MHz)のクロックを作ろうとしているように見える。
1Hzにしたければ
`timescale 10ms/10ms
であろうが、他にも問題あるな。
まぁ、もう間に合わないだろうけど・・・・
>>814 どうせただのカウンターだ。0に戻るから問題あるめぇ。
823 :
801:2007/01/29(月) 17:41:05 ID:piI24mHj
じゃっかっしわい!ボケナス
HDLしか能のない害虫糞ボケが生意気に人の批判さらすなゴミ
ぬっコロスぞ
あと、何かありますか?
お前ら暇なやつばっかりだなぁwww
急にレスが伸びてる
VHDLで書けよ。
漏れがネタに参加できないじゃないか。
つ V2V
>>812 無理。使い捨てにされるのが落ち。
それなりの規模の企業の中では
全体設計ができるようにならなければ
いずれ切り捨てられる。
HDL一本で行きたければ
それを専門に請け負ってる業者に
行けばいいんじゃない?
何でもできるようになれと?
830 :
812:2007/01/30(火) 01:58:56 ID:g6X26uWq
>>828 レスありがとうございます。
全体設計の示す範囲を具体的に教えて頂けないでしょうか?
831 :
774ワット発電中さん:2007/01/30(火) 02:45:19 ID:2VIP9kn7
6bitカウンタで64ステップか〜
60でリセットすればいいんだから
ANDとって…
HDL一本でなんて虚しいからやめろ。
HDLにしろプログラム言語にしろ、今現在流行っているだけの簡易設計のためのツールだ。
そんな人様の作った仕様の使い方の達人になったところで、
テクニシャンというか、職人といっしょだよ。
大学で研究やってる香具師と十分タメ張れるだけの、何か一つ以上の専門分野持って(それが論理合成とかもあるけど)、
HDLも使える、Spicceや伝送シミュレートも含めて、回路、パターンCADも何か一つ使える。
プログラム言語も世間で普及してるものは書ける、読める。
リアルタイムOSあたりも使える。英語もそこそこできるってのが、少なくとも大卒以上のエンジニアのたしなみ。
たしなみに人生賭けるなんて虚しいだけだ。しかも設計手法なんて一生もんじゃないぞ。
大卒どころか院卒(予定)だが
リアルタイムOSなんて使ったこと無いぜ!!
>>833 自分で組込用のプリエンプティブなマルチタスクOSの一つも書いてみれば
だいたい分かるよ
>>834 プリエンプティブなマルチタスクOSって言われても
正直なんのこっちゃって感じだけど
OS書いてみるのは面白そうだと思って
OSASK作者の「30日でできる! OS自作入門」買ってみた。
2月中に書けるかなあ?
まあ、Design Compilerの論理合成方法を習得したところで
あまり意味はないよなあ。
大規模なDSPをHDLで作るときは
1人1人に小さな部分を割り振られて
1人1人コードを書いて最後に全部併せるという手法で作ると思うんですけど、
こういうときに必要なスキルってHDL以外に何だと思います?
コミュニケーション能力
840 :
774ワット発電中さん:2007/01/31(水) 00:02:16 ID:Z53JoSbr
コミュニケーションスキル。
どんだけコミュニケートできてないんだよwww
隣の席のヤツにメール打つくらい
warota
>>838 仕様をきちんと決めてから設計しましょう。
846 :
774ワット発電中さん:2007/02/06(火) 22:29:57 ID:oOcSZ8WL
CPLDでプリセットカウンタを作ろうとしています。
下記のようなVHDLを記述したのですが、XilinxのISE9.1 XC9572では合成できませんでした。
動作は、STARTの立ち上がりでダウンカウント開始、
q=0になったらQ_OUTを'1'にするのと同時に、qにIN_DATAをプリセットするというものです。
助言お願いします。
process(CLK,START,ENABLE,q)begin
if(START'event and START='1')then
ENABLE<='1';
end if;
if(CLK'event and CLK='1')then
if(ENABLE='1')then
if(q="00000000")then
Q_OUT<='1';
ENABLE<='0';
q<=IN_DATA;
else
q<=q-1;
Q_OUT<='0';
end if;
else
end if;
end if;
end process;
ENABLEの扱いがよくワカンネ
START立ち上がりで“1”にして、カウントダウン終了で“0”にするのか?違う入力条件でセット/リセット
ENABLEとCLKは非同期なのか?
CLKを一本化して整理した方がいいんじゃね?
つーか 'event を2つ書いてる地点で文法的におかしいんじゃないか?
コミケと東京ゲームショーが同時に起こったら
そら勿論コミケの方に行くのよさ
みなさんに質問ですけど
HDL書く前に回路図を書く(もしくは脳内で書く)ことは必須ですか?
それとも状態遷移図を書く(もしくは脳内で書く)ことが出来ていれば
問題ないですか?
それともどちらも不要ですか?
両方必要。HDLは思考の道具ではない。実装するための道具。
>>851 >>852は大ウソ
状態遷移図は必要だが、
回路図は必ずしも必要ない。
状態遷移図さえ書けばHDLに自動的に落とすツールも存在する。
HDL以前に頭から回路図で書けばいいってなもんだが、
そこまでやるならHDLは不要ってこった。
HDLを見て回路図が脳内で書けることは必要だがそれは簡単
そこら辺は森岡澄夫が著書の中で解説してる
HDLで書いて、論理合成の後、回路図を確認して一応自分の考える回路になってるか確認できれば
それでok
大体電気回路とか電子回路と違って論理回路ってのは物理現象を書き表してるわけじゃないしな。
回路図らしきものに機能を書き込んでるだけだし、むしろ動作タイミングとか回路図みただけじゃよくわからなかったりする。
HDL見て、あるいは自動出力の回路図見て、いいか悪いか判断できればいい。
>>853 >
>>851 >
>>852は大ウソ
> 状態遷移図は必要だが、
> 回路図は必ずしも必要ない。
半ウソにしてあげたら?
「必ずしも」だったらクォータウソくらいでもいいかも知れない。
>>851 回路図は不要。何のために論理設計するんだか。(FPGAの周りの回路図は必要)
状態遷移図は規模がでかくなれば必要。
遊びなら、やってみて必要と思えば書けば?
>>851が言ってる回路図って
論理合成後に出てくる回路のことだったのか?
だったら不要だわな。
状態遷移図は我流でVisioとかのお絵描きツールを使って書いてしまいがちになるけど、
もし、身の回りにHDL Designer(FPGA Advantageで購入してるかもしれん)があれば、これで書いてみることを
お勧めする。コンパイルかけてHDLにまで仕上げることもできるし、
そこまできっちり書かなくても流儀がわかる。
こういうcadツールのいいところは触ってるうちに仕事の進め方が見えてくるんだよな。
使い始めは鬱陶しいんだけど
>>854 >半ウソにしてあげたら?
まぁ2ch流の表現ってことで。
しかし状態遷移図をVisioで書くって凄い根性だな。
>>853 >大体電気回路とか電子回路と違って論理回路ってのは物理現象を書き表してるわけじゃないしな。
物理屋が聞いたら怒るよ
電気・電子回路図だって物理現象を全然表現できてない/しようともしてない
かなーり抽象度が高くて物理的振る舞いからかけはなれた表記法だ
>>859 >しかし状態遷移図をVisioで書くって凄い根性だな。
じゃ、何で書いてるの?
専用ツールがあればそれ使うし、なければお絵描きツールで書くでしょ、
フローチャートであってもUMLであっても。
>>860 喪前のいうのは、微視的な量子のふるまいとかの話だろう。
マクロな意味で物理現象を表現してるでしょ。
少なくとも回路図見てそれに対応する、微分方程式がたてられるわけだから。
しかもその式は電気磁気現象として逐一説明可能だし、
電磁気の演習問題として、j回路図をMaxwell方程式で説明するものもある。
回路図がマクロな物理現象を説明したものじゃないというなら、
力学の斜面を転がる円柱の絵だって抽象的で物理的ふるまいからか離れた表記ってことになる。
グラビトンの作用云々から表記するか?
いやいや量子力学まで行かなくても
回路図ではmaxwellの方程式すら表現できないでしょ
電流が流れれば必ず存在するはずの磁界/磁束を
回路図でどう表現できているというのか?
せいぜいトランスというシンボルで理想化した電磁相互作用を
表現できてるだけじゃん。
単に高周波を伝送するだけで配線の形状や配置関係に
依存する相互作用があるはずだがそれは表現できているのか?
分布定数回路ですら「回路図」で表現するのは困難だ
そんなんでマクロな物理現象が表現できてるなんていったらチャンチャラおかしい
>電流が流れれば必ず存在するはずの磁界/磁束を
>回路図でどう表現できているというのか?
磁気を主目的にしたいなら磁気回路図で扱えばいいし、
磁気が電流、電圧に作用する部分は、普通に電気回路として表現できる
>せいぜいトランスというシンボルで理想化した電磁相互作用を
>表現できてるだけじゃん。
別に理想化する必要はまったくなくて、磁気作用が、電圧、電流に影響する部分も
L、C、R、電圧源、電流源として回路図に盛り込むことは普通に行われること。
>単に高周波を伝送するだけで配線の形状や配置関係に
>依存する相互作用があるはずだがそれは表現できているのか?
それも、L,C,R,電流源、電圧源として回路図に盛り込めばいいだけのこと。
分布定数回路として回路表現可能だ。形状、配置による影響が回路に盛り込めなければ
Spiceシミュレートなんかなんの意味もない。実際Spiceモデルとして各社配布してるものは
形状やIC内部の配線も考慮して作成される
少なくとも100GHzまでの電圧、電流に関する回路図表現は実際の物理現象ときわめて正しく符合してる
864 :
774ワット発電中さん:2007/02/07(水) 11:59:27 ID:oASmvBSv
> L、C、R、電圧源、電流源として回路図に盛り込むことは普通に行われること。
そういうふうに結果が合うように実際には存在しないモノ(等価回路)を
持ち込むことを抽象化した理論というのですよ
>>863は、spiceが物理現象をシミュレーションしてるって本気で思ってるんだね
+Q と -Q に帯電した半径10mmの導体球がふたつあって
1m離れて互いに近づく方向に100mm/secで運動している
って問題ですら回路図で表現できないってことを言いたいだけ
マクロミクロの問題ではないし、いい悪いの問題でもない
電気回路ってのは人間が電磁気現象を工学的に応用しやすいように
高度に抽象化し、省略すべきところはがんがんして
人間にとって扱いやすいように人間が考案した表現法なんであって
物理的な電磁気現象を表現するためのものではないってこと
話は変わるが
こっちが3次元図で電界強度や等電位面や磁束線とか書き込んで議論してると
ひょひょいと横から入ってきて、寄生キャパシタを図に書き込んで
「これで全部説明できるじゃん オレって天才」なんていってる馬鹿
こういう人は結構いるんだが、私はかなり辟易してる
等価回路がその名の通り抽象化してるのは認めるが、。
電気回路は論理回路が単に1,0入出力、選択、保持に機能を絞ってるのとは全く異なる
なぜなら、それが電気磁気現象として説明可能だから。
>spiceが物理現象をシミュレーションしてるって本気で思ってるんだね
物理現象をシミュレートするんじゃなくて物理現象に即した回路を計算してる。
>物理的な電磁気現象を表現するためのものではないってこと
読み返してみて確かに物理現象を書き表すというような書き方をしてるんだな(
>>853とか)。
これは俺の間違いだ、回路表現したものは電気磁気現象で説明できると言いたかった(
>>861)。
>こっちが3次元図で電界強度や等電位面や磁束線とか書き込んで議論してると
どうでもいいが、デバイス屋でもない限りうざいだけだろ。
職場で煙たがられてない?
>「これで全部説明できるじゃん オレって天才」なんていってる馬鹿
天才じゃないが、最終出力が電圧/電流で済むなら、それで説明できるしな。
磁気センサでも開発してるのか?そうじゃなきゃ職場で回りから辟易されてない?
>こういう人は結構いるんだが、私はかなり辟易してる
回路屋なら普通だろ。
いや 私はデバイス屋だから ハハハ
>>865氏には、回路理論が電磁気現象のうちのかなり狭い範囲でのみ
適用可能なものだとわかってもらえたようでなによりです
オレ様は物性の知識はないが電磁気なら任せとけって
回路工学しか知らんオヤジが乱入してくるので辟易してたのです
オームの法則を物理法則と思い込んでる人にはもうコリゴリ
ありゃ電気工学でのみ通用する法則だ 自然界のほとんどは非線形なんだよ!
なんかストレスたまっててあたってしまったようでゴメン
すれ違いなのでもうこれで終わりにします
んじゃメシ食ってきます
867 :
774ワット発電中さん:2007/02/07(水) 13:54:28 ID:FCJPe+I6
ハァ?こんな糞デバイス屋がHDLスレなんかに出入りすんなや。
迷惑なだけなんだなデバイス屋は。 塩塩
えーんえーん
>>866 >オームの法則を物理法則と思い込んでる人にはもうコリゴリ
物理現象と実験を通じてその相関関係が確認されたものを物理法則ってんだ
オームの法則が物理法則でなければいったいなんだ。
宇宙の膨張モデルをシミュレートしてる物理屋は物理法則を捜してんだYo
>>867 職場でこっそりネットやるんじゃなくこの時間に昼飯食ってるなんて学生だな
相手にすんな。ウざ杉
HとLが あればいい
あまり良い設計方法か分からないが、
組み合わせ論理を大まかに考えながら時間軸上にレジスタをずらっと並べてから設計するようにしてる。
学生じゃなくても職場でネットしてる時点でダメダメと思うんだが一般的にはそうでもないのか。
ブロック図と状態遷移表は書く。
>>869 オームの法則が物理法則ではないというのは確かに言いすぎだな。歴史的な経緯もあることだし。
が、現在の物理学の立場は、相対的にマクロな現象はより基本的な法則から導かれるという信念のもとに、
その基本法則を求めるところにある。宇宙の膨張モデルにしても、より基本的な法則を仮定し、
その法則に従う宇宙をシミュレートし、そして現実の宇宙と比較することで、
仮定した基本的な法則の是非を論じるものだから、その範疇にある。
で、オームの法則についていえば、これは電磁相互作用以外の要素がないから、
より基本になる法則を探索するまでもなく、マクスウェル方程式によって完全に説明されるはずだ。
にも関わらず、実際にはオームの法則はマクスウェル方程式から導けない。
そういう意味で、オームの法則は現在の物理学的にみれば唯の経験則に過ぎず、
すでに判明済みのより基本的な物理法則の裏付けがない。
つまるところ、オームの法則は物理現象を記述するという意味で物理法則ではあるが、
一方でマクスウェル方程式以後の物理学的な視点からは物理法則というより電気工学法則なのだ。
オームの法則って抵抗って概念の定義式で、実は法則じゃないよね
I = E/R のRが常に一定だったら法則にもなるだろうが
広い範囲でRが常に一定となる抵抗体なんて実在しない。
実際には非線形奈挙動を示すものがほとんどだ。
抵抗体の材料や温度に依存するのはもちろん、Rって電圧電流にも依存するってこと。
つまり I = E / R(T,I,E, ...) なわけで
これはもう工学として便利に使える *抵抗* という概念を導入して
R(T,I,E, ...) = E / I
って定義してるだけのこと。こんなのはまったく物理法則ではないよ。
物理法則というのはたとえばニュートン力学の法則のようなものをいう。
第二法則 F = ma
ここの 質量mは 力Fとか 加速度a にまったく依存しない一定値(固有値)だ。
(相対論までいけば見かけの質量mは変わるが、それでも主観質量は不変)。
こういうものを物理法則という。もちろんこれは経験式であり
> 物理現象と実験を通じてその相関関係が確認されたものを物理法則ってんだ
上の引用そのままで導かれたものだ。
真空の光速度一定とか、慣性質量と重量質量の比例(単位系を適切にとれば一致)とか
そういうのが物理法則。
電磁気でいえばクーロンの法則とかアンペールの法則とかが物理法則と言えるだろう。
もちろんそれらを統合したマクスウエルの方程式も物理法則だ。
しかしオームの法則は回路工学のために人工的に作られた定義式。
とても自然現象を観察して経験的に得られた経験法則とはいえない代物だ。
で?どこを縦読み?
>>853 >HDLで書いて、論理合成の後、回路図を確認して一応自分の考える回路になってるか確認できれば
>それでok
これって思ってもいない回路になってて
びっくりするときがあるよね
だけどちゃんと動く
んーちょっと暴論かもしれんが……ASIC屋なら回路図は意識すべきだけど、
FPGA屋なら回路図なんて意識するだけ時間の無駄。
理想的には、最初っから最後まで回路図なんて考慮する必要なし。
現実には速度や面積の加減でFPGA使っててもschematic見なきゃいけなくなることはある。
でもその時点で、そもそもRTLレベルか、より上位のところの設計が間違ってるってことで、
ただの敗戦処理だよ。最初っから無駄な配線処理を意識して設計するもんじゃないでしょ?
例えて言うなら、Javaでプログラムしてるのにバイトコードを意識するようなもん。
そりゃ、バイトコードを意識するイカれたJavaウィザードはいるし、
超絶テクニックなプログラムは凄いけど、何のためにJava使ってるんだ何か違うだろと。
そうだね
RTLレベル
コストダウン名目のあおりで、FPGAでも回路というか配線リソースを
最初から意識して設計するけどなぁ…
>>877さんのところみたく、余裕のあるチップ使いたいな…
> 例えて言うなら、Javaでプログラムしてるのにバイトコードを意識するようなもん。
それは例えがひどすぎないか。Javaでそんな事をするのは確かに変な奴だけど、
実際にはCでプログラムしている時にインライン・アセンブリを使うようなものでしょう。
HDLはJavaほど高級言語じゃないでしょう。
>>873 お前は複雑系を知らんのか?
そもそもHDLのスレで何をごちゃごちゃレス入れてんだ
>>874 ゲラゲラお前も馬鹿だろ
お前の書いたそのまま返してやるよ
a =F/m mが常に一定だったら法則にもなるだろうが
広い範囲でmが常に一定となる物体なんて実在しない。
すると
ニュートン方程式も法則じゃないよな アホ
自演荒らしかな?
884 :
774ワット発電中さん:2007/02/08(木) 15:10:59 ID:WQhOM0vh
>>874 おい池沼
オームの法則が物理法則じゃなけりゃ。
江崎玲於奈が負性抵抗の発見で、なんでノーベル物理学賞受賞したのか説明してみろ。
工学のため便宜式がなんでノーベル物理学賞なんだ。えぇ?
アホが。
はーい 池沼です
なんか吠えてる変なのが1匹いるね
まず、江崎玲於奈氏のノーベル物理学賞は トンネル効果の発見の功績によるものだ
決して負性抵抗の発見の功績ではないぞ
それから、負性抵抗そのものはエサキダイオードより昔からよく知られていた現象だ
身近にあるのは発光管、たとえば蛍光灯とかネオン灯とか水銀灯だな
これらは典型的な負性抵抗を持つデバイスとしてよく知られていた
よって単に負性抵抗の発見しただけでノーベル賞ってのはありえない話だ
つーか負性抵抗の存在そのものがオームの法則が物理法則ではない証明ではないかな?
なんじゃそりゃ。
「物理法則」とやらの定義教えろ
>>885 お前が変なやつだ
スレと関係ないことを延々書き込みくさって。
糞デバイス屋ごときはこっちの仕様に合わせたデバイス作っとりゃええんだ。
さっさと出て行け、職場の嫌われ者
あ。ひょっとして就職できんかった糞学生か?さっさと首括って死にな。
> 例えて言うなら、Javaでプログラムしてるのにバイトコードを意識するようなもん。
iアプリも505くらいまでは普通に意識して書いてたがね。
サイズも速度も。
意識して書いててそれがホントにコードに反映できてるの?
JavaではないがCでもポインタ使いまくってさぞ速度改善できただろうと
Pentiumu上で走らせたら、逆に速度低下した。
幸いターゲットCPU上はポインタ使いまくりの方がよかったんだが、
Javaで開発してて、アセンブリコードまで見通せるか?
糞コンパイラのせいだ
なぁ
HDLの話題しなつもりなら
よそでやってくれ
たのむわ
>>889 アセンブリコードじゃなくてバイトコードな。
マシンコードとは粒度が全然違うから比較にならんよ。
だけど記述量を減らしたいだろ
たのむわ
>>880 使用リソースの少ないHDL記述と、設計の過程で回路図を意識するのは、
FPGAの場合は同値じゃないと思うけど。
それが切り離されてるのがFPGAで、切っても切れないのがASIC。
>>882 うわでた、複雑系。工学屋がそれ持ち出すときって激しく似非科学の香りが。
882さんが本当に複雑系分かってるのかどうかは知らないけど、
そのキーワード出しちゃ駄目でしょ・・・
>>888 iアプリって、それじゃFPGAじゃなくてASIC設計に近くない?
そもそも、FPGAで回路図を意識するったって、数十〜数万のLUTを真理値表込みで意識するの?
LUTをAND/OR等に展開した等価(だれが等価を保証してるのかしらんが)回路図を意識するの?
前者が出来る人って限られてると思うし、
後者ならゲート段数も遅延も実リソース数も直接は分からんのに意識する意図はなんだろう?
>>892 そうだな、Javaだしバイトコードだ。
でもソースコードがどんなバイトコードに落ちるかなんて、
Cがどんなアセンブリコードに落ちるか以上にわからんのじゃないのか?
>>895 >うわでた、複雑系。工学屋がそれ持ち出すときって激しく似非科学の香りが。
そんなことないだろ。例えば廃水処理とかも言ってみりゃ複雑系だ。
廃水をいちいち分析してたんじゃいつまでたっても浄化なんてできん。
生体なんかもそうだろ。最近はDNAとの絡みがようやく分かってきたけど、
因子があまりに多くて、逐一分析なんてやってられん。
結局、入力に対する出力を観測して。内部状態を推定する。
波形等化はまさにこれ。
HDLと何の関係があるんだ?
>>897 経験則や工学法則の文脈での複雑系は問題ないんじゃないかな。
物理法則を云々してる文脈で工学博士が複雑系を言い出したら要注意。
>>898 > 結局、入力に対する出力を観測して。内部状態を推定する。
> 波形等化はまさにこれ。
ってことで、FPGAは工学的な複雑系と見なせるか?
って話じゃないの?違った?
>>898 いろんなスレに時々来る、不要な議論でスレ荒らしというやつで。
自演荒らしですよ
もうFPGA開発のバイトはいやぼ。なんで開発はパートとバイトだけでやらすの。
正社員は人事抗争が仕事なのか。アホ
“パートとバイト”って言われると、“おばちゃんと学生”って感じるのはオレだけか?
パートタイマー=おばちゃんだけじゃなく派遣一般
アルバイト=もちろん学生以外もいる
ところで15スライスだけ多いとかいわれて詰んでる場合ってどういうところ弄るもんなの?
シンセサイズのオプションはもうサイズ優先に変えてあるんだけど…
ISE 9.1にしたらどうにかなったりするかな?
VHDLについて一つ質問があります。
例えば、あるvariable変数a,b,c,dがあるとします。
process(CLK,RESET)
省略
begin
if(RESET='0') then
省略
elsif(CLK's event and CLK='1') then
c:=a+b;
d:=not c(0);
end if;
end process;
と記述した場合、入力がa,b、出力がcの加算器が生成されますよね。
その結果を元に、dの否定が得られますよね。
同様の事を、加算器ではなく自分で作成した回路(モジュール)で行いたいのです。
このような回路を作成するためには、どのようにVHDL上で記述すればよいのでしょうか?
皆様、よろしくお願いします。
VHDLで合成する場合、variableではなくてsignalを使う
a b c dの宣言をsignalにして
(省略)
c <= a+b
d <= not c(0)
(省略)
のようにsignal代入文を使え
>>906 9.1だと多少減るから入るかもよ。
でも、そんなぎりぎりでスピードは大丈夫?
アホだw
866はURLの貼り間違えなんかしないだろうから
すぐ誤解は解けるんじゃないか?
>>907 > と記述した場合、入力がa,b、出力がcの加算器が生成されますよね。
a、bはどこにつながるん? って怒られない?
FPGAに入りきらないのを 詰んでる か、なんとなくいい表現だと思った
けど、ゲームで詰んでるときってもう絶対どうしようもないよね
> FPGAに入りきらないのを詰んでる
倉庫番やってて詰んだ感じ?
916 :
774ワット発電中さん:2007/02/09(金) 23:07:58 ID:fxqRKdIj
>>907 d <= not (a xor b);ってことか。
ツンデレなFPGA!
そろそろ次スレ準備していい?
だめ早すぎる
MicroBrezeとフリーのCPUIP
未だスイッチとLEDとLCD、あとはステートマシン形式で動かしてる自分が勉強するならどっちの方が良い??
CPUIPならマイコンは弄ってたんで組み込みさえ出来れば使えそう。
MicroBrezeの利点が商業的な宣伝ばっかりで分からないので誰か教えてくれないだろうか?
>>920 CPUの何を勉強するかによるけど、使えればいいならMicroBlazeでしょ。
最近はメモリがDDR/DDR2だから、フリーで組むのは敷居が高い。
FPGA内のブロックRAMで済む程度ならフリーでもいいけど。
>>907 variableは仮想として存在するだけ。合成の時は展開されて消えてなくなる。
signalがなければ回路は出来ない。
>同様の事を、加算器ではなく自分で作成した回路(モジュール)で行いたいのです。
そんなことは出来ない。基本的に入力に対する出力が同じなら、同じ回路が合成さ
れる。
a <= b*c;
と書こうが
process(b,c)
variable d :integer ;
begin
d :=0;
for i in 1 to c loop
d := d+b;
end loop;
A<=d;
end process;
と書こうが極端なことを言えば同じ回路となる。もちろん合成ツールがどこまで頑張
るかによるけど。
>もちろん合成ツールがどこまで頑張
>るかによるけど。
ふざけんな!こんなもんやってられっかバーロー!
って言われて終わりになりそうだ
Design Compilerで、Design Wareが使えるなら、
下手な演算器を作るよりDesign Wareを使ったほうが
いいのか?
> 合成の時は展開されて消えてなくなる。
そうでもないよ。
まず言語を覚えてから、とghdl+gtkviewでしこしこ勉強してたんですが、
このほどISE WebPackとQuartus IIを使ってみたところ、いくつか判らない所が
出てきました。
言語と直接関係ない質問なのですが、
・いずれも大量のファイルを使用中に生成するのですが、バージョン
管理システムに入れる必要のない「不要な」ファイルを掃除する方法は
あるでしょうか?ファイルが多すぎてどれがなんだか・・・
・Quartus IIではRTLレベルとゲートレベルでシミュレートできたのですが、
ISE WebPackではRTLレベルの出力しか出せませんでした。ISEでゲート
レベルのシミュレーションをする設定はどこにあるでしょうか?
・ISE WebPack/QuartusIIとも波形エディタでテストベンチを作れるよう
ですが、これは使わずVHDL/Verilogでテストベンチを記述する
習慣を身に着けておいたほうがいいでしょうか?波形エディタだと
テストが複雑になっていくと破綻しそうな気がしてます。
・これまでModelSimを波形ビューアだと思ってましたが、実はコンパイルも
シミュレーションもできるようです。とするとISE WebPack/Quartus IIは
デバイスへのフィッティングと書き込みに使うだけで、普段はModelSimだけ
使ってテスト&シミュレートというのが普通の開発スタイルなんでしょうか?
といった主に開発スタイルの所で疑問が一杯です。
なんか初心者な質問ですみませんが、教えてください。
>>926 私のスタイルは多分かなり邪道なので・・・だが、
・波形エディタのテストベンチ
実用にならないと思ったほうが良いと思う。
言語でシミュレーション用の信号・入力を記述して、ModelSIMなりの
シミュレータでシミュレーションするのが、妥当。
・ModelSIM
シミュレータです。
QuartusもISEも、デバイスフィッティングにしか使ってません。
主力デバイスがAPEX20Kだったころは、動作速度が足りずに
パイプライン化で速度を稼いでいたので、演算を分離して速度を確認してから、
またModelSIMに戻ってバグ取り、とかしてました。
Cyclone世代になってからは、当方の使い方では滅多な事では、速度が合わない
事がなくなったので、Quartus2もISEもフィッティング専用です。
ふーんghdlね。そんなのがあるんだ。もう終わりかけの規格を今頃おっかけて何するんだろ?
>・これまでModelSimを波形ビューアだと思ってましたが、実はコンパイルも
> シミュレーションもできるようです。
”コンパイルも”って、論理合成のこと言ってるのか?Simしようと思えばコンパイルするのは当然だし。
何を指すのかよくわからん?
>普段はModelSimだけ
> 使ってテスト&シミュレートというのが普通の開発スタイルなんでしょうか?
ファンクションシミュレートならModelsimだけつかってやることはできるが、
統合環境下で、イニシャルファイルの作成とか、論理合成ツールの吐いたタイミング情報取り込みとか
やらせた方がよっぽど楽。統合環境ならそういうこと意識しないで使えるし。
Asic設計やる奴とか、統合環境なしにmodelsimを頭から使うんだろうが、そうとう面倒じゃないかと思う。
ModelSimってずいぶん不親切だよね
元々頭の良いウニクスから来てるからだと思うけど
>>926 ソース管理
ISEならCleanがプロジェクトメニューあたりにあるよ
これでもきっちり全部消えるわけじゃないけど
俺は最近VSSで管理し始めたけど、ファイルの選別や運用は結構大変だよ
>>928 ソフト屋の趣味ハードいじりの一環での勉強に過ぎないので・・・
ハード設計用言語といえど、どれか覚えれば他の言語も後から
ついてくるだろうと入門書が多いVHDLからやってみました。
ghdlはgccとか使うのと同等のシンプルな使い勝手で軽量だったので、
言語以外の学習障壁がなく勉強用には助かりました。
>>927,928
ModelSimと統合環境の機能分担がよく判らないのですが、
- フィッティング、論理合成、書き込み → ベンダ提供統合環境の仕事
- テストベンチ実行、シミュレーション → ModelSim
ですよね?でも、論理合成ツールの吐いたタイミング情報の取り込み、と
いうことは、
- RTLレベルシミュレーション → ModelSim単体でOK
- ゲートレベルシミュレーション → 統合環境+ModelSimが必要
ということになる?(ゲートレベル、の意味を誤解していなければ、
実デバイスの遅延なども考慮したシミュレーションのことですよね?)。
#統合環境重たい(特にISE)のであまり使いたくない
>>926 やっぱりそうなんですか。ISEでCleanしてもいらないレポートとか
残って、履歴管理どうしてるんだろうと思ってました。
横から失礼。
ゲートレベルsimてのは、基本的にそれでいいと思います。
でも、多分キモとなるのは遅延simではなくて、合成後でのsimという意味合いが
強いと思ってます。
ModelSimなんかのシミュレータはビヘイビアレベルのRTLをコンパイルして、
これはまさにソフトの世界でのコンパイルを行うイメージで、んでsimする。
でも実機ではビヘイビアレベルを一旦ゲートレベルに落とすわけです。
これを合成って呼ぶのだけど、できるだけ"コンパイル"と"合成"を(言葉で使うときに)きっちり
区別したほうが良いですね。
めったにないんですが、合成結果とコンパイル結果が違うことがあるんですね。
また、不定や初期値等の扱い辺りも含め、最後の確認として1発流す程度でしょうか。
sim速度が10倍、100倍と遅くなることもめずらしくないので>ゲートsim
そんなわけで遅延についてはSTAで確認するのが普通です。
>- RTLレベルシミュレーション → ModelSim単体でOK
>- ゲートレベルシミュレーション → 統合環境+ModelSimが必要
細かくいうとsimの段階に限って言えばISEの統合環境自体はいらんです。
ModelSimXEていう、Xilinxのデバイスのセルライブラリを含んだModelSimが
あればゲートsimできます。
まあ、ゲートレベルのRTLを作るのにはISEがいるけれどw
ゲートレベルSimっていうのは、合成後のネットリストの事?
遅延を考えないとHDLでのRTL-Simとの違いってそんなにあるのかな?
フィット後の遅延Simになるとぜんぜん違うけど
>>932 931さんが書いているように、意図しない回路が合成されて
(合成器のバグ、曖昧な記述によるラッチ生成等)
RTLシミュレーションと差異が出る場合が希にあります。
まぁ、本来は、静的な検証(論理等価性検証)で見るべきだとは思いますが...。
ゲートシミュレーションでも、バックアノテーション(遅延値情報)を与えないで
行う事も希にあるとは思います。
シミュレートがModelsimだけでできるかだけど。
少なくともPLL/DLLぐらいはライブラリ使うんじゃないの?
そしたら、もう統合環境からModelsimをコールした方がはるかに楽だよな。
Modelsim単体の機能や設定を細かく調べんでも、統合環境からクリック一発、
初期ファイルとか、必要な設定を自動でやってくれたのち起動するのでホント楽。
そのあとしばらくはModelsimのTcl/Tkコマンド上からコンパイル、実行してデバッグを繰り返すことになる。
そして、また大きく構成を変更するときは再度統合環境から呼び出すという使い方。
Win版だといきなりTcl/Tkが起動して、これが使いにくいんだな。。。
>Xilinxのデバイスのセルライブラリを含んだModelSimが
単体で使うとこんなこともせんといかんし。ISEだと、セルライブラリをクリック一発で
予めコンパイルしとけばしまい。
ソースやテストベンチのひな形なんかも作ってくれるし。
特にVHDLなんて長ったらしい儀式みたいな部分を自動生成してくれるので、
使わんのは勿体ない。
>>932 Verilog HDLの場合、問題になるのはリセット抜けとノンブロッキング代入にし忘れ。
前者はif文の条件が不定になった時に偽扱いになるため、シミュレーションではうまく動いてしまうのよ。
でもゲートだと不定が伝播してまともに動かない。
936 :
932:2007/02/20(火) 16:11:32 ID:LEyQJ+va
>>933 >>935 その手のHDLの記述による違いなのね。
逆のパターンだけど、センシティビティリストの漏れでModelSimでは動作しない
というのはあるね。
あと、VHDLでフリーランカウンタをintegerで宣言してout of rangeとか
後こんなのとか
if a='0' then
b<=ある値;
else
b<=ある値;
end if;
aに不定が入ってもRTLだと場合によって上手く動いたりする。
下記で一応回避できるけど。
if a='0' then
b<=ある値;
elsif a='1' then
b<=ある値;
else
b<=不定;
end if;
俺もゲートモデルで上手く動かない時は不定がらみのことが多い。
つ『初期化』
>>936 センシビリティリスト抜けもあるね。
シミュレーションで動かないのは直せばいいのだけど、気づかずに合成でラッチが出来たりするとやっかい。
ということで、シミュレーションだけじゃなくてスタイルチェッカは通すべき。
>>939 藻前、英語、大の苦手だろ。
漏れと同じにおいがするw
941 :
939:2007/02/23(金) 16:39:26 ID:jhpi97Ih
>>940 カタカナで書いているから?
確かに得意ではないが、大の苦手という程でもないよ。
志村〜、これ。
つ センシビリティリスト
今後どんな回路に力を注ぐべきでしょうか
南禅寺
良心回路
エコカイロ
エロカワイイ
エロカワカムリ
次スレありますか
終了
任せた
1日に4レス程度なんだから次スレたてんの1週間は早いと思うが、、、、
980以降はあまりに遅いと落ちるんじゃなかったか?
次スレ建てたら埋め立てちゃえば良いんだし早すぎって事も無いでしょ
まあ
>>975あたりが建てるで良いかもね
レスすんの1週間は早いと思うが、、、、
井倉さんのSpartan3E付きの本が書店に並んでた
>>955 これ随分高価ですね。もっと安く出ると思ったいたんですが。
机の上が整理されてない人のコードは読みづらい。ソースは俺。
いくつかの基本回路について、無駄もないが可読性の良いソースが載ってたり、
機能分割のノウハウとか、最低限必要なコメントの付け方とかが載ってるような、
がさつな奴向けのお手本に良さげな本やサイトがあれば、教えてやってください。
STARCの手引きとか?
STARCの関係者はボケばっかり。
>>955 研究室で必要に迫られて買ってみた。
新宿の紀伊国屋でサンプルがあったから、中身を確認してみて
みることができたので良かった。
「はじめに」のところが、井倉さんの思いが伝わってきてヤケに
泣かせてくれたよ(涙)。
あと5000足せばスターターキットに届くんだよね
井倉さんへの御布施だと思えば安いけど
スターターキットと技評のVerilog本を買っても良くわからん
ワタシには、井倉本は無意味でしょうか?
エライ先生が書いた本なんだが、概念論と記述方法ばかりで
ちぃーーーーともおもしろくない。
前者は無意味じゃない
後者は同感
CPUの創りかたVerilog編とか書いたら売れるかな?
もう下火だが、「萌えるVerilog」なんかで一発当てられるかもね。
>>961 すみません。
スターターキットとは何のことでしょうか?
Xilinx謹製のSpa3シリーズの評価ボードのこと
Spartan3 \11,000-(もうない)
Spartan3E \18,000-
Spartan3A \23,800-
Spartan3AN $225- (まだない)
これだけある
CPUの創りかたHDL版
二通りのアプローチがありそう
1)例の本のTTL各IC(ALUなど)を自分でそれぞれ
モジュールとして書き下ろし、それらを結合して創る
2)HDLらしく、状態遷移だけ管理してあとは全部
論理合成におまかせ(つまりTTLシリーズIC単位とは無関係)
たぶん(2)だとあっさり出来てしまって面白くないと思う
(1)には老人の懐古趣味以外に何の価値もないと思う 加齢臭ぷんぷん
この板のHDL関連スレでよくstarcがどーこー言ってる香具師いるけど、
なんであんなの買うんだろ?ieeeのスペック買うならわかるけど。
973 :
774ワット発電中さん:2007/03/18(日) 23:28:00 ID:6l5VQznN
XILINXのXCシリーズつかってます。
今、12bitのパルス周期測定カウンタつくってますが、
周期が長いときにカウンタが0に戻らないように
ある一定の上限を与える方法を考えています。助言ください。
1、単純に全ビットをみてある値以上だったら、レジスタから1を引く動作にする。
2、1ビット増やしてMSBを見る。
1は動作が確実なんですけど、乗項の数がハンパなく収まりません。
全ビットではなく上位8bitをみてもまだ収まらない。
2は乗項を削減できたけど、クロックのタイミングによっては4096を読み出してしまう可能性がある。
という欠点がありました。
カウンタの値は4096を超えない4095付近であれば多少動いてもかまいません。
なにかいい案はありますでしょうか?
12bit全部ANDして立ったらカウント止めれば済むだけじゃん。
XCシリーズって何?財は詳しく無いがXC以外のデバイスあるのか?
>XCシリーズって何?財は詳しく無いがXC以外のデバイスあるのか?
XCしか知らないとは若いな。
XA、XQV、XQRってのもあるぞ。
976 :
973:2007/03/19(月) 00:12:29 ID:ZPrlB/CO
>>974 情報足らずですいません。
カウントやめるとは、カウントトリガを'0'にすることですよね?
でも、そうすると'0'になったままで、次のカウントトリガを検出できません。
ここで言うカウントトリガとは、'1'の間カウントするような信号のことです。
XCシリーズはXC95XXです。
足りないのは情報ではなく想像(創造)力だな
978 :
974:2007/03/19(月) 00:43:53 ID:8yg00v8A
> '1'の間カウントするような信号
周期計測じゃなかったっけ。パルス幅計測なのか?
・計測信号のアップエッジ検出回路を作る。
・エッジが来たらカウンターを0クリア。と同時にカウンター値を結果dffに記録。
・カウンターが0xfffだったら停止。
・0xfff以外の時は勝手にカウントアップ。
>>975 すんません。それほど若くも無いが知らなかった。
979 :
974:2007/03/19(月) 00:54:15 ID:8yg00v8A
あっと、もしかしたらここが分かってないのかな。
カウンター停止とはカウントアップを止めるのであってカウンター回路が死んでるわけでは無い。
カウンタークリア信号が来たら0になって、0xfff=停止の条件から外れるからまた動き出すように
作るんだよ。
つーかこの程度、教科書に載ってねーのか。
if( clock == posedge) begin
if( count == 0xfff ) begin
count = 0xfff;
end else begin
count = count + 1;
end
end
0xfffになったら、0xfffを代入、それ以下なら+1する、
でいいんじゃないの?
みなさん、質問が来ると大張きりですね。
素敵です
まだ次スレ建てなくてもいいかな
直ちに立てなさい。
この手の質問が来ると、みんなでいじり倒して一気にレスが増えるからw