【Verilog】記述言語で論理設計 Project3【VHDL】/
1 :
774ワット発電中さん :
2005/08/05(金) 01:31:50 ID:6g3dJonX
2 :
774ワット発電中さん :2005/08/05(金) 01:36:08 ID:6g3dJonX
とりあえず乙
GPLcverもいれてやれよ。 無料にしては優秀だよ。
IcarusとかCverで、シミュレーションを無限ループさせある条件に 引っかかったときだけ中止 & 中止した付近の結果だけ(波形でみたい) を出力する方法ってありますか?
$dumpon/offとかの制御信号をその特定条件で 制御してあげるとかっていうのではダメ? 中止付近というのが、ちょっと面倒かもしれませんが。
>>11 例えばどんな感じで実現するんですか?
中止付近 = 特定条件に引っかかったときの前後1usとか
前後100-CLKなんですが。
>12 とにかく一度シミュレーションをし、引っかかったところを見つける。 その時間から前後1usに$dumpon/offを仕込んで再度シミュレーションを 行えばOK! $randomを使っていても、結果に変化はないはずです
やっぱりそんな方法しかないのか… ちょっと面倒とのことだったので、もう少しいい実現例があると 期待してたのにがっかりという所ですw
15 :
11 :2005/08/13(土) 06:14:29 ID:5uXxvKYF
>>14 テストベンチ上に回路を2つ配置して
片側の入力をすべて1us遅らせて、
早いほうが条件一致してから1us期間
遅い方の回路のダンプを取る。
こんなことをするぐらいなら、
>>13 の方法を使うけど orz
条件一致までの時間次第だな…
ちょっとお聞きしたいんですが、
>>2 で紹介されている評価基盤なるものを購入すれば、
Verilogで書いた回路を論理合成、実装したりできるってことですか?
今、大学の2年生で、前期に学校では
verilogで書いたものをncverilogでシミュレーションし、
SynplyfyProで論理合成、Quartus IIで実装・・・のような実習をやってました。
この実習と似たようなことを自宅でもできるんだったら
評価基盤なるものを購入してみようかなぁと思っているのですが。
ああ、でも私、家では基本的にMacでして、 そうなると、フリーの論理合成、実装ツールがないのか・・・ シミュレーションや波形の表示には、 GPL CverやGTKWaveがあるので、 Macでもぜんぜん困らないんですけどね・・・
MACか・・・とりあえずWinマシン買うのが良いと思う
べつにセル論800ぐらいのマシンでもWin2000動いてれば問題なし
Winなら環境は全部フリーで揃いますよ
>>2 にある評価基板買えばOK
レスありがとうございます。 Winマシンの購入、考えてみます。 昔 親が使っていたWinマシンを 最近になってお下がりでもらったので Win 2kをインストールして使ってはいるんですけど 今 調べてみたらPentium II 266MHz、メモリも64 MBしかありませんでしたよ・・・
Win自体がちとつらいですが設計自体はどうせテキストエディタ使うだけですので良いかと。 コンパイルやシミュレーションの時間は多少かかるかもしれませんが、それは我慢しましょう。 書き込み自体はプリンターポートがあれば概ねOKだと思います。
22 :
774ワット発電中さん :2005/08/16(火) 15:28:43 ID:SD3ghog/
>>20 >今 調べてみたらPentium II 266MHz、メモリも64 MBしかありませんでしたよ・・・
余裕でサクサク動く。エンジニアはもっと低レベルスペックのPCしか使ってないよ。
もし、買い換えるなら中古屋にいってNEC PC98マシンを買うのがいいよ。
>17 この業界に入って10年になりますが、17さんがやっていることは 私が会社に入ってから5年目で習ったことですねw 先生に習う代わりに講習会逝って来い!って言われて勉強してました。 会社入ってからはMentorの回路図入力(Design Architectだったっけかな?)とかで 200枚とかの回路図をシコシコ描いてましたね。 あの頃が懐かしいな・・・(もう戻りたくないけどw) SystemVerilog覚えろ!って言われてるけどよくわかんないから放置でいいやw
>>23 君の人生は君のものだから好きなように浪費したまへ
>>20 >>22 はネタかの?
メモリ64MBでW2Kは、ほぼ使い物にならないんでは?
W2K世代のA4中古ノートなら5マソ程度で手に入るハズなのでそっち検討されたし。
評価基板で遊ぼうというのであれば、プリンタポート(LPT)がついているのを
選ぶべし。
実習用だったら、Pentium3以降の世代でメモリ128MB程度積んでりゃなんとかなろう。
ところでAthlon64X2に手を出しましたよ俺貧乏。
>>26 いやネタじゃないですよ。
そもそもメインで使っているPCではありませんから。
>>18 に書いた通り、普段はMacを使っているんですよ。
とりあえず98はやめとけ(w
29 :
774ワット発電中さん :2005/08/20(土) 12:18:40 ID:afSWukzz
いやー98は最高だよ。コストパフォーマンス考えると最高だ。RAあたりがいいよ
32 :
774ワット発電中さん :2005/08/20(土) 23:07:13 ID:JIVjcu9s
別に・・・? ただ論理合成に入力できる言語の文法さえ憶えれば 処理内容が決まっているならひたすら書くだけ
そうですよねえ・・・
34 :
774ワット発電中さん :2005/08/20(土) 23:28:42 ID:JIVjcu9s
あと、本当に回路を作るなら最終的にはROM焼きしたりLEDとかで結果を出せにゃならんよな ROMの焼き方や、LEDの光らせ方、半田付けとかは大丈夫なのか?
トリップをLEDで結果表示は苦しいだろうね。 漏れならUSBかRS-232Cで出力しておいて PC側でファイルに記録する予定だが。
36 :
774ワット発電中さん :2005/08/21(日) 14:06:38 ID:0xqqpo06
秋葉で LED だのスイッチだの売ってるところをちょっと覗けばアイディアはいくらでも・・・
勉強、というならば、ソフト、ハードの得意・不得意な点を勉強するのがいいんじゃないかな そうすればソフトでやってた処理のどの部分をハード化する(したい)か見えてくるかもよ?
ある回路のブロック図があって、 それをVerilogで書いてみるとして、 入出力信号線の名前に関しては特に悩まないんですけど、 ブロック図内で使われている途中の信号線の命名にすごく悩んで時間を使ってしまいます。 別に適当にwire w0, w1, w2, ...と付けてしまっても良いんですが・・・ そこでお聞きしたいのですが、信号線に名前をつけるときなどに、 なにか命名規則のようなものってないんでしょうか? あったらそれに従って見ようかと思うんですが。
入出力信号と同じように内部信号も命名すればいいだけじゃない。 もしかして設計者でなく、単純に入力を頼まれてる人ですか?
40 :
38 :2005/08/25(木) 08:53:18 ID:+SOZalzJ
単純に入力を頼まれてて悪かったな。 文句あんのかゴルア !!!
馬鹿か。
いまどき、入力するだけの人を雇えるなんてうらやましいな。
設計者だけどオレもよく悩む。あとのデバッグのこととかを考えて分かり易い信号名にしよう とすると結構悩んぢゃうんだよねぇ。
44 :
774ワット発電中さん :2005/08/25(木) 17:46:45 ID:V4fpx9RR
さっさとジェネレータ作れ
46 :
774ワット発電中さん :2005/08/28(日) 00:00:45 ID:BTbo09lT
>>38 普通の大手の企業なら、設計基準があって、
topの信号名を含めた信号命名の基準があると思うが、
意外とうもれてて、そんなのがあることをしらない場合が
多いようだ。
昨年の秋に、初めてverilogの勉強を初めて、この冬から
設計を開始して7ヶ月後には私の書いた1MByteのソースを
テープアウトしてASIC化。
既に顧客評価中で、もうすぐ量産出荷&年間数十万個出荷されると
思うと恐ろしい。
信号名なんぞは、先頭をブロック名のキーワードに使う
ぐらいしか気にするひまがなかった。
入力はH01,H02...出力はN01,N02...
わぁわぁわぁ、大昔の回路図をHDLに変換してものを渡されて 「機能追加しろ!!」って言われる夢をみそうだw
49 :
774ワット発電中さん :2005/08/28(日) 18:35:24 ID:vtDAPayE
ワンショットにパターンヒューズ、ワイヤードORの本官撃ち状態?
50 :
火魔人 :2005/08/29(月) 01:55:23 ID:zmaoA5ms
>>48 いいなー・・・夢だけなら・・・
回路図が有れば内部は追い易いし。
設計資料が何も無く、コメントも無く、解析する時間も無いのに、
「仕様変更して!」って言われると、自分で作り直したくなって
しまうけど、バグを作り込んだ時の言い訳を考えると、やっぱり
大人しく頭を抱えて、リストと睨めっこする自分がorz
RTL書いた本人に聞こうにも、中国人だし・・・
いや実際にあった話なんだけど… 下手に回路図をスクリプトみたいのでHDLに変換されるとAND, ORとかまで モジュールにされ、信号名は47みたいな感じでわかりにくい。 進捗も最初は進んでるようにみえるけどメンテしにくくて、結果的 自分でわかりやすく入力しなおしたほうが早いという状態に… 二度とやりたくないです!!
52 :
774ワット発電中さん :2005/08/29(月) 09:07:51 ID:o1vdMEV2
>>51 タイミングチャートと論理表を作って自分で書き直した方が安全。
ステップ数もうんと減って合成時間も短くて済む。
わかっているけど上司に「無駄なことに時間かけるな!そのまま使え」, 「互換性に問題がでたらどうするんだ」といわれて泣く泣くなんだけどね… 最後に上司も「書き直したほうがよかったかな」と… しかし別物で今度は大丈夫だろみないな感じで、同じことを違う人で 繰り返されてる…
54 :
774ワット発電中さん :2005/08/29(月) 20:35:09 ID:H1dOF6CD
>>50 中国語、話すのは大変だけど字なら結構通じるよ
英語もありだし、中国語は英語の語順
>>53 >最後に上司も「書き直したほうがよかったかな」と…
いい上司じゃないか
白を黒と言い通す人間はどこの会社にもいる
ラスト2行を読んでもいい上司ですかw
機械・工学板から誘導していただいて来ました。よろしくです。 VHDL歴2年、仕事の都合でVerilogに移行しなきゃいかんのですが、 VHDL使いがVerilog使いになるのに、最適な参考書があるのなら教えてください。 なお、初めからVerilogしか使って無い人たちは、下記2冊を持ってる人が多いようでした。 ・改訂 入門Verilog HDL記述 (小林 優) ・実用入門 ディジタル回路とVerilog HDL (並木秀明+宮尾正大+前田智美) 周りのVerilog使いは、ほとんど同じだよ…と言ってるので、 たぶん自分は、Verilog覚えるとかいう以前に、 いろいろと問題があるのだとは思いますが、そこにはあえて目をつぶって…。 そんな都合良いものはない、というなら上記2冊のどちらが良いか…でも、構いません。 切迫しています。どうかよろしくお願いします。
はっきり言おう 改訂版じゃないと基本的な部分で ”古い”
59 :
774ワット発電中さん :2005/08/30(火) 01:03:38 ID:h3ibt70g
ise web版のmodelsimって、スピード うんぬんを除くと、いつの間にやら事実上 行数制限が無くなったんですね。 良い世の中になったもんだ。
桜井某の入門書は、VHDLとVerilogが、対比して説明してなかったかな? 内容の良い悪いは記憶にないけど。 切迫してるなら、Amazonで片っ端から5万くらい買っとけ。 ここで「あいつは状況対応が早いな」と思われるなら安いじゃないか。
61 :
774ワット発電中さん :2005/08/30(火) 01:50:41 ID:h3ibt70g
>>57 仕事で使うのなら、AltimaのVerilogのワークショップ
でも受けにいったら?
有料講座でも、1万ぽっきりだから、ただみたいな
もんだよ。
1日か2日で、それなりにレベルアップできるよ!!
表面的なものだけだけど。
切迫してるなら、なおの事、行くと時間の節約になる。
ただし、予約があいてるかどうかは知らんけど。
ちなみに、私がけっこう良いと思った本は
『Verilog-HDLによる論理合成の基礎』枝 均 (著)
62 :
57 :2005/08/30(火) 02:29:32 ID:XeqVZj2W
>>58 ,60,61
レスありがとうございます。
やはりここは、ちょっと金をケチらずに投資したほうがいいみたいですね。
ワークショップは、時期が合えば会社の金で受けられるのですが…。
元がVerilog文化の部署なのに、配属早々にVHDL使ってる部署に長期遠征させられまして。
2年間で戻されたのだけど、実績積んだ…という扱いで、プレッシャーかけられてて。
何が何やらわからず懸命にやってたら、割と良い仕事してた…らしい、というだけなのに…。
63 :
774ワット発電中さん :2005/08/30(火) 10:30:32 ID:Wsf9aAem
>>57 とりあえず、今売ってるデザインウェーブマガヅンを買う。
64 :
57 :2005/08/30(火) 18:58:41 ID:XeqVZj2W
>>63 あ、なんか良さげ。
しばらく引きこもってたので、未チェックでした。
65 :
774ワット発電中さん :2005/08/30(火) 22:08:57 ID:ICmtv0gK
VHDL使ってたならVerilogでも一緒だろ。つーかこっちの方がよっぽど書きやすいはずだ。 逆なら死にたくなるだろうが。 でも、VHDLはもう終わりだな。SystemCとともに。
ほんとに終わってくれればいいけど… いつもいろんな言語が中途半端に生き残るから、使わなきゃいけない 言語が増える一方って気がするよ…
こないだまでDOSのABEL専用マシン&ライターが鎮座してた。。 もしかしたら要るかも・・と言い続けて、部屋の片隅に置かれていたが、 先日新人により、起動もしなかったということが発覚して破棄。 たぶんマザーボードの電池だろうけど、何年前から壊れてたんだろ。
今のところ、VHDLのほうが書きやすいな。 なんか制限が多い方が楽なのよ。 机の上とか片付けられない人間なもので。
modelsim のPEって未だVHDLサポートしてたっけか? SystemVerilogはmodelsimでもSynplifyでもサポートしてる。Verilogとあんまり変わらんし、 そろそろQuartusやISEでもサポートされるんじゃないの。 一度2001とかSystemVerilog使うと1995には戻れんな。
>>70 modelsimはともかくとして、FPGAのメーカーサポート標準ツールが
SystemVerilogに対応するのは、まだまだ先のことでしょう。
72 :
774ワット発電中さん :2005/08/31(水) 16:29:10 ID:tFPWz8au
Modelsim のSVは、サポートしていない構文が多いよ。まだ、かなりいい加減な感じ。VCSじゃないと使えるレベルにないと思う。。
>>70 QuartusもISEもまだSystemVerilogサポートしてないけど・・・
SystemVerilogの話じゃなくVerilogHDLとVHDLとの話なら、紛らわしいのでごっちゃにしないで。
後者だと仮定するけど、ISEは3とかくらいまでは混在するのをやりたければwebpackじゃなくて有償の
baseとかfoundation選ばないと出来なかったよ。
74 :
70 :2005/08/31(水) 18:16:51 ID:bz8w29B3
>>73 > 紛らわしいのでごっちゃにしないで。
つーか、ごっちゃになってたの!(笑) スマソ VHDLの話書いてたよorz
VHDLの話からいつのまにかSystemVerilogに移っていたなんてw(2行目でだけど)
そうですねSystemVerilogはサポートしてないですね。
やはりいずれは対応されますでしょうね。シンプリファイ買っているから内んところは問題ないかな
>>70 PEではサポートしてるがLEでは既にVHDLはサポート対象外。
>大昔からOKだったと思ったけどなぁ。混在のをやった記憶がある。
そもそもSystemVerilogの仕様が決まったのはつい最近だし、これらデバイスフィッタはSystemVerilogはサポートしてない。キッパリ。
>>74 >シンプリファイ買っているから内んところは問題ないかな
ライブラリ使うときが問題でしょ。どうやってコールするの?
77 :
774ワット発電中さん :2005/09/01(木) 13:45:13 ID:cm5Q7b4J
78 :
774ワット発電中さん :2005/09/01(木) 22:01:45 ID:s1L62AFc
質問させてください。 VHDLで バス設計をするために、pin設定をinout : std_logic にしました。 このピンに対して入出力はどう設定したらいいんでしょうか? 自分なりにいろいろ探してみたんですが、わかりませんでした。 よろしくお願いします。
普通に、入力側に書いたり出力側に書いたり、じゃダメだっけ?
process (en,data_out) begin if(en='1')then BUS <= data_out; else BUS <= (others=>'Z'); end if; end process; data_in <= BUS; でOKかと。 BUSがinoutね
どうでもいいけどBUSとUSBって似てるな・・一瞬そう思った Sub USB Busなんてな ふふっ
82 :
78 :2005/09/02(金) 00:10:55 ID:DuoalkwM
ありがとうございます。 あした会社でシミュレーションしてみます。
83 :
78 :2005/09/02(金) 00:18:21 ID:DuoalkwM
見れば見るほど そのプログラムが わからなくなる。 どの一文が in で どれが outなのか???
?
85 :
80 :2005/09/02(金) 00:37:04 ID:iJlUfll0
BUS <= data_out; BUS <= (others=>'Z'); がFPGAの外への出力で data_in <= BUS; がFPGAの外からの入力
86 :
774ワット発電中さん :2005/09/02(金) 00:46:31 ID:DuoalkwM
78です なぜ Z灰インピーダンス設定なのですか?
87 :
80 :2005/09/02(金) 01:00:36 ID:iJlUfll0
FPGAからの外からの入力を受け付けるときに、FPGAが外へ0か1を出力してると 出力同士がぶつかるからです。バスファイトてやつです。 en='0'のときのみ、外からの入力を受け付けるように人間様が設計します。
>>78 >自分なりにいろいろ探してみたんですが、わかりませんでした
おい!いろいろって、どこをいろいろ探したんだ!?
そんなやり方そこらじゅうに書かれているぞ。
お前は本当に探したのか?
ついでに80の書いたやり方はif文、つまりprocess文の中だ。
whenで書いた方がいい。
89 :
80 :2005/09/02(金) 01:12:01 ID:iJlUfll0
>>88 BUS <= data_out when(en='1') else 'Z';
こっちのほうが推測されやすいてことでつか?
90 :
774ワット発電中さん :2005/09/02(金) 01:27:29 ID:XOp/W7Fz
さがしたのは トラ技スペシャルのVHDLと もうひとつの参考書 あとはネットです。 ネットで灰インピーダンスに設定しろ とかいてありましたが プログラムでは確認できなかったので わかりませんでした・。 返答してくれた人 感謝します。
process文だと書き間違えるとラッチが出来てしまう。 信号数が少なければ書き間違いは起きにくいけど、 信号がいっぱいある場合にうっかりラッチを作ってしまうと、 デバッグで泣くはめになる。 このくらいの規模なら89のようにwhen文を使ったほうがいい。
92 :
80 :2005/09/02(金) 01:41:55 ID:iJlUfll0
あ、なるほどね。最近のコンパイラの中の人はワーニングとかでラッチ作ったとき教えてくれるとはいえ、 てんぱってるときは気づかなかったりするもんなぁ。 最近ラッチのよさが分かってきた。でも設計は大変だ・・・ STAツールがまだ使いこなせてないから、非同期設計はまだ早いかな。<自分
93 :
88=91 :2005/09/02(金) 02:08:22 ID:VTWQBiC/
ちょっと不安になって実際にISE 6で、XC956にその回路をフィットさせてみた。 すると、あれれ!? センシティビティリストに書かなくても、ラッチにならない。普通に出来てしまう。 なーぜー???
クロックが入らないから
95 :
774ワット発電中さん :2005/09/03(土) 11:33:27 ID:DCHqpy8t
仕事で使うのにのんきな方と 厳しい風にさらされてる方と、 両極端に分かれた発言になってる気がするのが面白い。 私は去年、初めてVerilogを勉強はじめた時の経験をば述べると (1) 定番のVerilogの教科書本を借り、3日で読破。 暗記する必要なんてないから、文法がどんな感じか Verilogの記述スタイルの確認作業を主とした。 (2) QuartusIIは使ったことはないが、(1)の3日の勉強で それなりの経験者ということにして、Altimaの有料 ワークショップに参加。本当は新横浜に行きたかったが 予約が埋まってたから新大阪を予約したというと、 新横浜に押し込んでくれた。
96 :
774ワット発電中さん :2005/09/03(土) 11:37:04 ID:DCHqpy8t
(3)会社の設計基準書を読む 3日ぐらいで、Verilogのベストな記述スタイルが どうなのか感触をつかむ。 (4)その後、従来のVerilogソースをひたすら読んで、 ひたすら従来回路のブロック図を書きまくった。 2ヶ月ぐらいかけたかな? (5)一番論理の難しいブロックにさしかかり、いくら ブロック図をながめても、さっぱり動きがわからないので、 仕様追加ができない。 難しいブロックの従来回路は捨てた。骨格だけ残して、 まるごと新規設計。1ヶ月ぐらいかけて、まだ設計の 残項目はあったが次のステップに移行。
97 :
774ワット発電中さん :2005/09/03(土) 11:38:51 ID:DCHqpy8t
(6)Verilogソースをエディタで書きはじめて、 1ヶ月後には、ピーク時で1日2000行のソースを 記述。まじで手が痛くなった。 (7)助っ人をアサインしてもらって、できるところから シミュレーションしてもらう。 私だって、modelsim使ったことないのに、3日で modelsim を使えるように試行錯誤して、簡単な 環境を整えて。うーツライよ。お願いした。 環境が整ってるの状態で依頼されるのが普通だと? modelsimぐらい自分でインストールしろよ。 自分がどうやってインストールしたかいちいち覚えとら。 金はらって買ってんだから、わからんなかったら、 メーカに聞けよ。 (8)もうぐちゃぐちゃ。
98 :
774ワット発電中さん :2005/09/03(土) 11:45:22 ID:DCHqpy8t
(9)なんとか全てのブロックを記述したぞ。 (10)旧回路の設計者を読んで、装置シミュレーションの 環境を立ち上げた。仕様が相当かわってるので、そのままじゃ まともに動かんことはわかってるが、なんか動いてるふりを してる。 (11)論理合成の1stトライだ。 論理合成の環境を整えてもらって、論理合成。 なんとか、論理合成はできたが、まだ、全体simの まともにやってない。動いてるふりをしてるだけだ。
1年前にはじめた初心者が愚駄愚駄と書き込むなアホ。 しかも、糞内容で上げやがって。
>>99 添削して欲しいから上げてるんだろうから
あなたのレベルで添削してあげれば?
漏れはようやらん
条件式ってみなさんどのぐらい使ってますか? この前、数えたら、8重にネストしてるのがあって閉口しました。
うーん、3重ぐらいまでにとどめる様がんばるかなぁ あんまネストすると重いのもあるけど、スッキリしないから敬遠する。
(1)Behavior記述の解説本を入手したが役たたずに気づいて3時間で捨てた (2)SYNOPSYS DCについてきたRTL解説に目を通した (3)当時は他人の書いたRTLソースなんて入手不可能だったから ひたすらコンパイルしてゲートレベルの回路をschematicで検証 (4)ようやくoptimizeの振る舞い込みでRTLが分かってきた頃 DCがバーションアップして(3)へ戻る
>>100 (2)がそもそも間違い。
Altimaはダメダメ。某会社でAltimaに開発委託したら半年予定が2年にたっても出来上がらず。
Xilinxに乗り換えて東京エロクトロンデバイスに頼んで3ヶ月で完成。
105 :
774ワット発電中さん :2005/09/04(日) 21:53:19 ID:jxhRedRX
>>104 東京エロクトロンデバイスと言う所でウソ丸だし。はっきり言ってありえない。
106 :
774ワット発電中さん :2005/09/05(月) 10:41:27 ID:H3/bQNSI
TEDはすごい会社だよ〜 このスレのFPGAに限定すれば、ただの国内代理店だけど。 予算があるなら丸投げして安心な会社であることは間違いない。 あそこに所属するエンジニアが優秀かどうかは別問題だよ。 基本的に商社なんだから。
>>107 TEDもどっかに丸投げしてるんでしょ?
国内の零細企業だか、台湾だか
担当がかわるとレベルが落ちることあるよね
Verilogを学びたいのですが、初心者におすすめの参考書教えてください。 電気系の学部四回生です。
111 :
774ワット発電中さん :2005/09/06(火) 13:40:40 ID:VYU18ChI
>>110 デジタル回路をきちんと理解している人向けなら
実用入門 でじたるかいとVerilog HDL 技術評論社 ISBN-7741-0321-7(4155円)がおすすめです。
(もっとも頭の方でブール代数なんかのまったくの初心者からにも対応していますので
初心者からもおっけーなんですけどね)
CD-ROMも付いてますのでちょっと高めかな。
112 :
774ワット発電中さん :2005/09/06(火) 13:41:22 ID:VYU18ChI
>>111 実用入門 デジタル回路とVerilog HDL
失礼しますた。
>>111 ありがとうございます。
大学生協に見に行ってきます。
114 :
774ワット発電中さん :2005/09/06(火) 19:15:56 ID:UUVzlJ+G
Verilogの質問なんですが、 taskの中で@(posedge CLK)とかwaitとか書いたら、 Unsupported Event Control Statement.とか Unsupported Wait Statement. とsynthesizeに怒られました。 taskの中で時間制御するにはどういう記述をすればいいんでしょうか?
>>108 そこが重要。
人様に向かって、「寝ないでもやれ!死んでもやれ!」
とか言うのは普通の人間は嫌だから。
品のいい営業さんに向かって、「間に合うようにどうにかお願いします」
って電話して帰ったほうが、気持ちよく眠りにつけるじゃん。
116 :
774ワット発電中さん :2005/09/08(木) 09:59:03 ID:8X2qNyZO
だれかI2CインタフェースをHDLで作った経験あるひと、 もしくはI2Cに自身ある人いない?
は〜い
119 :
774ワット発電中さん :2005/09/08(木) 11:03:08 ID:itC7aYbt
>>117 ルネサスサイトのH8用ライブラリにある「汎用ポートでI2Cと通信する。」
のCソースをベースにVerilog HDLに仕上げました。
仕事でやったやつなのでソースはあげられませんが、インプリメントは簡単ですよ〜。
おぉ、ありがたい。悩み解決た、たのむ。
>>188 ,199
マスタ⇒スレブの転送でさ、1バイト目にスレブアドレス指定するじゃん?
そのとき、SCL9CLK目でスレブがack('L')出すじゃん?スレブはそのまま
SCL=Lを保持してウエイトかけるっしょ?でさ、このときマスタのSCL=Hじゃん?
んで、スレブがSCLをHにしたら、バスのSCLもHになるじゃん?
で、次の2バイト目を始める為にマスタのSCL=Lにするじゃん?
そしたらさ、そしたらさ、バスのSCLはすでに見た目1つのSCLパルスが出てる
ことになるじゃん?てことはさ、すでにSDAはMSBのデータを出しとかないといけないの?
ここの手順がさっぱりわからんのすわ。
たふけて(T T)
120す。誤記りました。
>おぉ、ありがたい。悩み解決た、たのむ。
>>188 ,199
おぉ、ありがたい。悩み解決た、たのむ。
>>118 ,119
>>114 普通のsimなら問題ないはず。
ていうか、、それ、、、合成したいってこと?
123 :
114 :2005/09/08(木) 15:41:09 ID:Cz9qx8Ws
>>112 そうです。シミュレーションはできるんですが、合成が(´・ω・`)
124 :
774ワット発電中さん :2005/09/08(木) 15:46:54 ID:TFRUZSHN
藻前はアホか!できるわけないやろ!
SCL Low(master) → SCL Low(slave) → SCL High(master) → SCL High(slave)の場合、SCLラインはmasterがLowにして からslaveがHighにするまでLow状態。 オープン・ドレーン出力でドライブするので、Lowは機器が 出力し、Highはプルアップ抵抗でってのは知ってますよね!? マスタはSCLラインの状態を監視してHighになるまで次の動作 を止めれば問題なし。 だったと思う。
>>125 さん レスどもです。
>SCLラインはmasterがLowにしてからslaveがHighにするまでLow状態。
私も始めそう思ってました、でも、、、
マスタがLowを出力してるなら、slaveがHignにしてもバスはLowなので、
「slaveがHighになるまで」というのを監視できないと思うのですが、、、。
>>123 @(xxxedge aaa)(←alwaysなし)やwaitはあくまでもテストベンチ用の記述だと
思ってください。
どうしても合成したいなら、同機能をエッジ検出やカウンタを利用して
記述すればいいかと思います。
監視すると次のケースになると思います。 1. masterはLow出力でSCLラインもLow(この場合SlaveがHigh/Low関係無し) 2. masterはHighにしてるのに、SCLラインはLow(SlaveがLow出力) 3. masterはHighでSCLラインもHigh 監視して2.の状態になったら、masterはSCLがHighになるまで待てばいいだけ。 masterがLowのときslaveがHighって状態は、わからなくて当然。 というかわからなくても問題なく制御できるよね!?
129 :
114 :2005/09/08(木) 17:43:11 ID:Cz9qx8Ws
>>127 そうでしたか・・・。
どうもありがとうございました。
>>128 さん
え?ということは、やはり、slaveがwait(SCL="L")をかけている間は
masterの出力SCLは"H"ということですよね?
そしたら、話が戻ってしまうのですが、slaveがSCLを'H'に上げた瞬間が次の転送バイトの
1bit目のSCLパルスの立ち上がりと考えていいのでしょうか?
と言うことは、slaveがSCL=Hとなる前に(つまり1byte目の転送終了後即)
次のSDAの1bit目をあらかじめ用意しておくということでよろしいでしょうか?
126で条件がかわったと思ったので128のように回り道してしまいました(_o_) slaveがSCLをHighにしたら、次の転送バイトの1bit目が有効データ ってことになります。 >と言うことは、slaveがSCL=Hとなる前に(つまり1byte目の転送終了後即) >次のSDAの1bit目をあらかじめ用意しておくということでよろしいでしょうか? この部分は、slaveが次のデータの用意ができるまでSCL=Lとし、 用意ができたらSCL=Hとするって感じですね。 あらかじめデータの用意ができていればwaitをいれる必要がないし、 SCL=Hにするのはslave自身ですから… ちょっと言葉遊びみたいになって、すまん。
>>130 > slaveがSCLを'H'に上げた瞬間
ここからmasterが ack/nack の読み込みを始めるんだよ。
8bit目の終りから言うと
master_SCL=H、slave_SCL=H、ライン_SCL=H
master_SCL=L、slave_SCL=H、ライン_SCL=L
master_SCL=L、slave_SCL=L、ライン_SCL=L←ack/nackのWAIT開始
(この辺で8bit目のSDA=H)
master_SCL=H、slave_SCL=L、ライン_SCL=L←WAIT中
(この辺でslaveがack/nackを確定)
master_SCL=H、slave_SCL=H、ライン_SCL=H←WAIT終了
(ライン_SCL=HがHになったからmasterがack/nackを取込み)
master_SCL=L、slave_SCL=H、ライン_SCL=L←1byte目の転送終了
(ライン_SCL=Lになったらslaveがack/nackを開放)
(2byte目の1bit目の送信準備)
こういう事じゃない? 実は俺も昨日から作り始めたんで間違ってるかもしれんが・・・
もし間違ってたら、エライ人の突込み希望。
>>120 > で、次の2バイト目を始める為にマスタのSCL=Lにするじゃん?
> そしたらさ、そしたらさ、バスのSCLはすでに見た目1つのSCLパルスが出てる
> ことになるじゃん?てことはさ、すでにSDAはMSBのデータを出しとかないといけないの?
マスタがSCL=LにしたあとSDAに次のデータのMSBを設定してSCL=Hにする。
>>130 ここは読んで見たか?
ttp://www.necel.com/ja/faq/mi800/__v85iic.html このページの[データ転送]部分を読めば分かると思うが、マスターからスレーブへデータを送る時は
・スレーブがACK(SDA='L')を返す。(bus_SCL='L')
・マスターがmaster_SCL='H'にしてACKを読み、その後master_SCL='L'にする。(bus_SCL='L'->'H'->'L')
・マスターは自身のデータ転送準備が終わるまでSCL='L'にする。(bus_SCL='L')
・スレーブがbus_SCL='L'を読み、自身のデータ転送準備が終わるまでSCL='L'にする。(bus_SCL='L')
・マスター、スレーブ共に自身のデータ転送準備が終わり次第SCL='H'にする。(bus_SCL='L')
・マスター、スレーブの両方がSCL='H'とした時、bus_SCL='H'となる。
・スレーブはbus_SCL='H'を読み、データ(1Bit目)を取り込む。
・以下マスターがSCLを駆動し、データ転送。
文章にするとこんな感じか?
仕様書にずばりのタイムチャート(Fig.6)が載ってる それ見たほうが早いかも…
>>132 slaveがwait入れる場合、masterがデータの有効無効を判断できるように
ackの次のタイミングでwaitだったような…
今お外なんで不確かな情報ですまん
↑ データの送信側(今回はslave)がwaitをいれるときはackの次のタイミング。 データの受信側(今回はmaster)がwaitいれるときはackのタイミング。 でした…orz
みんなありがとう!
>>131 私が「データの用意」と言っているのは、マスタのほうなんです。
スレーブのSCLが立ち上がった瞬間が次のバイトのMSBとなるなら、
マスタはそれまでにデータを用意しておく必要があるのかなと。
>>132 > (この辺で8bit目のSDA=H)
マスタ⇒スレブ転送なんで、8bit目のSDA=Lじゃないといけないと思うのですが、、、
>>133 やはりそうですか!?とりあえず今はの見解で進めてます。
>>134 すいません。このページとフィリプスの仕様書を読んでも理解できなかったんです。
[データ転送]でSCLの手順は分かります。でもマスタが次のバイトのMSBにあたるSDAを
確定させるタイミングが分からないのです。
>>135 仕様書の図6[I2Cバス上のデータ転送]
では、次のMSBを確定させるタイミングは、スレブがwaitを解除するタイミング
(clock line held .[略]. are serviscedの箇所)
になっていますが、スレブがwait解除するとともにSCLはHとなる為に、
この図のようにならない(1つめのSCLパルスがSDAの変化と同時刻、もしくは
SDAのほうが遅くなってしまう)と思うのですが、、
もうひとつ、、
>>132 > > slaveがSCLを'H'に上げた瞬間
> ここからmasterが ack/nack の読み込みを始めるんだよ。
え!??!?スレブがwaitを解除してから、マスタがack/nackを判断するのですか?
9bit目でスレブがack/nackを載せているのに、wait解除時のSDAを見てack/nack
を判断するんですか!?
。。。もうわけわからなくなってきました。
どの仕様書を見ても
[マスタ]SDA
SCL
[スレブ]SDA
SCL
[バス]SDA
SCL
と全ての波形を載せて説明しているところがないのが、非常にわかりずらく
している原因かと、、、。
とにかくいつまでも止まっているわけにいかないので
>>133 で進めてみることにします。
140 :
132 :2005/09/09(金) 19:46:32 ID:RFb9yUzy
ごめん。言葉足らずだったね。
>> (この辺で8bit目のSDA=H)
>マスタ⇒スレブ転送なんで、8bit目のSDA=Lじゃないといけないと思うのですが、、、
↓ 訂正
(この辺で8bit目のmaster_SDA=H)
slave_SDA=L(ack) は、
>>132 のack/nackのWAIT開始〜WAIT終了の間のどっか。
何か話が食い違ってるように見えるけど、WAITするのは何の為?
slave_address送信後のackでslaveがWAIT入れてくるのは、slaveがack返すかnack
にするか迷ってるからだよ。slave_adr送信が終ったところ(8bit目,R/Wを気にしなければ7bit目)で、
slave側は「俺か!」と気付く訳で、そこからslave側は「masterの相手してやる余裕があるか、
忙しいから返事してやらないか」を判断してack/nackを返す。
つまりこの場合のWAITは8bit目と9bit目(ack/nack)の間のSCL=L期間を延ばして
返事するまでの時間を稼いでいる事になる。
・・・っと、これが俺の認識だけど、これで合ってる? えらい人、添削してくれ!
(回答するフリをしながら、実は俺も教えてちゃん orz )
141 :
132 :2005/09/09(金) 20:03:27 ID:RFb9yUzy
言い忘れたが、slave_adr送信の9bit目(ack)の後にslaveはWAITかけないよ。 9bit目(ack)の後にslaveがWAIT入れてくるのは、slave→master 転送(data_read) のackの後くらいじゃないかなー。あんまり自信無いけど・・・
>>141 多分おいら(ID:vC8KC7/w)へのレスだと思うが、おいら自身slave→master転送
を前提に話してました…orz
waitと送受信の関係は
データの送信側がwaitをいれるときはackの次のタイミング。
データの受信側がwaitいれるときはackのタイミング。
でいいんだよね!?
143 :
132 :2005/09/09(金) 20:28:38 ID:RFb9yUzy
>>142 いえいえ、あんまり気にせずに書き込んでます。 俺も教えてちゃんなもので・・・
実際のところ、英文資料も含めてこの辺り詳しく解説してる資料無いんだよね〜。
おまけにwait挿入してくるslave、お目にかかった事も無いし。ハハハ(自爆かな?)
一般的なデバイスから見たらI2Cって十分遅いから、WAIT入れるまでも無いんだろうな〜きっと。
今までCPUの機能を使ったI2Cはそこそこやったが、ハード(HDL)は今回
初チャレンジなもので、今週いろいろ調べてたんだよ。
そこに >120 氏のカキコ。 思わず、呈良く便乗させてもらってます。
最後3行。 俺の認識もそうですよ。 「間違いない」と自信持っては言えないですけど。
I2Cってライセンス料が発生する見たいね。 うちの製品のICもI2C載ってるのがあるんで ライセンスを受けているらしい。趣味なら 関係ないけど。
趣味なら、じゃなくて機器メーカにも関係ない話だ。
だから今までは「I2C」って言わずに、「2線シリアルI/F」って言ってた。 これからは何の気兼ねも無く「I2C」って言えるって事。
>>147 特許は失効していても商標とかは大丈夫なの?
その辺くわしくないもんで…
I2CといわずにI2C互換とかI2C準拠といえば無問題 セントロニクス準拠と同じ話だろ
150 :
774ワット発電中さん :2005/09/12(月) 04:01:22 ID:Z8FOUgWm
>I2CといわずにI2C互換とかI2C準拠といえば無問題 I2C互換でもI2C準拠でもI2Cいうとるやないか!!アホか?テメエ
151 :
120 :2005/09/12(月) 10:07:15 ID:sE//pJru
>>140 さん、ども、御意見ありがとうございます。
>>何か話が食い違ってるように見えるけど、WAITするのは何の為?
[略]
>>つまりこの場合のWAITは8bit目と9bit目(ack/nack)の間のSCL=L期間を延ばして
>>返事するまでの時間を稼いでいる事になる。
ということなんですが、私とはwaitの使い道の考えが異なるようですね、、、。
私は、waitをかけるのはスレブが、「俺か!」と考えてackを返すのではなく、
「俺か!、よし、データ受信の準備をするよ、ちょとまってね」と考えてから
ackを返すものと考えてました。
ttp://www.necel.com/ja/faq/mi800/__v85iic.html の[データ転送]のところの図でも、slaveがackを返した後にウエイト解除を行って
います。また、解説にも「・・・通信準備を行い、準備が完了したらSCLをロウに
引くのを止めます。これによりSCLはマスタが制御できるようになり・・・」
とあります。
ですからどうしてもackを返すのを考えるためにwaitをかけているようには見えないのです。
ほんと、実際どうなんでしょう。。。なにか決定的な資料とかありませんかね。
資料が無いのは「意図的」なもんなんじゃないかと心配になってきた。。
ちなみにI2Cの特許は切れているので、勉強がてらに作成している人や活用している
企業は多いと思っています。たくさんの有識者の意見をお聞きしたいです。
152 :
774ワット発電中さん :2005/09/12(月) 10:44:07 ID:m/z6uFbv
>>150 4(3かも)線式通信方式とか言ってなかった?電源ペアとSCLとSDA
153 :
774ワット発電中さん :2005/09/12(月) 10:53:45 ID:m/z6uFbv
154 :
120 :2005/09/12(月) 17:11:42 ID:sE//pJru
>>153 ありがとう!これはかなーり勉強になったよ。
応用の仕方が詳しくノってるし。
155 :
774ワット発電中さん :2005/09/12(月) 18:49:15 ID:m/z6uFbv
>>154 119の情報みてぐぐっていれば悩まなかったカモね。がんがれよ〜。
156 :
132 :2005/09/12(月) 20:51:51 ID:Jwx8LbmO
>>151 120氏、あなたの方が正解のようです。 敗北宣言しときます。 済みません。
「この説明だとackの前にWait入る事もあるだろ。」って負け惜しみしようかとも
思ったんですが、自分の誤りに気付いて納得してしまいました。
Philipsの仕様を良く読み返してみたら、Hs_mode の説明のところに
slave_SCLH=L期間を延ばすのはack_bitの後って書いてありました。
多分これがF/S_modeにも適用されてるんだろーな。
>>153 ありがとうございます。 私も御礼を言っときます。
157 :
774ワット発電中さん :2005/09/25(日) 22:47:21 ID:hCwDfR0s
VHDL→Verilog転向者なのですが、generate ってどういう時に使ってますか? 最近の本でも、書式が微妙に違ったり、generate自体が載ってなかったりしてます。 使い方が載っていても、使い所がわからない(こういうときに便利、っていうのが) 使わずに済みそうな気もするのですが……。
158 :
774ワット発電中さん :2005/09/26(月) 00:42:06 ID:Gv1oIhZw
VHDL→Verilog転向者なのですが、function ってどういう時に使ってますか? 最近の本でも、書式が微妙に違ったり、function自体が載ってなかったりしてます。 使い方が載っていても、使い所がわからない(こういうときに便利、っていうのが) 使わずに済みそうな気もするのですが……。
>>158 つまらねぇ
>>157 パラメータによって要素の個数が変わったり構成が変わったりするときに使う
160 :
157 :2005/09/26(月) 09:46:35 ID:vmVH+JQF
>>159 ご回答ありがとうございます。使い所がわかりました。
書式違いの件は、Verilog HDL 2001仕様か否かで、
項目が無い本は、文法書ではなく記述と合成結果に着目した本だからのようでした。
161 :
774ワット発電中さん :2005/09/26(月) 11:23:10 ID:gNSn0MVo
$monitor("a=%d",a[3:0]) といった様な書き方は可能ですか? イカロスを使っているのですが、vvp〜の時点で強制終了します。
162 :
774ワット発電中さん :2005/09/26(月) 21:24:07 ID:sOnAh7t/
それは、サポートしていない。CVERを使え
デザインコンパイラを使用した場合には下のどちらがが速い動作になるのでしょうか?(ちなみに 同じマルチプレクサです) if () then elsif () then elsif () then elsif () then else end if; if () then else if () then else if () then else end if; end if; end if; 上の表記だと出力のMUXが4to1になりますが、条件デコードがプライオリティ化されます。 下の表記だと出力のMUXが2to1のプライオリティ化、条件デコードが平行化されます。動作速度は ほぼ同じです。
164 :
774ワット発電中さん :2005/09/27(火) 00:44:52 ID:cS8Viz6S
>>157 好んで使わなくてもいいかもよ。
パッケージやコンフィグレーションを駆使して書くほうがカッコイイと
されている。(ただし可笑しな我流は除く)
165 :
774ワット発電中さん :2005/09/28(水) 04:37:12 ID:vugJb+8i
初心者ですがお願いします。 非同期リセットの上りエッジで、クロック1周期分の長さのパルスを一個だけ 発生させたいのですが、どうもうまくできません。HDLでどうやって 記述したらいいでしょうか?できたら、Verilogでお願いします。
____|~~~~~~~~~ <非同期で入力(非同期リセット) ____|~~|______ <出力 ってこと? ____|~~~~~~~~~ <非同期で入力(非同期リセット) _____|~~~|____ <クロックに同期出力 _|~|_|~|_|~|_|~ <クロック ならできるとおもうけど。
後者なら always @(posedge clk) begin r1 <= r; r2 <= r1; end assign r3 = r1 & ~r2; ってかんじ?
>>165 ふつうにつくるなら
メタステーブル防止のFFを通さないといけないから
非同期信号が入力されてから出力されるまで
システムクロックで数クロック遅れてしまうよ。
出力のクロックの4〜16てい倍したものをシステムクロックとして使えば
多少はましになるか
always @(posedge clk) begin r1 <= r; r2 <= (~r1 & r & ~r2) | (r1 & ~r & ~r2) | (r1 & r & ~r2); end assign r3 = r2;
165のお願いって、前も見たような気がするのは俺だけか!?
過去ログ見てみたら前スレであったよ、同じような質問。 前回はリセットってあるだけで、同期か非同期かは書いてなかった。
module mkpulse (
reset,
clk,
q
);
input reset; // Active-low asynchronouse reset
input clk; // Using positive edge
output q; // Pulse width is one clock cycle
reg delay1reset;
reg delay2reset;
reg delay3reset;
// Synchronize asynchronous reset signal
always @(negedge reset or posedge clk) begin
if (~reset)
delay1reset <= 1'b0;
else
delay1reset <= 1'b1;
end
always @(posedge clk) begin
delay3reset <= delay2reset;
delay2reset <= delay1reset;
end
// Make one clock cycle width pulse for rising edge of delay2reset
assign q = ~delay3reset & delay2reset;
endmodule
以下次号
794 名前:758[sage] 投稿日:2005/06/25(土) 01:56:06 ID:RRAZhokE
一方、resetという名前から非同期リセットという
仮定をしたが、今のところそのような指定はない。
よって resetは clkに同期していると仮定することも
できる。
すると、以下次号
795 名前:758[sage] 投稿日:2005/06/25(土) 01:58:27 ID:RRAZhokE
module mkpulse (
reset,
clk,
q
);
input reset; // Active-low synchronouse reset
input clk; // Using positive edge
output q; // Pulse width is one clock cycle
reg delay1reset;
always @(posedge clk)
delay1reset <= reset;
// Make one clock cycle width pulse for rising edge of reset
assign q = ~delay1reset & reset;
endmodule
以上
796 名前:774ワット発電中さん[] 投稿日:2005/06/25(土) 02:17:58 ID:qLwyTd70
ばーーーーか ----->>>
>>758 ID:RRAZhokE 死ねよ
797 名前:火魔人[sage] 投稿日:2005/06/25(土) 04:37:57 ID:4D+YN02A
reg q;
initial begin
q = 1'b0;
end
always @(posedge reset) begin
@(posedge clk) q = 1'b1 ;
@(posedge clk) q = 1'b0 ;
end
合成できる物って言ってなかったから・・・
>>174 ヘタれなので、パっと見では
>>169 がどう動くのか分かりません・・
こういうのをサクっと書けるようになるのは、どうしたらいいのでしょう・・
176 :
165 :2005/09/28(水) 15:06:22 ID:/nGOq0ZS
>>166-169 ,173
どうも、丁寧にありがとうございました。まさに、
>>166 の後者のケースでした。
それを参考に、もう少し検討してみます。
>>168 最初に、FFにリセットをかけるなりしてもメタステーブルは防げませんか?
>>170 前スレは読めないのでわかりませんが、同じような質問もあるんですね。
一応あれから、自分なりにカルノー図を元にゲートとFFで回路を作って、
それを下のようにHDLに書き直してみました。
always @(posedge CLK) begin
out <= r1;
r2 <= reset;
end
assign r1 = (reset & ~out) & ~r2;
とりあえず、Spartan-3上で動作は確認できましたが、
>>167 の方が、回路
にすると、もっとシンプルですね。勉強になります。
>>169 は、今ひとつよくわかりません。
177 :
165 :2005/09/28(水) 15:18:38 ID:/nGOq0ZS
>>173 最初、C言語の感覚でifを使って書いていったら、こんがらがって、
結局うまくできませんでした。
alwaysブロックの中にassignをいれても怒られないですか?
あと、
always @(posedge reset) begin
@(posedge clk) q = 1'b1 ;
@(posedge clk) q = 1'b0 ;
end
こんなのありなんですか?
>>170 メタステーブルについて↓
ttp://www.cqpub.co.jp/term/metastable.htm つまり、クロックに対して非同期(無関係)で信号が入ってくる場合は
セットアップ・ホールドを満たせないケースが運悪く発生して、
そうすると運悪く信号が一定期間不安定になることがありますよ、と。
リセット信号が、クロックと非同期に入ってくる信号だとすれば、
リセット信号をFFのデータに接続した場合、そのFFの出力が不安定になることがあるわけだ。
________|~~~~~~~~~~~~~ <1段目のFFのデータ入力
↑セットアップ・ホールド違反
__|~~|__|~~|__|~~|__|~ <FFのクロック
________/XX___/~~~~~~~ <1段目のFFのデータ出力
_________________/~~~~ <2段目のFFのデータ出力
Xの部分がメタステーブル(0か1かわからない)
そのあとどっちに落ち着くかは分からない。
でもXな時間はそんなに無いから、このFFの出力を
もう一回別のFFで読んでやると、そのFFでは違反は起きない(だろう)
でも反応が遅れるよね
ということ。
なので、最初にFFにリセットをかけて・・というのは、メタステーブルの
意味合いを勘違いしているかと思われ。
等幅じゃないからうまく見れないな・・・ >タイミングチャート ノートバッドにでもこぴぺしてみてくれ
>>175-176 ソースを元に回路図を起こしてみると一応どうなってるかは分かると思う。
>>169 は前段(入力側のFF)と後段(出力側のFF)の帰還をゲートで合成したものを後段の入力にしてる。
タイムチャート描いてみないと漏れもようわからん。
181 :
774ワット発電中さん :2005/09/28(水) 16:22:34 ID:op2mYCKs
>>178 リセット信号自身をシンクロナイザ通してクロックに同期させるという意味だよねえ?
バリバリな同期回路中でもリセット信号だけは非同期回路部分になったような気がするんだが、どんなもんだっけ。
>>176 一応前スレの質問は微妙に違うかもしれないが、
回答がいくつかあったうちの最後の方を
>>173 にコピペしますた。
↓以下、事の発端(これも前スレのコピペ)
752 名前:774ワット発電中さん[] 投稿日:2005/06/22(水) 23:38:21 ID:3JyUAAcL
verilogの達人の方へ
clk _| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|
reset ____________| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
q _____________| ̄|_______________
上のようなクロック入力に対してリセット後1クロックのみ検出する信号qの作り方教えていただけませんか?
宿題ができずに困っています。
お願いします。
753 名前:752[] 投稿日:2005/06/22(水) 23:41:34 ID:3JyUAAcL
なんかずれちゃいました。すみません。
リセット後最初のclkを1パルス分のみ検出したいのですが。
お願いします
_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄|_| ̄| clk
____________| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ reset
_____________| ̄|_______________ q
>>182 1クロック分じゃなくて半クロック分のパルス幅しかないように見えるのだが
俺の使ってるフォントが悪いのかな?
>>181 そうそう。まあ、この例だとリセット信号を非同期なデータ信号として
使おうという感じっぽいので、シンクロナイザ通したほうがきっと良いでしょうね
(最初通さなかったがw)
いわゆる同期設計回路で、リセット信号を非同期で入力して、それらを
FFの非同期リセットに入力する場合でもセットアップ・ホールドに相当
するものはあるようで、リカバリ(recovery)タイムとリムーバル(removal)タイム。
これを満たさない場合は正しくリセットがかからないらしい・・・
ので、リセットをシンクロナイズして同期リセット信号として各FFに配る方法と、
リセット中はクロックを止めちゃう(リカバリ・リムーバルを確実に満たす)方法の
2つがあると思ってる。
_|~|_|~|___________|~|_|~|_|~|_ < クロック
~~~~~~~~~|_______|~~~~~~~~~~~~~ < リセット
↑リセット中はクロックを止めちゃう
でもFPGAだとそこまでやんない。やんなきゃ駄目なのかな本当は。
>183
ほんとだ、半サイクルだw
じゃあクロックとANDとるってことで・・・
そしてハザードが乗る・・と。
185 :
165 :2005/09/28(水) 17:12:17 ID:/nGOq0ZS
>>178 ,181,184
メタステーブル、勘違いしてました。勉強になります。
>>182 どうもご苦労様です。
>>169 の記述って、入力rがF/Fに入ってしまうから、
rが非同期の場合は、r2が不定になる可能性が
排除できないと思うんですが、考え違い?
非同期入力からのエッジ検出なら、
3段F/Fで受けて2段と3段を使うって形なら
後段への影響なくパルス生成が出来ると
理解していたんですが、受けすぎ?
それって2段で受けて、エッジ検出に3段目を作る…っていうのとは違うの? 言い方の問題だけど、非同期入力を3段で受ける…って言われると受けすぎな気が。
言い方だけの問題だろうな。
ただ、エッジ検出のために1段目の出力まで使うことになるので、
明確に分離できてるわけじゃないが。
でもどうせFF3個使うんなら、
>>167 の出口にもう1個FF入れとけば、
後段への影響も同等だし、回路がシンプルじゃないか?
always @(posedge clk) begin r1 <= r; r2 <= r1; r3 <= r2; end assign r4 = r2 & ~r3; これじゃ駄目なん? 単純にメタステ対策2段受け&エッジ検出。
だから、最後にANDが入る分、r4を使う回路が影響を受けると。
メタ対策話。
1段目 入力:非同期
出力:同期(ただしメタあり)
2段目 入力:同期(ただしメタありなのでセットアップに不利)
出力:同期(メタなし)
メタが仮に5ns続いたとすると、1段目→2段目のセットアップマージンを5ns余分に取らないといけない。
なので、1段目と2段目の間には組み合わせ回路をいれず、FF直結にしようという話だと理解してるのね。
んで、
>>169 の記述をみるとrの出力が組み合わせ回路を経由してr2に行ってる。
組み合わせ回路の遅延が5ns、メタを最大5nsと見積もった場合10ns=100MHzが最高周波数
でもツールのログはメタを考慮しないので、5ns=200MHzまでいけるよと判断してしまう
でもFF直結なら「もっともメタが次段に伝播する確立が低い」構成になる、と。
て理解をしてるんだが、如何なものか。
なんで、立ち上がりエッジ検出とかするなら2段目・3段目が"01"であれば立ち上がりという記述
(略)
signal buf : std_logic_vector(2 downto 0);
signal rise : std_logic;
(略)
process (CLK) begin
if(CLK'event and CLK='1')then
buf <= din & buf[2 downto 1];
end if;
end process;
rise <= '1' when(buf[1 downto 0]="01") else '0'; -- 0→1で立ち上がり
VHDLですまんが、こうなるのかなと。
でも遅れるのがやなときは1,2段目でrise判定することもあるっす。背に腹は・・・みたいなかんじで。
あ、verilogの解答でてた^^;
>>189 さんと同じ記述ですね。
遅レスだけど
>>177 >alwaysブロックの中にassign
ためしてみれば分かるかと。
>always @(posedge reset) begin
>@(posedge clk) q = 1'b1 ;
>@(posedge clk) q = 1'b0 ;
>end
多分、"@(posedge clk) q = 1'b1 ;"とかをソフトの関数呼び出し、
always〜を関数定義みたいなイメージで捉えてるのだと思うんだけど、
そうではないのね。
じゃあ何をイメージしろっていわれると難しいな・・・うまく説明できん。
とりあえず逐次処理ではない、並列処理というイメージが必要かも。
>>190 そこはもう同期だから、AND一つくらい(゚ε゚)キニシナ〜イ♪ってことで。
外に出す場合(どう繋がるかわからん時)は、怖いからFF1段かますけど。
元レスちゃんと見てないから、見当違いならスマソ
>>192 fall検出してるじゃないか漏れ・・・orz
195 :
161 :2005/09/30(金) 17:27:15 ID:k4iA9K8g
>>162 遅レスですがありがとうございます。
CVERぐぐってきます!
なんでこういうテーマは盛り上がるのはなぜ?
あまり見ないんですが、always文の中でfunction文を呼び出す記述には何か問題点があるんですか?
別に問題ないべ
>>192 assignは組み合わせの記述で、alwaysは順序回路でFFとかの記述になるから、
assignはalwaysの外に置きなさいと、とXilinxのWebPackで怒られた記憶が。
勘違いかもしれませんが。
またヘタレな質問ですんません。 reg [1:0] d0,d1,d2,d3; reg [1:0] addr = 0; always @(posedge clk) begin addr <= addr + 1; case(addr) 2'b00: data <= d0; 2'b01: data <= d1; 2'b10: data <= d2; 2'b11: data <= d3; default: addr <= 0; endcase memory M1 (clk, data, addr, we); みたいな感じでやると、caseで選んだアドレスにデータが入らないで、一つ 先のアドレスに入っちゃう。つまり、01番地にd0の内容 が入ってしまうんですが、なぜ?実際は、caseのそれぞれで、we<=1; も入れてましたが。 どうやったら、指定したアドレスに、入れたいデータが入れるには どうしたらいいんですか? カウンターをつけて、クロック一つ置きにaddr = addr +1を実行させると うまく行くんですが、クロック一回分そんするし・・・
>>200 dataもaddrもどっちも信号代入( <= )だからでは?
ずれた理由は、分解して考えれば分かりやすいと思う。
always@(posedge clk)begin
addr <= addr + 1;
end;
always@(posedge clk)begin
case(addr)
2'b00: data <= d0;
2'b01: data <= d1;
2'b10: data <= d2;
2'b11: data <= d3;
end case
end ;
always@(posedge clk)begin
memory M1(clk,data,addr,we);
end;
と、addrを基準に考えれば、addrの更新→1T後にdataの更新になって
データが遅れている...それなのに、addrとdataを同時に使って、
メモリに書き込もうとしてるからずれがそのまま記録される。
ずれを直すには、
方法1)caseで使うaddrは、addr+1相当を入れる事。
addr+1をassignであらかじめ実行しておいても良い。
で、caseではassignで定義した信号を使う。
これで、addrとdataが完全に同期します。
または、
方法2)case文は(posedge clk)から外に出して、
clk成分を抜いた純粋のselecterにする。
とか。
(しばらくVHDLに行っていて5年ぶりのVerilog。。。自分も復習中ですので
間違ってるか心配…)
202 :
774ワット発電中さん :2005/10/01(土) 10:27:18 ID:uc+4l+qo
>>197 あまり見ないもなにも、文法として
functionはalwaysのなかでは使えないだろ。
理由は
>>199 が書いてくれてる。
文法エラーと論理合成不能の区別をきっちりしてほしい
204 :
774ワット発電中さん :2005/10/01(土) 10:46:05 ID:uc+4l+qo
>>201 延々回答らしきもん書いてるけど
>always@(posedge clk)begin
>memory M1(clk,data,addr,we);
>end;
なんや?これ。ちょっとは調べてから書き込め。
205 :
774ワット発電中さん :2005/10/01(土) 10:51:18 ID:uc+4l+qo
>と、addrを基準に考えれば、addrの更新→1T後にdataの更新になって >データが遅れている...それなのに、addrとdataを同時に使って、 >メモリに書き込もうとしてるからずれがそのまま記録される。 >ずれを直すには、 >方法1)caseで使うaddrは、addr+1相当を入れる事。 > addr+1をassignであらかじめ実行しておいても良い。 > で、caseではassignで定義した信号を使う。 > これで、addrとdataが完全に同期します。 全く違う。わかってもないし、調べもしないで、間違いだらけを書き込むな。
>>202 呼び出しならできるはず
a <= fanc(b)みたいな
207 :
774ワット発電中さん :2005/10/01(土) 14:14:46 ID:wtpAS4Vz
>>206 出来るかよボケ
戯言ホザク前に調べてから書き込めマヌケが。
お前のようなアホはエンジニアに向かねえから辞めちまえ。
>>207 釣りか?
alwaysの中でfunctionの呼び出しは出来るぞ。
assignはできないけどな。
引きこもってろボケが
>>200 >>201 の説明は全くデタラメだ。君の書いたalwaysではaddrの初期値が定まってないことが原因
>default: addr <= 0;
では駄目。resetでaddr と dataを確定しないと駄目だ。
>>210 >>200 だと、reg宣言で初期値を設定しているから
simは可能。CLKのイベントでデータが取り込まれるというのを
理解できれば、解決できると思いますよ
>>200 書き込むアドレスを作るF/Fと、そのF/Fからデータが作られるという
動作なのでcase部分のdecodeを修正というのはどうでしょ?
もしくはdataをwire or function宣言としてF/Fでは無くセレクタとして
考えるとか。
212 :
200 :2005/10/02(日) 07:44:04 ID:rand8dA0
>>201 ,210,211さん、どうもありがとう御座いました。
>>201 さん、今のところ、アドレスを、最初からずらして、caseにいれて
使っているのですが、なんか気持ちがわるい。
>>210 さん、reg addr = 0;といちおう初期値はしていしてあります。
>>211 clkの立ち上がりで、addrに、addr + 1が即入るんですか。でも
always @(posedge clk) begin
x <= y;
y <= x;
end
みたいなノンブロッキングの場合は、即データが動くわけじゃない
ですよね。
>書き込むアドレスを作るF/Fと、そのF/Fからデータが作られるという
>動作なのでcase部分のdecodeを修正というのはどうでしょ?
この部分、よくわからないのですが。caseを使うと、マニュアルには、
マルチプレクサーがつかわれると書いてありますが、その選択入力はFFの出力に、
clkが立ち上がったのときに出ているデータが使われるんじゃないんですか?
>もしくはdataをwire or function宣言としてF/Fでは無くセレクタとして
>考えるとか。
detaをinputで入れるってことですか?それにしても、どっかで
レジスターにいれるなり、ラッチしておかなければならないのですが。
独学なもんで初歩的なしつもんばかりですみません。
単なる組み合わせ回路が生成されるか、組み合わせ回路+FFが生成されるか、 というのをゆっくり考えてみるといいかも。
作りたい回路が容易に想像できる記述を心掛けるのは大切だあね。 俺は全ての回路を網羅した仕様書なんか作らんし、自分でも忘れちゃうんだ。 そんな時、「わかりやすく書いてた自分、GJ!」って思うことが多々あるねw
>>212 >>210 さん、reg addr = 0;といちおう初期値はしていしてあります。
sim上では許されてもこういう初期化はありえない。一体いつ初期化されるんだよ。
それとテストベンチ(sim専用)ということならノンブロッキング代入なんかなんで使うんだよ?
>>200 にあるcase文はdataに対する設定なのに、
defaultてdataの設定をせず、addrなんかの設定してることがそもそもおかしいって言ってるの。
216 :
211 :2005/10/02(日) 10:22:59 ID:S1frEgOF
>>212 >>213 さんも書かれていますが、CLKの立ち上がりで、
そのprocess文のなかの代入が「同時に」実施させます。
ですので、立ち上がり時に、
Addr……立ち上がり時の値に+1される
Data……立ち上がり時のAddrの値で次のDataとなる値が選択される
となるため、Addrの値をつかって0hにx0を書きたいという動作は
ひとつ遅れてしまいます。
DataをF/Fで構成する必要がなければ、process文の中から削除して
reg宣言からwire宣言で
wire data[1:0] = Addr[1:0]; とかで書いてあげれば解決すると思います。
独学だそうですので、とりあえずWebをあさるなり、ヨサゲな書籍購入をお勧めします。
>>215 おっしゃるとおりです。
初期化は論理合成を行いだして、痛い目にあった方が覚えやすいかも?
最後の2行は、見落としてました。
>>216 >>200 の書いたalwaysではその動作が完了すると、
1クロックめ)addr == 0
addr->1
data->0(case は addr ==0で判断)
2クロックめ)addr ==1
addr -> 2
data -> 1(caseはaddr ==1で判断)
になるし、
>Addr……立ち上がり時の値に+1される
>Data……立ち上がり時のAddrの値で次のDataとなる値が選択される
この説明は上に俺が書いてることと同意でしょ。ところが
>>200 を見ると1)のときにdata->1って言ってるんじゃないの?
caseで選んだアドレスにデータが入らないというのは真っ赤な嘘で caseで選んだアドレスにデータが入るが、always処理直後のaddrの値がデータの値より1多いと言いたいのかな? 00番地にはd0の内容は入る筈なんだが。 例えば、 module memory(data, clk, res); input res; input clk; output [1:0] data; reg [1:0]mem[ 0:5]; reg [1:0] counter; always@( negedge res, posedge clk ) begin if( !res )begin counter <= 0; end else begin counter <= counter + 1; mem[counter] <= counter; end end assign data = mem[counter]; endmodule こうやると、data出力はcounterが一回りするまで不定になる。 alwaysで格納される値、アドレス(counter値)と出力時の data=mem[counter]に使われるcounter値は1違う。後者が一つ先を インデックスしてるから。
とりあえず回路図に描き出してみた方が良いと思う
回路図描いてもいいが、回路図書かんでもわかるでしょ。
多分Verilogの解説本ならどれ読んでも。
ノンブロッキング代入の信号の評価と代入のタイミングとしてちゃんと書いてる。
それすら読まずにいきなりシミュレータに食わして、しなくてもいい苦労してるだけじゃないの?
>>200 が書いてる現象と実際シミュレータ上で起こってる現象が違ってるわけだし。理解してもない。
>>220 質問者に言ったつもりだったんですよ。
回路図書かんでもわかる人はそんな質問しないからね。
>>215 FPGAでは、こういう書き方をすると、
コンフィグレーションだかスタートアップだかのフェーズで
FFを初期化するものがあったような気がした。
ACTELだったかXILINXだったか俺夢だったか、ちょっと自信がないが。
223 :
200 :2005/10/02(日) 17:19:46 ID:rand8dA0
みなさん、いろいろ有益なレス、どうもありがとうございました。
>>213 はい。いろいろやって、どんな回路が生成されているのか試しています。
>>214 回路を思いついても、それを、HDLにサクサクっと直せなくて^^;
>>215 そうだったんすか。どこかでそういう書き方もできるというのを読んで、
一応、FPGA上で動くので気にしないでつかってました。
>>216 、217 その説明で、やっと納得しました。結局dataがFFに入ってるから
一つ遅れると言うことですね。
>>218 いや、simでもFPGA上でも、01番地にd0が入るんです。でも、皆さんの
説明でなんとなく理由がわかりました。
>>219 やってみてます。
>>220 こちとら、物理関係の実験で、装置に組み込める特殊なセンサーと
高速のデータ収集装置が必要なのですが市販品で使えるものが無いので、
仕方なく、いろんな人の意見に従って、FPGAを使って自分で組んでみている
次第です。何しろHDLをやり始めたのが、8月にFPGAの評価ボードを手に
入れてからで、インターネットやら、解説本やらをつまみ食い
しながら、なんとか、主な部分は機能するところまで、こぎつけてはいるの
ですが、よくわからない部分が多くて。やっぱり、じっくり基本からやらないと
だめですね。
でも、FPGAは感動物ですね。こんな便利なものだとは知りませんでした。
>>222 XilinxのFPGAを使っているのですが、深く考えてませんでした。
>
>>218 いや、simでもFPGA上でも、01番地にd0が入るんです。でも、皆さんの
>説明でなんとなく理由がわかりました。
チミも強情だねぇ。もし、そんな風に動作するシミュレータならだれもまともな設計できんだろが。
繰り返しになるが、
alwaysに入る直前、adr=Nならcaseの評価はadr=Nに対してなされるし、
dataの格納はadr=N1に対して格納される。alwaysが完了してはじめてadr=N+1になる。
もしこの時点でadr=N+1アドレスのデータを確認しても不定値しか入ってないよ。
大体、宣言部分でdr=0などと書いた回路を一体どういう風にシミュレートしたんだよ。テストベンチ見せてみろ。
まともに書けてないんだよ。君の回路は。それでまっとうな結果になってなくてもそんなの議論のベースにならない。
>>218 に書いたHDLはmodelsim 6.1 SEで確認したものだから、カウンタ値(counter)と実際に格納されるアドレス、
出力(data)の関係を調べてみろ。
訂正 ×dataの格納はadr=N1に対して格納される。 ○dataの格納はadr=Nに対して格納される。
回路図書くなんて愚の骨頂。
愚直にこつこつとやろう
229 :
774ワット発電中さん :2005/10/09(日) 22:15:27 ID:x0o4HMmI
a [3:0]mem[0:3]; のメモリに初期値を与えたい場合どうすれば良いのでしょうか? mem[0]=1; とかですかね・・
>>229 デバイス依存
なので基本的にはリセット信号で初期値を指定する
231 :
774ワット発電中さん :2005/10/09(日) 23:03:14 ID:x0o4HMmI
どうもです、 リセット信号で・・? ベリログで書く場合どうやればよいのでしょうか?
$readmemh 引数はマニュアルで調べてくれ
233 :
774ワット発電中さん :2005/10/10(月) 00:01:05 ID:x0o4HMmI
どうもです $readmemh("filename",memname,begin_addr,end_addr); 上のメモリの場合 $readmemh("test.txt",a,0,3); でtest.txtから読み込んでくれるんでしょうか? test.txtの中身はどの用に書けば良いのでしょうか? 111111111111 をtxt内に書いておけばa[0]に1111 a[3]に1111 が入ってくれるんでしょうか?。
234 :
774ワット発電中さん :2005/10/10(月) 00:20:28 ID:bSaptswe
quartus 2で作ってるんですが Error: Verilog HDL syntax error at main.v(7) near text "$readmemb"; expecting an identifier, or "endmodule", or a parallel statement, エラー出て、 quartusでは使えない?
235 :
774ワット発電中さん :2005/10/10(月) 00:27:10 ID:F/oJP6qo
236 :
774ワット発電中さん :2005/10/10(月) 00:29:39 ID:bSaptswe
言語仕様くらい確認しなさい
238 :
774ワット発電中さん :2005/10/10(月) 00:50:19 ID:bSaptswe
レジストリに初期値を代入する方法ないんでしょうか? 今 always @(posedge w) begin mem[0] = 16'b0001000000000001; end で代入してます、、
入力信号にリセット入ってないの?
always @(posedge w or negedge nrst)
if(!nrst)
begin
mem[0] = 16'b0001000000000001; //初期値
end
else if(******)
begin
******
end
>>238 まさかとは思うがリセットってわかる? あとレジストリとは言わない
「この回路を書きたい」より先に、verilog本を一冊読んできたほうがよいと思われ
241 :
774ワット発電中さん :2005/10/10(月) 01:25:40 ID:bSaptswe
ありがとうございます。
一般的なリセットの意味は分かりますが、、
この場合何を指しているのかわかりません、、
>>240 その方法しかないんでしょうか?
alwaysの中でしか代入できない。
一般的な意味のままでFFにリセットをかければよいのだが、多分分かってないようだ・・・
電源投入直後の値を決定させたいのなら、そういうデバイスを使うしかないよ
244 :
774ワット発電中さん :2005/10/10(月) 01:36:04 ID:bSaptswe
どうもです、 FFにリセット、意味わかりました。 ただアドレス16bitデーター16bitのFFを作って全部にやるんでしょうか? >>電源投入直後の値を決定させたいのなら、そういうデバイスを使うしかないよ そうです!!これをやりたい。。 そういうデバイスとは何でしょう? 外部にROMを用意するとか? ちなみにプログラムメモリを作ろうとしてます 電源投入後そこからプログラムを読み込んで実行。
電源投入直後の値を決定させるひとつのやりかたがリセットなのだが。
>>229 のように宣言したメモリを、alwaysを使わずにどうやって制御するつもり?
ちょっと待って。
>>244 さんは、確か、FPGAスレでCPU目標と言っていた方ですよね。
>ちなみにプログラムメモリを作ろうとしてます
>電源投入後そこからプログラムを読み込んで実行。
ROMってこと? ソフトがIPL読みにいくようなイメージ?
とすると、ちょっと考え方が違う気が、、するのだけど
247 :
774ワット発電中さん :2005/10/10(月) 01:54:12 ID:bSaptswe
あい、そうですCPU目標とほざいてた者です。 mem[0] = 16'b0001000000000001; 上位4bitが命令 次4bitがレジスタのアドレス 最後がデーター 一応どういうCPUにしようか考えたんです。 FPGAへの入力装置は PCのカウントアップの信号線だけにして 元々FPGA内に入ってるプログラム(命令セット)を1行づつ実行させてやろう、と思ってます これが完成したら外部からの読み書きが出来るように・・。 なので、、Initial Program Loaderかもしれないですw
え〜と。
ハードの並列処理をよくわかってないように見受けられるのですが。。
あと、その仕様だとFPGAでやる意味があまり無いようにも思える。
・CPU目標らしいが、ハード(基板)はどうするの?
・PC(プログラムカウンタだよね)のカウントアップはどの部品でつくるつもりだった?
素直に
705 名前: 774ワット発電中さん [sage] 投稿日: 2005/10/09(日) 16:34:57 ID:mPzUjNm1
つ
ttp://www.cqpub.co.jp/hanbai/books/33/33631.htm これ読んだら、と思ったけど、それ以前の問題な気もする。
他の人のレスも待ってみて。オヤシミ ノシ
249 :
774ワット発電中さん :2005/10/10(月) 02:26:00 ID:bSaptswe
とりあえず加算減算をするだけの物を作ってみようと思います。 ハードはFPGAにスイッチを一つ。(入力) 出力はLED ONするたびにPCを+1 (クロックに合わせて勝手にプログラム走らせると結果が速すぎて見えないと思って) 起動すると0番地の命令を実行して待機 スイッチをONにすると次の命令、という風にしようかな、と思っております。 とりあえずココまで作ってみようと、 そのあとバージョンアップですわ。
250 :
774ワット発電中さん :2005/10/10(月) 02:28:37 ID:bSaptswe
あ、HPのアドレスありがとうございます。 VHDLはちょっと取っつきにくかったので ベリログ使ってます。 その本と同社の「入門ベリログHDL記載」、と言うのを参考にやってます・・。
>FPGA内に入ってるプログラム(命令セット)を1行づつ実行させてやろう この考え方から離れたほうがいいと思う。 verilogで記述してるのはプログラムじゃないよ。回路だよ。
252 :
774ワット発電中さん :2005/10/10(月) 02:58:41 ID:bSaptswe
どうもです^^ >>verilogで記述してるのはプログラムじゃないよ。回路だよ。 うーむ、深い言葉ですね。 回路だと、心してやります!! もう一度考え直した方が良いのかな・・ 今考えてるのを さらに細かく言うと 命令セットの上位4BITに命令が入っていて それをデコードして、残りのビットをどうするか決める、といった感じです 電源投入→メモリからデーターロード→デコード→何の命令か?演算なら演算部にデーター送り →演算部で演算→演算結果をレジストリへ。
253 :
774ワット発電中さん :2005/10/10(月) 03:01:14 ID:bSaptswe
とりあえずinput CK の立ち上がりで メモリの0番地から順番に読み込んで[15:0]に出力するのが出来ました。。 次は デコーダーを作ろうとしてます。。
わざわざ助言してやっても どうせ完成は無理だろ。 途中で投げ出す方に一票。
>>244 そういうFPGAを使う、という意味。
FPGAの種類によっては、電源投入後のFFの内容は不定(0か1か分からない)です。
なので、普通は電源投入後リセット信号を出力し、初期値をセットします。
電源投入後リセット信号を出す回路は、FPGAの外の話なので手動でリセットボタンを押すか、
電源を監視して自動的にリセット信号を出すかは設計仕様によります。
256 :
774ワット発電中さん :2005/10/10(月) 04:06:37 ID:bSaptswe
>>255 なるほど、納得です、ありがとうございます。
ふと書いていて思ったんですが
ベリログで書く場合
いくつものmoduleに分けてそれぞれをつないで一つの回路にするのがいいのか
一つのmoduleで中にだらだらと書いた方が良いのか
どっちがいいのでしょう?
257 :
774ワット発電中さん :2005/10/10(月) 09:28:24 ID:I1NcU7J4
自演ばればれ厨
自演と言わんと気がすなまい厨はだまっとけ が、ちゃんとした本を読めというアドバイスを ことごとく無視するやつは相手にしたくないのはわかる。
自分でCPU設計するにしても、言語をどうするかがねーーー 例えばクローンH8とか作ってくれたほうがgccもサポートしてるし多くの人に喜ばれるぞ。 あと、一度寺と財が作ったNiosIIとかpico/micro-blazerを使ってみてもいいんじゃないの? こんなもんか。ってのがわかる。どこまでいけるかしらんが評価版でもそこそこいけたんじゃないかな?
pic相当のCPUつーかコントローラ作成記事は市販本で見たことあるから。とりあえず本屋に行ってみ
>>256 >moduleの階層分け
好みで。設計者のセンス。
>>249 このハード、まさかリセット入ってないの?
>>255 にあるとおり
リセットボタンか電源監視を汁
もひとつ訊きたいのだが、verilog経験どれくらい?
>もひとつ訊きたいのだが、verilog経験どれくらい? んなこと聞いてやるなよ。わかるだろ? やさしく導いてやれよ。Zimmermanみたいにすごいことなるかもしれんし
263 :
774ワット発電中さん :2005/10/10(月) 13:33:33 ID:bSaptswe
どうもです
ハードは
http://www.hdl.co.jp/CSP-024/ これかな。
ベリログの経験は 一週間未満ってところです
C言語はさわったことあるので
VHDLよりベリログの方が取っつき安かった。
アセンブリもさわったこと有ります
過去に扱ったマイコンは
PICとAVR。
なんでFPGAというと
学校に有ったのでコレ使ってなんか作ってみようと思った次第です
一言だけ言うとHDLはソフトウエア言語のような手順を書くものじゃなくて回路を記述するものなので、 Cやアセンブラの経験は文法を知ってるぐらいしか役に立たんと思っといたほうがいいかもしれない。 プログラムカウンタやmainの先頭から動作するわけじゃない。どういうふうに動くかを把握することだな。 そうすりゃリセットが何で必要かわかる。
学生さんでしたか…。
まず、1週間でCPUを目指すなんてのは、果てしなく無謀
リセットの使い方も知らないようじゃ、ハードをまったく解ってない
C言語と文法は似てるけど、ソフトとハードの違いを理解すること。
>>250 の入門本の例題を1冊全部こなしてから出直したほうがよいと思われ
仕様を書くのはそれから。このスレで質問するのもそれから。
ボードはいいね。俺もホスィ...(´・ω・`)
ペーペーの俺から言えるのはここまでだ。ガンガレ ノシ
266 :
774ワット発電中さん :2005/10/10(月) 15:11:12 ID:bSaptswe
どうもです 一人でモンモンとやってみます。 FPGA自体は一ヶ月といったところです、、 最初はスケマティックでやってました といってもFF使って4bitカウンター作っただけですが・・ (クロック数えて10進数で表示)
なんか、逆にVHDLみたいな違う言語でやったほうが混乱しなくていいかもよ。 といってみる。
268 :
774ワット発電中さん :2005/10/10(月) 22:20:45 ID:bSaptswe
まぁ、なんだかんだで加算とストア命令ができました なんかこのまま完成しそう・・。
269 :
774ワット発電中さん :2005/10/11(火) 11:35:25 ID:Z4OIchoq
完成マダー?
>>264 Verilogソースみて
「電源投入したらどのルーチンから動くの?」と聞かれた。
コンカレントで動作するモジュール群を見て
「優先順位はどうなってんの?こっちのタスクはいつ起動するの?」
ソフトウェア屋さんの頭の中はタスクスイッチャベースのラウンドロビン処理なのかもしれぬ。
>>271 「超並列コンピューターで一斉動作」って答えとけ(笑)
声に出して読みたいHDLソース。 あったらおもろいか?
274 :
774ワット発電中さん :2005/10/12(水) 01:15:51 ID:XWmjiqqy
時間が無くて他の命令がまだ実相できてません。 ずーっと悩んで居たことがあって クロックで全部同期させていて 1クロックづつづれていくんですよね IFなんとかなら 以下を実行。で モジュールを呼び出せないのが痛かったです しばらく悩んで色々考えてみると IF文でモジュールに繋げた用になる方法をやっとこさ思いつき 何とかずれない用になりました。 always@(posedge ck) modul modu(a,b,c);//AとBを加算してCに結果が帰ってくる C言語のイメージで行くとこんな感じでした。 が、実際はクロックの立ち上がりでモジュールに配線する。 という意味になっちゃって、んなこたー出来ないと怒られていました。 なので wire [3:0] d; modul modu(a,b,c) assign d = c; always@(posedge ck) mem[0] <= d; とすることでクロックに同期させてモジュールの戻り値を取得する方法を思いつきました・ もしかしたらコレも変な方法なのかもしれませんが、、 がんばって解決しましたー。
>>274 ・同期回路
・ステートマシン
・データパス
・パイプライン
ここらへんの概念をきっちり調べてから出直しておいで
277 :
774ワット発電中さん :2005/10/12(水) 05:12:12 ID:XWmjiqqy
出直してきますね。 報告はうざがられるみたいなので、 一応完成したので最後の報告で、、 当初の目標だったCPUもどきが完成しました。 命令は加算減算ロード、しかないですが 一応仕組みは完成かな、 あとは、命令をちょこちょこ増やしていこうと思います。 どうも今までありがとうございました。
別にパイプラインは必須じゃないが。。。 >一応完成したので最後の報告で、、 まったく完成してない。 というかとっかかりにすらたどり着いてないと見た。 どういう条件で加減算ステートに入って、どういう条件でそこから抜けるか書いてみ
279 :
目標はCPU作成 :2005/10/12(水) 06:55:38 ID:XWmjiqqy
うわぁ、早速煽られてますね。 条件は上位4ビットの値です たぶん、ソースを見せるとなんだコレって言われそうですが 一応、16bitのパターンからメモリに読み書きして加算減算が出来る回路。 は作りましたよ、(美味く説明できないけど) 条件と加算は else if(alldata[15:12] == 4'b0011) file[alldata[3:0]] <= file[alldata[11:8]] + file[alldata[7:4]]; この2行ですね。。 12-15bitが0011(加算命令なら) メモリの0-3bitの値のアドレスに、8-11 4-7のメモリのアドレスのデーターを加算して 格納。 加算のフォーマットは (加算命令)(収納先)(データーアドレス1)(データアドレス2) 0001 0001 0001 0001 0001000100010001 ココはこうした方が良いよって言うアドバイスなら すごく嬉しいけど、がんばって作ったんだからただ馬鹿にするだけはやめてほしいです。 なんで完成した、と言ったかと言うと シュミレートして メモリからデーター取ってきて、ちゃんと加算して指定のメモリに格納してくれたからです
280 :
774ワット発電中さん :2005/10/12(水) 07:01:49 ID:cH6iT9gI
>なんで完成した、と言ったかと言うと >シュミレートして ホラ!!完成どころか糸口さえつかめてない。 だから、何をきっかけにして、加算ステートに入って、何をきっかけにして、その次のステートに遷移するかって言ってんだよ。 テストベンチ見せてみろ。
ALUが完成したくらいか
学生のお遊びなんだからムキになって見せてみろとか大人げないこと言ってやるなよ 完成したって言ってんだから完成したんだろ
・・・
俺が指導教官ならD判定。
D判定って聞いたこと無いな。
decision decide
>>279 LDA データ1アドレス
LDB データ2アドレス
ADD A,B
STA 収納アドレス
を一つにまとめたわけか?
アキュムレータを作って、ALUを操作する方向を考えるべきだな。
>>285 A優
B良
C可
D不可
キミは優秀なのでD判定なんて聞いたことが無いんだね。
阿呆かこいつ。
まぁ、、、完成したなら、、おめでと。ヨカッタネ 泣ける
>>289 うーん、wDoIWGSWは厨房か工房なのか?D判定(D評価でもいいや)を知らないのか。
だみだこりゃ。
あんま恥の上塗りしない方が良いかと。
>>292 何が恥なのか教えてくれる?後学のためにさw
必死だなあ。
>>BderktoJ 自演も大変ですね┐ (´・ω・`) ┌ =3
>>297 ここは馬鹿のすくつみたいだぜ。BderktoJさんよw
BderktoJは近年稀に見る馬鹿だったな。
のこり700!
D判定プゲラッチョ
もういいよ
またBderktoJに湧かれたら迷惑。
D判定
のこり695!
おまえら全員不合格!298-305
ここで普通の話題してもいいでしょうか?
308 :
火魔人 :2005/10/16(日) 02:25:40 ID:WlgN06L+
#しばらく読めない状態でいたら荒れてる・・・ "目標はCPU作成"頑張れよ! 自分は、十数年前Verilog-XLでシングルチップマイコンのゲートレベルシミュレーションをやる事に絶望して CPUから離れたけど、今ならFPGAで幾等でもやり直しが出来る。 取り敢えず、論理モデル作りに精を出してシミュレータと言語仕様に慣れなさい。 その後、論理合成でつまずいて、それを乗り越えたら一人前になれる。
一人前になる気があるのか、あれ? 学生さんのやっつけ仕事っぽいけど
>>308 も素人臭さぷんぷんだけどな
論理合成できないような論理モデルつくりに精を出したって無意味 机上の空論
[ふつーの開発フロー]
0. 回路に求められている要件をリストアップ (要求仕様)
1. 最終的な回路の概略を念頭にブロック図を書く (概要仕様設計)
2. 1の回路の各モジュールのIOのタイミングチャートを書く (I/F仕様設計)
3. 2を元にビヘイビアモデル/テストベンチ/テストベクタを作る (テスト仕様設計)
4. 各モジュールについて3が通るような論理モデルをRTL記法で書く (詳細仕様設計)
5. 論理合成 / テスト / 仕様にミートしないところを手直し (実装)
0から3をすっ飛ばして4ばかりやっても無駄
特に3をサボったら動く回路は未来永劫出来上がらない (工数も3が一番大きい)
一人前とは漏れが許容できるくらい少ないテストベクタを書けることをいう
状態遷移図描かずにいきなりブロック図かよ
>>311 そこらへんはspiralに進んでいくんでは
すべてのブロックが複雑なステートマシンをもつわけじゃないしね 複雑な状態遷移を必要とするブロックって全体の1割もないと思う
>>310 0-2は客(発注元)が書いてくる。3-5を実担当者(発注先の外注)がやる
dネルかよw
0 の途中から投げてくる客がいる。(要求仕様があいまい。)で、こっちで仕様を推測し確認。
2-3 は面倒なのですっ飛ばす。要求されない場合も結構あり。
5 の途中(主要機能しか確認していない)で納品。これでも金くれるところが割とある。
まあ予算っつうか、金払いしだいで手抜きはよくやるよ。
>>314 さんみたいに、0〜2 を送ってくるような会社相手には真面目にやるけどね。
>>317 FPGAの話?
マスク起こす仕事ではそうはいかんだろ。
適当にやって失敗したら、製造の準備費用だけで工数飛ぶんじゃないか。
319 :
317 :2005/10/18(火) 20:34:46 ID:NYxVTuJZ
>>318 はいFPGAの話です。済みません。 あっちと間違えてカキコしちまった orz
Verilogを初めてさわって、LEDを点灯させようと思っています。 XilinxのISEで試していますが、案の定エラーが出て、デバイスに 1度も書き込めずに困っています。どなたか教えていただけないでしょうか。 エラーメッセージの意味が全くわからないんです。 以下に、そのソースとエラーメッセージです。 1: module wave(in_clock,in_data1,out_data1); 2: input in_clock; 3: input in_data1; 4: output out_data1; 5: always @(posedge in_clock) begin 6: if(in_data1 == 1'b0) begin 7:// out_data1 = 1'b0; 8: end else begin 9:// out_data1 <= 1; 10: end 11: end 12: endmodule 7行目と9行目をコメントにすると ERROR:NgdBuild:605 - logical root block 'wave' with type 'wave' is unexpanded と出ます。 たぶん、waveでタイプされる?ロジカルルートブロックwavwは、拡張されません。 という意味だと思うのですが、何を言っているのか、サッパリわからないんです。 ・ロジカルルートブロックって、何のことでしょうか? ・なぜ拡張される必要があるのでしょうか。 また、その行をコメント無しにすると、8行目と10行目に対して ERROR:HDLCompilers:247 - wave.v line 8 Reference to scalar wire 'out_data1' is not a legal reg or variable lvalue ERROR:HDLCompilers:44 - wave.v line 8 Illegal left hand side of blocking assignment と出ます。 これも、wave.vの8行目でリーガルレジスタでも可変lvalueでもない、スカラワイヤout_data1を 参照しました。という意味だと思うのですが、 ・リーガルレジスタ、可変lvalue、スカラワイヤの、それぞれの意味が全くわかりません。 すみません、どのようなことを行っているのか教えていただけないでしょうか? よろしくお願いします。
alwaysのなかでブロッキング代入を使うな
>たぶん、waveでタイプされる?ロジカルルートブロックwavwは、拡張されません。 条件判断だけして合成する対象がない。
そういう問題じゃなくて、out_data1 を reg にしてないってだけだろ
確かにエラー内容はreg宣言してないのでそれで文句言ってるけど、 根本的に、一つのalwaysのなかで一つのレジスタに対してブロッキングとノンブロッキングを混在させてまともに合成できるか?
325 :
774ワット発電中さん :2005/10/21(金) 00:17:07 ID:MOL4TIgs
reg out_data1;を追加しれば?
326 :
774ワット発電中さん :2005/10/21(金) 01:47:27 ID:MXLB7kY+
「ブロッキング」「ノンブロッキング」の語源を教えて下さい。 代入を待つ(ブロックする)か、待たないか(ノンブロック)って ことだと、どうも逆に思えてしまって。。。
待つじゃなくて、次の代入を「待たせる」だな。
328 :
774ワット発電中さん :2005/10/21(金) 02:16:53 ID:wiHf2+SA
320です。
みなさん、ありがとうございます。
おかげで、動きました。みなさんの指摘の通り、reg out_data1を
alwaysの前に置いたら、ちゃんと動きました。
7行目と9行目は変でしたので、修正しました。いい感じです。
どうもありがとうございました。
>>326 僕も、そう思っていましたが、講習会のテキストによると、
ブロッキング代入は、前行の代入が終わってから、次の行の代入を
する、つまり「処理の流れが前の行の処理によって止められてしまう」ので、
ブロッキングなんだそうです。逆にノンブロッキング代入は全行同時に処理される
ので「処理が待たされない」のでノンブロッキング代入だと。
クロック同期で設計するの通常だから、ブロッキング代入だと、
処理の順番を待っているうちに、もう次のクロックが来てしまって
都合が悪いので、通常はノンブロッキング代入を使うんだそうです。
この場合、右辺値は、前回値になっているそうで、D-FFのQ出力の
イメージです。
329 :
326 :2005/10/21(金) 02:17:58 ID:MXLB7kY+
330 :
774ワット発電中さん :2005/10/23(日) 03:44:21 ID:ziSm8r0B
む320です。 お陰様で、どうにかこうにか、デバイスが動くようになりましたので 調子に乗って、Xilinxのページからverilogソースを落としてきて、 試しに動かしています。なんとかそれなりに動くのですが、記述の方法で 一つ質問があります。ご享受ください。Xilinxのサンプルで module hoge1(....) always @(posedge clock or posedge a) begin if(posedge Clock) 処理1 else if(posedge a) 処理2 end always @(posedge clock or posedge a) begin if(posedge Clock) 処理3 else if(posedge a) 処理4 end endmodule という記述がされているのですが、2つの処理は、いずれもClockの↑で 動作するように思います。ので、これらは、次のように1つのalwaysで 記述できそうな気がするのですが、1つにしてはいけないのでしょうか? module hoge2(....) always @(posedge clock or posedge a) begin 処理1 処理2 処理3 処理4 end endmodule また、RESETの処理だけまとめておきたいと思ったら module hoge2(....) always @(posedge clock or posedge a) begin if(posedge Clock) begin 処理1 処理3 end else begin 処理2 処理4 end end endmodule という書き方もできそうなのですが、これはOKでしょうか? 以上、宜しくお願いします。
>>330 結論を言うと、そのように書き換えても問題はない。
ただ、あまり長い処理を1つのalwaysブロックにするとソースの見通しが悪くなるばかりか、
論理合成の最適化がうまく働かず、回路規模、速度に悪影響を及ぼすこともある。
>結論を言うと、そのように書き換えても問題はない。 書き換えることに問題があるか否かより module hoge1(....) always @(posedge clock or posedge a) begin VHDLじゃあるまいし、こんな書式Verilogが許すかよ。
ん?こうすべきだってこと? always @(posedge clock or a) begin こんな書式DesignCompilerが許すかよ。
こっちの書き方は? if(posedge Clock) begin
え? あたりまえのようにこうしてるけど always @(negedge nreset or posedge clock)
336 :
774ワット発電中さん :2005/10/23(日) 20:22:38 ID:sKIr1j8d
ぼくも そうしてる
ところでこのスレでよく見かけるhogeってなに? 元ネタでもあるの?
>337 最近はhageてきた
hoge.jp
if(posedge Clock) begin こんな文法はない
`defineって結構よく使うんですけど、ファイルを結合するとき、 同じ名前の定数があったらエラーが出ますよね。 例えば ファイルA.v `define AHO 1 module 〜 ファイルB.v `define AHO 2 module 〜 これってどうにかならないんでしょうか? C++だったら、defineの代わりにconst intとか使ったりできるんですが…
メタ構文変数 インクルードガード
>>337 foo bar foobarの日本語版
344 :
337 :2005/10/24(月) 20:00:47 ID:lQ+jCbhK
その昔、NiftyのFC(C言語フォーラム)で作られた プログラマー用語のFAQに載ってなかったかなぁ。
VHDL歴1年、やっと慣れてきたのに、Verilog移行を強いられました(T_T) 下のようなVHDL記述がVerilogで記述できるのか、教えてください。 package regaddr is constant reg1_addr : std_logic_vector(3 downto 0) := "0000"; constant reg2_addr : std_logic_vector(3 downto 0) := "0001"; end regaddr これをコンパイルしておいて、 use work.regaddr.all; で読み出してreg1_addr,reg2_addrを好きに使う。 よろしくお願いします。
347 :
774ワット発電中さん :2005/10/26(水) 14:19:36 ID:Tzzs/maY
320です。先日はありがとうこざいました。 みなさんのおかげで、LEDが点くようになりました。 さて、今度は素朴な疑問が出てきました。本で調べたのですが 納得できる回答が見あたりませんでしたので、再び教えて下さい。 すみません。 今回は、動作の順番についてです。 ●複数のmoduleの順番 module hoge3(......) 処理3 endmodule module hoge4(......) 処理4 endmodule module hoge5(......) 処理5 endmodule この場合の動作は、各モジュールが別々で関連がないため 処理3,4,5が同時に(非同期に)実行される、という理解でOKでしょうか? ●複数のalwaysの順番 module hoge6(.......) always@(pos clock) begin if(....) 処理6 end always@(pos clock) begin if(....) 処理7 end always@(pos clock) begin if(....) 処理8 end endmodule 上記の場合の動作は、処理6,7,8が同時に動作すると考えています。 この理解は正しいでしょうか? ●複数のalwaysとassignの順番 module hoge9(.......) always@(pos clock) begin if(....) 処理9 end assign io1=(in1)? a:b; ←2つのalwaysに挟まれたassign always@(pos clock) begin if(....) 処理7 end assign io2=(in2)? c:d; assign io3=(in3)? e:f; assign io4=(in4)? g:h; endmodule 上記のように、2つのalwaysに挟まれたassignと、最後にまとめて書いた assignとでは、動作順番は、どのようになるのでしょうか。 alwaysはalwaysで、assignはassignで、まとめて書きたいのですが 書く位置によって動作が変わるのであれば.....と思いました。 宜しくお願いします。
348 :
346 :2005/10/26(水) 14:58:51 ID:0gf/SAMo
自己解決しました。 スレ汚し失礼しました。
>>346 =348
せっかくだから解決結果をレスしてみたら?
>>347 ●複数のmoduleの順番
組み合わせ回路が生成されるかと思います。
●複数のalwaysの順番
同じクロックを使用した順序回路が生成されます。
どちらにせよ並列動作する回路が生成されるのには違いないですね。
●複数のalwaysとassignの順番
位置に関係なく(assign文についての)組み合わせ回路が生成されるかと思います。
合成結果の機能に影響はないですが、性能に影響があるかどうかは不明です。ない気もするけど。
350 :
774ワット発電中さん :2005/10/26(水) 18:13:19 ID:iJZ5dJWT
>>349 おーーー、ありがとうございました。
納得しました。前者2つは、並列動作回路。
最後のは、位置に関係なく並列動作、ですね。
ありがとうございました。助かりました。ありがとうございます。
351 :
774ワット発電中さん :2005/10/26(水) 21:25:41 ID:6srNVuYd
351> まあまあ。 ここで偉そうに能書き垂れるレベルなら、80点位取れる。
always @(posedge clock) begin end ↑ クロックの立ち上がりで動作 always @(negedge clock) begin end ↑ クロックの立ち下がりで動作 always @(clock) begin end ↑ ということは、クロックの立ち上がり、立ち下がり、いずれでもで動作 と考えれば良いでしょうか?
>と考えれば良いでしょうか? 考えないほうがよいと思います。
せめてclock=1のとき常に動作(D-Latch)という考えをもってほしかったw
厨な質問ですいません。 reg [3:0] a; に、たとえば1を入れたい場合 a <= 4'b1; a <= 4'b0001; a <= 1; のどれが一番正確でしょうか? 最適化されてどれも同じに結果は得られるんですけど、 なんか心配で...
最適化されないと違う結果になるはずなのか?
358 :
774ワット発電中さん :2005/10/29(土) 21:06:14 ID:0ipGqHmy
>350 違うだろ。 Alwayasってのは順序回路を定義する。 Assignってのは組み合わせ回路だ。 moduleってのは両方を入れる入れ物(インターフェース)
a <= 4'b1; って書けたんだ。 今始めて知ったw
360 :
774ワット発電中さん :2005/10/29(土) 21:50:50 ID:0ipGqHmy
そういう書き方は間違い。 a<=1; でいいの。aは宣言でサイズ定義しているんだから、 いちいち幅かくなんて無駄。
間違いではないだろうけど・・
例えば途中でaのbit幅が変わったとき、
>>360 の書き方のほうが直すところが少ない。
じゃ、おいらは a <= 4'b0001; に1票入れておくか
363 :
774ワット発電中さん :2005/10/29(土) 22:42:48 ID:HbEbtPcM
じゃ、わては a <= 1; に1万票入れちゃるわ
>>362 bitパターンがちゃんと書いてあったお陰でバグがすぐ見つかったことがありんす(w
意味によって変えるかも カウンタの値とかだとa<=1とかやるけど、 ビットマスクみたいなやつだとa<=4'b0001とか書く
誰も書かないので... a<=4'h1 という書き方のもありまつ。 で、bit幅を書くメリット・デメリットについて メリットはシミュレーション時間が若干短くなる。 (定義しないとデフォルトの32bit幅でシミュレーションされる為) デメリットは、既に361が言っているように幅が変わったときの修正が面倒
367 :
356 :2005/10/30(日) 10:54:59 ID:a3dtRlvu
たくさんのレスありがとう! バグ関連やシミュレーションや後々の変更など いろいろなメリット・デメリットがあるんですね。 ものすごく参考になりました。
368 :
774ワット発電中さん :2005/10/30(日) 23:24:03 ID:QiVC8HmN
ここのレスを参考にするより素直に良著を熟読したほうがよっぽど参考になると思うが?
369 :
774ワット発電中さん :2005/10/30(日) 23:30:20 ID:w4hRbFVw
安くて高機能なVerilogシュミレーターってない? ModelSimって高すぎるよ。
つ XEsterter
いい忘れた。 シミュレータはファンクションだけじゃなく配線配置後のタイミングシミュレートできるやつじゃないと意味ないよ。
373 :
774ワット発電中さん :2005/10/31(月) 20:24:13 ID:ULZRuL+I
>371 カラスゾクルス?ってなんだ? >372 それは合成機能でしょ。 ModelSimって合成機能はないよ。でも300万。
さ、さ、300万??? ModelSimって、そんなにするの? XilinxのISE買うと付いてくるけど、あれではだめ?
375 :
774ワット発電中さん :2005/10/31(月) 21:23:34 ID:fR7bagIq
300万なんて安いもんだ。N$/V$Sは、500万ー700万だ。 それくらい、一人リストラすればなんとでもなる。 といいつつ、折れは、BA$E−X Mつきで、年間17万だ。 これでどうだ!
ModelSimで外部デバイスとのシミュレーションしている人はいますか? FPGA+同期型メモリとかの。 自社で作った基板の配線遅延やデバイス間のクロックジッタなんていうパラメータをどうやって作るのか教えて欲しいです。 まさかオシロで1個づつ測定する訳ではないですよね? FPGAの中だけというなら話は簡単なんだけど。
377 :
774ワット発電中さん :2005/10/31(月) 22:24:42 ID:ULZRuL+I
>376 Excelでシュミレーションできるよ。
外付けSRAMをモデル化したことはある 遅延込みでね。 そのとき配線遅延はいれなかったけど、入れようと思えば 1nsとかそういう遅延なら入れれる。 ジッタとかそういうのはいれないなぁ あんまりやろうとはおもわないけど、 気合があるならSDFを手で書けばできるよね。
379 :
376 :2005/10/31(月) 23:22:21 ID:6AtrEViS
有り難うございます。 >気合があるならSDFを手で書けばできるよね。 やはり気合いですね。 でも、実際の遅延情報をどこから持ってくるか・・・ 適当な値を入れる事はできるけど、適当な値を入れるならそもそも シミュレーションする意味が無いのかなぁと思っています。
MAX値を見込んで入れるなら意味はあるよ。 どの配線も5nsは遅延ないだろうということで5nsいれてsetupみるとかなら十分意味がある。
381 :
774ワット発電中さん :2005/10/31(月) 23:47:08 ID:gi+mFjy7
まあいまだと配線遅延よりも高速動作時の、高周波回路のような振る舞いのほうが大変迷惑な気がする。 伝送線路解析?ちゃんと勉強したいけど、なかなかねぇ・・・。
383 :
774ワット発電中さん :2005/11/01(火) 00:03:15 ID:oUKD1cPq
SDFを手でいじるなどというのは無駄な気合だな。 大体シミュレーションやることで実機評価より時間がかかっちゃ意味がない。 あと外部デバイスモデルの遅延がわかってるならそれをテストベンチに盛り込むことは簡単ジャン。 つーか普通のシミュレーションじゃん。 >まさかオシロで1個づつ測定する訳ではないですよね? 実体の遅延をどう測定するかは設計したやつにきいてくれ。
FPGAで1ビットのDA変換機をつくるにはどうしたらいいのですか? 資料が転がってるページがあったら教えてください
>>381 あってる
役に立たない人間を役に立つ機械と交換するんだから
用語的に言ってもリストラそのもの
388 :
774ワット発電中さん :2005/11/01(火) 16:38:13 ID:5CwhNglb
へぇ、デジタルインターフェイスだけかと思ってたけど、内臓A/DコンバータなしでもA/Dできるんだ。感動した。
389 :
774ワット発電中さん :2005/11/01(火) 18:02:47 ID:YjOhCQb5
なんでこれでA/D変換できるのかわかんね。。
D/Aだろ。 A/D書いてあったか? ただの1bitDACじゃねーか。 大昔のCPUや74シリーズ手組みの時代からあるぞ。
391 :
774ワット発電中さん :2005/11/01(火) 20:16:44 ID:jZ8prWMT
本格的なΣビットDACなら、昔、デザインウェーブに詳細記事があった。
392 :
774ワット発電中さん :2005/11/01(火) 22:52:47 ID:VwMa7Ne4
ただのPWMかよ
>>389 分解能と帯域をバーター取引するようなモンじゃね?
>>385 人の仕事の全てをソフトウェアで補えると思ってる??
そうかぁ、最近のソフトウェアはすごいなぁ。
実際凄いよな。
396 :
774ワット発電中さん :2005/11/01(火) 23:50:08 ID:VwMa7Ne4
>>384 そもそもA/DのAをどうやって持ってくるのか知りたい。
397 :
774ワット発電中さん :2005/11/02(水) 00:49:57 ID:szui9AFo
XILINX ISEを使ってるんですがなぜか宣言したポートがassign package pins で出てきません。edit constraintsで無理やり割り当てると エラーがでました。解決法がわかる方教えてください…。お願いします。
>>397 >解決法がわかる方教えてください
エラーメッセージも書かずに、どうしろというんだ君は...カエレ
399 :
774ワット発電中さん :2005/11/02(水) 01:05:32 ID:szui9AFo
エラーメッセージっていうのはedit constraintsで無理やり書いた時の事でしょうか? でてくるのはそのポートが見つからないみたいな事を言ってるみたい です。 ERROR:NgdBuild:755 - Line 7 in 'top.ucf': Could not find net(s) 'clk' in the design. To suppress this error specify the correct net name or remove the constraint. The 'Ignore I\O constraints on Invalid Object Names' property can also be set ( -aul switch for command line users).
>>397 気分一新、VHDLを使おう。SystemCでもいいぞw
そうすればエラーでなくなるかもしれないしね!
401 :
397 :2005/11/02(水) 01:07:22 ID:szui9AFo
すいません。使ってる言語はVHDLです。
>>397 >Could not find net(s) 'clk' in the design.
これが答えだ
403 :
397 :2005/11/02(水) 01:19:44 ID:szui9AFo
ちなみにソースはこんな感じです。コンポーネントしたモジュールに それぞれ間違いなくつながってます。 entity top is generic ( TX_WIDTH : integer := 8; RX_WIDTH : integer := 4; N : integer := 160 ); port( CLK : in std_logic; RXD : in std_logic; RST : in std_Logic; TXD : out std_logic ); end top;
>>397 >Could not find net(s) 'clk' in the design.
>そのポートが見つからないみたいな事を言ってるみたい
0点
答えは示した、寝る。
おやすみ〜
405 :
397 :2005/11/02(水) 01:53:57 ID:szui9AFo
たのんます。教えて(;´Д`)。
406 :
774ワット発電中さん :2005/11/02(水) 02:47:11 ID:6vbie7xY
だからさ,論理合成後にclk信号が消えているからコンストレインファイルと 不一致してエラーが出てるんだよ メッセージか読み取れないのか?君は。
FPGAさえあれば、コンデンサーと抵抗一個で、DーA変換できるんですね。 あと、delta-sigmaの原理を使うと、さらにコンパレーターを一つ足した だけで、A-D変換もできそうですね。
case sensitiveじゃないんだっけ? ucfのclkをCLKにしてみるとか。
409 :
397 :2005/11/02(水) 20:34:24 ID:szui9AFo
>>406 なんでそうなるかが分からんのです。ちゃんと回路で使ってるから
無駄なポートと判断されたとは思えないし。
411 :
774ワット発電中さん :2005/11/02(水) 21:08:58 ID:DekBdC4w
>>384 >FPGAで1ビットのDA変換機をつくるにはどうしたらいいのですか?
A/DもD/Aも簡単に出来る。教えてあげてもいいのだが、
>資料が転がってるページがあったら教えてください
「転がっている」という言い方には、記事を書いた人に対する敬意が見られない。
そういう奴には教えてあげたいとは思わない。
技術情報を道端の石ころと勘違いしていないか?
言い直せ。
412 :
397 :2005/11/02(水) 21:24:24 ID:szui9AFo
clkをCLKに変えても駄目でした(;´Д`)。
>>397 ところで、デバイスの型名と問題になるピン番は?
まさかとは思うが、N.C.ピンにCLKつなごうとしてないか?
415 :
774ワット発電中さん :2005/11/05(土) 01:37:57 ID:S7sVRuw/
入門書を買ってもデジタルICの機能を言語でどう記述するかくらいのことしか書いてない そこから先の実務レベルに近いことを勉強するにはどんな本がいいんでしょう?
417 :
774ワット発電中さん :2005/11/05(土) 03:01:17 ID:ixb+mEme
>>415 >入門書を買ってもデジタルICの機能を言語でどう記述するかくらいのことしか書いてない
ハードウェアマニュアルを読め。
>>415 >そこから先の実務レベルに近いことを勉強するには
実際に設計する
420 :
774ワット発電中さん :2005/11/05(土) 13:40:59 ID:sCtTzG7D
馬鹿だな。 まず仕事を取る。 前金をもらう。それから、設計する。でハードウエアーマニュアルを 読む。で分らないところを入門書でマスターする。 お前らやることが逆だろ。
わが栄光のヒットラーに該当するページが見つかりませんでした。 検索のヒント - キーワードに誤字・脱字がないか確かめてください。 - 違うキーワードを使ってみてください。 - より一般的な言葉を使ってみてください。
422 :
774ワット発電中さん :2005/11/05(土) 22:28:40 ID:FpNT3xv6
A/D変換は外部にコンデンサ一個おいて コンデンサにたまる時間を計測してDに変換できるんじゃね?
Aが測定前後で変わっても良ければね
424 :
火魔人 :2005/11/06(日) 02:11:35 ID:7ACtVczH
>>415 とりあえず何でもいいから自分で作れば?
何を作ればよいかもぐらい自分で考えて
>>415 そもそも、何がやりたいのか分かってないんじゃないの?
それが分かってるなら、
トレーニングコースを探して、受けてみれば?
427 :
774ワット発電中さん :2005/11/07(月) 00:11:47 ID:xoBd7bDq
>>423 コンデンサの容量でサンプリングの周期かえればいいんじゃね?
結局アナログなんだから測定前後で同じ値ってむずかしくね?
iverilogのバグにぶち当たって、新しいバージョンが出てないかチェックしようとしたら www.icarus.comにつながんない……
429 :
774ワット発電中さん :2005/11/07(月) 14:31:56 ID:tjIUlU1i
彼は、今、Vacation中だ。サーバが落ちたらしい。 ちなみにどんなバグ?
430 :
428 :2005/11/07(月) 15:14:11 ID:6SGyxocV
単に always @(posedge clk) q <= d; のようなのが正しく動かない。もちろん、上のように単純化すれば動くのだが。 ModelSimやveritakだとちゃんと動いたのでiverilogのバグっぽい。
431 :
774ワット発電中さん :2005/11/07(月) 15:42:38 ID:tjIUlU1i
それだけでは、見当のつけようがない。バグの部分をある程度特定して、 再開したら、バグデータベース上を探すか、なかったら、バグレポートを 送付してやるのが大人のマナーです。
こっちはシミュレーションが通ればそれでいいんだよ。
所詮遊びだろ
434 :
774ワット発電中さん :2005/11/07(月) 18:34:01 ID:tjIUlU1i
435 :
397 :2005/11/08(火) 01:25:31 ID:evQOlPIz
>>414 でもないみたいです。
あ〜わかんね〜。卒業できなかったらM3だ。
∧||∧
( ⌒ ヽ
∪ ノ
∪∪
ここまで解決能力が低い人材を社会に放流されたら困る 指導教官は責任持って留年させるべし
>>435 一度、プロジェクトをリフレッシュしてみる。駄目だったら新しく別プロジェクトを作成してHDLソースだけコピペしてみる。
438 :
774ワット発電中さん :2005/11/08(火) 11:11:15 ID:YXGJSbb1
頭がバグってるのは親の責任かなぁ?
439 :
お祭り好きの電気や ◆gUNjnLD0UI :2005/11/08(火) 11:43:56 ID:AEbcCFkW
漏れは親に対し、「PL責任とれっ」といったことがある。
440 :
397 :2005/11/08(火) 16:54:14 ID:evQOlPIz
なんで答えもだせないやつにこんな事いわれにゃならんのだ…。
答えをだせないやつに聞くお馬鹿なやつだからw
442 :
774ワット発電中さん :2005/11/09(水) 10:45:19 ID:j5xoGzHN
397 全ソースを晒せ。話はそれからだ。 …いや、ソースの読み易さしだい
>>440 答えは自分で出すモノだ。
M2にもなって答えだけを求めるな。なんのための修士課程だ。
ネタに決まってるじゃん。 答はもう出てて、みんなの様子を眺めてるんだよ。
↓釣れたよ〜(ガボガボ のAA
ロボコンサイコーーーーーーーー
>>444 だよなぁー漏れもそう思うわ
1週間もハマルとは思えんし。
449 :
774ワット発電中さん :2005/11/13(日) 13:50:32 ID:06zjSvgr
VHDL初心者です。CQの"VHDLとCPLDによるロジック設計入門” のP39を参考にBCDカウンタを記述してみました。 が、MODELSIMでシミュレーションしてもQに何も出てきません・・ ソースは間違っていないようですが、手助け頼みたいです。 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity BCD is port( CLK :in std_logic; Q :out std_logic_vector(3 downto 0); A : out std_logic ); end BCD; architecture RTL of BCD is signal Q_fb : std_logic_vector(3 downto 0); begin process (CLK) begin if (CLK'event and CLK='1') then if(Q_fb = "1001")then Q_fb <= "0000"; else Q_fb <= Q_fb + 1; end if; end if; end process; A <= not (Q_fb(0) or Q_fb(1) or Q_fb(2) or Q_fb(3)); Q <= Q_fb; end RTL;
450 :
774ワット発電中さん :2005/11/13(日) 13:51:31 ID:CMmBC/ko
VHDLなんかやめてまえ
451 :
774ワット発電中さん :2005/11/13(日) 13:57:07 ID:csSNxEiS
>450 何でだ?
452 :
449 :2005/11/13(日) 15:34:41 ID:06zjSvgr
自己レスです。一部自己解決しました。 というのも遅延シミュレーションを行った場合に正常な結果が得られました。 が、順序回路は遅延シミュレーションでないとシミュレーションできないのでしょうか? デルタ遅延があるので通常のシミュレーションも出来るはずですが・・ 遅延シミュだと時間がかかってしまいます。
XXXX+0001=XXXX
454 :
Niffy :2005/11/13(日) 15:51:43 ID:Gs1keiua
HIHI
455 :
Niffy :2005/11/13(日) 15:52:05 ID:Gs1keiua
Anybody here??
457 :
448 :2005/11/13(日) 16:27:17 ID:06zjSvgr
>>456 >>453 なるほど、いま読み返したところP247に、まったく同じことが書いてありました。
お騒がせしました・・
また軽石みたいなリセットしない香具師が...。 どうしてリセットしないの...面倒だから?。 その面倒に付き合わされる人の事も考えて、今度からリセット入れようね。
今回のケースとは別だけど、合成後の面積を稼ぐために最終段他特定の箇所にしかリセットをいれないことはあるよね。
460 :
774ワット発電中さん :2005/11/14(月) 19:33:59 ID:4EJ90OtY
なんでこうリセットをないがしろする奴が多いんだろう。 >>合成後の面積を稼ぐために最終段他特定の箇所にしかリセットをいれないことはあるよね。 ありえない。 お前が部下ならクビ
順序回路ならリセットは必須だよ 無用なトラブルを避けたければね。
仕事じゃないからなんでもできるんだろ。いーじゃねえか自由で。
ちょっと言い過ぎたかもしれないのではじめにあやまっとく。
>>462 が、遊びならそれでもいいが、
>>459 みたいな発言は軽石やなひたふとかも
平気で掲示板だったか日記に書いているワケよ。
仕事じゃないからイイとかさ。
会社で4年目の若い奴がなひたふのデザインウェブ付録の財用パラレルケーブル
の作り方をそのまま製品にいれてレビューで指摘したら「なひたふウェブに乗ってた」
と言って、疑いもせずに回路に遣うんだよ。まー社内レビューでわかって
直させたけれど名。
ああいうのを慕ってなひたふ最高!とか軽意思サマ〜〜〜という連中が居ると
思うと、世も末だとおもうしますます俺たちジジーとガキの差が開くワケで
会社の企業年金でオマエラに食わせてもらわんとならんのに会社がイケナイ
方向に行っちゃうのを心配しているワケなのよ。
ということで
>>448 よ、初期化処理はきちんとしておくことね。
配置配線後のシミュレーションでちゃんと波形が出たとしても残念ながらそれは
偶然の傾向。詳細はこのスレッドの過去ログを読んでくれ。
464 :
459 :2005/11/14(月) 21:42:56 ID:3Mly5oWi
リセットをないがしろにするつもりはないんだけど、占有率がきびしいのでそういうことをしたよ、という話です。 要所にはいれるし、検証や設計も注意は必要だし、回路構成によっては損をするけれどもね ASIC屋さんでそういうことをした経験がある人は居ないのだろうか。 FPGAのときは概ねメリットないのでしないよw
常識的に考えてリセット回路のない順序回路なんて回路じゃないだろ。どうこう言う前にそういうのはゴミ評価に値しない。 勝手に遊んでるのは自由だ。
466 :
774ワット発電中さん :2005/11/14(月) 22:08:11 ID:4bJ8SezR
FPGAで遊んでるからリセットはしないなぁ 初期値は設定するけど
非同期リセットにしろ同期リセットにしろ、 専用の配線が使われるし、FPGAの中のフリップフロップの特殊な入力に入るから、 リソースは消費しないんじゃないか?
フリーランでも一定クロックで初期状態に戻るなら、 リセット回路はなくてもOKでしょ。 どこかで引っかかるならそりゃ必須だけど。 リセットを使うということは、 外部のリセットロジックにノイズでも乗ったら 回路の動作が吹っ飛ぶってことだからね。 安全を考えたら無条件リセットは危険な物ともいえるのでは? ま、用途により考えることではないですかね。 今回の448辺りの話とは別のレベルの話だけどね。
なんだか4EJ90OtY必死だな。 それはさておき、燃料投下するぞ。 データシートによれば、最近のFPGAのレジスタは特に指定しなけりゃ 起動時に全部ゼロになってるんだが、どうよ。
いつFPGAメーカーの気が変わるかわからないだす。 当てにしない方がいいと思うだす。
最近のFPGAのコア電源とか複数のI/O電源の投入シーケンスを考えたら やはりリセットはあったほうがいいと思うぞ
>>470 それは一理ある
>>471 コンフィギュレーションは電源が全部整ってから開始するし、
コンフィギュレーション後に中でグローバルラインが動いて、
LUTとかのメモリがクリアされるのだよね。
つまり、FPGAの内部レジスタが初期化されるのは、コンフィギュレーション後なのだよ。
それはリセットの理由にはならない。
>>472 > コンフィギュレーションは電源が全部整ってから開始するし、
んなこたない。
コア電源とコンフィグ用I/O電源が安定すればコンフィグレーション始まる。
I/O電源の立ち上がりとは無関係だよ。
コンフィグする前はどのI/Oがどんな電圧に設定されるか不明なんだからさ。
そだっけ?確かにI/Oは無関係だったかもしれない。 しかし、起動時には中身はゼロだよ。 だが、FPGAが起動するって時には、FPGAの周りのCPUやら周辺デバイスやら、 そういうデバイスたちも一斉に起動するわけだから、 WR信号やRD信号が不意にでまくって変な初期値が書き込まれて ステートマシンが変なところからスタートしないよう、 リセットは必要だと俺は思う。 どうよ?
475 :
774ワット発電中さん :2005/11/14(月) 23:04:34 ID:Pt3kOREX
>>469 俺はあるレジスタに1234と設定したいんだ。
FPGAの初期値の設定は怪しいから使わないで書くと、 こんな記述でできないか?試したことないけど IF(CLK'EVENT AND CLK='1') THEN JITTAI <= NYURYOKU XOR x"1234"; END IF; ARUREG <= x"1234" XOR JITTAI; JITTAI(15 downto 0)というのがレジスタの実体。初期化でゼロになる。 ARUREGというのが、欲しい結果。 NYURYOKUというのが入力。
つか、FPGAでもシミュレーション時に『リセットしてねーな?初期値0で開始すっけどいーか?』 みたいな警告が出たな。
リセットは実動作よりも、シミュレーションの観点がひつようかと。 あと、AlteraのHardCopy見たいにASICに移行するとき、初期化できない回路は設計ルールで許してくれないだす。
不定だらけだと、LSIテスタのテストベクタが...って。
リセット書かない奴って動きながら目的値に収斂するようなアルゴリズムでも知ってるんか? リセット回路じゃなくてニュートン法でも使ってるんかい?それならわかるが。
リセットが全く無いのも問題だが、 463みたいな奴もちょっと問題。 おそらく463はリセット時に中で何がおこるか仕組みを詳しく知らず(理解できずor考えられる)に、 何にでもリセットを入れちゃえばオッケーてな具合に思考停止に陥ってしまったのだろう。 まあ若いときにリセットで苦労したか何か、そんなとこだろ。
vhdlはじめてみて、process文で混乱しています。 process (sel) begin case sel is when '0' => hoge <= '0'; when others => hoge <= '1'; end case; end process; ↑この場合、selが"変化"したときにcase文が実行されるんですよね。 例えば、電源投入→リセット解除から、10秒後にはじめてselが変化したとき、 その10秒間のhogeの値はどうなるのでしょうか。 verilogで、always@(sel)という回路(= clockの無いalways文)は仕事では見たことありません。 必ず always@(posedge clock or negedge nreset)です。 しかし、vhdlでは、process (sel) のような記述をよく見かけます。不思議だな、と。
と、早速初期化してくれない訳だ...。
484 :
482 :2005/11/15(火) 01:59:00 ID:qVW2XBBB
ええと、もしかして、自分がよく見るというprocess (sel)という書き方は一般的ではないのでしょうか? 自分的には、 always@(posedge clock or negedge nreset)と同じく、 processはevent clk(+リセット)でしか使いたくないなと思っているのですが。 でも process (sel)は3人の先人たちの記述で見かけたので、vhdlでは普通なのかと混乱してます。
>>481 オマエ、エスパーみたいな奴だな
そこまで想像できるんだ
たぶんオマエさんの100倍は業務で苦労して10歳以上オッサンだが、2.0uMの
プロセスやFPGAの立ち上げ時期に携わっていたことを誇りに思うよ。
メタスタ対策にGDSファイルいじったり、FIBでパッチ充てたりと楽しかったぞい。
オマエさん、やってみるか?一気に電源投入直後とかのシリコンの挙動が勉強
できるぞ?でもいまのプロセスではFIBも充てれないし電子顕微鏡見てもわから
んと開発部の同僚が言ってたがな。
はいはい
>>485 =463さん、昔は偉かったのね。わかったわかった。
あれもやりました、これもやりました、って自慢話はもういいから、
年相応に大人しくして下さいな。
>>482 その構文は普通に書くよ。
たしかにVerilogではalways@(sel)は出来ない。なぜならalwaysはレジスタ宣言した信号しか
扱えないから。processは(あえて言うならばVerilogにおける)レジスタ型/ワイヤ型の
両方をセンシティビティリストで列挙できるから。
よって、上の構文は大丈夫だよ。
> 例えば、電源投入→リセット解除から、10秒後にはじめてselが変化したとき、
>その10秒間のhogeの値はどうなるのでしょうか。
本来の意味では「変化したとき」にprocessの中身が評価されるが、起動直後から
SELを評価するという解釈しかできないから、上の回路は動く。
でもシミュレーション的にはSELが初期化されていないから不定というのが正しい
解釈。
だからVHDL言語ではVHDL95のときにport( 〜 )の信号宣言部位で初期化が出来るようになった
のだ。
entity TEST is
port (
SEL : in std_logic := '0' ; <--- これ。
|
)
end TEST ;
>>483 さんが言っていることはこれ。
ただし厳密にやろうとすればここまで書ける。
これ以上このあたりを書くと身元がばれそうだから、カキコやめとく。
あとは適当に本を読め。
>>486 経験に裏打ちされた技術がないと、必死だな。
あと10年したら年金生活だから、よろしくな。
経験がすべて正しいと信じ込んで、 柔軟な発想ができなくなってしまうのは悲しいよね。 10年後、そういう人にはなりたくないな。
>>487 alwaysで組み合わせ回路を記述することもできるはずですが…
まぁコーディングスタイルが決められていて482のところでは
functionで記述されているだけでは!?
どうヒイキ目に見ても、思考停止してるのは
>>463 じゃなくて
なひたふ/軽石の言うことを疑いもせず盲信してる
>>463 の部下じゃん?
どうしてこうしたの? って問いに部下がなひたふ/軽石を持ち出さずに
自分の言葉で論理的に理由を説明できたなら
>>463 も苦言を呈すまい
ここから流用しましただけで終わらせるようなら
ああこいつ無能なんだって評価されてもやむをえない
463の書いていることも非常におかしい。
第一、軽石がリセットしないというのは、ただの2ch上での噂で、真実かどうかはわからない。
それになひたふのデザインウェブ付録の財用パラレルケーブルとあるが、
デザインウェーブ1月号のFFTの記事にはそんなのはみあたらない。
思考停止というよりは463と部下の脳内で何か勝手に作り上げてないか。
それに、
>>491 も軽を流用というが、どこに流用できるネタがあるのだ。
はい、リセットの次の方どうぞ。
>>492 なひたふの「デザインウェーブ付録のザイリンクス」用パラレルケーブルであって、DWに書いてあるわけじゃない。
なひたふのhpへ逝けよ。そうすりゃナニがおかしいかわかるってもんだ。
軽石の件も「軽石ふぁくとりぃ」やFPGABBSの過去ログ見れば噂かどうか判別つくが?
二次資料ばかりみて、(元資料にもあたらずに)「あれは違う、これは違う」というの”も”開発者にあるまじき態度だと思うがいかが?
なひたふ>>>>>>>>軽石 あえて同列に扱って貶めようとしてるとは・・・、自演か?
まぁ熱くなるな。 FPGABBSで「VHDLなら初期値を設定できます」って書いたあの発言が発端だろ。 リセットに関しては、あの掲示板でのあの1件の発言以外は、本人の発言や記事はなかった。 それが、2chで尾ひれがついて、リセットしないと誰かが勝手に決め付けたわけだ。 それに、なひたふの「デザインウェーブ付録のザイリンクス」用パラレルケーブルって何よ? w
>>496 あの掲示板以外にもいろいろあらあなw
なひたふの件も”w”おきらくにつけていいねえ。 って自分で調べてみな。
レジスタを初期化するのは当然として、 ブロックRAMは全部初期化してます?
RAMってリセットできんの?
500 :
774ワット発電中さん :2005/11/15(火) 20:18:18 ID:OsKjKfgh
FPGAに関係無いが、リセットと言えば 2年ほど前にJAXAの三角翼実験機が発射時のGでスルーホールがフレームと 接触して電源落ちてリセット->ボルト切断火薬点火 となっていたが、なんでリセットするとそんなシーケンスに入れたんだろ。 FPGAネタに戻すと漏れは必ず非同期RESETを入れるように癖付けてるな。 RAMは何も指定しないと0になってたような、どっかにオプションあるんだろうかISE
501 :
498 :2005/11/15(火) 20:55:58 ID:NKdy9e04
>>499 もちろん、一発ではリセットできないのでクリアしたい場合はループで。
>>500 何も指定しないと0ってのは起動時だけで、その後リセットしたいときの話。
>>501 >一発ではリセットできないので
ソースきぼんぬ
全領域に0書き込めってこと?めんどくせー!
例えば、スパ3のマニュアル(ds099)。
blockRAMはコンフィギュレーション時に既定値を入れることはできるが 動作時に一発でリセットすることはできない。
>軽石がリセットしないというのは、ただの2ch上での噂で 面倒=やってないなら事実かな。 ま、ダウンロード後には確かにやんないけど、Config後はCPUにやってもらってます。 プログラマブルで数百mSのリセットICほしいね。 てか、FPGAに入れてちょ、Coreのレギュレータも。 HumanDataの掲示板 [193] re:FPGA初期化 投稿者:軽石 投稿日:2005/10/11(Tue) 12:52 良心の人さん補足ありがとうございます。 デバイスによっては駄目な場合もあるんですね。 良心の人さんが確認しているデバイスとかあったら教えていただければありがたいです。m(_._)m 記述方法が書いていませんでしたので、書きます。 Signal hogehoge :Std_logic_vector(7 downto 0):="00001111"; 後ろに:=値で設定できます。 Web PACK 7.1 Spartan3でダウンロード直後に内部レジスタhogehogeを初期化(設定)できている事を確認しています。 確実にするにはリセットが必須だとは思いますが、初期値で設定できると楽なのも確かです。 FPGAの場合ダウンロードが終わってからリセットを与えないといけないので結構面倒です。
>>506 推測の域を出でないじゃんw
そいえば、あと10年で年金とか言ってるジジイもいたが、
50代にもなって2ちゃんで叩きなんてやるなよ。みっともない。
>確実にするにはリセットが必須だとは思いますが、初期値で設定できると楽なのも確かです。 これをどう解釈するか...。まいいけど。 >50代にもなって2ちゃんで叩きなんてやるなよ。 団塊の基本特性だからねぇ...。 脳より脊髄反射で生きてる...。 団塊で景気浮上!とか世間でちやほやすると、さらに図に乗りそう。 あと、”めんどくさい”もこの辺の年代の行動原理だよなぁ。 しわ寄せこっち来るんですけど。 不安定な回路に四苦八苦。ファーム屋さん気の毒。
プログラムじゃないんだから、ステートもはっきりしないまま。初期値設定なんてありえないんだよアホ
確実にリセット云々より、動作した後で、リセット信号を与えた場合、どうするのか考えてみろ。 今度はその前のステートの状態をひきずったまま走るのかよ。
>>506 > プログラマブルで数百mSのリセットICほしいね。
> てか、FPGAに入れてちょ、Coreのレギュレータも。
たしか LatticeのFPGAにはこの手の機能が入ってたはず
FPGAってのは、ユーザロジックが起動する前に コンフィギュレーションシーケンスという偉いステートマシンがすでに動いていて、 その最後の過程でユーザ用のフリップフロップを望みの値に初期化してくれるものなのだよ。 彼が言っているのは、その初期値の設定のことでしょ。 それに、コンフィギュレーションシーケンスは、 XILINXではINITというリセット信号を否応無しに使って起動しているわけだ。 FPGAのユーザロジックなんてものは、 XILINXやALTERAが準備万端に用意してくれた箱の中で動いているだけなんだよ。 言うなればOSとユーザタスクみたいなもの。 ただ、FPGAによって初期化してくれるかどうかは微妙にことなるから注意しないとな。 実使用上の面でみれば、そりゃ皆殺しリセットを入れれば、余計な心配はしないですむし、 FPGA以外の全部のデバイスが立ち上がった頃にゆっくりリセットかけるということもできる。 それに、他のデバイスへの移行する場合にも、このデバイスでは初期化できたっけみたいなことを考えなくてもいい。 デザインレビューも通りやすいし、トラブったときの言い訳にもなる。 そういう問題を避けるためにリセットが必要だというならわかるが、 74ロジックみたいにリセットしなきゃステートマシンが不定だとか、 初期値が不定だというのは、FPGAで通用しない。
要求してる初期値が全部0とか全部ffで、しかも、動作途中で再初期値設定をする必要がないとかいうなら、
メーカが用意したリセットシーケンスだけでいい特殊な場合があるかもしれないが、
>>512 が言うステートマシン云々でいうと
メーカ標準リセットステート ---> ユーザ個別のリセットステート <--> etc....
こういうことだろ?仮に初期値がall 0でよくても "<-->"で書いたが、all 0に設定するユーザ個別に用意するリセットステートは
必要だろ。
>>513 話が紛糾しているポイントはそこなんだよね。
軽さんが書こうとした初期化の方法も、そこの初期化の話なわけだよね。
その話と、リセット前のデバイスが不定だという話を混同してしまっている奴がいるわけだ。
苦い経験をしてきたためだろうか、ASIC屋や74ロジック屋には、
メーカーが用意したリセットは気持ちが悪いらしい。
それゆえFPGAの「ユーザロジック」も初期値が不定で、絶対にリセットが必要だと思ってしまう。
中には不定なFPGAもあるのだろうが、初期値の決まっているFPGAも少なくない。
XILINXの最近のFPGAでは、UCFファイルとかVHDLにattribute使って書けば、
各レジスタの初期値を設定できなくはない。
ただし、ツール依存、デバイス依存の設計になってしまうのは否めない。
ユーザレベルでのリセットをかければ、初期値は思いのままで、移植性も高い。
おそらく、それがトラブらないもっとも簡単確実な方法であるのは事実。
>>514 FPGAからASICに転換する場合を想定しておくことは悪くは無いと思うけどね。
おれの会社のプロジェクトでもFPGAからASIC作るというのはちょくちょくあった。
で、ユーザーが明示してパワーオンリセットをかけるとまずい場合というのは
どのくらいあるのだろうか。
ちょっと疑問。
516 :
リセット上等 :2005/11/16(水) 10:54:29 ID:x7FD3lGo
>>515 >FPGAからASICに転換する場合を想定しておくことは悪くは無いと思うけどね
だから、ツール依存、デバイス依存だって書いてあるでしょ
移植を考えるなら、ユーザレベルの明示リセットを入れればいいじゃん。
>で、ユーザーが明示してパワーオンリセットをかけるとまずい場合というのは
誰も明示リセットをするなとは言っていない。
XILINXのFPGAでは、リセットはSLICEの横から入るから、
ユーザ用の入力信号を占有しないんじゃなかったか?
だったらリソースの消費にもならないし、大いにリセットかければよろし。
ただ、
>>463 ,
>>465 ,
>>480 ,
>>485 みたいな凶暴な発言はよくない。
そりゃあなたの設計している(た)超先端の高度なデバイスでは
リセットしなきゃ全くの不明状態からはじまるのかもしれないけど、
そういうデバイスだけが全てじゃないのよ。
517 :
513==465==480 :2005/11/16(水) 11:15:35 ID:zyt0AT9A
>> ID:x7FD3lGo だから、仮にメーカ標準リセットが0クリアしてる場合もユーザが個別のリセット回路を用意するのは当然だと言ってるんだよ。 それを用意しないようなステートマシンは遊びで作るのは結構だが、ゴミ同然だ。 それをリセット回路というかイニシャル回路というかは別にしてだ。ステートの開始ポイントをユーザが明治せずにいったいどこから 始まるんだよ。メーカの用意したリセットルーチンのその次に開始されるお前の回路のステートはいったいどこなんだよ。
518 :
リセット上等 :2005/11/16(水) 11:20:26 ID:x7FD3lGo
>> ID:zyt0AT9A 頭悪いな、まだ理解できないのか? お前、もう、回路やめたほうがいいよ。
519 :
774ワット発電中さん :2005/11/16(水) 11:25:31 ID:zyt0AT9A
>>ID:x7FD3lGo 長々と、論点の明確でない、糞レス書きくさって、、 そんな考えでテメエの作った回路そのものが糞だといってるんだ。 よくそれで飯食わせてもらってるなこのアホが。人に迷惑かける前にさっさと死ねや。ボケが。
520 :
リセット上等 :2005/11/16(水) 11:30:11 ID:x7FD3lGo
馬鹿の一つ覚えならぬよう、気をつけましょう。 リセットは柔軟に。 ということでFA
アホのお前に少なくとも製品レベルの設計は任せられないということでFA ステートの開始ポイントすら人に説明できないようじゃ話にならん。そんな奴は死んでしまえ。
まあなんにせよリセットや初期値ははまりやすい部分だし、あんまり手抜きしちゃいかんよ、 手を抜くときは気合い入れて手を抜けよって感じかなw ところでもまいら、リセットのsetup/holdってどうやって保証してる? クロック止めるしかないんかねぇ FPGAとかのリセットってバッファリングされてるのかな(CTSみたいに) ログ見てるとなんかReset IOからバッファ無しで直結っぽく見えるんだけど,,,
>>519 つーかこの流れでageてるとこをみるとDQNか荒しなんだろうが、
動作途中で初期化する必要がなくて、デバイスが自己初期化するなら、
外部ユーザーリセットが必要ないのは自明だろ。
デバイスが自己初期化して動作始めてしまえば、
その後の動作途中で初期化する必要がないって条件でいってるんだから。
もしかしてID:zyt0AT9AはXinixみたいなFPGAの自己初期化は、
全FFが0(あるいは1)に固定されるだけだとでも思ってるのか?
ならFPGAのデータシート読んで勉強しなおすほうがいいと思うが。
>>521 つーかFPGAが自己初期化が終了した時点で、
ユーザーが設定したステートの開始ポイントから走り始めるじゃん。
何が問題なのよ。その後に外部から「スタートに戻る」しなきゃならんなら、
そりゃ外部リセットが必要なのは自明だが、そうでないなら何も問題なかろうに。
525 :
774ワット発電中さん :2005/11/16(水) 11:55:53 ID:zyt0AT9A
ID:x7FD3lGo 出てこいや。
>>523 これまでさんざん初期化を明示しない回路作ってきたんでゴミだと言われると痛く傷つくってか?
ゴミなんだよ、お前の回路
>ユーザーが設定したステートの開始ポイントから走り始めるじゃん。
その開始ポイントで何やってんだよ。脳内ステートで空か?お前のオツムごとく。若しくは純粋仮想ステートか?
>>526 だから初期ステートはFPGAへの制約条件の形で明示してるじゃん。
外部リセット直後と、FPGAの自己初期化直後で、
FPGAの内部状態が全く同じだとしたら、
ステートマシンの状態としても全く同じじゃん。
あ、全然関係ないけど
>>525 とか、
もしかして俺がID:x7FD3lGoだとでも思ってるわけ?
死ねとかゴミとか出てこいやとかageながら書いてるとこみると、
相当ファビョってるみたいだけど、デスマーチの最中なのかね?
528 :
リセット上等 :2005/11/16(水) 12:13:22 ID:x7FD3lGo
>>527 ID:zyt0AT9Aは相手にしないほうがいいよ
駄目だこりゃ。
たぶん、昔リセットで失敗して苦労して、先輩に怒られ叩き込まれたんでしょ。
そのときの感覚がまだ抜けない。
難しいことを考える能力がない人にはオールリセットはお勧め。
オールリセットは間違いじゃないけど、臨機応変にね。
>>527 >外部リセット直後と、FPGAの自己初期化直後で、
>FPGAの内部状態が全く同じだとしたら、
>ステートマシンの状態としても全く同じじゃん。
仮に同じであっても、明記するのが製品だ。もしそれをしないなら、仕様書に使用するFPGAのメーカリセットの仕様を明記して、
同じであるから省略した旨、人にわかるようにきちんと伝えるのが仕事として当然の手順だ。
それをしなければ検証したかどうかも第三者には伝わらん。
>>528 まぁ、こういう奴の作った回路は製品に値しないから絶対真似しちゃだめだな。
ID:x7FD3lGoよ。頭の悪いたわ言を延々書き込むな鬱陶しい。目障りなんだよお前。
リセットを入れないとまともに動かないロジックしか作れない 529みたいな奴は相当腕が悪いよね。
つ、目的が正しければ手段は正当化される。 N.マキャべり
>>516 Destination infiniteですか?ムキになってむやみやたらに喧嘩売らないでよ。おれは463〜485とは別人だよw
おちつけ。
だれが本当のことをいっていますか? それがわからなければこの話題自体も糞
>>535 「俺は嘘つきだ」
「俺以外は全員嘘つきだ」
「みんな嘘つきだ」
all true
「軽さん」て自分で呼ぶのはどうかとおもうぞ。 安藤美樹じゃあるまいし。
538 :
774ワット発電中さん :2005/11/17(木) 15:05:20 ID:EG26Vznn
>>534 まぁこういう>> ID:x7FD3lGo アホは有害だからほっといた方がいいよ。
zyt0AT9Aしつこい。 いい加減消え失せろ。
540 :
774ワット発電中さん :2005/11/17(木) 21:17:11 ID:nszTmrbc
よっぽどゴミ回路を指摘されたのが悔しいようだな。 おまえ自身がゴミだからさっさと死ねよ。中卒ゴミ
ID:x7FD3lGo って軽石同様、順序回路にリセット回路も入れないってあほのことか?つける薬なし。
リセットは保険。99%の動作可能性を100%にするのが本来の目的。 保険をかけないのも問題だが、リセットしないとほとんど動かないのはもっと問題。 俺ならそんなIC買わない。
起動時にリセット信号を確実に発生しないような回路を設計する奴がバカなんだよ。マヌケッ
設計によってはリセットを起動時以外にも使うことがあると思うんだが…
>>535 非技術的な理由を
>>529 で持ち出してきた時点でzyt0AT9Aの敗北だろ。
FPGAのメーカーリセットの使用を明記して同じであるから省略うんぬん、なんて、
FPGAのデータシートを読んだこともない素人向けの仕様書にならともかく、
プロの回路設計屋相手ならFPGAのセルフリセットの仕様ぐらい当然知ってるはずだから、
外部リセット不要と一言書いておけば、それで伝わることだしね。
>>544 もちろんそういう場合は外部リセット必須。ここで問題になってるのは、
もし外部リセットがあったとして、それと同じ内部状態に起動時セルフリセットするFPGAで、
それでも起動時に外部リセットは必要か
ってこと。
>>546 設計した回路がFPGAだけでしか動かないものであれば、外部リセットを考えなくても良いとまではいわないけどありかな。
でもASICのプロトタイピングツールとして位置付けるのであれば外部リセット必須。
ということでいいんでない?
>>546 >もちろんそういう場合は外部リセット必須。ここで問題になってるのは、
それはお前が勝手に限定しているだけだ。勝手なことをほざくな。
イニシャル込みでリセットを検討するのは当然だ。
まぁ、それがわからんID:x7FD3lGo のような誰にも支持されんリセット不要を必死にホザいてるアホって、
軽石本人か?もしくは軽石並みってこったな。もう消えろ。邪魔だから。
大体FPGAのメーカリセットをユーザ回路の中でやってどうするよ。アホかホンマに。 そこからして軽石同レベル
論点がだんだんずれてくるのはじじいで耄碌してるから? 新しい技術を理解できずに過去の栄光だけで生きてる 勘違い管理職に多いタイプだよな。 誰にも支持されてないのはお前だし、 軽石と同レベルのこだわり方してるのもお前だろうが。 狂人は出てくるなよ。
>>547 まぁ、アマチュア相手にそんな確認求めても仕方ないよ。プロの仕事したことのない奴に何を言ってもかみ合わん。
無駄なだけだ。お遊びやってんじゃないんだから。
>外部リセット不要と一言書いておけば、それで伝わることだしね。
話にならんね。こいつこんな仕事の仕方でよく金もらってるな。ほとんど詐欺だな。内仕と外仕の違いも分からんDQNとみた。
まぁこいつの仕事ぶりは推して知るべし。トラブル続きで周りが尻拭いに明け暮れてるんだろうな。
そもそもエンジニア云々じゃなく、社会生活できんやつだわ。ゴミ拾いでもやるのが分相応。
相手にするな。Qだから。
>>552 >新しい技術を理解できずに過去の栄光だけで生きてる
リセットが新しい技術とは片腹痛いわ。
>勘違い管理職に多いタイプだよな
大丈夫お前のような低レベルのアホは管理職には就けんから安心しとけ。
多分同じようなことを上司に言われてるんだろな。大したスキルもなければ、注意力にも欠く、
コミュニケーション能力も無ければ、プライドだけは山ほど高い。手に取るように分かるよ。
そしてつくづく同情するねお前の上司と、給料支払う羽目になって簡単に首切れないお前の会社。
ほんとに可愛そうだね。皆のためにさっさとやめろよ。組織の癌なんだよお前。
なんか思うんだけど、絡んでる方も絡まれてる方も 同じ人間っぽいような気がしてならん。 しかもどっちも軽石の自演くさい。
同じ穴の狢 団栗の背比べ 類は友を呼ぶ 能ある鷹は爪を隠す
自演荒らしっぽいな
男優の鷹さんって深爪になるほど爪詰めてるらしいよ
560 :
774ワット発電中さん :2005/11/18(金) 23:30:56 ID:GnYqV4ca
トラ技の付録(予定)MAX-IIについてのスレはありますか
このスレも 【ARETERA】
馬鹿同士の喧嘩は詰まらんな
あぼーん
あぼーん
あぼーん
軽もさすがに息切れか。
ふー、やっとリセットに関する議論を全部読んだ。終わった話なのかもしれないけど、 今のFPGAは外部リセットいらないとおもいますよ。 FPGAメーカーの評価ボードとかでもコンフィギュレーションを開始するための 外部リセットはあっても、コンフィギュレーション直後にさらにリセットの ための外部リセットなんて見たことない。 何が何でも外部リセットが必要というのは、ゲートICを並べてロジック回路を 組んでいたころの話では?
FPGAがリセットを出すと思ってました。
System Cも仲間に入れとくれ。
VHDLで記述した回路を回路図の形で出力する方法を知っている人がいたら教えてください。 自分が書いたVHDLで、意図通りの回路が生成されているか確認するのが目的です。
自動出力される回路じゃだめ?
572 :
570 :2005/11/20(日) 18:44:20 ID:bT+BYqQl
>>571 自動出力とはどういうものでしょうか?
私が無知なだけだったらすみません。
合成ツールが吐き出したネットリストを嫁 というのはあんまりか。 しんぷりふぁいとかの合成ツールなら合成後の回路図普通に見れるよね。 ACTELのLiberoでも見れたような気がする いまISE7.1 WebPack立ち上げてみたんだけど、Synthesize>View Technology Schematicてのが それっぽいから試してみては? そして報告してクレwww
>>570 自分が書いたHDLなら脳内にあるだろ。
その脳内どおりに合成がなってることを確認したいんだろ。でふぉでSynplify使ってたけど
>>573 の言うようにXSTでもちゃんとあるじゃん。ISEはSynplifyのエラーメッセージを解釈してくれないからXSTに乗り換えよかな。
>>572 は未だISEのいろんなとこクリックしつくしてないだろ?まぁあっちこっちクリックし倒すことだな。
いいかげんうさくなってくるが、我慢していじってると機能が見えてくる。
576 :
570 :2005/11/20(日) 22:07:54 ID:bT+BYqQl
>>573-575 Quartus2とLiberoとispLeverの開発環境は構築出来ているので、
(全部フリーライセンスですが)もう少しいろいろとクリックして探して見ます。
Latticeのデバイスを使っていて、一応回路は動いてるので大丈夫だと思うのですが、
VHDLで設計をするのが初めてなので、本当に意図したとおりの回路が出来ているのか不安なんです。
回路規模も小さいし、見られるならどんな回路が生成されているのか見てみたいとおもいまして・・・
>>576 いやいや、
>>573 の言うことちゃんと読んだ?
>ISE7.1 WebPack立ち上げてみたんだけど、Synthesize>View Technology Schematicてのが
俺は製品版で同項目があるのを確かめたけど
>>573 がいうにはWebPackにもあるって書いてるじゃん。
うむ さすがに自宅には製品版いれてないのでなw くおたすではみてないけど、多分ある予感 らてぃすはつかったことないので知らない で、回路を確認したいという主張はもうみんな理解してるので再度主張する必要はないw がんばってみんなのレスを100回ほど読んでみるべし。 環境かいてなかったからISEに賭けたんだけど外れたなぁw
ここでソース晒してみればみんなが回路図にしてくれる
>>576 Quartus II 5.1でもRTL Viewerがあるけどこれじゃあかんの?
>>576 合成後のネットを図面でみたいのか?
無意味だからやめれ。
綺麗にゲートレベルの図面を出力するツールなんて
この世にはないよ。
どうしてもというならDebussyを何百万出してくれる
がっこの先生か会社の上司かわからんがだしてもらいなさい。
同期設計してる限りは波形とにらめっこしてるうちに、そんなの無意味だとわかってくると思われ。
図面を出力するツールなんて他人の書いた過去の非同期設計を検証する
地獄をみてからにしなさい。
まあ、意図したとおりの回路ができないこともあって確認することが無意味なことを 悟ることは決して無意味ではないであろう、といいほうに考えてみる。 Cで書いたコードを毎回逆汗するようなもんだな
考え付く限りのテストベクタを書いてチェックって方向の発想しないとダメっぽ
>>584 検証済みの回路を引っ張ってくるのが正解。
間違った状態に遷移しても正常な状態に速やかに戻れるのが理想
>>586 間違った状態(書き込み)しても開き直るのが現実なのね?w
正常な状態 → 遷移 → 間違った状態 → 遷移 → 正常な状態 ↑いまこのへん
ひとつ曲がり角 ひとつ間違えて 迷い道 く〜ねく〜ね〜
2chのスレの状態遷移図っていつもこんな感じなんだよね 1)質問 ↓ 2)回答 ↓ 3)叩く香具師が出てくる ↓ 4)雑談が始まる→(2)へ ↓ 5)まともな回答が出る ↓ 6)みんな黙る
6)間違った回答を正当化しようと粘着する奴がでてくる ↓ 7)疲れるまで言い争い
>>591 エロイ奴は7)疲れるまで言い争いの後に出てきて仕切る。
593 :
774ワット発電中さん :2005/11/25(金) 10:21:34 ID:MZXYiZN2
>図面を出力するツールなんて他人の書いた過去の非同期設計を検証する >地獄をみてからにしなさい。 何この漏れが退職した理由 オマヘもしかして漏れの分身?
594 :
774ワット発電中さん :2005/11/25(金) 12:24:20 ID:VUApj2n/
軽石さん、いい加減にしてよう(´・ω・`) 生協の白石さんみたいに、笑える語録集ができるがな。
お前の回路を検証すると言われて不眠症になりました。
>>596 気の利いたやつなら
そこで腱鞘炎になる。
598 :
774ワット発電中さん :2005/11/26(土) 13:08:39 ID:lZtl69Wz
質問させてください。 (VHDL勉強中の初心者です) プロセス文のセンシティビティリストについてですが、 このセンシティビティリストを書いても書かなくても論理合成ツール(今使っているのはXST)は、 警告は出しますが、同じ回路を出力します。 センシティビティリストは何のためにあるのですか? もし正しく書かなければ出力回路が異なる例があれば、その例を教えてください。お願いします。 (実験例) EX1: process(A) if (A = '1') then B <= C; end if; end process EX2 ; EX2: process() if (A = '1') then B <= C; end if; end process EX2; 上記、EX1とEX2は実際に同じ回路を出力します。
599 :
774ワット発電中さん :2005/11/26(土) 13:12:57 ID:lZtl69Wz
訂正、 実験例の一つ目 誤) end process EX2; 正) end process EX1; すみません。
センシビティリストはその信号線に変化があったときにそのプロセスが動くという解釈で書く。 シミュレーションはそういう解釈でいいが実際の回路ではポーリングしてるわけではないので、 思ったとおりに動作しない回路が出来上がるかもしれん。 process内部でセンシビティリストに列挙した信号線をいじるような場合は注意が必要だ。 つーかそういう回路は書かないほうがいいね。
>>582 うちの会社ではDebussyだなぁ・・・必須。あとはspyglassも・・・
うちはDebussyで出来ることはDebussyでしか出来ねぇ(他のソフト無い)から、 ちょっとした作業でも重くてかなわん。ライセンスも少ねえし。 大は小を兼ねるにも程があるっつーの。
うちはChopinで出来ることはChopinでしか出来ねぇ(他のソフト無い)から、 ちょっとした作業でも重くてかなわん。ライセンスも少ねえし。 大は小を兼ねるにも程があるっつーの。
604 :
774ワット発電中さん :2005/11/27(日) 04:20:41 ID:oVa/9WcN
うちの会社ではBachだなぁ・・・必須。あとはkgbbottleも・・・
>>598 まあ、最近の合成ツールはかかなくても合成できる。
これは想像での話だけど、ユーザーの記述したセンシティビティリストは信用してないと思う。
コンパイラによってはセンシティビティリストの過不足を指摘するぐらいだからね。
まあ、合成されると想像していた回路の解釈とはちがう解釈をコンパイラがして、それを
センシティビティリストの過不足エラーから推測することはできたりすることがあるようなないような。
(そんなケースは未経験だけど)
ちなみにシミュレーション上では違いが出る。ModelSimではセンシティビティリストに書いてない信号は
変化しても無視される。つまり、EX2ではB<=Cが未来永劫実行されない。
コンパイラ、と書くとあれかな。コンパイラ→合成ツール、と読んでね。 細かくてすまんが。
607 :
774ワット発電中さん :2005/11/28(月) 00:58:52 ID:3DkgujRu
質問させてください。Verilog勉強中の初心者です。 XilinxのISEの使い方にも少し慣れてきて、 なんとかエラーも少なくなってきて、考えたように動くようになってきて、 HDLが面白くなってきたところです。 数をカウントするとき、count <= count + 1; と記述しますが、 Cで言う count++; のような書き方は Verilogではできないでしょうか? count+=2; count*=2l; とかも書きたいのですが、これもだめなんでしょうか? また、x <= count % 10; (countを10で割ったときの余り)とかが、 使えるかどうかを調べるには、ISEのどこを見ればよいのでしょうか? 関数というかコマンドリストみたいなものが、どこにあるのか.... 以上、宜しくお願いします。
>>607 Verilogのランゲージリファレンスはなかったかな?
たぶんヘルプはザイリンクスのサイト上かも。
一番いいのはVerilogを扱っているサイトでLanguage Referenceを探す。
609 :
774ワット発電中さん :2005/11/28(月) 02:11:50 ID:3DkgujRu
「ランゲージリファレンス」ですね。この言葉がわかりませんでした。 調べてみます。ありがとうございました。
ランゲージリファレンスなんか読んでもわからんだろ。HDLに限らずコンピュータ言語の規格書なんて独特な記法でそれに慣れるのに一苦労だ。
よっぽどのマニアか、シミュレータとかツールでも作る香具師でないと必要ないよ。
一般ユーザならそんなの読むよりVerilogの解説本読めば
>>607 が必要としてる情報はほとんど載ってる。
611 :
774ワット発電中さん :2005/11/28(月) 02:52:58 ID:3DkgujRu
607です。ありがとうございましす。 解説本でしたら、何冊も持っています。(買っただけ?) が、ソースの例は数多く見られますが、a++; などの表記については、 どの本にも書かれていませんでした。 Cでは、小型でちょっと厚めの「C言語辞典」というのを重宝しているんですが 「Verilog言語辞典」みたいなのがあればいいなと 思っています。
書かれてないというのはそういう書式は許さないんだよ
普段C++その他「高級」言語を使ってると うっかり書いてしまうことはある。 別に無くても困らないけどね。
>>607 きみはcounter()を使いなさい。
>>610 独特の記法といわれてるけど、BNF覚えるのは簡単だと思うけどなあ。
K&RのThe C Language(2nd edition)は(後半)規格書だけど、まともなCプログラマで持ってないやつは、いない本。
74ロジックにしろ、トランジスタ・ダイオードにしろ規格書は必要だぜ。
そうか。最近は無手勝流でやってるやつが多いからまともにプロジェクト進行しないのかw
>>616 K&Rを規格書として持ち出すとはあきれかえるね。あれは立派な解説本だ。著者の個人名が記載されてる規格書か?恐れ入った。
しかも特性を要求仕様とマッチするかどうか確認しながら選定せにゃならん部品のスペックを対比させて持ち出してくるとは開いた口がふさがらんね。
規格を読まないから進行しないんじゃなくてお前のような規格本と解説本の区別もつかんマヌケばっか
揃えてるからプロジェクトが収束せんのだろ?
言語の場合は規格にマッチしなければ規格チェッカでもあるコンパイラもしくはlintがWarningなりErrorなりを表示してくれる。
それ以上にHDLは合成ツールが規格以上を要求してくる、規格に合ってるかどうかはそこでチェックされるから解説本以上
のものは通常はなくても特に困らんのだ。さらに解説本なら"Cの書式に似てはいるが++や--は許しません"と注意書きしてるが
規格書には他のプログラミング言語を引き合いに出した注意書きなどしてないはずだ。
まぁ、俺自身Verilogの規格書もSystemVerilogの規格書も持ってはいるが、
>>607 の現状では解説本だけで十分なはずだ。
ちゃんと記載されてるのに、読んでない。
>>617 それとだK&RのSecond Editionは原著も邦訳もAppendixは規格書じゃない。
マニュアルだ。マニュアルが何を意味するかは、
"規格書ではなく、ANSIに対するひとつの解釈です"
とAppendixの冒頭に明確に記載されてる。それすら知らずに抜けぬけとよくも引き合いに出せたなお前。
何物か確認もせず間違いを正しいと思い込んでるような奴がプロジェクトメンバじゃお先真っ暗だな。
人に規格書を勧める前に解説本をしっかり読めや。
リセットじじい降臨? それとも軽石か?
つーかエンジニアって俺が規格だって顔してるヤシ多し
>>617 必死すぎるなw
C言語の成り立ち知ってるなら、K&Rが規格書だった時代だって知ってるはずだよなあ。
2ndEditionの話が不適切だったのは認めようw。
コミュニケーション能力に難がありすぎるのは団塊の世代の特徴か?
>>621 >必死すぎるなw
>コミュニケーション能力に難がありすぎるのは団塊の世代の特徴か?
K&Rの2'nd edition の原著が出版されたのは88年だ。それから17年、その間ずーっとこの本をもって言語スペックと思い込んでて、
それを明確に否定されればわけのわからん戯言でもほざいて、まったく責任の無い俺にうっぷんをぶつけないと人格破綻するってか?
お前の人生そんなもん。
>C言語の成り立ち知ってるなら、K&Rが規格書だった時代だって知ってるはずだよなあ。
ひとから聞きかじった生半可な知識でC言語の成り立ちを語るなどと片腹痛いわ!
あと、
読む奴がどういう気持ちで読んでいるかはこの際関係ない。K&R本にしろStraustrap本にしろは自ら考案した言語を
世に紹介するための解説本であって、言語仕様書ではない
でもよかったじゃねえか?馬鹿にされてもひとつはっきり覚えられて。聞くは一時の恥。挙句にお前が誰かも分からんしな。
感謝しな。
>>607 ちなみにな
[3:0] count のような 4 ビット長のレジスタ・配線があったら
count + 1 はキャリー込みで5ビットになることを
覚えとくとよい。
加算をするのでなく、加算器を生成するのだよ。
count = count + 1; で、左右でビット数が違うってwarningが出るんだけど、 警告されないようないちばんスマートな書き方ってどうすればいいの?
>>607 あと、
> また、x <= count % 10; (countを10で割ったときの余り)とかが、
> 使えるかどうかを
低レイテンシで商・剰余をひねりだせる機構を組み込んだFPGAなんてあるのか?
高速なマイクロプロセッサでも、除算レイテンシは大きいでしょ?
(加減乗算は非同期回路でも組めるけど除算は困難)
除算を行わない代替手段を用いよう。
ちなみに、count % 8 とかだと、count & 7 とほぼ同義なので、
なるべく 10 などのキリの悪い定数を用いず、 2^n が使えるなら
それを用いるべき。
>>624 ヲーニング回避なら
(carry, count) <= count + 1;
とか書くといいかもしれんが、
今度は「参照されないレジスタ carry が消え失せます」類の
ヲーニングが出る悪寒。
困難っていうより無理だわな。 商だけならニュートン法で5〜6クロックでほぼ実用精度は出せると思う。 実質除算回路は使わないから。 ただ、この方法で剰余までやろうとすると、商を使って再び乗算して引き算して・・・になるからさらに要クロック
Boothみたいにいいアルゴリズムだれか発明してよ
628 :
774ワット発電中さん :2005/11/29(火) 01:20:09 ID:8lDJPwCB
>>600 さん。
>>605 さん。
>>598 です。ご回答ありがとうございます。
センシティビティリストはネットリストには影響しないということですね。
このような事を書いている参考書がいまだ見つけられないのが気になりますが、
いろいろ考えてみて、多分正しいのではないかと思います。
どうもありがとうございました。
>>622 ここに、社会人として恥ずかしい奴が一人いる!
おまえじゃああ。
匿名だからと言って、うそまきちらかすのと他人の罵倒はやめような。
諭すならもっと大人な書き込みしな。
621が全てを知ってて煽っている可能性もありうるんだけどねw
630 :
774ワット発電中さん :2005/11/29(火) 11:56:29 ID:3VrDWOI5
>>629 また、ごみか?うざいだけなんだよ。この雑魚
罵倒されなくなかったらもうちょっとまともなこと書き込めボケ
魂が引き合うのかな なんにせよ仲むつまじいのはよきことだ
こら、おまいら30%ゲート数減らせ。出来なきゃ姉歯にたのむ。
黙って頼め。
あんた設計検証済んだ自信あんの。
ターゲットデバイスのマージンを信じろww
タイミングレポート、偽造しろw
最近HDLの話題なくて 喧嘩ばっかりで欝
いちおマジレスもしてるぞ。
なにか効率の良いテストベンチの作成方法はないものかねぇ。 systemCがんばって覚えてみようかな。ツール自体はフリーでDLできるみたいだし。
姉歯 藤田
>>638 ↓ ↓ ↓
・∀・)・∀・)つ (;´Д`)
ケコーン ケコーン
SystemCからRTL呼び出すのか? どういうテストベンチを考えてるか知らんがVerilogやVHDLでSimもかなり書けるだろ。 RTL書いてるのとはふんいきは違うけど。 フィッタに付属のテストベンチャーあたり使って文句言ってるんとちゃうか?
645 :
774ワット発電中さん :2005/12/01(木) 08:13:48 ID:eAbBG69F
>>624 "1"もcountと同じbit数に指定するのはどう?
8bitならば、8'h01 のように。
回路はHDLで作ったけどテストベンチもHDLで作ることを知らんのじゃないのか? HDL設計でエディタ使った作業としては、 回路作成モードとテストベンチ作成モードの2つあるんだけど。 確かに頭を切り替える必要はあるね。
いや、普段はVHDLなりVerilogなりでテストベンチごりごり書いてるんですけどね。 SystemCは検証用につかうのがいいって小耳に挟んだので、書きやすいのかなーとか妄想してみた。
テストベンチそのものはC++ベースのSystemCで書いてもVerilogで書いてもあんまり大差ないんじゃないかな? せいぜいテストデータ食わせるだけでしょ?
オブジェクト指向(OO)っていうのは実在する事象を抽象的なプログラム上で シミュレートするのに意味ある設計手法であって、 アルゴリズムという抽象世界を回路という実体上に構築するHDL設計に有益か どうかあやしい。 OOをプログラムに持ち込んだところでハードウェア効率としてはデメリットが多いわけだし。
誤爆?
時代はSystemVerilogだ! VHDLもVerilog HDLも無くなるんだ と信じたい。 読みにくいVHDLは滅びてくれないかなぁ… とりあえず一個に収束してくれればさらにいいのになぁ…
VHDL = Pascal Verilog = Perl っていう感じ
>>655 VHDL = Ada
verilog = c
出自はこんなもんだが?
VHDLのほうが読みやすいと思ってしまうのは何故だろう いっぱい書く方が安心するwww
Verilog が C っぽくなく Perl っぽいのは
>>655 に胴衣
…ヲーニングレベルを上げることができれば Verilog でもイケると思われ。
でもいけるって? 現状Verilogが圧倒的に多いし、その後のSystemVerilogまでスムーズに移行できる VHDLみたいなアホ言語で安心する奴はオツムのわるいバカエンジニア
同意してくれる人がいて良かったです。 個人的にはどっちでも大して変わらないと思います。 どっちかがどっちかを攻撃しても目糞鼻糞ですから。
両方使っている身としては、一長一短あってどっちが良いとかって ものじゃ無いような気がするが・・・ 個人的にはVerilogの方が好きだけどね。 まあ確かにどっちかに収束して欲しいとは思う。
入門用には訳わからんミスを起こしにくい分VHDLでしょ。 実用性はVerilogの方が格段に上と思うけど。
>>663 教育用にpascalだけど実用はcと言っていた90年代のプログラマみたいな感じ。
80年代だとCを実用に使うにはまだ敷居が高かったな コンパイラのバグ回避の手間がかかったから
667 :
774ワット発電中さん :2005/12/07(水) 20:03:02 ID:E0m3pgny
今、Xilinx を勉強しているのですが、ISEおしえてください。 Verilog言語の取り扱い説明に、 「XSTでは、Verilogメタコメントがサポートされています」と 書いてあるのですが、この「メタ」ってどのように理解すれば 良いのでしょうか? ハードウェアでも「メタステーブル」という言葉 もありますし。以前から全くわからなかったです。 宜しくお願いします。
メタステーブルが準安定だから、 準注釈?
「一段上の見地から」って感じがするが
670 :
774ワット発電中さん :2005/12/08(木) 02:05:10 ID:lEKrjuYh
メタメタのコメントでもコンパイラは文句言いませんってことじゃあるまいか?
672 :
774ワット発電中さん :2005/12/08(木) 13:33:52 ID:j3O3ku9l
667です。
>>668 -
>>671 ありがとうございました。
「背後の、後ろの、より包括的な、超えた」という意味らしいですね。
>>671 ご紹介のページには、オブジェクト指向を例にメタの説明がありました。
が、この言葉を使いこなせるほどの理解は得ていません。
メタコメントってどんなコメントなのか.....
メタステーブルって....うーん、わからん。
どっちの言語も中途半端にしか使えない俺様が来ましたよ
つまりHiでもLowでも無い人間メタステーブルだと?
675 :
774ワット発電中さん :2005/12/08(木) 16:26:29 ID:j3O3ku9l
みなさん、先ほどはありがとうこざいました。 すみませんが、またひとつ、教えてください。 Xilinx ISE7.1.04で、次のようなソースを書いたのですが、 「32行目で、知ってるFFかラッチと Qがマッチしない」というエラーが出てしまいます。 何がマッチしていないのかわからないのです。 Qは、ちゃんと4bitでreg宣言してあるし、0という表記は何bitでも共通だと 思いますし、何がいけないといっているのか、さっぱりわかりません。 0の代わりに4'b0や4'h0なども試しましたが、同じメッセージが出てしまいます。 ケツの青い若者に どうぞ宜しくご指導願います。 module main(reset, clock, Q); input reset; input clock; output [3:0] Q; wire reset; wire clock; reg [3:0] Q; always @( negedge reset or posedge clock ) begin if( ( reset == 0 ) || ( Q == 9 ) ) Q <= 0; else Q <= Q + 1; end end endmodule ERROR:Xst:899 - "test.v" line 32: The logic for <Q> does not match a known FF or Latch template. ERROR: XST failed
まず end の数多くね
つーかQ=9でリセットってどういう意味よ? これじゃエラーがとれてもまともな回路にはならんだろ
678 :
774ワット発電中さん :2005/12/08(木) 17:04:16 ID:j3O3ku9l
すみません。先ほどのものは、コピペのミスで、 endの数が多かったです。次のように修正して always @( negedge reset or posedge clock ) begin if( ( reset == 0 ) || ( Q == 9 ) ) Q <= 0; else Q <= Q + 1; end XSTかけたのですが、同じ結果になりました。 そこで、次のようにif()の条件を分けたら、通りました。 always @( negedge reset or posedge clock ) begin if ( reset== 0 )Q <= 0; else if( Q == 9 )Q <= 0; else Q <= Q + 1; end ifに複数条件は使ってはいけないのでしょうか? Verilogは、Cベースとはいうものの、勝手がちがうのかなぁ。
>>675 end の数はともかく、リセット条件は別個に書いた方がいいんでね?
FPGAのF/Fにおいてはリセットは特別扱いでしょ。
…ほとんどのFPGAアーキテクチャではF/Fリセットは非同期だよね?
680 :
774ワット発電中さん :2005/12/08(木) 17:08:18 ID:j3O3ku9l
>>677 現在が9だったら、次は0にするということで、
10進カウンタのつもりなんですが。
....8→9→0→1→2→3→4→5→6→7→8→9→0→1→2→....という具合です。
682 :
774ワット発電中さん :2005/12/08(木) 17:27:46 ID:j3O3ku9l
>>681 678で合っているというのは、678の
エラーの出る
if( ( reset == 0 ) || ( Q == 9 ) ) のほうでしょうか?
それともエラーの出ない
if ( reset== 0 )Q <= 0;
else if( Q == 9 )Q <= 0;
の事でしょうか? 意図としては、非同期リセット、同期カウントアップの
つもりです。どちら場合も、Qの値を0にするという意味で同じなので、
2つの条件を || でくくっても良いのではないかと思っているんですが、どうでしょう。
何か大きな勘違いをしているような気もするんですが。
だから if( ( reset == 0 ) || ( Q == 9 ) )が間違いなんだって そんな回路ありえないじゃん
684 :
774ワット発電中さん :2005/12/08(木) 17:49:33 ID:j3O3ku9l
>>683 ありがとうございます。 ありえない....ですか?
always @( negedge reset or posedge clock ) としてあるので
このalwaysの中に入ってくる条件は、
resetが↓に変化したとき または clockが↑に変化したとき の2つなので、
resetはclockに関係なくいつでもalwaysの中に入ってこれる。
そしてresetはif()の条件の1つなので、Q <= 0; が実行される。
またclockも同じだと思うのですが、この理解は間違いでしょうか?
うん、間違ってるよ if( ( reset == 0 ) || ( Q == 9 ) )て書いたら resetとQがデコードされた信号が作られるじゃん だからありえない
686 :
774ワット発電中さん :2005/12/08(木) 19:08:55 ID:j3O3ku9l
>>685 ありがとうございます。 やっぱりありえないですか
>if( ( reset == 0 ) || ( Q == 9 ) )て書いたら
>resetとQがデコードされた信号が作られるじゃん
それなんですが、
( reset == 0 ) で1つの条件で、真か偽かの論理
( Q == 9 ) で1つの条件で、真か偽かの論理
であり、||はこの2つの論理orだと思うので、
直接Qとresetの中身同士をorする(デコードする)のとは
違うと思うんですが どうでしょうか?
>>j3O3ku9l 「ノイマン型」の呪いから解き放たれるまで修行しなさい。
>>684 ハード的なものを想像できてないから、そうなっちゃうんだろうけどね
実際に合成できなくはないけど、推奨されない回路だね。
それを実際の論理回路で作ると、
FFの非同期reset入力に、" reset == 0 ) || ( Q == 9 ) "が入る。
そうすると、例えば 7→8に変化する時、君の意図しないリセットが
掛かる可能性がある。なぜかというと、
7は"0111"、8は"1000"なんだけど、Q(1)〜Q(3)がすばやく変化して
先にQ(3:1)が"100"になると、一瞬"1001"になってこれは9、リセットがかかる。
物理的な遅延時間が引き起こす現象だね。
これがいやなのでなるべく非同期設計は止め、同期設計を行うのだ。
>> ID:b2vmk+3X ありえないって部分を説明してくれ.。 always @( negedge reset or posedge clock ) begin こういうふうにセンシビティリストを書いた場合、リスト信号に同期した条件処理が一番外側から 見えてないと合成できない。 >if( ( reset == 0 ) || ( Q == 9 ) ) と書くとQ==9がclockに同期して動くのか、resetに同期して動くのかわからないので合成できない と思ってるんだけど?違うのか?
>>688 >実際に合成できなくはないけど、推奨されない回路だね。
>それを実際の論理回路で作ると、
いや俺の知ってる限り合成できるようなツールは見たことない。
resetに対する回路合成不能で止まるはずだ。
>そうすると、例えば 7→8に変化する時、君の意図しないリセットが
>掛かる可能性がある。なぜかというと、
>
>7は"0111"、8は"1000"なんだけど、Q(1)〜Q(3)がすばやく変化して
>先にQ(3:1)が"100"になると、一瞬"1001"になってこれは9、リセットがかかる。
だからalways @( negedge reset or posedge clock )
と書いた場合、always内部での同期回路では上で>688が書いたような心配事は杞憂だろ?
ちゃんとツールが止めてくれる。
>>678 > always @( negedge reset or posedge clock ) begin
> if ( reset== 0 )Q <= 0;
> else if( Q == 9 )Q <= 0;
> else Q <= Q + 1;
> end
こうでも通ったかもしれないけど、センシビティリストに対応させた書き方
としては
always @( negedge reset or posedge clock ) begin
if ( reset== 0 )Q <= 0; //非同期resetに同期
else begin //clockに同期
if( Q == 9 )Q <= 0;
else Q <= Q + 1;
end
end
と書くべきだと思う。
>「ノイマン型」の呪いから解き放たれるまで修行しなさい。 プ!こいつノイマン型の意味わかってるのか? 少なくとも ID:j3O3ku9l の言う話はノイマン型とは一切関係ない
>「ノイマン型」の呪いから解き放たれるまで修行しなさい。 わかる人にはわかるうまい表現だと思った。 ノイマン型の定義は 「プログラムをデータとして記憶装置に格納し、 これを順番に読み込んで実行するコンピュータ。」 であり順番に処理するのが基本。 パーフォーマンスをあげるために割込を使ったタイムシェアリングや グリッドコンピューティングなどの工夫はされているが 処理は順番におこなうというのが基本概念。 一方、Verilog・VHDLが相手にする回路は基本的に並列処理なので シーケンシャル処理を確実におこなうための同期回路などが不可欠に なってくる。 要するに、記述はノイマン型コンピュータのプログラムっぽくても 相手にしてるのがロジック回路なんだからそれを忘れちゃだめだよ。 ってことでは?
>>693 仮にわかってる人でも、日本語が読める人でないと、うまい表現とは認識できません。
往々にして見かけます。
ストアドプログラムってのがノイマン型 そもそもノイマン型とは全く無関係な順序回路の記述をしてるのに ノイマン型を持ってくるほうがどうかしてる。 それをたとえに出すこと自体わけがわかってないことを露呈してる。 自らのアホをさらしたにすぎん
>>693 もっというなら
プログラム記述から解き放たれるまでHDLを修行しなさい。
っていうのが正しい表現だろ。
ノイマンとは一切関係ないし、全くもって不適切な表現だ。
>>696 ベクトルコンピュータのプログラム記述を知らないんですね?
ノンマン型
699 :
774ワット発電中さん :2005/12/10(土) 12:43:41 ID:htiFVHn0
>>697 言うに事欠いてベクトルコンピュータか?あほ
ベクトル型にしかあてはまらないことならはじめからベクトル型と言え。
そうすりゃさらに徹底的に叩いてやったんだがな。
ベクトル型のいったいに何が関係するか言ってみろ。
700 :
774ワット発電中さん :2005/12/10(土) 13:11:36 ID:8QNbC2tN
/⌒ヽ / ´_ゝ`)すいません、ちょっと通りますよ・・・ | / | /| | // | | U .U
あんまり関係ないけど、 if (Q >= 9) Q <= 0; としてくれ。
>>699 は軽石じゃなくてリセットじじいでしょ。
ageてるし。無駄にえらそうだし。
704 :
774ワット発電中さん :2005/12/11(日) 19:24:53 ID:ofsbGLFg
>あんまり関係ないけど、 >if (Q >= 9) Q <= 0; >としてくれ。 if (Q[3] & Q[0]) Q <= 0; とすれば使用ゲート数がケチれると思ったが4入力LUTだからカンケーねえやと気がついた23歳最後の日 P.S. 明日がバースデーなのだ
705 :
774ワット発電中さん :2005/12/11(日) 22:10:19 ID:5oHbkPvh
その歳最後の日の次の日は、普通誕生日だろ あえて言わなくてもいい
法律上は誕生日の前の日に年をとるから
>>704 はすでに24歳です。
いや、今日が命日になれば誕生日どころじゃないぞ。
708 :
774ワット発電中さん :2005/12/12(月) 10:35:17 ID:+Xsn+ubB
>707 盆と正月が一緒に来るようなもんすかね?
誕生日と葬式がいっしょ
12月は誕生日で酒が飲めるそ 飲める飲める飲めるぞ 酒が飲めるぞ
誰か漏れの部屋の掃除手伝ってくれ
>696 プログラムは狭義では「コンピュータを動作させる命令を組み合わせた文書」だが、 もともとは「行事などの計画、予定」つまり プログラム=HDL なので > プログラム記述から解き放たれるまでHDLを修行しなさい。 それこそ矛盾してて意味不明。 一方、「ストアドプログラム」の基本は「処理を順番におこなう」ということ。 HDLの記述対象である「回路」は並列処理が基本だから それに対する順序処理の象徴としてノイマン型を持ち出すのはうまい表現だ。 ブロッキング代入とノンブロッキング代入の使い分けがちゃんと出来る人ならば ノイマン型という比喩で思わずニヤリとしたのではないかと思った。
>>712 >もともとは「行事などの計画、予定」つまり プログラム=HDL なので
はぁ?
HDLはプログラムなんかじゃない。回路だ。
プログラムは手順だ。
それすらわかってない奴が糞レスつけるな。
>一方、「ストアドプログラム」の基本は「処理を順番におこなう」ということ。
がきでもわかる英語がわからんかね?
ストアドプログラムは言葉どおり、蓄積されたプログラム。もう少し詳しく言っても
"動作手順であるプログラムがメモリに蓄積されていること"だ。
>それに対する順序処理の象徴としてノイマン型を持ち出すのはうまい表現だ。
順序処理の象徴がノイマン型だと?順序回路がノイマン型か?
もっというと、非ノイマン型コンピュータが順序処理をするならそれがノイマン型か?
非ノイマン型==ノイマン型か?
あほが。もう一回勉強しなおして来い。ノイマン/非ノイマンはコンピュータの構造の話だ。
>ブロッキング代入とノンブロッキング代入の使い分けがちゃんと出来る人ならば
ブロッキング、ノンブロッキングとノイマンは何の関係もない。
見てると並列処理==非ノイマン型と思ってるようだがそれは大きな間違いだ。
非ノイマン型は、 並列処理コンピュータも包含しているが、
ノイマン型構造はないでないコンピュータの総称だ。
しかも、お前とんでもない間違いしてるだろ?
>ノイマン型という比喩で思わずニヤリとしたのではないかと思った。
上の繰り返しになるが、
ノイマン/非ノイマンはコンピュータの話だ。回路記述の話に持ち出すような形容詞じゃない。
×ノイマン型構造はないでないコンピュータの総称だ。 ○ノイマン型構造でないコンピュータの総称だ。
>>712 =
>>687 ジサクジエン乙
>それに対する順序処理の象徴としてノイマン型を持ち出すのはうまい表現だ。
自画自賛乙。あ〜ハズカシ。穴があったらはいりたいよ〜
ノイマン型ってハーバード型とかと同じレイヤーの言葉だよな
いまどきのマルチコアCPUは並列処理をするノイマン型だし 並列処理すなわち非ノイマン型ってするのも問題ありだな
ノイマン型:EDSAC 非ノイマン型:ENIAC
>ノイマン型ってハーバード型とかと同じレイヤーの言葉だよな ノイマン型⊃ハーバード型 ハーバードを非ノイマンという香具師がいるがとんでもない間違い。 ハーバードアーキテクチャが多いDSPは当然乃胃萬型
のいまん型は定義できるが非のいまん型はのいまん型を定義して Complementary(のいまん型)としか定義できない。 組み合わせロジックだけで実現したコンピュータなら当然非ノイマンだけどな。
>712 :774ワット発電中さん :2005/12/13(火) 14:58:04 ID:dEEsepzT
>>696 >プログラムは狭義では「コンピュータを動作させる命令を組み合わせた文書」だが、
>もともとは「行事などの計画、予定」つまり プログラム=HDL なので
ダウト
正直、もうどうでもいい
j3O3ku9の話(FPGAの場合では非同期リセットにヒゲがのる回路)はノイマン型と関係ないと思う。 しかし、オレとしてはHDLで書くときの基本的な心構えとして、 そこに書いてあるのがノイマン型っぽく振舞うのを期待するような気分で いてはいけないというのには同意できる。
別件なんだけど、FPGAの人に文句あり たとえば always @( negedge reset or ...) ・負論理なら負論理っぽい信号名にしろよ、なんでみんなresetなんだよ、 ・そもそもレベルで決まる信号なのに何でedgeなんだよ、 それともFPGAはセット/リセットもedgeなのか!? シミュレーション結果がHDLとgateで変わっちゃうだろ。 たとえばif(reset == 0) Q <= 0; ・なんで非同期(そもそも本当に非同期?)なのに「<=」!? FPGAが便利なのは認めるが、 この記述でFPGAの開発環境を立ち上げることにOK出したヤツはアホだろ。 と思ってしまう。
↑こいつもアホ
>>724 んでは、アホじゃない記述を提示してもらえますか
>>720 アナログコンピューターはノイマン型でしょうかw
>>724 うちの会社では
always @( negedge nreset or posedge hogehoge)
みたいな記述してますよん。
あと、xxxedge表記されているのはedgeで見てると説明書にありますけど、違うのですか?
>>724 >なんでみんなresetなんだよ、
俺は「nreset」だよ。あなたが見たソースの設計者がそういう信号名つけただけなのでは?
>そもそもレベルで決まる信号なのに何でedgeなんだよ
非同期リセットだから、次のクロックエッジまで待ってられないの。
同期リセットを使う場合は、エッジは使わない。
>なんで非同期(そもそも本当に非同期?)なのに「<=」!?
「<=」の意味をわかってないとおもわれ
>>724 そんなに気に入らないならABELとかPALASMとかでも使え
「更に気に入らず文句を言う」 に100スライス
>>730 結構食うな…
信号名は、不論理ならxやらnやらつけて論理をわかるようにするのがいい
ってのはあるだろうね。ほかには入出力にi/o/bつけたりレジスタ(FF出力)
にrつけたり。ほかになにか知ってる人下記子よろ
>>724 いや、それは違うと思う
http://toolbox.xilinx.com/docsan/xilinx7j/books/docs/lib/lib.pdf のP440参照
always @ (posedge C or posedge CLR) begin
if (CLR)
Q <= 0;
else
Q <= D;
end
と、リセット付きDフリップフロップの推奨記述は財リンクスでは↑なわけで。
確認はしないけど他メーカもそんなものでしょう
simと差分がでない理由は、エッジでイベント発生と、if文の優先順位かな
リセット中にクロックのエッジがきてもif文でリセット状態が優先されるよね
<=については主張がよくわからないのでなんとも。とりあえず:=は使わないと
思うのだが・・・。
ライブラリガイド見てて思ったのだが、 always @ ( CLR or posedge C ) begin if (CLR) Q <= 0; else Q <= D; end と書いてもいいのかな?こっちのほうがより物理デバイスに近い記述だとは 思うけど。なぜ推奨記述じゃないのか知ってる人おせえて VHDLだと、 if ( CLR='1' ) then Q <= 0; elsif ( C'event and C='1') then Q <= D; end if; とか書くのが推奨になってるし、たしかにこう書くなぁ。
俺も知りたいな。 always @ ( CLR or posedge C ) begin と書くと、文法的にはCLRに変化があったときにHi->Lo,Lo->Hiで必ず2回チェックされるって意味だよな。 シミュレーションでは必ず遅くなるようには思う。
>>731 > 信号名は、不論理ならxやらnやらつけて論理をわかるようにするのがいい
Reset や Clock はともかく、他の信号は入出力ピンの部分で全部正論理に
変換してから書いてるから気にした事無い。
ABELやPALASMの頃は、いろいろ考えたなー。
非同期リセットが好きだぁ〜。
ごめんなさい。おともだちからなら
>>732 非同期でDをQにいれるのか・・・
多分ネットリストではSRにつなぐ構成になると思う。
つまり VHDL と Verilog は等価な回路を吐かないということですね
739 :
774ワット発電中さん :2005/12/16(金) 13:36:18 ID:Nc5aRPqw
>>732 のどこが等価なんだよ。
posedgeで入るときは値が1でnegedgeで入るときは0
それを抜くと値が1になったときも0になったときもalwaysくぐらなきゃならんから
CLRが1->0の変化でalways入ってif(CLR)で偽になってQ<=Dが実行されることになる。
VHDLのほうはCLRが1->0のときでもelsif(C'event and C='1')ではじかれてQ<=Dは実行されない。
つまり記述された動作が等価じゃない。
>>730 ザイ使いさんですね。
今までアルばかり使ってたもんで、
きのう初めてザイの営業さんと話をしたときに
「スライス?それって何の単位ですか?」
と聞き返してしまった。
741 :
724 (アホかも) :2005/12/17(土) 02:42:08 ID:kpCnHQtg
みんなの反響があってオレ様もうれしいよ、 ちなみにオレ様の片edgeの場合の 標準記述は↓コレ(本当は1つ1つもっと厳密にbeginとendを書くけど) always @(resetz or posedge clk) begin if (resetz == 1b'0) Q = 1'b0; else if (en == 1'b1) Q <= ???; end zを後付けで、他人のはn _ bなんかが付いてたら負論理との理解。 もしCMOS系(負論理のプロセス)で何も付いてない場合は差し戻し。 (ここのスレにも蝶! FPGA系の世界がすべてのヤツが住んでる気がすると思う。) 個人的にSET/RESETとかのレベルラッチは絶対領域の不可侵回路。 ちょっとでもそのレベルに触ったらラッチの出力が変化すると認識してる。 クロックとリセットのタイミングによっては不定を出すライブラリもあるけど、 リセット非同期優先で考えてる。 そんなカンジ。 みんな仕事は問題無いの?
どうして技術屋って言語能力が不自由な人が多いのか。 日本語も不自由なら、プログラム系言語も不自由だ。 俺ルールやら職場方言やらを振りかざして、 標準語を喋ってるつもりなんだろうか。
>>741 その標準記述とやらは、規格的に間違いだが。
そんなアホな記述が標準で罷り通ってるようなとこに
仕事出したくねえ。
>>741 D type Flip-Flop with asynchrounus reset を生成しているつもりなら、
その記述は普通に間違いですが何か?
ってか、724 は Verilog 知らんやろ。もっぺん入門書で勉強しなおせや。
本当に初心者レベルの間違いだ。
ここは奇妙なHDL講座のスレでつね
>>741 氏の記述をDesignCompilerに喰わしてみました。
下記の通り2点エラーが出て合成できませんですた。
ライブラリによっては合成できるかもしれないけど、
これが標準記述とおっしゃる方と一緒に仕事はちょっとできません。
sim専用の方なのでしょうか。
The event depends on both edge and nonedge expressions, which synthesis
does not support.
Register 'Q' is the target of both blocking and non-blocking assignments
in the same process.
742の釣り宣言が来るのを待ってるんだが、 一向に音沙汰がないところをみると、もしやマジだったのだろうか。
748 :
安井某 :2005/12/20(火) 00:55:21 ID:P7zS+tCZ
何だかVerilog HDLに不満の人多いのかな.そんならVHDLにすれば? 少なくても非同期resetとCLKの関係についてはずっと書きやすいけど!?
749 :
774ワット発電中さん :2005/12/20(火) 18:53:33 ID:VogncZom
負論理だから名前がどうとかそんなこたぁ問題じゃない。 第一、いまドキのコンパイラはちゃぁんとインバータ挟んでくれてますがな。 モジュールのインターフェースは全部正論理で扱ってだいじょぶだいじょぶ。 Switch Levelまで考えてたじぃさんの時代はともかく Gate Levelはおろか下手すると全部ツール任せのおぢちゃんの時代にそんな議論は無意味だ。 それとも数十年の歴史を誇る門外不出、秘伝のコンパイラとか自社開発してたりするの?
マスターリセット発生、解除の回路はどう作ればいいですか?
リセットの話題禁止
人生のリセットボタンがみつかりません(つД`)
つ【輪廻転生】
FPGAのRESET端子を何も操作しない場合、 電源ON時の内部FFって、確定しているんでしょうか? マイコンみたいに、count=0; みたいなことをしなくても良いのでしょうか? デバイスの機種依存とかで、OKの場合もNGの場合もあるとか..... ですか?
電源投入後の初期化シーケンスで、ROMからデータをロードして configurationが完了した時点で、すべてのFFの状態が決まる
757 :
774ワット発電中さん :2005/12/21(水) 18:18:45 ID:DoerUSJU
どなたか教えて下さい。 Q1.Verilogで、ユーザ定義文字(parameterやdefineで 定義した文字)を、複数のモジュールそれぞれに書くの ではなく、別のファイルに格納して共有したいのです が、可能ですか? Q2.Verilogで、taskを使って順序回路を記述し、「論理 合成」したいと思います。その場合、例えばD-FFはどの ように記述できますか? Q3.Verilogで、「論理合成」したい場合、taskはalways文の 中でしか呼び出せないと理解していますが、正しいでしょうか? またそうであるとすればtaskの出力は全てreg型にしなくていけ なくなりますが、taskではwire型の出力は使えないのでしょうか? Q4.Verilogで、組み合わせ回路をwire型で統一表現したいので、 function文を使うとします。function文は出力を1つしか持て ません。ところが実際の組み合わせ回路では、case文の分岐先で 複数の変数を同時に操作したい事が良くあります。各変数毎に function文を書けば良いのですが、それでは膨大なステップ数に なってしまいます。何か手はありますか?
学校の宿題みたいだな。
>>757 Q1.includeで呼び出せばいいのでは?
Q2.回答ではないですが、taskって、テストベンチの世界の物であって
回路記述では使わない物、と思っていますが・・・
Q4. assign {hoge,huga} = func(hage,hego); ってできなかったっけ?
>>760 頭いーーーーー。なるほど、それはいいですね。ちょっと感激しました。
757ではないですが。
特定bitの抽出ってマイコンでもやるけど、HDLのほうが圧倒的に楽ですよね。
reg [7:0] merry;
reg [2:0] christmas;
christmas <= merry [5:3];
Cで書くと、
unsigned char merry, christmas;
christmas = ( (merry
>>3 ) & 0x10);
....... 変わらんか。
762 :
774ワット発電中さん :2005/12/22(木) 13:01:31 ID:0PDvtMb4
VHDLのsignalで23bit定義しています。 計算後その内の下位10bitだけ出力ピンに渡しています。 これをコンパイルするとコンパイラが勝手にsignalを10bitにしてしまっているようで間違った計算結果になってしまいます。 これはどのように回避するのでしょうか? QuartusII使用です。
763 :
774ワット発電中さん :2005/12/22(木) 14:06:57 ID:1TypyvYm
>>762 間違っているのは藻前の回路だ。
上位13bitがそもそもまったく動かん回路になっとるはずだ。
764 :
774ワット発電中さん :2005/12/22(木) 14:44:59 ID:0PDvtMb4
>>763 なんかそんな感じです。
間違いがありました。
もう少し調べてみます。
> 間違った計算結果になってしまいます。 具体例を挙げてくれると、叩くネタになったり、躓いてる人への蜘蛛の糸になったり いろいろ膨らむと思うんだが・・・・
766 :
火魔人 :2005/12/24(土) 02:30:02 ID:WIMAA1cu
>739 自分はFPGAは使わないので、ASIC or ゲートアレイ用の記述でDesignCompilerを使う場合で言うと・・・ A1. parameterの定義はincludeで共有できるが、defineは二重定義になるので共有不可。 と言う前に、defineの仕様を考えれば共有する必要は無い事は解る筈。 A2. ラッチになるかF/Fになるかゲートになるかは、taskの呼び出し元の記述で決まる。 task文の中で足掻いても無駄。 A3. そもそも、普通initial文は論理合成には使わない。 それと、taskの出力をregやwireで定義する必要は無い。 A4. function文の使い方を間違っているので、そんな考えは捨てる。 functionを使う場合は、"異なる信号に対して同じ処理を行う場合"に使う。 "同じ信号に対して異なる処理を行う場合"は三項演算子("?")を使う。 ステートマシンを記述する場合にtaskを使っているけど、自分で意図して使った事は無いねー。 Visual Eliteでステートマシンを書くと、taskを使った記述になる。(そう指定してるから) functionは、条件分岐の必要な演算回路を書く時に使ってるけど、wireで定義する物には 使わない。 論理+F/Fの論理部分にfunctionを使うので、代入相手はregだけ。
>>766 A4 だか、組み合わせ回路でも条件が複雑で case を使いたいときは、
function で書いてもいいジャマイカ。
>>766 >ステートマシンを記述する場合にtaskを使っているけど
マジ?taskってシミュレーション用のサブルーチンじゃないの?
回路記述なんかで使えるの?もっぱらテストベンチだけで使ってた。
>>766 は
>>757 を火星に飛ばすためのネタと見た。
>>739 にアンカーつけてるし。
>functionを使う場合は、"異なる信号に対して同じ処理を行う場合"に使う。
どーいう意味?
>"同じ信号に対して異なる処理を行う場合"は三項演算子("?")を使う
三項演算子で記述できる組み合わせ回路はfunctionでまったく問題なく記述出来るはずだが?
組み合わせ→function
順序→always
組み合わせもalwaysで記述できるが上のように書くとぱっと見てすぐわかるから。
組み合わせ回路を明示できるところが、個人的にVerilogが好きな理由なんだが。
taskを回路記述で使う件も初耳だ。
>functionは、条件分岐の必要な演算回路を書く時に使ってるけど、wireで定義する物には
>使わない。 論理+F/Fの論理部分にfunctionを使うので、代入相手はregだけ。
これって hoge を functionで定義してるとして、
assign pappara = hoge( sig );
のpappara がregってこと言ってるのかな?
そんな文法見たことない。
少なくとも
>>757 は真面目に聞いてきてるみたいだし、ネタで火星に打ち上げちゃかわいそうじゃないの?
>>766 じゃないけど、
>>functionを使う場合は、"異なる信号に対して同じ処理を行う場合"に使う。
>どーいう意味?
同じような処理はfunctionでまとめて、信号をインスタンスするだけってことだろ。
俺的には「組み合わせ回路をwire型で統一表現したいので、 function文を使う」ってのは
どうかと思う。別に組み合わせはfunction、順序回路はalwaysなんて書き分けをしなくても
Verilog HDLをある程度身につけたエンジニアならばソースコード見るだけで
どっちになるかぐらいわかると思うけどなあ。
人間ならalwaysを使って組み合わせ回路を記述するより functionで記述した方がはるかに見やすい。
組み合わせ回路の記述の基本はassign文なんだが・・・ function文はあのとってつけたような構文が示すとおり、継続的代入文の補助的な意味合いしかない。 always文では変則的に組み合わせ回路を部分的に記述できるといっても、シミュではクロックが入ってから演算するが、 実際の回路でクロックが入ったときにregに代入されるのは、その時点で既に根元まで来ている信号だ。 regの値を使った演算の結果をそのままregに代入するのでなければalways文中に書くべきではない。
>実際の回路でクロックが入ったときにregに代入されるのは、その時点で既に根元まで来ている信号だ。 当たり前なんだけど、さらに「セットアップ・ホールド時間を満たしたもの」が代入される。
>always文では変則的に組み合わせ回路を部分的に記述できるといっても、シミュではクロックが入ってから演算するが、 組み合わせ回路の話なのになんでクロックが?? もしかしてセンシティビティ・リストの中は(posedge clock)しか書いたことないんじゃないの。 always文で組み合わせ回路を記述しちゃイケナイなんて聞いたことないよ。 SystemVerilogじゃalways_combやalways_latchが用意されているくらいだぜ?
それは現状のVerilogではalwaysで組み合わせ回路を書くと 色々ややこしいからではないか? VHDL感覚ならalwaysで組み合わせになりそうだが、 順序回路か組み合わせ回路か解読する手間を考えると、 組み合わせはfunctionのほうがVerilog流でしょ。
>>775 >もしかしてセンシティビティ・リストの中は(posedge clock)しか書いたことないんじゃないの。
まったく。自分の無知を棚に上げて大暴れか?
>always文で組み合わせ回路を記述しちゃイケナイなんて聞いたことないよ。
ちゃんと調べてから言え。調べもせず。聞いたことないだと?笑わせるな。
古めのVerilog解説本には組み合わせにfunctionを使うように推薦してる。
最近になって出版された書籍はどちらでもいいと書いてるものもあるがな。
>>SystemVerilogじゃalways_combやalways_latchが用意されているくらいだぜ?
だれがSystemVerilogの話をしとんねん。
そして議論は永遠に収束しないと…
まあ宗教戦争みたいなもんだからな。 いつまでもかみ合わんでしょ。 こういう時こそリセットじじいに登場してもらって 経験を生かしたコメントを出して欲しいもんだが。 まあ、暇な様だけど建設的な事は嫌いらしいから無理かな。
自分は775擁護だな。 alway の組み合わせ回路が sim でクロックが入って演算ていうのは意味が 分からないな。実際にシミュレーションして確かめた? イケナイ==禁止 で、推薦 != 禁止 じゃない。 ちゃんと調べても、推薦しかしてないのならイケナイという 結果はでてこないだろうな。 推薦ていうのは、"したほうがよい"という意味ですよね?
>>780 >自分は775擁護だな。
ヲイヲイ
>>780 ==
>>775 の癖に
自分で書き込んどいて擁護も何も無いだろ。笑止千万。しかも必死
>推薦ていうのは、"したほうがよい"という意味ですよね?
そーだなーお前が生きてるのも生きてたほうがいいよって一般論としての推薦だ。
なんなら、死んでもいいぞ。お前が死ぬのは勝手だしな。死ぬことを禁止なんかしてない。
>>781 775じゃないよ。
なんだかな、こういう汚いことしか言えない奴ってのはどうしようもないな。
自分が正しいと思うんなら、きちんと反論してみたら。
781の書き込みみたいのを、必死っていうんじゃない。
>>782 >なんだかな、こういう汚いことしか言えない奴ってのはどうしようもないな。
そーだなー、お前のような反省もせずにくっだらん理屈こねくり回すようなアホじゃどうしようのないよな。
まともなVerilogの本だったらたいてい書いてるお勧め事項を知らん事自体何も読んでない証拠。
>781の書き込みみたいのを、必死っていうんじゃない。
まー、なんとでもほざけ。
functionは組み合わせ回路を記述するために用意された経緯を今ここで初めて
知って目から鱗か?
せいぜいがんばれや。
>>782 >きちんと反論してみたら。
そいうやお前立派なこと書いてるよな。
>>780 >>782 で、これまで知らずにやってきて自己弁護に必死ってか?
大笑い!!!
-─=三=- 、 /イイイ ヽ三\ヽ\ ///イ ___ ヽ トトト i:|:/ミ -_-__--_−_-_ トト|:i |:|:|イ へ、 ̄ /ヽ |:|:| |:|:|| _、 ,.-_、 |:|:| <functionわかってない奴が自己弁護の ト:!:| ヽ´´´ノ ヽ´´´ノ |:|リ <偽装工作に必死 ヽ_|  ̄ ノ 丶 ̄ |_ノ | \/ (_i i_)\/ | | | /  ̄ \ | | \ -=^^=- / ヽ  ̄ ノ
>functionは組み合わせ回路を記述するために用意された経緯
どこのことを言っているのだろうか。
まさか
>>773 じゃないよね?
VHDLでよく推奨になってる if ( CLR='1' ) then Q <= 0; elsif ( C'event and C='1') then Q <= D; end if; こんな感じの記述を if CLR='1' then Q <= 0; elsif rising_edge(C) then Q <= D; end if; って記述される方っています?私はあんまり見慣れないんですが・・・
>>787 人によってはある。
先日納品されたVHDLソースには両方混在していた。
(複数人のプロジェクトだったので)
設計ガイドラインの無い会社には次たのまんことにした。
設計ガイドラインなんて俺の会社にゃ無えーよ。 HDL記述してるの俺だけだし。(FPGAだけどな。) ある意味好き勝手自由にできる。 その日の気分で変えてもだれも文句言わない。(上司はだれも理解していないから。) でもどういう記述するのが一番スマートなのかさっぱりワカラン。 文法とかって話じゃなく、セオリー的なガイドラインみたいな事を解説してるような 書籍や資料ってないもんだろうか? 詳しい人、教えて!
791 :
789 :2005/12/27(火) 12:36:22 ID:LToaNK80
>>790 おぉー! 情報サンクス。
プレビュー見た感じ良さげだね。 ありがとう。
非同期リセットは本当に必要なのか。
リセットの話題は危険だぞ・・・ 過去の遺物が出てくるぞ・・・・ ・・・個人的にはリセットは同期で使う物と思う。 非同期はタイミングで誤動作する可能性が高いので 使わないことにしている。
794 :
774ワット発電中さん :2005/12/31(土) 02:44:16 ID:ivuw4a3s
言語記述というか、論理回路自体初心社な者です。 VHDL記述に関して質問です。 例えば3ビットの信号(cnt)をカウントしていき”111”になったら”000”に戻したいのですが、 この場合、ただ単に cnt <= cnt + 1; と記述してオーバーフローを無視して勝手に0に戻る記述をしていいのでしょうか? それとも、 cnt <= cnt + 1; if (cnt = "111") then cnt <= "000"; とういように、最大値までいったら0に戻す記述をするべきなのでしょうか?
795 :
774ワット発電中さん :2005/12/31(土) 07:30:40 ID:HilpXGcr
>>794 わざわざ0に戻す記述はいらないでしょ。
3bitしか宣言してないんでしょ?
796 :
774ワット発電中さん :2005/12/31(土) 17:11:07 ID:wtHxwa1p
HDLの話とはちょっと違うかもしれませんが、バイトオーダをBig Endianから Little Endianに論理修正したいのですが、ひとまずバイトレーンの変更修正は 済ましたけど、修正前の論理がメモリのアドレス線をバイトレーン信号を使って チップセレクトする仕様なんだけど、このチップセレクト論理もイジる必要あり? 基本的なことをわかってなくてスマソ ↓現状、こんな感じ。 ┌─────┐┌─────┐ │上位 16bit││下位 16bit│ └─────┘└─────┘ ↑ ↑ ↑ ↑ │ │ │ └─── bytelane #0 CS │ │ └───── bytelane #1 CS │ └────────── bytelane #2 CS └──────────── bytelane #3 CS ↓こんな感じにCS信号を修正する必要があるんすかね? ┌─────┐┌─────┐ │上位 16bit││下位 16bit│ └─────┘└─────┘ ↑ ↑ ↑ ↑ │ │ │ └─── bytelane #3 CS │ │ └───── bytelane #2 CS │ └────────── bytelane #1 CS └──────────── bytelane #0 CS
>>794 それはバス仕様依存だからどのバスを使うのか言わないとなんとも返事できん
たとえばPCIバスなら、データバスに乗るデータのエンディアンに関わらず
C/BE3 → AD31-24
C/BE2 → AD23-16
C/BE1 → AD15-8
C/BE0 → AD7-0
の対応は変わらない
独自に設計したバスならバスを設計したヤシに聞くしかないな
798 :
794 :2005/12/31(土) 22:27:10 ID:ivuw4a3s
>>795 3bitしか宣言しないです。
実機で確認した所どちらの記述でも結果は同じになったのですが、
どっちの記述が適しているのかと思いまして・・・
>>797 すみません。勉強不足で仰ってる意味がわかりません。
勉強してから、ここにこい(#゚Д゚)ゴルァ!
800 :
794 :2005/12/31(土) 23:02:58 ID:ivuw4a3s
あけましておめでとうございます
>>800 >>797 は
>>796 へのレスだからわかんなくてもおk
>>796 アクセス先が電源ONでまっさらになるDRAMみたいなやつで
アクセス元がひとつ かつ
図のように常に同じ単位(この場合16ビット)でアクセスするなら
何もいじらなくていい
なぜなら
書くときバイトがねじれても
読むときもねじれて結局元にもどるから
しかし 例えば
上・下16ビット=2バイト単位で書いたところを
1バイトだけとか 4バイトまとめて読むこともあるのなら
エンディアンの違いが響いてくる
(説明は面倒なので省略 絵を描いて考えてみて)
アクセス元がCPUで ソフト屋がそんな使い方してたら
ハード屋がバイトのセレクト信号をつなぎ変えるだけじゃ
対処しきれない ソフト屋も要変更
> しかし 例えば > 上・下16ビット=2バイト単位で書いたところを > 1バイトだけとか 4バイトまとめて読むこともあるのなら > エンディアンの違いが響いてくる > (説明は面倒なので省略 絵を描いて考えてみて) まっさらから始めるって条件なら、説明が面倒なんじゃなくてただの大嘘だろ バイトイネーブル信号がデータバスと対応した然るべきイネーブル入力に 接続されてたら違いなんて見えない 要は信号の名前(正確には添数字)をどうつけるかだけの問題 実行中に動的にエンディアンを切り替えたいから悩ましいんじゃないのか?
バイト単位でアクセスするデバイスだけなら そもそもエンディアンの違いで悩む必要はない だがビット位置が関係するデバイスがからむと 一気に厄介になる 16ビット幅でabcdと下位2バイトに書き込むと ビッグエンディアン (bit15)abcd(bit0) リトルエンディアン (bit15)cdab(bit0) これだとバスにビット位置を意識しているデバイスが ぶら下がっていると不具合を起こすのは自明 だからといって16ビット幅でのアクセスなら リトルエンディアンでもそのままabcdと書くと 突っ込まれた点が問題になりえる
一般的な記憶デバイスなら、アドレスバスはまだしも データバスのビット位置は意識しないよね たとえデータバスのビット位置を意識するデバイスを使う場合にしても 動的にエンディアンが変化しないなら、PWBAの配線でよしなに接続すれば いいだけの話だよな
>>798 > 3bitしか宣言しないです。
溢れようが桁上がろうが、その下位3bitしか見ないなら同じことじゃん。
806 :
796 :2006/01/03(火) 20:53:09 ID:RDnvM8Wg
>>797 >>801-804 ご丁寧にどうもです。
>>796 では、メモリ構成をハーフワードアクセスのイメージで書いてますが、
実際のハード仕様は、8bit*4でバイト/ハーフワード/フルワードのアクセスに
対応しています。(バイトレーンセレクタを実装)
このメモリにアクセスするのはMCUなんだけど、バイトアクセスってあるのかね?
一応、Big Endianの頃からハードではバイトアクセスにも対応する仕様なんだけど、
基本はハーフワードアクセスだと思うんですけどねぇ。。。
>>802 さんの指摘で・・・
>実行中に動的にエンディアンを切り替えたいから悩ましいんじゃないのか?
・・・ってあるけど、Bi Endianの仕様はないっす。
MCUのFirmwareはIntel系Chipからの流用らしいんで。
10桁くらいの乱数を発生させたいのですが、うまい方法はありませんか?
10ビット?10進10桁?あと乱雑さの程度は? ある程度適当でよければ、M系列とか、LFSRでググれ
10進10桁です。10桁の数字を何十個取って乱数っぽく見えればいいんですが、LFSRでやったら数字の流れの規則性が読み取れてしまいました・・・
>>809 じゃ「Mersenne Twister」をハードで実装せよ。
何十個レベルで乱数っぽくするだけなら、ちょっと長いLFSRで十分だろ どんなフィードバックで何ビットのLFSR作ったんだ?
Verilogで設計するときのための入門〜中級者向けの参考書でお勧めのものを教えてください。 多少内容に問題がある本でも、問題点が分かっていれば構わないので……。
Verilogにしても、VHDLにしても入門書と呼べるのは 1冊ずつしかないな
はじめてのVerilog と 独習Verilog-HDL がいいよ あと中級は HDL言語Verilog がお勧めだ
書き忘れ 定本Verilog-HDL設計 と 続・定本Verilog-HDL設計 も
>>813 もしプログラミング経験が無いのなら、先にプログラミング経験を積んでからの方が良いよ。
>>813 もし回路設計経験が無いのなら、先に回路設計経験を積んでからの方が良いよ。
>>813 もし基板設計経験が無いのなら、先に基板設計経験を積んでからの方が良いよ。
>>813 もし筐体設計経験が無いのなら、先に筐体設計経験を積んでからの方が良いよ。
>>813 もしLSI設計経験が無いのなら、先にLSI設計経験を積んでからの方が良いよ。
822 :
774ワット発電中さん :2006/01/22(日) 13:05:55 ID:+Rkm6cL8
何だ、もうネタ切れかよw
>>813 もしレンズ設計経験が無いのなら、先にレンズ設計経験を積んでからの方が良いよ。
>>815-816 ありがとうございます。ググっても見つからなかったので、書店に問い合わせてみます。
>>817 プログラム経験は C++ Pascal Fortran Lisp Occam Postscript 等ありますが、
不足でしょうか。
>>818 昔、74を組み合わせて数千ゲート相当規模の回路を設計したことがありますが、
74 時代の経験は無意味でしょうか。
>>819 基板設計はあまりやったことがありません。別の業者がやったVME基板数枚の設計が悪く、
手作業で直しをいれたぐらいです。高周波を扱う予定はないので、
それぐらいでなんとかならないでしょうか。
>>820 筐体は詳しい人間が側にいるので、その人の経験を借ります。
>>821 LSI 設計経験は、もちろんあります。昔、スケマティックで数万ゲート規模のものを作っていました。
たしかプロセスはES2 社のものでした。デバッグが大変で、もう二度とやりたくありません。
>>823 HOYA が LSI の設計製造業務を展開していたころに、
その繋がりで半出向のような形でレンジの設計も聞きかじったことがあります。
シミュレーションツール的な部分で経験が役に立つのでしょうか。
>>824 作った物がちゃんと売れるかどうか考えた方が良いよ。
>>824 ネタにマジレス?カコイイ
てか、それだけ経験あるなら、HDLとか書いてる場合じゃないだろ。
そんなもん参考書籍一つ挙げられない土方連中
>>815-823 に任せりゃオケ
土方連中を監督したり
>>825 が言ってるような経営判断とかヤットケ
>>826 >そんなもん参考書籍一つ挙げられない土方連中
>>815-823 に任せりゃオケ
お 前 も 全 く の 同 類 だ 。 糞 ガ キ が
>>827 同類ですが何か?
てか、土方に決まってるじゃん、HDLコーダーなんて。
いまさら図星さされたぐらいで逆上する
>>827 ハゲワロス
HDLコードなんて書いてませんが何か? や ー い、 や ー い H D L 土 方 や ー い
830 :
774ワット発電中さん :2006/01/22(日) 17:16:39 ID:yDTy3rFm
┐(´ー`)┌
831 :
774ワット発電中さん :2006/01/22(日) 17:27:54 ID:Uic7tjTD
vhdlもverilogもちゃんと本を読んで勉強した覚えはないな。人の持ってる 奴をちょっと読んだくらい。基本的にはインターネットで基本を覚えて あとは人のソースを見て独学で勉強って感じか。
LSI設計やるならテスト戦略は初めに必須。
834 :
774ワット発電中さん :2006/01/23(月) 15:51:20 ID:2jctE1Rl
Perlilog: Perl コードからVerilog ソース 使い物になるのか?
ペログリ?
>> 834 使い物になる。 ただ、再起呼び出しとかはやめてくれよ。 問題はPerlの構文をどうやってHDLに落とすかだ。 それがなかなか出来なくて大変なんだ。
他にもPerlプログラムでVHDL、Verilogを生成してる実例はあるけど AlteraのEuropa 仕様のドキュメント公開してくれないかな
なぜスケマ設計は廃れたのですか?
2chで書けないから
>>838 生産性がよくないからと言われてる。
個人的には順序回路のような手順がスケマだと見えにくいな。
すみません 複数ファイルで使用するパラメータを`include "common.h"とかやって共有したいのですがcommon.hの中身はどのように書けばよいのでしょうか? なにか、文法とかありますでしょうか parameter A=1; parameter B=2; とかだけ書いていてはダメなのでしょうか。 Cの#includeのようにただ単純に文字列が挿入されるだけだと考えていたのですが、間違いでしょうか よろしくお願いいたします。
それで構わない筈だけど? まさか、moduleの外に`includeを書いてるとか・・・
>>842 レスありがとうございます
Cの#includeと同様だと解釈していましたので`includeの位置はmoduleの内部に書いてあります
文法チェックは通るのですが、modelsimに突っ込むと怒られてしまうのです
common.hがうんたらと言われてしまいます
うんたらじゃあわからんなぁ
おおかた、common.hの場所がincludeするファイルのパスに 入っていないとかだろう
Modelsimの吐くメッセージ: common.hがうんたら〜 のうんたらの部分が英語だから読めないだけってオチか
>>844-846 レスありがとうございます。
英語が読めないわけではなくて(かなり苦手ですが)、ライセンスの関係でしばらく使えなくなってしまったのでメッセージ内容を忘れてしまいました。
>>845 common.hは他のファイルと同じフォルダに入れてあるのですが、パス指定は必要なんですかね?
文法チェックはことなく終わったのですが
common.hを複数のソースから呼んでいるに3000点。
Verilogを学び始めたばかりなんですが、RSA暗号器の作成をすることになりました。 それで質問があります。 1)記述の方法で、P=(C*e)%m のように演算子を用いて記述した場合と、 乗算回路と除算回路を作って行う場合で何か違いがありますか?(論理合成など) 2) RSAでは大きな数を扱うのですが、論理合成ではどのくらいのbit数まで合成できるのでしょうか? お願いします。
>>848 その通りです
複数のソースで共通のパラメータなのでそうしたいのですが…
てか、最近仕事変わってmodelsim使えなくなってしまった…
でも、解決方法は知っておきたいです。
>>849 1)は演算子を使うほうが良いらしいよ。
勝手にHDLが乗算回路とか作ってくれるから。
昔うちの大学の先生が二つの方法で加算回路を作って比べてみたらしいけど、
演算子を使ったほうが、自分達でセコセコ回路組むより断然速かったらしいよ。
2)はよくわからないけど、
SRAMを作ったときに65536ビットとかしてもシミュレーションできたよ。
ただFPGAとかに落とした経験はないので、実際に動くかどうかは知りません。
852 :
774ワット発電中さん :2006/02/02(木) 01:55:39 ID:mFL25QoI
誰か、「ユネイト」について分かりやすく説明できる人いますか? もしくはサイトなどあれば助かります>< 宜しくお願いします!!
>>851 >昔うちの大学の先生が二つの方法で加算回路を作って比べてみたらしいけど、
あほなせんせいなんだろ?
しかも乗算器程度は勝手に合成してくれるかもしれんが
mod回路を勝手に合成してくれる合成ツールあったら教えてくれや。
>>849 1)回路規模と速度。
演算子を用いた場合、使用するライブラリによって回路が異なる。
FPGAなら専用の乗算器を用いることもある。
2)分割して処理してやれば、リソースの許す限り何ビットでも。
ヒント:長篠の戦い
>>850 VHDLの話だったら、自前のライブラリ作って使えば同じもの呼び出しても文句言われない。
俺はVHDLオンリーだから知らないけど、Verilogにはそういうの無いの?
>>855 戦国自衛隊が勝頼に加担するそうです。
映画の江口洋介版戦国自衛隊1549よりテレビの戦国自衛隊の方がはるかに出演者が豪華だったな。
江口のほうはVシネマみたいだった。
しかし。。。
反町の滑舌の悪さはなんとかならんか?
>855ヒント:パイプライン
859 :
849 :2006/02/02(木) 18:51:54 ID:kAcFmaQi
>>851 >>853-854 ありがとうございました。
ライブラリによって回路違うようなら、自分で作ったほうがよさそうですね。
分割すれば制限ないんですね。
どれくらいまで平気かいろいろと試して行ってみたいと思います
たとえば加算器のライブラリを新規に作るとする。その記述の正しさを証明できるだろうか。
「正しい」とは何かがちゃんと定義できればな
FPGAによっては、あらかじめ乗算器などがセルであることがある。 もしあるなら、それを利用したほうが早いしもったいない。 (ぶっちゃけそのセルは乗算にしか使えないから) ビット数は限界は基本的にないとおもっていいけど、速度との兼ね合いがあるだろうし。 128ビットとかなら別に平気じゃないかな FPGAにもよるけど まあ、ASICならともかくFPGAなら作ってみるのが手っ取り早い 仕事でそれをやられると困るときもあるが、そんなカンジじゃ無さそうだし
864 :
774ワット発電中さん :2006/02/13(月) 02:19:52 ID:CRxGv4yS
Quartus Uの使い方で質問です。 WindowのTabの所を右クリックで設定できるHide Tabsを押したらWindow選択Tabが 消えてしまいました。この設定を元に戻すにはどうすればいいのでしょうか?
漏れもそれ一見分かる場所になくて困惑した記憶がある。 何とか直ったけど直し方はもう忘れた。スマソ。
866 :
864 :2006/02/13(月) 22:47:00 ID:CRxGv4yS
>>865 レスどうもです。
今、いろいろいじってて元に戻す場所発見出来ました。
867 :
774ワット発電中さん :2006/02/14(火) 02:28:57 ID:TWYUOxop
良い論理回路の評価項目を教えて下さい。
シンプル
やすい・はやい・
ひげがない
中身が何であれ、売れるのが良いにきまってる どんな論理回路なら売れるか、買いたいか、考えろ
すごい・かんたん・きもちいい
ハードの人はブローカーが多いね。
バグが無いのがいいよね 怖い思いしなくてすむから…
876 :
774ワット発電中さん :2006/02/18(土) 10:58:36 ID:Ll8bfdz5
Verilogの記述方法で教えてください。 1BITの信号Aを4BITの信号Bに信号Aをパラレル4BITで接続したいのですが、 連接以外のすっきりとした記述方法はありませんか? 今は以下の様に記述しています。 b <= { a, a, a, a}; 4BIT程度なら良いのですが16BITになったり信号Aの名称が長いと面倒で。 宜しくお願いします。
if分か関数定義じゃダメなのか?
b <= {4{a}};
b <= -a;
>>879 これ使う技術者はまわりにいて欲しくない
>>879 おもしろいけど、まあ可読性悪いから業務では使って欲しくないところだね
コメントの無いソースよりタチが悪いw
VHDLしかわからんから話についていけないなあ。 Verilog勉強しようかなあ
VHDLしか知らないけど、
>>879 は分かりましたよ。
なんかMSXの「1画面プログラム」を読んでいたころを思い出した。
ちょっとわかるその気持ちw>885 まあ、みんながぱっとみて(もし構文をしらなかったとしても)分かりやすい b <= { a, a, a, a}; や b <= {4{a}}; がいい気がする
wireだったら組み合わせロジックで for( i=3; i>=0; i=i-1) begin b[i] = a; end ってのはど?
VHDLだと b <= (others => a); (だったっけ?) とかいうわけのわからん構文を書かねばならんのよね。
>>888 やっぱわけわからんのか。
VHDL勉強中だが
else ifとかcase文とかif x = 0とか不可解な構文ばかりで手間取ってるへたらCプログラマー
馬鹿でごめんな・・・
>>890 俺的には読みやすいが、
>>887 も漏れと一緒で元ソフト系じゃないの?
へたれっぽさをかんじる
>>888 あたり
はじめ見たときは何かと思った。しかもぐぐってもなかなかひっかからないのね。
case others => ばっかりひっかかってw
for文も嫌いじゃないけどね 純ハード屋さんが嫌がる傾向あるけど・・。
本質的に並列処理のものをforで書くのは違和感あるね
>>891 組み合わせ回路のfor文の使い方も知らん小僧はすっこんでな。
>>893 ある。
すごくある。
でもそういうもんだと思うことにした。
>>893 本質的にハードのものをソフトで書くのは違和感あるね
真に並列処理などあるわけない。
0時ちょうどに釣乙
>>896 いや、VerilogにしろVHDLにしろ、
ハードウェア記述言語であって、
ソフトではないんだよ
でもまあ、無いよりあったほうが便利だなぁ >for メモリの初期化とか。
forとかはどうせ中で展開してるんだろうから Cとかのプリプロセッサ命令みたいに はっきり分かるようになってればいいのにな と思うことはよくある
>>897 なんかシングルプロセッサのMPUと間違ってないか?
ハードウェアでは真の並列処理を実際やってるし、
だいいち、組み合わせのfor文とは何の関係も無い話だ。
>>901 の言うように単に手でごちゃごちゃ書く代わりに、
自動で回路展開してくれてるだけだから。
904 :
774ワット発電中さん :2006/02/22(水) 19:12:11 ID:62migtMq
フォー
お前のようなアホがうぜえんだよ
悔しがりすぎ(w
るせーばか
HDLをいくら眺めても何も見出せない。
>>909 とりあえずコンパイルしてみるというのはどうか。
チョト質問。 HDLをツールに食わせるのって、コンパイルって言う? シンセシスじゃないの? 普通に使われてるのかな?
QuartusIIの場合はCompileって書いてあるからな。 あなるしす&シンセシス〜タイミング解析まで全部やるのはコンパイルと呼んでるわ。
デザインコンパイラとか有名なツールあるからなぁ。 正しいかどうかは別として市民権ぐらいはありそう。 > コンパイル
ISEはSynthesisといっているし、 ModelSimはCompileといっている。 やってることは違うはずなんだが。
シンセシスsynthesisを訳すと、「合成」だし ツールに食わせるのはやっぱりコンパイルって感じ。
>>911 自分で書いてからちょっとそれは思ったw
コンパイルっていうとちょっとへんな顔をする人はいるよね 気持ちはわからないでもない
ソフトウェア言語でいうマシン語がHDLでいうプリミティブセルに当たると考えると
コンパイルでもいいのかなって気がする
DCとかは抽象記述を回路図に落とすから(回路)合成、なんとなくコンパイル
というとすこしどこかに違和感があるような無いような。
ModelSimなんかはプリミティブまでは落とさない、中間言語まで?
これはむしろコンパイルと呼ぶべきなのかもしれない。
とりあえず市民権は得てるとは思う。
> DCとかは抽象記述を回路図に落とすから(回路)合成、なんとなくコンパイル > というとすこしどこかに違和感があるような無いような。 DCって何かワカランけど、「コンパイル」は違和感あるね。 前に出たforも違和感ある。 でも時代がそうだと思うことにした。
ところで、ふつう「論理合成」っていうときは配置配線も含むの?
含みません
論理合成は論理合成ツールのやること。 配線はフィッタのやること。 FPGAの統合ツール使ってると気づかんかもしれんが。 統合ツールっていうのはフィッタがメイン。これの代わりのできる他社ツールはない。 合成部分だけならさらに高性能な他社ツール(synplify,precision)を使える
PLLって何? クロック発生器?
synplifyやprecisionて値段分の価値有ります? 1社のデバイス使い続けるとして、なんですけど。 昔テストしたとき、FPGAメーカのツールと比較して 大して差がない(ものによっては悪い)結果にしかならなかったもんで・・・ 今は改善されてるのかな?
んじゃFPGAで論理合成からコンフィグファイル生成まで全部を表すのは やっぱ「コンパイル」?
physical synthesisって概念もあるから 合成と配置配線の境目はあいまいになりつつあるのかな
926 :
774ワット発電中さん :2006/02/27(月) 22:12:10 ID:f2NMNZVj
クロックのHI幅とLOW幅の割合を1:1のまま3分周するRTLは書けますか? PLLを使わないで実現するのは無理ですかね?(PLLで6テイ倍して2分周)
927 :
926 :2006/02/27(月) 22:16:02 ID:f2NMNZVj
↑ Verilog-HDLでお願いします
↑ それって宿題!?
929 :
926 :2006/02/27(月) 22:29:15 ID:f2NMNZVj
>928 いえ違います。可能かどうか考察しているだけです。
3分周 = 6テイ倍して2分周 ?
クロックのHI幅とLOW幅の割合を1:1のまま3逓倍するRTLは書けますか? PLLを使わないで実現するのは無理ですかね?(PLLで6テイ倍して2分周)
932 :
931 :2006/02/27(月) 22:41:42 ID:IATIZpzb
↑ VHDLでお願いします
933 :
926 :2006/02/27(月) 22:42:51 ID:f2NMNZVj
>930 あ、間違ってました。未熟者ですみません。
934 :
774ワット発電中さん :2006/02/27(月) 22:47:42 ID:gFuv8j4d
_| ̄|_| ̄|_| ̄|_| ̄ _| ̄ ̄~ ̄|_____| ̄ タイミングチャートが書けるから書けるだろ。 考察の結果は「可能」。Verilog化するのは自分でやれ。
935 :
926 :2006/02/27(月) 22:55:25 ID:f2NMNZVj
>934 ありがとうございます。チャートはその通りです。 クロックがfallのときもカウントするようにすればいいんですかね? この記述で大丈夫でしょうか? always@( negedge reseet or ck )begin if( !reseet ) q <= 3'h0; else if( q == 3'h6 ) q <= 3'h0; else q <= q + 3'h1; end
936 :
926 :2006/02/27(月) 23:04:50 ID:f2NMNZVj
すみません、これならどうでしょうか? outの波形です。 always@( negedge reseet or ck )begin if( !reseet ) q <= 3'h0; else if( q == 3'h6 ) q <= 3'h0; else q <= q + 3'h1; end always@( negedge reseet or q )begin if( !reseet ) out <= 3'h0; else if( q == 3'h3 ) out <= 3'h1; else if( q == 3'h6 ) out <= 3'h0 else out <= out; end
ソース準備できたんなら、自分で検証してみろ(#゚Д゚)ゴルァ!
逓倍は?
┏┓┏┓┏┓┏┓┏┓┏┓┏┓┏┓ ┛┝┛┝┛┗┥┗┛┝┛┗┥┗┥┗ │ │ │ │ ↓ ↓ ┏┿┓│ ┝━┓│ ┏━┓ ┛│┗┿━━┥ ┗┿━━┛ ┗━ ↓ ↓ │ │ ┏━┓ │┏━┥ ┏━┓ ━┛ ┗━━┿┛ ┝━━━┛ ┗ ↓ ↓ ┏━━┓ ┏━━┓ ┏━━┓ ┛ ┗━━┛ ┗━━┛ ┗ 自分ならこう作るかな
うーんずれまくりだね メモ帳にコピペよろ H:L=1:2の波形をRise,Fallそれぞれで作ってORね リセット時にどうやって同期取るかは適当に考えてね
1段目をクロックの立下りでサンプリングすれば 2段目になるから特に何も考えなくてもOK
ちなみに何ゆえデューティー50%にしたいのかな? 原発振って周期は正確だけど、デューティーは結構ばらつ くから目的によってはいずれの方法もNGかもね。
可能かどうか考察しているだけ、って言ってるんだから 実際に使う目的なんか無いんでしょ。嘘じゃなければ。
>>942 それは気になってた。このクロックをどっかRiseだけで使うなら
別に1:2でも問題ないしね。
なので実製品でFallエッジを意識せず使うと、このジッタでSetup/Hold
を予期せず満たせなくなったりしてハマッたりね。なので、どうしても
両エッジ使いたいときは2逓倍して2分周とかやる・・・
ってのは普通なのかな?
PLLついてる奴なら、
周波数同じでデューティ補正だけってのが出来るのがあるからそれ使うなぁ。
内部的にはn逓倍→n分周だろうから
>>944 と同じ事だけど。
周波数が高い時は補正しないとfallエッジは怖くて使えないよね。
946 :
926 :2006/02/28(火) 11:49:39 ID:ot85kyAM
:::::::::::::: bunsyu_3.rtl :::::::::::::: module bunsyu_3( reset, ck, out ); input reset, ck; output out; reg [2:0] q_pos; reg [2:0] q_neg; always@( negedge reset or posedge ck )begin if( !reset ) q_pos <= 3'h0; else if( q_pos >= 3'h2 ) q_pos <= 3'h0; else q_pos <= q_pos + 3'h1; end always@( negedge reset or negedge ck )begin if( !reset ) q_neg <= 3'h0; else if( q_neg >= 3'h2 ) q_neg <= 3'h0; else q_neg <= q_neg + 3'h1; end assign out = q_pos | q_neg; endmodule
947 :
926 :2006/02/28(火) 11:57:03 ID:ot85kyAM
みなさんありがとうございました。↑の記述で3分周の波形を確認できました。 しかし実機で使うにはデューティを考えないといけないのですね。 大変勉強になりました。またよろしくお願いします。
948 :
926 :2006/02/28(火) 13:26:21 ID:ot85kyAM
>946 これに修正したほうがわかりやすいですね assign out = q_pos[0] | q_neg[0];
んで逓倍の方はどうやるの?
950 :
926 :2006/02/28(火) 16:46:29 ID:ot85kyAM
>949 よく考えたら単純には行きませんね。 2テイ倍で3進カウンタを作りT-FFを駆動するのはどうでしょう?
ヒゲで死ぬだろうな。
逆にゲートの遅延を利用してヒゲを出して逓倍する方法もあり
プライオリティーエンコーダの普通でない回路を知っている方は何パーセントぐらい居ると思いますか?
プライオリティーエンコーダの普通でない回路を知っている方を母集合に採れば プライオリティーエンコーダの普通でない回路を知っている方は100%ですね。
プライオリティーエンコーダの出力をデコードしたものが d & -d っていうのなら知ってる。
そもそもプライオリティ援交ーだーって 何?
そりゃま、金持ち優先ってことで
958 :
774ワット発電中さん :2006/03/02(木) 19:44:04 ID:gDtzV18x
ISEの設定で質問です。 HDL記述ウインドウの文字、バックグラウンドの色は変えれないのでしょうか?
959 :
774ワット発電中さん :2006/03/03(金) 11:07:37 ID:ViDZ+KTF
IcarusとかCverで、 シミュレーションを無限ループさせある条件に引っかかったときだけ中止&中止した付近の結果だけ(波形でみたい)を 出力する方法ってありますか?
初期値0, ある条件になったときだけ1になる信号を用意すればしまいじゃん。 その信号が立ち上がったときを検索すればいいだろ。 modelsimでも使え。
条件の付近”だけ”出力したいんじゃないのか? 条件後なら好きな所で止める記述すれればいいだけだが、手前のほうは…。
時間指定してダンプは? initial begin #xxxx; $dumpvars; #xxxx; $finish; end
チョッパー回路が合成されないためには、RTL記述時から何か気をつけるべきでしょうか? それとも合成条件でなんとかするべきでしょうか?
何も考えずに合成条件を厳しくしている。 …本当は記述時に考えたほうがいいと思うんだけどね。
hosyu
966 :
774ワット発電中さん :2006/03/14(火) 01:59:54 ID:bLTnuwHQ
どなたか教えてください。 FPGAにD/Aコンバータつないで遊んでいます。 運良くちゃんと動いているようなので、サイン波形でも出すべと 考えていたのですが、うまい方法が思いつきません。 HDLは、Vrilogです。 マイコンなんかだと、配列に0-90度分の数値を置いて(ROMに配置される) それを垂れ流しで出来ているんです。同じ方法でやろうと、 Verilogで配列の書き方はわかったんですが、 数値を定義する記述方法がわかりません。 Cでいうところの、 sin [90] = { 127, 138, 148..... }; みたいな書き方ができるのでしょうか? 宜しくお願いします。
>>966 reg [7:0] sin [90] = 127, 138, 148....; でいいんじゃないのかな。
969 :
774ワット発電中さん :2006/03/14(火) 13:34:38 ID:bLTnuwHQ
>>967 ありがとうございました。
やってみましたが、ISE7.1がエラーを表示してダメっぽいです。
なぜでしょうか?
どんなエラーかも書かずに何を期待してる
>>966 制約ガイドのINIT_xxのところに書いてある。
>>970 ひと月前に何かもらったろ。そのお返しだよ。
俺は何も貰ってないぞ?
そういや義理のお返ししてないやマズー
>>974 うわさされてるだろなー。礼儀に欠けるとかな。
そういう評判って結構大事なんだよなー。
ご 愁 傷 様
では埋めますね
977 :
774ワット発電中さん :2006/03/17(金) 09:09:59 ID:3UFEqcYm
>>975 ざまぁみやがれwwww
って感じなんだが
オレは一個ももらってないし…
では埋めますね
どうせならコードで埋めるぐらいの気合が見たい。
outp <= '0' when inp="1" else 'z';
/* UME */
if CLK'event and CLK='1' then
CLK <= '0'; end if; end process;
// UME
endmodule
FD1S3AX
// synthesis attribute UME of "記述言語で論理設計" is TRUE;
process(ck, addr) begin if ck'event and ck = '1' then case addr is when "0000" => dat <= "01000010"; when "0001" => dat <= "01000010"; when "0010" => dat <= "01000010"; when "0011" => dat <= "00111100"; when "0100" => dat <= "00000000"; when "0101" => dat <= "01000010"; when "0110" => dat <= "01100110"; when "0111" => dat <= "01011010"; when "1000" => dat <= "01000010"; when "1001" => dat <= "00000000"; when "1010" => dat <= "01111110"; when "1011" => dat <= "01000000"; when "1100" => dat <= "01111100"; when "1101" => dat <= "01000000"; when "1110" => dat <= "01111110"; when "1111" => dat <= "00000000"; when others => null; end case; end if; end process;
>>989 LEDくっつけて動かすと秘密のメッセージが!
-- 秘密でもなんでもいいからコード書けやボケが!!!!!!!! -- !マーク付けてるヤツってくだらんレスが多い!!!!!!!!
when "0100" => dat <= "00000000"; when "1101" => dat <= "01000000"; when "0011" => dat <= "00111100"; when "0101" => dat <= "01000010"; when "1100" => dat <= "01111100"; when "0010" => dat <= "01000010"; when "1111" => dat <= "00000000"; when "0110" => dat <= "01100110"; when "1110" => dat <= "01111110"; when "0111" => dat <= "01011010"; when "1000" => dat <= "01000010"; when "0000" => dat <= "01000010"; when "1011" => dat <= "01000000"; when "1001" => dat <= "00000000"; when "0001" => dat <= "01000010"; when "1010" => dat <= "01111110"; 一応ソースだけスクランブルにしてみた
>>991 while(1) {
fprintf(stderr, "おまえモナー\n");
}
-- いいかげん次スレ立てろや dat_ochi := true after 2 day;
signal Project4 : thread range 1 to 1000;
-- UME
/* 1000 */
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。