【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/ MIT発、VerilogをベースとしたDNAプログラミング言語 早く弄りたい )))()())()(())))))(((()())((()))(()(((()()()((()())))((())(((()()))(((())))( (())(()(((())()))))()())((()()()())((((()(()()())()(((()(()))))(())))())()() ((())()(()))(((())())()))(()())(((()()())((())())(()()((()(())))))()((()))() ()(())))(()()))))(()()))((()()()()))))()((())))()())(())()()(((())((((()(((( ())(()))))(((((((((()()))())))()()))()(()))))((((())()())())))()(())((()(((( ))()()(()((((()))())))((()()((()(()()(()()(()()))))(()()((())())()))())()(() )())())())((())))()(()())))()(((((())))(((((()))((())()))(())((())((())(()() ())()()()()())())()()))(()(()))()(((()()()()()()))())()(()())(()))()(()((((( ())(())(()(()((((())(()(()(()())(()()))())()()())()()))())()(()))))()(()((() ())((()()(())((())(())(((()))))()))))((())(((()))()))()()(((())((())((())()) )(())()()))()()))()((())()(())(()((((())()))()))))((()))))((((())()((()(()(( )(()(((((((((())(()()((()))()()(((())())()()()()())))))()())(()))()()()))()) ()())))()))()((((((()))()()))((())(()()((())()(())()())))()((()(((()()))(()) ))(((()()(())))))(())))((())(())(()(()()(())((()(((()((()))))())())()))((()( ()())()(((())((()())(()))(()())))(((()(()())((()((())()()((())()))(())())))) )))(()()))))()()((())()())))))(()(()))())(())((()((()(()))((((()((()(())((() )()(())(()))(())(()))))((()))()()))()()()((((())())))((())()())((((((((())() (())()))))())()()((((())())(((()()())()(()())))())()((()(((()())))((())))((( ()(())(((()()()()())()()))()()))(()()()()())()))(()()())))(())(((()))((()((( (()))))())())))))())())())))(()()(()))(())(((((((()())()((((()((())))(()(((( ())()()(())(()()))(()())())((()(())()((())()()()(()()))))()())((()())((()()( ()())))))())())(()()))()(()((())((())(()(())(((((())()())(((()(()()))()(())) (()))())))(()))))())())(()())()()(()(()())()((()(((()())(()(((((()))()((())) (()()))(()(()(())())(()()())())((()(()(((()))())))())))()(()))((()(()())(()( )())))())())))))()())((()))()))()()()))(((()(()))(()()(((((((((()(())(())((( (()(()()()))(()(()((()))))))()((((())(()()())())(()))(()))(((((())(()))))(() ())((())()))(((((()))(((())()(()()(()()((()()))()(()(((()()))()))())))()))() ()()()())())())))((())())((((()(())()()((()()((((()))()(())))(()))())))(()(( ()())()())))(((((())()))))())))(()()())))))(()))(((()((((()(((()())((())()(( ((((())()(())((()(()()())((()()()(()())()))()((())))(((())()))))))()((()))() )))(((()(()()())()()((()())))((()(()))((((((()())((())(())())))()))()(()))() )())(())())()(((((()(((()()())())())()))()))((()))))()(())(()))(()((()()()(( (()((()(()()(()((()))(((())()(((()(()))(()())))()(())())))())((())()(()))))) )())())()(())))))(((())()()(()(((())()())())(((()))))))))(((()(()(()()()(((( ))()))(()()))())))()))))(())(((()()((())()))))()(((()))((())(()((()((((()((( ))))((((()())(((()(()))))))()(()(()()(())((((())))((())((()()))))()(()(())() ))(())(())()))((())(())))((()))())((((())(()((()))))(((()())))((())()()(()(( )((()())))(()(()))(())()(())()((((((((()(((()(()(())(()))))))(())))()))(())) ())(((())()))))((())(()(()()))()())))(())())(((())((((()()(()))())((()())()( )(()))()())()()()()))(()()()()()())))())(()(()()))(()(()())))))((((((((()((( )))(()()()())(()))(()((())))((((((((()(((())))))))()()))(((()())((((())))()) )))(())(()((((())())(()))()))))(()())))(())))()()))(()()((()())()((((()((((( ()()()()((())(()(())((()))(()(()))()()))()()(((())()()()())))))()(())()(()(( (((()(((())(()(())())())))()))))((())))(())(()()))(())(((((())((()))()()(()) )((()()()))())()()()(())((()()(()))())(((((())))((()))())())())(((()))((()() ())(()))(())))()(((())()()()()((())))())))(((()(()(()(((())())()))((()((())) ())))))(())()()()((((()()())()(()))()()(())))((()((())((())((()))))()()()((( )()))))))()))((())))))()(()(()()(((()(())(()())((()()())))()())(((((((()(()( ((()())()(()()))())))())(())(()())()(())((())()()()((()))()())(((((()))()()( (()(((())()()()(()(())(()))())()())()()((())(((())()))(())((())())))()((())) )()(((()((())()())())())()((((()()))()))))))()()((((()))())(())()))(())((((( (()))(()()()))())(()()())()(((()()((())))))(())()())(()()())(()()((((())())( ((()())(((()))())()()()()(()((())))(())))()()()))()()(())()(()(((())))()(()( (()(()(((()())(()))()()))())))()()((()()))()))((()(())())))(((()(()(((()())) )(())((())()((())))((())()((()())())(()()(()((()((()))(())))))))(()(()()))(( )(())))((()))((()(())))()((()()()((())()())(())))())()()()((()(()())()))(((( )))))()()(((()()(()())))()(()(()()())(()(())((()(()(())(((((()))((()))())))) (()())(()(())()())((((((())())))(()))())())(())))(()))))(())((()(()()((()()( )()(())((())()((((()))())(())()(())(()))))())())((()))()((())(()()(()()())(( )))((((())()))(())()((((())()()(()()((())()))))))()())())()()((())(()((((()) (())))((()))())(()(())())))())()(()()()())(())(((()((()))((()))())(()()(()(( ()())()()))())(()()()((()))(((((((()())()()(((((())())))()()()))))))((())()( ())(()(())(())(()()))(())((()((()(())((())((()())))))(()((()()()(()))))))()( ))()()()(())((())(()(())))((((((((()((())))()))))(()(((())(()))))((())())()) )(()((())())()))()(())()(())()()()))))(((()(()(()))))(()((()))()())))((((((( )))))))(((()))()((()((()((((()()()(((()()())))()))()(((())((()())))()(()))() ((())())())(()((()((((((()(((()((()))))()(((()))))))()))()()((()())))())())) (())))((((()(()()()(()()())))((()(())()()()()(()())))())())()))((()(())())(( ))())(((((())(((()(()()()(((()))()()())))))()))((())(()()(()))))())())(()((( )))())()(()())))()((((()((()(())()()()))))(((()((()))()()()())(()()))()((()( ))))())))()((()(()()))(((((()(()()())()(()())(((()())(())(()(((())())))))()( ()(()))()())()))))))(())()()())))(()()(((()()())()))()))()(((()()(((()(((((( )))))()()()(((((((()(()))))()())((((())()))((((()))((())()((()((()))))(()))) ()()))()())(()((()())()()(((()))(()((()()))()))()()()((((()(()))((()())()))) ())()))()(())(()()(())(()((()((()(()((((())()()))(())())))(()((())())())())) )(()()))())((()())((()))((((())())()(((((((((())))(()())())))(()())())())()) ))((()))))())))()()((()(()()(())((()(((((())(())()(((()(())))(()(()))))(())) )((((((()(()))())((()))))(()()()))())()())))()(()(((())((((())()))())((()))( (((()))()(()((()(()(()))))()((())))())(()))((((((()))((()(((()))())()))()))) )()()()())(()()()(())((()((()()))()))(())))()))))(((((())))(()((()((()()())( (()(((()))())(())))(())(((()(((())(())()()()())()(())(()))))()(()((()))))(() )(((()((())()((()(()((())))))()())()(((())(()((()))))(())()()))()(())))((()) )((()(())())()))())()()(()()(())()())(())()(())((()(()(())(((())))))(())()(( ((()())()()))((()()(()())()()(()(()(()(())(())))))())))))(((((())(())))(()(( (())()())(((()(()()(())(()()))(()())(())(((())()))(())(()()))(()))((())))(() ((((())((((())((((((()))(((()))()()()()()())())())))((((())))(()))))))()))() ))((()))())((())()(((())()()(()(())()()()())((((()((((())))()))()))))(())(() )))(((((()))()()))()))())(()(())(()()(())))(()))()((()()))((()))))((()(((((( ()()((()((()()()((())))(()))))()(()))())((())())())(((((())))(()(()(()()))() ()())((()(()))))))(()(()((())())()(()))))(()(())())(()))())(()(()((()()((()( ))()((())((()))()()())))))(())()))((()((((()(()((()()))())((()()()())))(((() )())((())()()(((((())))(()()(()((())))(()()())())()(((()))()((()()))))(())() ()())(())()(()((((()(((()()))(()())()()))(())(((()(())()))(()())))()))())(() ()()))(((()())()()))()))))((((()(((())((((())(())((())))))()(()(())(()())()) ())(()()()))()()))(()((()((()))))((()))((((()(((()())()))))))(()))((())((()( ))()()(((()((()))())))))))(((()())))())((()())(()()())()(())))((((()()(()((( ()((()))((((()((()((()(())())(())(((())())())(())(())((())(()))))))))()(())) (()))())(((((()(((()(()(()()()))))))))(())((())))(()(()))(((()())((())))(()) ))()))()()(()))()())()()((())())))(())((())))()()()((((())(((())(()(()))(((( (())(()(())))(()((((((())(((()))((())(()())())())()))())()))()())()(()((())) 仕事で論理設計して4年目だけど、未だにVerilogへの違和感が拭えない。 ALTERA(MCLK=50MHz)から1Hzを出力しようと思ったら、どういう方法が最適でしょうか 50MHzのカウンタをGPSからの1PPS信号でリセット、25Mパルスカウントで出力を1にする 50Mhzから1msecパルスを作成して有効利用をする。 1msecから100msecパルスを生成して有効利用をする。 100msecパルスから1Hzを作り出す。 役に立たない無駄社員の有効な使い方と同じだね。 >9 100msecパルスの有効利用方法を10個ほどあげてみて。 追跡が難しいエラー A common error is to connect a signal which is supposed to be an input to an output port. Because Verilog is so flexible with regard to connecting ports, this will usually not be caught until simulation time, when a wire has two drivers on it when it should only have one, or when a wire has no drivers on it. These errors can be difficult to track down. インプットになるべき信号をアウトに接続してもエラーが出ない。 そんなことはないよな。こいつ何いってるんだろ。 0または2つ以上のドライバで駆動されるwire open又は衝突するからか? 見つけにくいって事はねえだろ。 Lintがエラー出す。 Sim後ならNCでもverdiでも追跡は得意だろ。 ……まともにport接続してれば。 3state バスにするとセレクター作って合成してくれた。ISEの頃だけど。 文法は一通り覚えたので、勉強用に本をいくつか買おうと思ってます 皆さんのおすすめの本はありますか? 前スレのリセットなんだけど、リセットIC無し且PLL使わない場合どうすんのが一番いいんだ? デバイスごとに変わる。プロジェクトごとに変わる。 アプリケーションごとに変わる。 >>20 ありがとう 今手元にDE0しかないんだけど、ユーザー回路のリセット作るとしたらどうするのが一番いいですか? 既にボードになってるんだろ? fpgaならコンフィグ後には初期化されてる。 クロックも止めないんだろ? 外部リセットも要望するなら同期化させといた方が安全安心。 コンフィグ時に初期値Max(たとえば0xFF)のダウンカウンタが 動いてる間はリセットっていうやつとかどう? カウンタが0になったらリセット解除。 リセット信号はグローバルラインに乗せること。 すべてのFFが同時に動作し始める保証がないので、カウンタよりはシフトレジスタのほうが良いよ。 logic [7:0] shft = 8'hFF; always_ff @(posedge clk) shft <= {shft, 1'b0}; assign rst = shft[7]; とか。 >>22-24 ありがとうございます >>24 の案がしっくりきました! >>24 すべてのFFが同時に動作し始める保証がないってのは コンフィグが終了するまでの間はリセット保持しておくべきってこと? シフトレジスタの長さをそれに合わせて調節するという感じですか? コンフィグが終了するまでは、>>24 の回路自体が存在しないよ(構成されてない) 何が解からないのかが解からない、のレベルか? >>24 logicというのは、regと何が違うのでしょうか? あと、連接で、shift[6ころん0]としなくてもよいのでしょうか? 24は SystemVerilog なんでしょ shift のほうは、先頭ビットが捨てられるだけだから warning は出るかもしれないけどエラーにはならないし bit幅拡張する方向と違って結果どうなるかについて あいまいな要素ないから使ってるんでは? ## 個人的には、VHDLの'high,'low,'range みたいなのが ## verilog にもあったら・・・って思う >>27 コンフィグが終了するまで回路自体が存在しないのは>>24 も同じことで、 すべてのFFが同時に動作し始める保証がないのはシフトレジスタも同じなのでは? なんでカウンタよりシフトレジスタが良いのかが分かりません シフトレジスタなら各FFの動作タイミングがずれても 1を保持してる状態がかわらないからかな? 一般的な話をすると、変なクロックが入ると バイナリカウンタは値が飛ぶ。 一番極端な話を持ち出すと0xFF→0x00遷移ではあらゆる値に飛び得る。 冷静な話をすると>>23 の0xFFからのダウンカウンタは 最初の一発目で0xFE以外に飛ぶとしても0xFFなので シフトレジスタと大差ない。 でも好みはシフトレジスタかな。 最初のほうでコンフィグされた回路は全体のコンフィグ終了前に 動作し始めるの? もしそうなら、前スレで出てたPLLのLocked信号なんか使った方法でも PLLとリセット信号発生の回路が最初にコンフィグされるって保証ない わけだから、ほかの先にコンフィグされた回路がリセットかからずに 走り出しちゃうってことになるんだけど >>23 アルテラだとffの初期値は0じゃなかったっけ >>29 SystemVerilogなら$high(shft)とかでできますよ。 >>35 インバージョンプッシュされるから、あまり気にしなくていい。 >>13 「NCでもverdi」 金持っている企業じゃないと、そんなの使えないからw NC Verilog懐かしいなあ。 表示用PLI作って遊んでた。 回路設計習い始めたけどブロッキング代入ってのがどうにもよくわからん。。 辻褄合わせの設計しか出来なくて嫌んなってきた こんな書き方しないで always @(posedge gclk or posedge reset) if(reset) fb_q <= 24'h0; else fb_q <= fb_input; always @(posedge gclk or posedge reset) if(reset) fset_q <= 24'h0; else if (fset_ena) fset_q <= fset_d; こっちのほうがいいよな。 always @(posedge gclk) fb_q <= fb_input; always @(posedge gclk) if (fset_ena) fset_q <= fset_d; always @(posedge reset) begin fb_q <= 24'h0; fset_q <= 24'h0; end; やっぱり end else begin を入れないと見にくいよね。 always @(posedge gclk) begin if( reset == 1'b1 ) begin fb_q <= 24'h0; fset_q <= 24'h0; end else begin fb_q <= fb_input; if (fset_ena == 1'b1 ) begin fset_q <= fset_d; end else begin fset_q <= fset_q; end end end さすがに fset_q <= fset_q; はいらないでしょ always @(posedge gclk) begin fb_q <= fb_input; if (fset_ena) fset_q <= fset_d; if (reset) begin fb_q <= 24'h0; fset_q <= 24'h0; end end >49 きれいだが、それだと同期リセットになるからだめ。意味が違ってくる。 @(posedge gclk or posedge reset) で。 } else { は許せるけど end else begin は気持ち悪い こっちのほうが俄然いいと思う。なぜなら非同期リセットなんてロジック 本体にあると邪魔だ。ロジックがよみづらくなるから。 always @(posedge gclk) begin fb_q <= fb_input; if (fset_ena) fset_q <= fset_d; end always @(posedge reset) begin fb_q <= 24'h0; fset_q <= 24'h0; end とくにレジスタが大量にあるときは一か所で一括してクリアしてしまう。 こうするのがいいと思う。 always @(posedge reset) begin fb_q <= 24'h0; fset_q <= 24'h0; asst_q <= 24'h0; vbnt_q <= 24'h0; z5tyuq <= 24'h0; sdft_q <= 24'h0; hjty_q <= 24'h0; fser_q <= 24'h0; njit_q <= 24'h0; mmlt_q <= 24'h0; hyut_q <= 24'h0; vvgt_q <= 24'h0; tyut_q <= 24'h0; i89t_q <= 24'h0; end これで特に問題なければ、モジュールのreg定義をサーチして自動的にクリアロジックを つくるマクロを作っておけば、リセットを気にする必要なしにプログラムできる。 もう、Verilog じゃなくて別の言語作ってくれよ。 マジでそう思う。 同期設計に特化して、クロックや非同期リセットなんてわざわざ指定せずに済むようしてくれ。 tclでマクロ作ってみた。 正規表現使うと簡単にできる //--- reg reset logic --- always@(posedge reset) begin buf1 <= 0; // reg [7:0] buf1; buf2 <= 0; // reg [7:0] buf2; buf3 <= 0; // reg [7:0] buf3; end 本当は set rq {\[(\d+):(\d+)\]} とか使ってレジスタサイズ出して 8'd0に したほうがいいのかも >>64 ちんこには、コンドームをつけるのと同じです。 生が好きな人は生がいいだけの話です。 parameter val1 = 11 parameter val2 = val1/2 は 1011→ビットシフト→0101 で「5」 という切り捨ての認識で大丈夫ですか? >>66 厳密にはビットシフトではなくて整数の除算ですけどね。 せっかくTCLでマクロ作ったのに腹立つことにコンパイラが全然受け付けんな。W モジュールのマッピングってどうしても不細工になるんだが imageとしては {dtout, ack} = i2c(clock, reset, dtin); こういう感じだよな。 そこで考えたのがこれだ!!! どうだ。 //------------------------------------------------------------- i2c u1( //I2C instance dtout, ack, // <=== //output clock, reset, dtin);//inuput そんな小技を考えなくていい新言語を考えてくれよ inoutもきれいにかけるようにしてね >>70 parameter val1 = 11 parameter val2 = val1/3 ビットシフトなら↑とかどうするんだよ? http://zakii.la.coocan.jp/hdl/25_parameter.htm ・・・なぜならば、マクロはどのソースファイル内でdefineしても、FPGA全体のソースファイルに対して有効になるので・・・ この人の認識、合ってる? AやXを使ってる限りそのようにはならないけど 環境依存? もし主張通りなら、わざわざ ファイル毎に `include xxxx.v とかする必要がなくなるので そのコーディングなりを参考にさせて頂きたい >>53 同感だけど、じゃあどう書く?って言われて有効な方法ないんじゃ? 3行に分ける? >>73 関係ないけど、include するファイルのファイル名って、みんなどうしてる? .h は編だし。.vi とか見かけるけど。 SRFFってどう書いたらいい? 案1 always@(posedge clk or posedge reset) if (reset) srff <= 0; else if (s | r) srff <= s & ~r; 案2 always@(posedge clk or posedge reset) if (reset) srff <= 0; else srff <= r ? 0 : s ? 1 : srff; 案3 always @(posedge gclk) srff <= (srff & ~r) | ( s & ~r); アルテラプリミティブXort自動変換の場合 always @(posedge gclk) srff <= (srff & ~r) | (~(srff) & s) | ( s & ~r); s r srff 0 1 x 0 0 0 srff 1 0 1 1 1 ~srff (こいつが入るのはあり?) 案3は非同期リセットいれるのを忘れたが、案3がベストか? 案1でこれまで づっとやってきたんだが(1か月くらいだけど、、、) >>82 ほんとだ、すまん。 else srff <= s | ~r&srff; で。 >>80 always_ff @(poseedge clk) if(s) q <= 1'b1; else if(r) q <= 1'b0; これでいいんじゃないの? クロック同期のものをSRFFというのかよくわからんけど。SRFF風? それ普通JKって言ったりして。 何なんだよJKビジネスって。 >84 ある寺ではprimitiveに同期srffってあるよ。11で出力が反転するけど。 案4 always@(posedge clk or posedge reset) if (reset) srff <= 0; else srff <= (srff | s) & ~r; 実はこれが正解ね。 JKだと jkff <= j * ~k | ~jkff * j | jkff * ~k; かな あ、AND書き間違えた jkff <= (j & ~k) | (~jkff & j) | (jkff & ~k); ソースコードで入力したプログラムにテストフィクチャーを使って動作確認をしたい時 ソースコードはinputにクロック信号がくると仮定して作ったものである場合、テストフィクチャー上ではどのようなプログラムを記述すればよいのでしょうか? イマイチ使い方がわかっていない状態で、論理合成は成功してるが信号が入ってきた動作確認が何をすれば確認できるのか全くわかっていないです >91 test benchでググると書き方がわかるよ。 >71 それちょっと考えてみたんだが、言語は作れるとして一般のプログラム言語のように asmレベルの言語てあるんだろうか? verilogに落とし込むという手もあるが、verilog自体がかなり抽象的だから細かい 記述がむつかしいよね。でもverilogに落とすのが無難かな。 SystemCで書いたこれって意味わかる?わからんよね。W C++はすこし使ったことがあるが、これはなんのこっちゃらわからん。どこがどう抽象 化されてるん? これよりVerilogのほうがマシだろ。W 一体全体何を狙ってるんだろう。予算か。W # include "systemc.h" SC_MODULE(adder) // モジュール (クラス) 宣言 { sc_in<int> a, b; // ポート sc_out<int> sum; void do_add() // プロセス { sum = a + b; } SC_CTOR(adder) // コンストラクタ { SC_METHOD(do_add); // カーネルへのdo_addの登録 sensitive << a << b; // do_addのセンシティビティリスト } }; A+Bって書くだけなのにこれはやりすぎというもの。W >>93 verilog で and/or で書けばいいさ 入力判定でon信号がきてから±1秒でスイッチを押せているかどうかと言うのはどの様に書いていけば良いのでしょうか? if(スイッチが押されて1秒以内に入力判定が来た)or (入力判定ONから1秒以内にスイッチが押されたか) OK else NG >on信号がきてから±1秒でスイッチを押せているかどうか ±1秒というのがわからん ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる