【Verilog】 記述言語で論理設計Project14 【VHDL】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
HDLの処理系も、それを実際に動かすシミュレータ・評価基板も、 安価で入手できるようになってきました。 このスレが目に入ったお嬢さん! HDLで何か作って遊んでみませんか。 日曜工作のHDL書き、学生さん、プロの方、主婦の方、カキコお待ちしております。 関連情報は >2-10 あたり。 入れ食いキーワード ・Nios、MicroBraze ・Artix-7、Kintex-7、Virtex-7、ハードコアCPU内蔵 Zynq-7000 前スレ (直近スレのみ) 2012/11/03〜 【Verilog】 記述言語で論理設計Project12 【VHDL】 http://uni.2ch.net/test/read.cgi/denki/1351913871/ 2011/12/07〜 Project11 http://uni.2ch.net/test/read.cgi/denki/1323187568/ 2010/09/17〜 Project10 http://kamome.2ch.net/test/read.cgi/denki/1284652343/ ※前スレ http://rio2016.2ch.net/test/read.cgi/denki/1394091422/ >リレーでFF って、どういう接続にすればいいんでしょうか。 レーシングしてしまうような気がする >>614 入学式と卒業式と、 3人の会社の時に准教授の産学共同研究して学食おごってもらったけど。 東工大に入っているね。燕 >617 直ぐに諦めるだろ。そういうところが駄目なのよ。 俺は方法を見つけたぜ。 >>615 リレー回路をやってなかったので詳しくはないんだが、昔のクロスバ交換 機ではワイヤスプリングリレーというのが使われていた。 このリレーはEBM接点(Early Break Make,3点接触あり)とかEMB接点(Eealy Make Break,3点接触なし)とか接点の動作タイミングがきちんと規定され ていて、ダイヤルパルスのカウントをやったりしていた。 こういうリレーを使えばうまくいくのではないかな。 リレーでも、NANDかNORができさえすればFFもできるでしょ >620 ロジアナは不要だ。さあどうやってやる?w FPGAではいかにしてデバッグするかというのがとても大事だ。特にRTLレベルで完全に 問題を潰しておくことが重要なのだが、RTLレベルで完全にやっていても 実機になると、見落としがあったりしてある程度の変更はでてくる。その場合には RTLに戻って再度デバッグをしたりはしないでそのままコードを書いて追加していく。 そういう時に思わぬコードミスが発生する。 このような場合に通常のソフト開発にありがちなアジャイルな方法、方法という よりはこのような精神、つまりは「とにかくやってみて、、、」というような精神態度 ではドンドンミスが発生する。 なぜならVerilogは文法も稚拙だがコンパイラのできが非常に悪いので一般的な コンパイラが発見してくれるようなミスが潜り込んでしまうからだ。 追加の場合には、うろ覚えで追加することは絶対に避ける。100%確実な コードのみを追加する。もし少しでも文法やコードに自信がないなら、動作している コード例と比較して確実に動作するコードを書くようにして憶測でコードを追加しない ことが重要だ。 >なぜならVerilogは文法も稚拙だがコンパイラのできが非常に悪いので って自分でかいてるだろ。 少なくともVHDLのほうが厳密に書けるんだからさ。 コンパイラ(って合成ツールのことだよね?)は何使ってるの? 文法チェックならLintツール使えよ。 教科書を見てて思うんだが、パルスで起動する場合にエッジを取るボケが多いな。 最初から微分しとけや!アフォって思うな。Moduleのなかでいちいち微分する奴は アフォだろ。 >少なくともVHDLのほうが厳密に書けるんだからさ。 Verilogですら冗長コードがあるのにVHDLとか「なんだよ、この糞っぷりは」 っておもうぞ。冗長コードのウンコの山だろ。w 話にならん。 最近嵌ったのは reg buf[7:0] ; []の位置を間違うんだよな。これはエラーが出ないんだよな。あとスペルミスして ても知らんぷりでエラー出さないんだよな。w SVHDL :Shit Very Hard Design Ludicrous ソフトは上から下まで凄いいろんな種類があるけど、ハード記述言語はあまり進歩がないねえ 頭も固いのか? >>639 >>482 かな それはそうと default_nettype も検討したら? >>642 言語もシミュレータもトランスパイラもいろいろあるでしょ 大手がそれを取り込まないから誰も使わないだけで で誰も使わないからコストかけて取り込めない >厳密さと冗長さって全く違う概念 コード量が増えるというのはコードノイズが増えるってことだ。だから厳密性が 無茶苦茶劣るということだ。 厳密なものは、シンプルで美しい。間違いが少ないし、当然間違いが入り込みにくい。 したがってVerilogの方が糞でもかなりマシ。 ユークリッドの第五公理でもわかる。この部分だけ美しくない。必然的にここから ユークリッド幾何のボロが出たということだ。 1.任意の一点から他の一点に対して直線を引くこと 2.有限の直線を連続的にまっすぐ延長すること 3.任意の中心と半径で円を描くこと 4.すべての直角は互いに等しいこと 5.直線が2直線と交わるとき、同じ側の内角の和が2直角より小さい場合、その 2直線が限りなく延長されたとき、内角の和が2直角より小さい側で交わる。 あとソフトの開発ツールが百花繚乱なのはやっぱりお手軽さが違うよね とりあえずJavaScriptかJVMかllvmに落としておけばなんとかなるみたいな >それはそうと default_nettype も検討したら? 始めて知った。noneにしておいたほうがいいな。 モジュール間接続をしたネットを上位にOUTPUTする場合は頻発するが、名称を wire 宣言をするとOUTPUT名称を変更しないと2重定義でコンパイルエラーになる。 しかし定義を省略すると接続できる。しかし接続できてもバス配線の場合には不具合 が出る。しかしViewerでは正常に配線されていてコンパイラはエラーもワーニングも ださない。(多分) signal 宣言一つで reg or wire 双方への推論を許してる 何処が厳格なんだよ >>650 FFになるかwireになるかなんて本来は関係ないはず。 reg だからって必ずしも FF にはならないだろ。 >>644 トランスパイラ? ハードの場合、最終的にはedifかGDSだからなぁ。 言うだろうと 思ってたよ reg -> wire は有っても、その逆は無い そもそも、case 分で書いたほうがスッキリするから 敢えて、助長縮退を意図した書き方を許してるだけだ 自称 厳格、それ以外にとり得がない 同じ物を書くと、コード量2〜3倍ぐらいになる 唯々文句言ってるやつよりはマシそうだが 両方やって、比べた上で言えよ GPUでさえ汎用言語ではダメで、CUDAとかOpenCLが必要なんだから より並列性の高い言語を作らないいかんな。 できればFORTRAN66をベースに。 >>657 いいたいことはいろいろあるが 今現在、最もGPUを酷使するアプリはpythonで書かれているという事実がある 最もGPUを酷使するアプリって何だよwww 俺が作った、全ユニットフル稼働のテストツールより酷使するアプリなんてあるか? >>660 お前のアプリは所詮お前のハードでしか動かない。 世界中のGPUが必死に何の計算してるかと言う話だから、 お前のチンケなアプリはの話はどうでも良い >>659 コード書けない層ほど中身のないAIに飛びつくから。よってまともな成果は出せないだろう。 VHDLをやりもしないで、クソ扱いはクソワロタシテロ。小一時間草でも植えておけ コード比較 -----verilog----- module mod_a ( input clk, input rst_x, input [7:0] i_in, output reg [7:0] o_out ); always @(posedge clk or negedge rst_x) begin if (~rst_x) o_out <= 8'h0; else o_out <= i_in; end endmodule ----- 糞VHDL ----- library IEEE; use IEEE.std_logic_1164.all; entity mod_a is port ( clk : in std_logic; rst_x: in std_logic; i_in : in std_logic_vector(7 downto 0); o_out : out std_logic_vector(7 downto 0) ); end mod_a; architecture rtl of mod_a is signal r_out : std_logic_vector(7 downto 0); begin process (clk, rst_x) begin if (rst_x = '0') then r_out <= (others => '0'); elsif (clk'event and clk = '1') then r_out <= i_in; end if; end process; o_out <= r_out; end rtl; Verilogの方が冗長なのは事実だけど、それだけでVHDLを 否定をしてる人は単にプログラミングに対するセンスが ないんだと思うよ 具体的なコードを明示した上で比較したヤツ それを、抽象的な物言いだけで否定してるヤツ 技術者の端くれなら、具体的な利点を示した上で反論しろよな 固定小数点演算のかけ算機を、verilogでつくれば、VHDLよりverilogがクソなのが理解できるだろ。草植えるのマダカヨ 冗長というよりゴミだろ。VHDLとかほぼゴミで埋もれる。 c[16] = a[8] x b[8]; こんなん? 掛け算ならfloatだろうが、intだろうがライブラリを使うだろ。 VHDLのライブラリアクセスがどんだけめんどくさー――――いか。殆どゴミコード。 掛け算くらいツールが合成してくれるよ。 ライブリって何?FPGAの? 何コイツ無職?おまけにサイコパスっぽい。 ひょっとして、元ルネサス? >675 そうなの? フロートはレイテンシの調整とかがめんどくさいので使った記憶が あるが、整数は使った記憶がねえよ。記憶に残らんほど簡単ってことか。 固定小数点って言葉自体がバカっぽいな。ただの桁合わせのことだろ。W 何コイツ無職?おまけにサイコパスっぽい。 ひょっとして、元ルネサス? 画像処理とか実数演算を固定小数点で高速化して自慢したいんだろ。w 馬鹿の典型だな、そんなのがひつようなのは0.0001%もねえよ。 Floatでやっても高速化できるんだから、Floatのほうがいいんだよ。設計変更での 柔軟性が高いしな。 馬鹿がいて固定小数点で作りやがって、一寸変更かけると「できません」っていう。 何コイツ無職?おまけにサイコパスっぽい。 ひょっとして、元ルネサス? 何コイツ無職?おまけにサイコパスっぽい。 ひょっとして、元ルネサスの手配師でしょ。技術的な中身無さそうだし。 VHDL推しは一定の理解はするが人格攻撃始めたら賛同者なくなるよ >>684 スマンナ。ほんままんどくさいんだわ。大手半導体にいるひとたち アリサはルネサスに派遣されて惨めな思いをしたんだろ >>666 行数が短いから言語として優れてるって言いたいのかな? ハードを記述してるって感覚がないだけに見えるけど。 >>689 俺の手を煩わせるなってことじゃ?全部手作業なんでしょ その感覚は実は必要ないかもしれない C > Verilog > VHDL rtl書いてる時間ってHDL書いてる時間ってこと? なるほど となるとRTLを書くとは具体的な作業としてはどういうものになるんですかね >ハードを記述してるって感覚がないだけに見えるけど。 どんな感覚だよ。 まずHDLの基本が糞だよな。 非同期リセットの書き方 always @(posedge clk or negedge resetn) if(resetn) dff <= 0; else dff <= dff + 1; これがどーーーーーんだけ糞な書き方か意味わかる。 「非同期」だってのに何で同期回路と混在するんだよ。馬鹿じゃないか。 この時点で言語として破綻してる。 negedge resetn ぷっ 笑える。これは馬鹿ってレベルじゃなくて糞馬鹿。 >rtl書いてる時間なんて全体の1割未満だもんな だから問題なんだろ。今度RTLを使うのは何か月後だろうか? 偶に使うツールほど扱いが難しい。使い方を忘れるからな。 modelsimも糞だよな。ほんと覚えにくい。毎回立ち上げ時に苦労する。 いいじゃん、非同期resetなんか使わないんだから。 >>696 そもそもこの場合の非同期ってのは、クロックに同期してないって程度の意味だろ? 実際にはreset信号に「同期して」リセットさせるんだから 書き方的には問題なくね? なんか、ニッポンの半導体産業他の崩壊を今目のあたりにした希ガス always @(posedge clk) if(~resetn) dff <= 0; else dff <= dff + 1; これがVeilogの同期リセットの書き方だよ。 RTL Viwerで比較して見てごらん。 同期リセット 非同期リセット をFPGA ASIC にて、トランジスタレベル(CMOS) の回路図を検討し、その2*2の利点・欠点を 一覧にし、考察をすること。 >いいじゃん、非同期resetなんか使わないんだから。 単純リセットのための同期リセット使うとという意味なら、それは誤りだ。 同期リセットはリソースをかなり消費する。 非同期リセットを使った方がいい。 デバイスがPowerONリセットを用意しているから不要。単純リセットは省略する。 というのなら意味は解る。 でもじゃあシミュレーションで真っ赤っかになるのをどうすんの?ってことになる。 Force the FFs/registers to reset by using the ModelSim force command. コードに書かないとしたらやり方としてはtclでこいつを叩くのかな? やったことないが、、 -----verilog----- module mod_a ( input clk, input rst_x, input [7:0] i_in, output reg [7:0] o_out ); always @(posedge clk or negedge rst_x) begin if (~rst_x) o_out <= 8'h0; else o_out <= i_in; end endmodule 例えばこの例だと、 ★致命的な間違い 1.iolistでグローバルのclk,rst_xとi_inの混在は問題。 同じスタイルで書くのは良くない。かなり致命的間違いだ。 2.非同期リセットのnegedge rst_xこの書き方も致命的欠点 まず致命的欠点だけでも解決するなら -----verilog----- module mod_a (input [7:0] i_in, output reg [7:0] o_out); always @(posedge clk ) begin o_out <= i_in; end endmodule 本体はこれだけになる。 ★しかし”always @(posedge clk ) begin ”この記述は何も中身がない。なので削る。 -----verilog----- module mod_a (input [7:0] i_in, output reg [7:0] o_out); o_out <= i_in; endmodule グローバルどうすんの? って *.(clk,clrn) = clk,rst_x; でいいだろ。 ネガティブエッジは? って .clknだな。 >arisa君 理屈をつけて説明する癖をつけなさいね。 理屈なしににやにや笑ってみたり、嘆いてみたり、思わせぶりに批判するのでは、 力がつかないよ。 何故理屈がつけられないのか? それは意見に自信がなくて、間違いが怖いから でしょ。 言い訳の余地を担保したいから、曖昧にしか言えない。 >また、合成の話とごっちゃにしている。 どこが合成の話なのかな。w >698 君が勘ちがいするのもわかる。バリ糞分かりにくい無茶苦茶な文法だから。 非同期リセットの書き方 always @(posedge clk or negedge resetn) if(resetn) dff <= 0; これnegedge resetnでエッジって書いてあるが 「clkで叩かないようにように」 って意味だからな。 だから dff.clrn = resetn; と同じ意味。 だからこの3行が意味するのは、単にリセットをdffのclrnに接続して clkをDffのclkに接続するってこと。 dff.clrn = resetn; dff.clk = clk; ってことだ。 always @(posedge clk or negedge resetn) って糞ってのがわかるだろ。 or だと なんでorなんだよ。 negedge だぜ 意味不明だ。 盛り上がってるとこすみません >>695 についてはいかがでしょうか? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる