X



トップページ電気・電子
1002コメント353KB
【Verilog】 記述言語で論理設計Project13 【VHDL】
レス数が1000を超えています。これ以上書き込みはできません。
0001774ワット発電中さん
垢版 |
2014/03/06(木) 16:37:02.77ID:sOpHVFq3
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/
0002774ワット発電中さん
垢版 |
2014/03/06(木) 16:39:57.80ID:sOpHVFq3
・FPGA
 Xilinx ttp://japan.xilinx.com/
 ALTERA ttp://www.altera.co.jp/
 Lattice ttp://www.latticesemi.co.jp/
 Actel  ttp://www.actel.com/intl/japan/
 QuickLogic ttp://www.quicklogic.com/

・ASICベンダ推奨ツール類 (高価)
 Synopsys ttp://www.synopsys.co.jp/
 Cadence ttp://www.cadence.co.jp/
 Mentor ttp://www.mentorg.co.jp/
 Synplicity ttp://www.synplicity.jp/

・Verilogシミュレーター (無料)
 Icarus Verilog
  ttp://iverilog.icarus.com/
  ttp://ryusai-hp.web.infoseek.co.jp/icarus.htm (解説)
  ttp://www.ice.gunma-ct.ac.jp/~kimsyn/verilog/FreeSim/iverilog/iverilog.html (解説)
 IVI
  ttp://ivi.sourceforge.net/
  ttp://www.kumikomi.net/archives/2005/06/10icarus.php (解説)

・VCDフォーマットの波形表示 (無料)
 GTKWave
  ttp://gtkwave.sourceforge.net/
  ttp://ryusai-hp.web.infoseek.co.jp/gtkwave.htm (解説)

・関連書籍
 STARC ttp://www.starc.jp/
 CQ出版 ttp://www.cqpub.co.jp/
 Interface ttp://interface.cqpub.co.jp/
 Design Wave Magazine (休刊) ttp://www.cqpub.co.jp/dwm/
 ディジタル・デザイン・テクノロジ (旧DWM) ttp://digital-design.cqpub.co.jp/

・解説サイト
 やるおと学ぶ Verilog-HDL ttp://hirokinakaharaoboe.net/yaruo_verilog/

・関連スレ
 【FPGA/CPLD】 XILINX/ALTERA/Lattice/Actel
      http://uni.2ch.net/test/read.cgi/denki/1387718215/
 【EP3】DE0で始めるVerilog HDL【C16】
      http://uni.2ch.net/test/read.cgi/denki/1310362001/
0003774ワット発電中さん
垢版 |
2014/03/06(木) 16:41:32.60ID:sOpHVFq3
過去ログ参照したいときは、外部キャッシュサイトも便利です。
スレタイで検索しましょう。
・ログ速 ttp://www.logsoku.com/
・2chビューアーD ttp://2ch.viewerd.com/
・unkar ttp://unkar.org/r/denki/
他にもあると思う

以上、テンプレらしきもの。
     _,,,
    _/::o・ァ
  ∈ミ;;∧,ノ∧    ,,,,,   ,,,,,
    ( ´・ω・) ,,,,(o・e・),(。・e・),,     新スレです
     /ヽ○==(。・e・)(。・e・)(o・e・)     仲良くつかってね。
    /  ||_彡,,, ノ彡,,, ノ彡,,, ノ
    し' ̄(_)) ̄ ̄ ̄(_)) ̄(_))  ガラガラ
0006774ワット発電中さん
垢版 |
2014/03/07(金) 07:32:46.33ID:kmlRrSr1
FPGAでキャラクタLCDの初期化とか、
74HC595、74HC166などのシリアルものをやったときは、
FPGAを窓から投げたくなった。
マイコンが神様のように思えた。
0007774ワット発電中さん
垢版 |
2014/03/07(金) 08:45:27.24ID:3a6perSe
               ノ      ゚.ノヽ  , /}      ...
            ,,イ`"     、-'   `;_' '    ..::::::::::::::...
   ,-、  _.._   (        (,(~ヽ'~     ..:::::::::::::::::::::::
 )'~  レー'  〉   ヽ       i`'}       .:::::::::::::::::::::::
 ~つ     '-ー、  i       | i'     ...:::::::::::::::::::::::
 /       <  /     。/   !  ......:::::::::::::::::::::::::    これは>>1乙じゃなくて
/         ~^´     /},-'' ,●::::::::::::::::::::::::::::::::::::
i、        ,i' _,,...,-‐-、/    i  ::::::::  .:::::::::::::
..ゝ        <,,-==、   ,,-,/      .:::::::::::            放射能がうんたら
 )       {~''~>`v-''`ー゙`'~       ..:::::::::                          ........::.
 {        レ_ノ            ..::::::::.                         ......:::::::::
ノ         ''           ..:::::::                        ...::.:...:::::::::
                     .:::::::::                     ...:......:::::::::::: .
                    .:::::::::::.        .....      ..  ..::::::::::::::::::::::::   :::.
                    ::::::::::::::::.::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.. ::  ::..
                    .:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::    ::.
                    ::::::::::::::::: :::::::::::::::::::::::::::::: :::::
                          .::    ::.  :::
0009774ワット発電中さん
垢版 |
2014/03/12(水) 07:56:53.51ID:25IcEW3e
FPGAで家電作ってもおかしくないだろうけど
コスト合うのかな

お得意のウォン安パワー?
0011774ワット発電中さん
垢版 |
2014/03/12(水) 09:51:12.88ID:fKpIq8EF
1000台作る製品のコストを1円下げるために、
何万円ぶんも人間をタダ働きさせるのが日本式だからなw
0012774ワット発電中さん
垢版 |
2014/03/12(水) 17:07:00.03ID:npd8l9LA
TATが間に合わない事もあるしな
TVだとASIC作る時代でも無いし
ASSP+FPGAで急場を凌ぐかな
0014774ワット発電中さん
垢版 |
2014/03/13(木) 20:18:43.48ID:UNefeDE1
開発期間短縮の為、FPGAを採用。
その後、4Kが大量に売れそうだったらASIC化するって事じゃないの?
0015774ワット発電中さん
垢版 |
2014/03/13(木) 22:00:42.17ID:RztwXodP
FPGAで何か家電を作るとすれば・・・
炊飯器か

マイコン炊飯器より売れそう
0016774ワット発電中さん
垢版 |
2014/03/13(木) 23:44:06.38ID:iNUeE38h
4Kは売りつけるんだよ
その次はSHV(8K)を売りつける
ここまでは決まってるんじゃね

炊飯器よりエアコンにFPGA合うかも
センサー高度化してるし冷却も万全?
0019774ワット発電中さん
垢版 |
2014/03/14(金) 12:11:53.03ID:PsJKx6n+
FPGAが高速とか、笑わせるwww

そんなに高速なんだったら、お前の家からintel PCを一掃して全部FPGA PCにしろよw
0021774ワット発電中さん
垢版 |
2014/03/14(金) 12:45:46.95ID:bB+o9K6L
そんな物もあったな
MSXは俺のルーツだからつい買ってしまったが、一度も通電する事無くどこかに放置してある
0024774ワット発電中さん
垢版 |
2014/03/18(火) 09:36:59.58ID:PI6Arc2y
PSoC4 pioneerで遊んでるんだけど、alwaysのトリガに同期系
条件(posedgeとか)と非同期系条件(ピンチェンジ)を混ぜては
いけないってのはVerilogの制限?それともPSoCローカルな制限?
0025774ワット発電中さん
垢版 |
2014/03/21(金) 02:38:46.26ID:ixu+qUdJ
何をしたいのかがよくわからんけどVerilogの制限ではないな。
ただFPGAでVerilog使う場合でもそうだけど合成可能かどうかはまた別問題。

一般論としてリセット付きF/Fは合成可能だから大丈夫だと思うけど。
0026774ワット発電中さん
垢版 |
2014/03/25(火) 23:07:06.93ID:sDlLkAoj
reg_cntをインデックスにしてreg_buffバッファにreg_fooの値を突っ込みたいのですが
↓みたいにすればOKですか?


always @ (posedge xxx) begin
 if (RESET) begin
  reg_cnt <= 0;
 end else begin
  reg_cnt <= reg_cnt + 1;
  reg_buff[reg_cnt] <= reg_foo;
 end
end
0027774ワット発電中さん
垢版 |
2014/03/26(水) 08:09:00.26ID:qLJPB8CT
やってみろ
まずはそれからだ・・・

まぁ良かったと思うけど
0028774ワット発電中さん
垢版 |
2014/03/26(水) 23:22:34.70ID:TPlHqcXH
サンクスです。やってみました。できました。
でも質問した時はできなかったんですよね。。
今日はできた!
何が変わったんだろ
よくわからんw
すみませんでした。。
0029774ワット発電中さん
垢版 |
2014/03/27(木) 13:41:51.12ID:51xj69oq
出来なかったというのは
合成すら出来なかったと言うこと?
じゃないよね
0030774ワット発電中さん
垢版 |
2014/03/28(金) 00:42:29.71ID:HZnzQFgO
Icarus Verilogに関して御存知の方いらっしゃいましたら教えて下さい。
フリー環境でSystemVerilogを動かしてみようとIcarus Verilogを使ってみたのですが、0.9.7版、20130827版と幾つかの版数を渡り歩いてみましたが、classやinterfaceといったkeywordに対してsyntax errorを吐きます。
webで検索したところ0.9版以降ではサポート中断という記事を見つけたので0.8.6版も試してみましたが同じでした。
questaやiesでは通るので文法的にはOKだと思っていますが、Icarus Verilogが対応していないのか御存知でしょうか?
0031774ワット発電中さん
垢版 |
2014/03/28(金) 01:14:32.64ID:8+Km2wty
SystemVerilog対応なんて、Wikipedia日本語版にしか書いてないような気がする。
英語版は、portions of SystemVerilog としか書いてない。
0032774ワット発電中さん
垢版 |
2014/03/28(金) 02:23:34.68ID:Zcmh9bV1
>>29
合成はできたんですけどワーニングが出てて
出てきた電子回路見てみるとつなげてるはずの配線がざっくり無くなってました。
セレクタ?を記述しないといけないんだけどそれがうまく表現できず、ツールに伝わってないみたいでした。
003330
垢版 |
2014/03/29(土) 02:03:34.44ID:Nmk89wiM
>>31
やはり、現版数では対応していないようですね。幾つかのサイトを見て回ったのですが、対応していると今後対応予定という情報が入り交じっていました。
Behavior simulationを目的としているので、試しにXilinxのVivado入れてみましたが、simulatorがSystemVerilog非対応でした...
現状、SystemVerilogのsimを行うとすると、やはり御三家のsimulator使うしか無いのですかね...
0034774ワット発電中さん
垢版 |
2014/03/29(土) 02:52:52.77ID:H0gNnTrg
QuartusはsystemVerilog対応って謳われてて
modelsimの無料版入ってるけどそれではだめなん?
003630
垢版 |
2014/03/30(日) 03:31:22.30ID:PXg3sNCf
>>34
日頃馴染みが無かったのでアルテラ試していませんでした。情報ありがとうございます。ユーザー登録してダウンロードしてみます。
>>35
あと品川の御殿山をイメージしていましたが(^_^;
0037774ワット発電中さん
垢版 |
2014/04/07(月) 14:31:55.70ID:u+9PXBq9
FPGAらしい

https://www.youtube.com/watch?v=tUIQItrpYBE
https://www.youtube.com/watch?v=RyezC1p_pak
http://internet.watch.impress.co.jp/docs/news/20140404_642876.html
http://game.watch.impress.co.jp/docs/news/20140221_636384.html
http://gigazine.net/news/20140404-pocket-miku/
http://nlab.itmedia.co.jp/nl/articles/1403/03/news057.html
http://japanese.engadget.com/2014/03/02/evocaloid/
http://www.amazon.co.jp/dp/4057504656/
http://www.dtmstation.com/archives/51888898.html
http://hitoriblog.com/?p=23019
http://www.otonanokagaku.net/nsx39/index.html
http://www.dtmstation.com/archives/51877546.html
http://otonanokagaku.net/nsx39/app.html
http://www.crypton.co.jp/cfm/news/2014/02/pocketmiku
http://m.youtube.com/watch?v=2-v5CB5krws
http://www.nicovideo.jp/watch/sm17357529

歌詞モードは知らんけど
リアルタイムモードは子音がサポートされてないのが残念

リアルタイムでも子音出せるのはこちら

https://www.youtube.com/watch?v=ka8-SpSkmZA
http://vocaloid.blog120.fc2.com/blog-entry-11373.html
0039774ワット発電中さん
垢版 |
2014/04/08(火) 18:48:23.97ID:x9l0EXnP
http://nlab.itmedia.co.jp/nl/articles/1403/03/news057.html
筆者は昨年11月のMake Faireで披露された「歌うキーボード」のプロトタイプを実際に試してみたのだが、
そのときから長足の進化を遂げたようだ。まず、レスポンスがぜんぜん違う。
Make Faireのときには操作はできるものの、反応はちょっと微妙で、演奏はコツがいる感じだったが、
現在のバージョンは十分リアルタイムでの演奏に追従できる。なんらかの改良が行われているようだ。
「さしすせそ」の発音は、VOCALOIDでは母音の前の子音部分が長く、
鍵盤を押してから発音されるまでタイムラグがあるものだが、
ポケット・ミクではそこが実用になる範囲に収まっている。
ひょっとしたら、素のままのNSX-1チップではないのかもしれない。
http://nlab.itmedia.co.jp/nl/articles/1311/04/news010.html
http://nlab.itmedia.co.jp/nl/articles/1204/29/news007.html
0042774ワット発電中さん
垢版 |
2014/04/09(水) 08:55:48.91ID:P+tY1Vpe
全然使ってないPT2の基盤眺めてたら
ざいりんくす乗ってた

なんのシリーズかは見てない
0043774ワット発電中さん
垢版 |
2014/04/09(水) 08:57:20.51ID:joIMvkge
>>37-41
音源としてはえらい安いな

そのうちすべてのPCやスマホに標準搭載されると良いな
0044774ワット発電中さん
垢版 |
2014/04/09(水) 12:19:21.92ID:P+tY1Vpe
そこらじゅうのスマホからミクの声がしてたら
それはそれで嫌だな

せからしか!ってなる
0048774ワット発電中さん
垢版 |
2014/04/15(火) 20:04:37.66ID:+XCsDHpy
>>19
FPGAはいくつもの処理を平行して処理できる。
0051774ワット発電中さん
垢版 |
2014/04/18(金) 09:08:58.46ID:5ncclQCr
こんな計画もあったのか


また、今回の製品版には実装されていないが、これを利用して歌詞を入力する機能も試作された。

カーボンキーボードで文字入力を行なうプロトタイプの説明図。
鍵盤部で「あかさたな〜」といった子音の行を選び、リボン部で母音の段を選択する。

写真 https://fabcross.jp/interview/dmln530000007pmi-img/0314_uda_005.jpg

本文 https://fabcross.jp/interview/140314_uda_02_03.html
0053774ワット発電中さん
垢版 |
2014/05/03(土) 03:47:32.94ID:qHAfzWFm
某N社の仕事で、VHDLの回路改修を頼まれ、
アドレスデコーダーの回路見たら、
全部IF-ELSIF文でアドレスデコーダーを数百構文も書いてあった。
CASE文とIF文の使い分けもできないのか、この大手企業はと思った。
しかも担当者に聞いたら、その書き方じゃなきゃダメだと。
日本の「もの作り」とか言って、これじゃおわっとるよな。
0055774ワット発電中さん
垢版 |
2014/05/03(土) 06:43:45.69ID:39IpT7ho
言語的にはIfでcaseかけるので
ちゃんと書けば
同じ回路になるはず

ただデコーダエンコーダ
もしくはCPUのフェッチはcaseが良い(ほぼデコーダ)
人為的なミスが減る

ソースコードは人に優しくないと
0056774ワット発電中さん
垢版 |
2014/05/03(土) 09:49:08.35ID:SKkkuXvc
「もの作り」って、論理以前の物理的な「もの」しか対象に考えてないからな。
ブール先生から150年経つんだから、ざっと考えて200年前の伝統芸でしかない。
0058774ワット発電中さん
垢版 |
2014/05/03(土) 11:36:01.87ID:YH1cljc+
>>57
人手で書くわけじゃなくて、
何かのソフトが吐き出すんだろうね。
アドレスデコーダならテーブル引くほうがいいけど。
0059774ワット発電中さん
垢版 |
2014/05/03(土) 22:04:53.10ID:1nIrmqXL
合成ツールの変なバグがあって、治るまで使うなと言ってたのが
いつのまにか絶対使うなに化けるとか、いろいろあるものだ。
0060774ワット発電中さん
垢版 |
2014/05/04(日) 00:09:37.20ID:SII+IkUE
ifでもcaseでも最近の合成ツールなら一緒だろ
0061774ワット発電中さん
垢版 |
2014/05/04(日) 04:33:15.82ID:ipfH05IF
教えてください。
FPGAで、sin波はDDSで出せますが、ノコギリ波は、どうやって出すのでしょうか?
工場の屋根みたいなヤツです。
シンメトリ(矩形波で言うDutyです)は変えませんが、
周波数を変えたいです。ROMにテーブルを入れて、読み出しを間引けばいいのかしら。
それとも、毎点毎点、計算を行うとか・・・・
宜しくお願いします。
0063774ワット発電中さん
垢版 |
2014/05/04(日) 12:27:49.68ID:z7NcnrHU
>>61
DDSの様にROMでテーブル作ってアドレスカウンタで飛ばし読みするとか、
固定小数点を含んだような積和演算器(カウンタ)を作って
その加算値の整数部を出して行くとか、方法はいろいろあると思うよ。
0064774ワット発電中さん
垢版 |
2014/05/04(日) 13:50:33.56ID:ipfH05IF
DDSで、sin波を形生成する場合は、まだ良いと思うのですが、
三角波など、1ドットで「+ピーク」→「-ピーク」に変化する値を持った信号だと、
間引きstepにより、そのピーク点が採用されたり採用されなかったりして、
その結果、出力波形のピーク値が変化しないでしょうか?
また間引きstepが大きくなると、ほぼ直線変化だったものが、
階段のようにガタガタになってしまいます。
これは、外付けのLPFで除去するのかと思いますが、
その方法だと、ピーク点の尖りまで鈍ってしまいそうです。

DDSにおいて、
ピーク点の確保とガタガタ波形に対して、どのように考えれば良いのでしょうか?
0065774ワット発電中さん
垢版 |
2014/05/04(日) 13:50:53.12ID:a55Zjrqh
少しは自分の頭で考えて試してみたらいいんじゃねぇの?
シミュレーションだっていくらでもできるだろうて
0066774ワット発電中さん
垢版 |
2014/05/04(日) 14:38:08.12ID:ipfH05IF
ありがとうございます。

考えました。
例えば、16ステップの鋸歯状波を考えたとき、
間引き0だと、0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15と再生しますが、
1つ間引くと、0 2 4 6 8 10 12 14 と再生し、15番(ピーク値)が欠落すると思います。
どうでしょうか?
0067774ワット発電中さん
垢版 |
2014/05/04(日) 16:03:22.94ID:a55Zjrqh
そういうやり方をしたら、欠落するだろうね。
だったら、欠落しないようにする方法は?って考える。
0068774ワット発電中さん
垢版 |
2014/05/04(日) 17:31:32.82ID:z7NcnrHU
>>66
同じようなことはsin波形でも起きる。
しかしD/Aした後にsinπx/πxのアナログフィルタを通すと、
このガタガタがきれいに取れる。
出力する周波数に対してサンプリング周波数が十分高ければ
そんなに気にしなくても大丈夫だよ。
ちなみに経験的なことを言うと、100KHz位の鋸歯状波を10MHzの位の
サンプリング周波数で出力してみたけど、ちゃんと鋸歯状波になってた@12bit分解能。
あくまで主観だけど。
0069774ワット発電中さん
垢版 |
2014/05/04(日) 20:46:24.07ID:veykLU/6
サイン波は高調波を持ってないけどノコギリ波は無限の高調波を持つ。
エイリアシングの影響を避けるためには出来るだけサンプリング周波数を
高くするということじゃないの?
0070774ワット発電中さん
垢版 |
2014/05/18(日) 17:41:18.72ID:nYV+BQml
Windows 8.1 update 64bitでicarus verilog 0.9.7が動かない・・・
コマンドプロンプトで "iverilog" って打つと "iverilog: no source files."みたいにちゃんと実行されるんだけど、
"iverilog hogehoge.v"って打つと "ivl.exeは動作を停止しました" ってエラーウィンドウが表示されてコンパイルできない
Windows 8 64bit上のicarus verilog 0.9.7では同じソースファイルをコンパイルできるのに
誰か助けてください・・・
0071774ワット発電中さん
垢版 |
2014/05/18(日) 18:21:02.31ID:l/3NqsGD
パスに日本語含まれてないか?
0072774ワット発電中さん
垢版 |
2014/05/19(月) 01:19:16.02ID:rbfBvD0v
>>71
パスに日本語は含まれてない
ソースファイルにも含まれてない
0074774ワット発電中さん
垢版 |
2014/05/25(日) 01:20:59.81ID:cSq2iRKv
Verilogを使い始めた初心者です。
LTC1744A/DコンバータをXilinxで動かしたいですが、質問があります。

FPGAからADにスタート信号を送ると、ADからADクロックとともにデータが出てきます。
ADのデータを取り込むには、そのクロック信号の立ち上がり立ち下がりで取り込むらしいです。

データーはADのクロックに合わせて出てくるので、FPGAのクロックと合っていません。(周波数は同じようです)
こういう場合、どのようにしてデータを取り込むのでしょうか?
・水晶→A/Dクロック信号で1つ完結。ADからのクロックを使ってそれ以降のFPGa全体を動かす。
・あくまでFPGAのクロックで動かし、A/Dクロックの変化点を見つけて、そのときのADデータを取り込む。
・FIFO変換回路を使う
・ディアルポートメモリーを追加する
0076774ワット発電中さん
垢版 |
2014/05/25(日) 09:55:13.01ID:ZZ5caet9
FPGAのクロックをPLLで
ADの10倍くらいで動かせば余裕のよっちゃん


と何も考えず・・・
常にADの方が遅いイメージ
0077774ワット発電中さん
垢版 |
2014/05/25(日) 12:01:01.53ID:7c+/MroJ
>>75
ありがとうございます。
やはりFIFOですか、了解です。コアジェンのFIFOジェネレーターで実験してみます。

>>76
>FPGAのクロックをPLLでADの10倍くらいで動かせば余裕
ヒントをありがとうございます。
これは、A/Dからの信号をFPGAで「高速に」刻めば、FPGAでA/Dのクロック変化を検出でき、
そのタイミングでデータを取り込めば、FIFOなしで良いということでしょうか?

もしそうだとすると、10倍も上でなくても3倍くらいではだめでしょうか?
・A/Dからのクロック信号を取り込み記憶。
・前回からの差を見て、変化点を検出。
・変化ありなら、その次点のデータを取り込む。(データは、この時点までホールドされていることが前提)
こんな感じでしょうか。
0078774ワット発電中さん
垢版 |
2014/05/25(日) 12:19:48.01ID:4j5bIsLa
>>77
3倍程度だとインターバルがグダグダになるからダメ。
タイミングが一定のように見えてわずかに揺らぐため、2倍と4倍が入り混じる可能性がある。
# もちろん、個体差があるので念のため。
0079774ワット発電中さん
垢版 |
2014/05/25(日) 12:24:56.08ID:7c+/MroJ
ありがとうございます。
3倍程度ではだめですか。了解しました。
やはりFIFOですね。
0080774ワット発電中さん
垢版 |
2014/05/26(月) 07:33:33.83ID:pdHBd95s
一度クロック直で誤作動っぽい動きしていて
PLLに一度食わせただけで直った経緯から
最近はPLL使わない事の方が少ない

保険みたいな感じ
0081774ワット発電中さん
垢版 |
2014/05/26(月) 07:49:47.97ID:18vb85ra
PLLじゃなくてもNOTとかインバーター通しただけでも治ったかもね
0082774ワット発電中さん
垢版 |
2014/05/27(火) 00:11:06.07ID:LZynj0Uu
チップスコープで、16bitの値を見ているのですが、
観測点を、それ単独でコンパイルしたときと、
他の観測信号も一緒にしてコンパイルした時で、
表示される値が違うことないですか?
0084774ワット発電中さん
垢版 |
2014/05/27(火) 01:08:30.68ID:LZynj0Uu
>>83
ありがとうございます。
いえ、xxx.cdcで、メンバーに入れてコンパイル、入れないでコンパイル、
それだけで違うんです。半日悩んでいました。PCの再起動とかしてみたのですが。

一つ教えてください。

Verilogで、C言語のような、こんな書き方ってできるのでしょうか?

  if( a == 'A' ) begin ...
  end else if( a == 'K' ) begin ...
  end else if( a == 'B' ) begin ...

試して見ればよいですね。すみませんでした。
0085774ワット発電中さん
垢版 |
2014/05/27(火) 01:14:42.01ID:LZynj0Uu
>試して見ればよいですね。すみませんでした。

ダメでした。残念
0086774ワット発電中さん
垢版 |
2014/05/27(火) 03:17:41.14ID:/b2TR/5g
確かに、その表記ができると便利だと思う。
Cは本当によく考えられた言語だね。
Cで assign や <=代入ができるなら、もうVerilogやめてCで書けばいいと思う。
もちろん、beginは{に変更して。
0089774ワット発電中さん
垢版 |
2014/05/27(火) 08:35:14.01ID:nlzGhsbP
232cの入力bitを検査するのにcase使ったけど
別に問題はなかったような

シミュレーションしかないかねぇ
0090774ワット発電中さん
垢版 |
2014/05/27(火) 13:31:35.84ID:Te7GmtAR
CSP有効無効で、ユーザ回路側の挙動が異なる、ということ?

>82では
・16bitの値=観測点
・16bitの値だけをCSPで見た場合と
・16bitの値と同時に、他の信号をCSPで見た場合で
・得られる16bitの値が異なる(他の信号は?)
と読みました。

・16bitの値を、CSPを入れずに観測し(ピンなどに出した?)た結果と
・16bitの値を、CSで観測した結果が異なる
ということ?「他の観測信号」はどこでどう絡んでくる?

CSPで挙動がおかしい時の基本確認事項は
・タイミングレポートを確認する。CSP入れると周波数は落ちる傾向がある。
・観測対象の信号をドライブしているクロックとCSPが参照しているクロックが同じか?
辺りが第一歩ですかね。
0091774ワット発電中さん
垢版 |
2014/05/27(火) 13:34:42.43ID:Te7GmtAR
それとも
・16bitの値を、CSPを入れずピンに出した結果と
・16bitの値を、CSPを入れてピンに出した結果が異なる
ということかな?CSPの観測結果は無関係?
0093774ワット発電中さん
垢版 |
2014/05/27(火) 21:25:58.10ID:Xjo9OI3S
>82
君と同じ現象かどうかわからないけど
観測点増やしすぎると最高動作周波数が下がって
まともに観測できなくなることはあった。
0094774ワット発電中さん
垢版 |
2014/05/27(火) 21:55:21.23ID:t8Xgoc8p
Verilog初心者です
本を読んで勉強してます。
その本によるとalwayブロックで、ブロッキング代入すると順番が保障されるとありました。
a=a+4
b=b+a
だとa=6, b=4だったらbは14になるし、
a<=a+4
b<=b+a
だったらどうなるかはわからないよーとのことでした。

またその本では別の章ではこうも書いてました。
data[i * 3 + offset] <= val;
i <=i+1

この例の場合、dataのindexにiが使われていて、次の行ではiを増やしています。
これっておかしくないですか?先にiが増えたらindexが違う場所をさしちゃいますよね?

ちなみにRGBデータを処理する話で、文脈から言って
必ずdata[i * 3 + offset] <= valが実行されてからi<=i+1が
実行されないとおかしくなるような状況です。

どなたか解説オナシャス!
0095774ワット発電中さん
垢版 |
2014/05/27(火) 22:27:26.48ID:JJ928Zzv
ブロッキング代入なんて使うな
どの本だ、そのブロッキング代入を推奨してる本は
0096774ワット発電中さん
垢版 |
2014/05/27(火) 22:31:34.63ID:td83IcoB
実行順番が保障されるのだろ?
ちゃんと「data[i * 3 + offset] <= val」の後に「i <=i+1」
が記述されてあるだろ。

自分で言ってることじゃない。
何が分からないのだ?
0097774ワット発電中さん
垢版 |
2014/05/27(火) 22:33:57.60ID:t8Xgoc8p
data[i * 3 + offset] <= val;
i <=i+1
はノンブロッキング代入だから順番が保障されないのかなぁ?と思った次第です・・
0098774ワット発電中さん
垢版 |
2014/05/27(火) 22:45:35.03ID:t8Xgoc8p
もし今i=0の状態でalwaysの信号が来たとき、
data[i * 3 + offset] <= val;
i <= i + 1;
はまずdata[0 * 3 + offset] <= val;
をやって、次にiが1になるべきじゃないですか。
でもノンブロッキングなら先にiが1になっちゃって
data[1 * 3 + offset]<=val;が次に起きたりしないのかな?ってことです。
0099774ワット発電中さん
垢版 |
2014/05/27(火) 22:46:46.76ID:LZynj0Uu
>>94

・ <= は、always @ ()の中だけ使用。
・ = は、assign だけで使用。
のほうが、いいですよ。
どちらも同時に起こりますのでわかりやすいです。

それよりも、慣れるまでは、以下のようにbit数を意識する癖を付けた方が良いと思います。

wire    a;
wire [7:0] b;
reg [1:0] s;
reg [3:0] c;

always @ ( posedge clock ) begin
  if( RESET==1'd1 )begin
     s <= 2'd0;     // s <= 0; と書きたくなるけど 2'd0とbit数を意識
     c <= 4'd0;

  end else begin
    s <= { s[0], a };
    if( s == 2'b01 ) begin
      c <= c + 4'd1;   // c <= c + 1; と書きたくなるけど 4'd1と....
    end
  end
end

assign b = { c, s, 2'b00 };  // = は、assignだけで使う

endmodule
0100774ワット発電中さん
垢版 |
2014/05/27(火) 22:55:29.51ID:RXKAb72A
>>94
>a<=a+4
>b<=b+a
>だったらどうなるかはわからないよーとのことでした。
ここが間違い。
クロック同期なら右辺に使われる変数は
次のクロックエッジまで変化しない。
0101774ワット発電中さん
垢版 |
2014/05/27(火) 23:11:21.16ID:t8Xgoc8p
>>100
すみません、よく読み直したらノンブロッキング代入はどうなるかわからないとは書いてませんでした。
それは自分が勝手に思い込んでたことでした。。
ノンブロッキング代入は、alwaysを抜けたときに値が確定し、
それまでは変更前の値で動作するって書いてありました。

すみません&ありがとうございました!
0104774ワット発電中さん
垢版 |
2014/05/28(水) 00:01:48.19ID:QxNKuz4v
>>102
複数のalwaysに分かれるとmultiple driver的なメッセージでコンパイルエラーじゃないかな
0105774ワット発電中さん
垢版 |
2014/05/28(水) 02:33:24.00ID:P8GRCWmu
>>101
>alwaysを抜けたときに値が確定し、
どういうときに,alwaysを抜けるの?
0106774ワット発電中さん
垢版 |
2014/05/28(水) 23:55:49.77ID:P8GRCWmu
教えてください。

Verilogで、以下のようなことはできるでしょうか?

wire [7:0] A; // 8bit幅
wire [2:0] B; // 3bit幅
wire [1:0] C; // 3bit幅

assign A[6:4] = B;  // 8bit幅の変数に、3bit幅の値を接続する
assign A[2:1] = C;  // 8bit幅の変数に、3bit幅の値を接続する

Aは、 0 B2 B1 B0 0 C1 C0 0 のように、

指定位置に入れ込んで、他を0で埋めてくれるのでしょうか?
それとも

Aは、 ? B2 B1 B0 ? C1 C0 ? のように、不定になるでしょうか
0108774ワット発電中さん
垢版 |
2014/05/29(木) 00:01:15.78ID:r9wyqbqv
?じゃなくてzだな
0109774ワット発電中さん
垢版 |
2014/05/29(木) 00:01:56.19ID:r9wyqbqv
あ、ごめん
zじゃなかった
0111774ワット発電中さん
垢版 |
2014/05/29(木) 21:02:31.08ID:d7mG5S5m
なんか学生ぽいのが増えてきましたね
さすがゴールデンウィーク明けですか

どしどし!

さてWin8にいかろす入れてみますかね
0112774ワット発電中さん
垢版 |
2014/05/30(金) 14:26:56.92ID:UpNH0mQC
VerilogでHDLを書いていますが、ミスが多くて思うように進みません。
どのようにしたら、スイスイと作成できるでしょうか?
今までわかっていることは、
・自分の性格は、おっちょこちょいで落ち着きがありません。
・記憶力も悪いです。

・変数の内容がわかるように、u16_reg_AAAとか s32_wire_BBBとか書いています。
・代入する即値は、32'h1234_4c7f と、bit数を書いて_で4桁ずつ区切っています。
0113774ワット発電中さん
垢版 |
2014/05/30(金) 14:32:36.90ID:UpNH0mQC
追記です。
一番多いエラーは、
「その変数、いつまでたっても0だよ。だから省略するからね」というやつです。
カウンターで使ったのに、常に0って、困るんですが。
0114774ワット発電中さん
垢版 |
2014/05/30(金) 14:57:20.14ID:UpNH0mQC
Cleanup Projectって何でしょうか?
プランヘッドを起動してもメッセージが出てエラーになります。
0115774ワット発電中さん
垢版 |
2014/05/30(金) 15:07:36.77ID:UpNH0mQC
114です。おかげさまでわかりました。ありがとうございます。
0118774ワット発電中さん
垢版 |
2014/05/30(金) 23:34:54.73ID:UpNH0mQC
何度もすみません。教えてください。(帰れない)

reg [3:0] hoge;

alwys @ (posedge clock) begin
  if( res ) begin

  end else begin
hoge[3] <= ....
     :
     :
hoge[2] <= ....
     :
     :
hoge[1] <= ....
     :
     :
    if( hoge== ...) begin
    
     :
  end
end

上記のように、4bitのhogeを、4bit まとめて
hoge <= ....
とせずに、各bitをバラバラな回路で評価、代入することができるのでしょうか?
連接で{ } することは良いと思うのですが。
0121774ワット発電中さん
垢版 |
2014/05/31(土) 01:49:10.42ID:+ufYh9Ek
なんか一般化の下手な人だなって印象
俺ならそれくらい受け入れてくれるだろって見切り発車して
万一だめなら、何だこの使えないクソ言語って投げ捨てるところ
0122774ワット発電中さん
垢版 |
2014/05/31(土) 10:31:12.70ID:DMSCh7+V
とりあえずソース書いてコンパイラ通してみればいいのに

こんなところで聞いても返事がいつ来るかわからないし
返事が来ても間違った内容かもしれない(悪意を持ってワザとウソ教えるケースも)
0124774ワット発電中さん
垢版 |
2014/05/31(土) 20:00:37.08ID:MzRrdpot
>121,122
まー、
コンパイラ的には許されるけど作法的にあんまやっちゃいかんこと、
といった類のことは避けたいとかあるかもしれんし。

にしても一回試すには試さんとな。
0125774ワット発電中さん
垢版 |
2014/06/01(日) 00:35:27.34ID:d+7jdccI
D-FFのD端子のH/Lを決めるのは、どんな方法でもいいよね。
ただ、4bit同時にclockされるというだけで。
しかし、やるなら全ビット書き込んであげなきゃ。
0128774ワット発電中さん
垢版 |
2014/06/02(月) 23:49:25.47ID:WgGuuojj
generateを使わずに、8回同じインスタンシエーションを書いたら、
大笑いされました。
そんなに可笑しい事でしょうか?
for()で書かないとうまく動かないのでしょうか?
0129774ワット発電中さん
垢版 |
2014/06/03(火) 08:26:27.69ID:C0ffCLXU
人に見せた分だけ
コードは見やすくなる

ベタでも良い
見難いだけ

generateでかけば今度は笑われない だけ
0130774ワット発電中さん
垢版 |
2014/06/03(火) 08:32:09.07ID:ZfJUF9cx
8回だとベタ書きとどちらが見やすいかは微妙。
大笑いするのはおかしいな。
ニヤけるレベル。
0131774ワット発電中さん
垢版 |
2014/06/03(火) 08:46:42.76ID:l6sjiyOx
>>130
でも将来8が16や64になる可能性がわかってるのにベタに書いたら
大笑いというより怒られてもおかしくない

それより>>129のいうように学ぶための機会を得たと思えばいい
0132774ワット発電中さん
垢版 |
2014/06/03(火) 22:03:54.67ID:NiiIYSIV
Verilogじゃないけど、回路図インスタンスの配列記述が禁止の会社はあったな……
0133774ワット発電中さん
垢版 |
2014/06/04(水) 00:36:33.16ID:U+InIE9D
内製のツール使ってたりするとNGの場合があるよね
0134774ワット発電中さん
垢版 |
2014/06/07(土) 10:49:57.22ID:PLWZT36o
VHDLで
a <= '1' when b=c;
とelse無しで書いたらエラー出ずにラッチが生成されるのは普通なの?

Quartusなんだけど、この前これではまったよ。
0135774ワット発電中さん
垢版 |
2014/06/07(土) 12:52:35.97ID:M8hKKun7
>>134
> VHDLで
> a <= '1' when b=c;
> とelse無しで書いたらエラー出ずにラッチが生成されるのは普通なの?
普通です。
ラッチを記述してるからラッチが出来ただけ。
0136774ワット発電中さん
垢版 |
2014/06/07(土) 14:18:38.80ID:RtUul3Qu
字面だけ見るとラッチができそうだが、134が聞きたいのは、
(半分愚痴を込めて)これが規格的に合法なのかってことだろう。
俺が持ってる参考書には「必ずelse項を記述する必要があります」
って書いてある。
0137774ワット発電中さん
垢版 |
2014/06/07(土) 14:27:28.74ID:AQOvDX9f
どう合成されるかなんて規格で決まってるわけじゃないからね。
0138774ワット発電中さん
垢版 |
2014/06/07(土) 18:26:39.22ID:PLWZT36o
>>136
そうなんですよ。
一般的にはどうなのかと、VHDLの文法的、規格的にはどうなのかと。
VHDLは厳格な印象があったのでかなり意外だったし。
0140774ワット発電中さん
垢版 |
2014/06/07(土) 18:44:05.67ID:PLWZT36o
LRM調べてみたら文法的にはelseがなくても正しいらしい。

conditional_signal_assignment ::=
target <= options conditional_waveforms ;
conditional_waveforms ::=
{ waveform when condition else }
waveform [ when condition ]

{ }は繰り返せる記述で0個でもよいらしい。
エラーであったほしかった…
0141774ワット発電中さん
垢版 |
2014/06/07(土) 19:02:12.45ID:PLWZT36o
もしかして
q <= d when clk'event and clk='1';
なんてのもありなのか?
今度試してみるかな。
0142774ワット発電中さん
垢版 |
2014/06/08(日) 16:25:41.37ID:tVBFGYUa
Hardware Description Languageでユーザーがラッチ推定なモノをdescriptionしたのに
合法なのかとかエラーにしてくれとか、いちゃもんをつけられるHDLタン可哀想だ・・・

>>136の持ってる参考書がちと気になるけど、単に「不用意なラッチ推定を避ける為に
条件分岐は必ずelseやdefaultを使って全ての条件を並べたほうがいい」って程度の事を
「言語仕様的にelse必須」と勝手に読み替えてるだけ・・・なんて事はないよね?
0143774ワット発電中さん
垢版 |
2014/06/08(日) 19:21:26.61ID:qi4ksoiV
「文法」という、構文と意味のどちらを指すのか、はっきりしない表現で言語を理解しているからダメ。
構文と意味をちゃんと峻別しなさい、ってこと。
0144774ワット発電中さん
垢版 |
2014/06/09(月) 08:04:10.49ID:arQlrBz2
まぁ指示してないことを
指示してないので知りませんやりません、といわれるか
自分なりに考えて頑張りました、と言われるか

HDLたん頑張れ
0145774ワット発電中さん
垢版 |
2014/06/09(月) 18:58:22.04ID:jJhVco3Q
だから >>134 はラッチの記述なんだって。
b=cのときにaを1にして、それ以外のときは保持するわけだから。

>>140
> エラーであったほしかった
VHDLの文法としてwhenでラッチも記述しているようにしているわけで、
VHDLの文法の段階でエラーにして欲しいとか意味がよくわからない。

>>141
文法上はOKだけど、その記述でFFを推定するかは合成ツール依存。
デザインコンパイラはFFを推定するはず。
0149774ワット発電中さん
垢版 |
2014/06/09(月) 22:01:24.62ID:arQlrBz2
このスレは>>146がHDLから巣立ち
スケマ書きエンジニアになっていく様を
温かく見守るスレになりました
0150774ワット発電中さん
垢版 |
2014/06/09(月) 23:13:50.29ID:eaOTAJF+
spyglass使ってみたいけど、確か1000万円コースじゃなかったっけ?
0152774ワット発電中さん
垢版 |
2014/06/09(月) 23:52:28.59ID:FmWdyBQB
落とし所としては、こいつはラッチになってほしくないよー、と明示したら、
ラッチになったらエラーにしてほしい、ですかねぇ
0154774ワット発電中さん
垢版 |
2014/06/10(火) 18:55:59.76ID:HHCZkr2b
>>152
やろうと思えば、いくつか縛りを入れれば近いことはできそう。
 条件付信号代入文は使わない
 選択信号代入文は使わない
 組み合わせ回路を作るprocess文では必ず変数経由で記述する
   process (...)
    variable a : ....
   begin
    a:=0;
    if b=c then a:=1234;
    elsif d=e then a:=5678;
    end if;
    out <= a;
   end process;
  上の例では効果がわかりずらいけど、
  条件が複雑になると、どこかでelseが抜ける可能性があるので・・・
他にもやり方は有るとおもう。

言語としての仕様はそのままでよくて、
記述の自由度を下げてまで何か縛りを入れるかは、
ユーザ側で考えればいいと思う。
0155774ワット発電中さん
垢版 |
2014/06/10(火) 21:49:16.85ID:DrVnVoph
つーか・・・
FFのクロックにクロック以外が入るような記述なんて
めったにしないから、ラッチの出来ようがないのだけど
0156774ワット発電中さん
垢版 |
2014/06/10(火) 22:46:26.64ID:5viGuzrF
>>154
組み合わせ回路をprocess文で記述するとセンシティビティリストに変数書き忘れるだけでラッチになるから逆効果でしょ。
0157774ワット発電中さん
垢版 |
2014/06/10(火) 23:11:31.55ID:ucuI4UvS
何言ってんだ。
LUTの出力を自身の入力につなげば自己保持回路できるじゃないか。
FPGA設計では禁止回路として真っ先に指摘される回路のひとつだけどw
0158774ワット発電中さん
垢版 |
2014/06/10(火) 23:59:31.43ID:HHCZkr2b
>>156
合成のときはセンシティビティリストは無視だよ。
RTLシミュレーションのときに問題になるけど。
0159774ワット発電中さん
垢版 |
2014/06/11(水) 00:44:08.73ID:y95R7ig0
無視?無視されると逆にラッチが実装できなくなる気がするけど。
センシティビティリストを書かないということか?
0160774ワット発電中さん
垢版 |
2014/06/14(土) 15:42:03.97ID:Yyru01VT
ほんとbeginとendにした奴死んでほしい
なんで{}を使わなかったんだ
あと[7:0]とかって打ちにくい。これ考えたやつも死んだ方がいい
0161774ワット発電中さん
垢版 |
2014/06/14(土) 16:18:03.70ID:sItJlkqe
>ほんとbeginとendにした奴死んでほしい
これには同意。せっかくC言語風なのになんでここだけPascal風なんだ

>あと[7:0]とかって打ちにくい。これ考えたやつも死んだ方がいい
VHDLの(7 downto 0)よりはマシかと。
0162774ワット発電中さん
垢版 |
2014/06/14(土) 18:14:01.00ID:+HXlp1C+
endの後にセミコロンが来ないのはC言語風なんだな。
そう考えるとずいぶん中途半端なんだな。
0163774ワット発電中さん
垢版 |
2014/06/14(土) 20:20:18.33ID:c8oKTZaO
ソースの変換プログラム作れば、C言語風でキー入力して
HDL処理系にかかるソースに変換できるよ。 いわゆる
プリプロセッサみたいなプログラムな。
0166774ワット発電中さん
垢版 |
2014/06/14(土) 22:59:45.94ID:+HXlp1C+
わしは++が実装されなかったのが残念。SystemVerilogでもブロッキング文だけだし。
0168774ワット発電中さん
垢版 |
2014/06/15(日) 08:10:17.83ID:CowFiSFw
符号と配列の扱いをもう少し真面目に考えて欲しかったな。あと、変数のスコープも変だ。
0171774ワット発電中さん
垢版 |
2014/06/16(月) 11:15:17.73ID:/nvOVh/f
++欲しいって、バカか
プログラムじゃねえっつーの

[7:0]がイヤならどんなならいいんだろう?
0172774ワット発電中さん
垢版 |
2014/06/16(月) 16:30:19.90ID:zjoFDicQ
ビットスライスする関数が欲しいかな。
(a+b)の[4:1]なんて、一度別の変数に入れるか、function作るしかないからね。
0173774ワット発電中さん
垢版 |
2014/06/16(月) 22:43:41.07ID:PXQcBzWV
わしは++が実装されなかったのが残念。SystemVerilogでもブロッキング文だけだし。
0174774ワット発電中さん
垢版 |
2014/06/16(月) 22:50:01.99ID:PXQcBzWV
>>171はnand(out, in1, in2)とかで実装しているのか?
++あったら便利だと思うけどなぁ。
0182774ワット発電中さん
垢版 |
2014/06/19(木) 08:34:04.08ID:TwXhJQLP
そもそも他の言語にもないだろ。
++はインデックスを増やすためのもんだから。
0183774ワット発電中さん
垢版 |
2014/06/20(金) 19:07:57.27ID:6m/lXrSp
こうとか。
procedure tt(signal a : inout std_logic_vector) is
begin
 a <= a + 1;
end procedure;
0184774ワット発電中さん
垢版 |
2014/06/23(月) 23:32:49.10ID:Z5rFlDP4
レジスタってカウントアップしていくと0にループして戻りますか?
0185774ワット発電中さん
垢版 |
2014/06/24(火) 08:18:49.70ID:uHu73wuP
レジスタの説明
カウンタ4種調べて説明
オーバーフロー、アンダーフローの説明とその活用

以上をレポート形式でまとめる事
文字数の規定無し
Wikiは認める
0186774ワット発電中さん
垢版 |
2014/06/24(火) 08:29:43.91ID:4iD0VDNj
>>185
カウンタ4種ってなんだろ
ジョンソンカウンタとかリングカウンタとかグレイコードカウンタとかだろうか
0190774ワット発電中さん
垢版 |
2014/06/24(火) 12:19:27.68ID:uHu73wuP
しくしく
ベリログの本に4つあったから適当にかいたんだよー


レジスタのループはかいてなかったけど
0191774ワット発電中さん
垢版 |
2014/06/29(日) 18:12:46.30ID:q/4APH0d
あるalways1(CLK1で同期)でフラグを立てて
別のalways2(CLK2で同期)の中でフラグが立っていたら一回だけ処理したい場合どうすればよいのですか?

reg flag;
always(posedge clk1 or rst) begin
 if(rst) flag <= 0;
 else begin
  if(エラー) flag <= 1;
 end
end

always(posedge clk2 or rst) begin
 if(rst) xx
 else begin
  if(flag) begin
   なんか一度だけのことをする。たとえばエラーメッセージをバッファに入れるとか。
   flag <= 0;//ここで落とす。もうエラー処理したので。
  end
 end
end

これだとFFを複数のクロックでドライブできませんみたいなエラーになります。
こういう問題を扱うときはどうしてますか?
0192774ワット発電中さん
垢版 |
2014/06/29(日) 19:02:17.22ID:qHxlgh71
それぞれのクロック側で別々にフラグをもってハンドシェークする。
0194774ワット発電中さん
垢版 |
2014/06/30(月) 08:14:57.78ID:Qy9pw8GW
>>193
FFのクロック端子に別の信号を入れるのは基本的にタブー。
共通のクロックで出来ないかもう一度考えたほうがいい。
事情があって共通のクロックに出来ないなら同じに出来ないなら、
お互いが外部モジュール(非同期の)と考えて設計すればいい。
あと"メタステーブル"で検索して調べることを薦める。
0196774ワット発電中さん
垢版 |
2014/06/30(月) 09:10:34.65ID:MfUxpEAI
>>192
ハンドシェークって言うとちょっとわかりづらくない?
要は、処理したよフラグも用意しろって言えばいいじゃん
0197774ワット発電中さん
垢版 |
2014/06/30(月) 09:35:25.14ID:847/h1GX
clk1側は一回立てるだけだからハンドシェイクなんていらないだろ。
0201191
垢版 |
2014/07/01(火) 00:51:08.50ID:FN3lKQ8N
みなさんありがとうございます!

とりあえず、clk1とclk2でそれぞれカウンタを用意して、clk1ブロックがclk2ブロックにお願いしたいときは
カウンタを進め、clk2ではそのカウンタと自分のカウンタが違ったら処理する、というやり方にしました。
always(clk1) begin
 if(なんか処理をお願いしたいとき)
  cnt1 <= cnt1 + 1;
end

always(clk2) begin
 cnt1tmp <= cnt1;
 if(cnt2 != cnt1tmp) begin
  処理
  cnt2 <= cnt2 + 1;
 end
end

でも2つのクロックはまったく関係ない外部デバイスから引っ張ってきてるので、
周波数も位相も違います。
clk1側でカウンタを進めたときに、clk2側でそれをcnt1tmpに読んだときに
おかしな値になってないか心配です。
clk1側のカウンタがまさにインクリメントされる瞬間にとてつもなくおかしな値に見えたらどうなってしまうんだろう。。

今のところうまく動いてます。
0202774ワット発電中さん
垢版 |
2014/07/01(火) 01:11:33.40ID:OfVeiwBo
CDCチェッカでエラーになるソースコードだな
まあ数百の製品に載せる訳じゃないなら十分だけど
0203191
垢版 |
2014/07/01(火) 01:15:50.26ID:FN3lKQ8N
やっぱり駄目なやり方なんですね。
0204774ワット発電中さん
垢版 |
2014/07/01(火) 05:54:42.27ID:g3kSawNA
>>200
>DPRAM or FIFO

DPRAM
Dynamic Programming Radio Active Material
放射性物質の動的計画法

FIFO
Furtherment of International Friendship Organization.
国際的な乱交パーティー
0205774ワット発電中さん
垢版 |
2014/07/01(火) 07:35:02.03ID:suCzp7fk
>>201
処理が終わる前に次の処理依頼が来ないのなら、
1ビットのカウンタでいいんじゃないの?
つまり、1足さずに、反転。
0207774ワット発電中さん
垢版 |
2014/07/01(火) 08:20:43.87ID:OlDsICgk
CLK2系統に直接スタート信号渡して
CLK2系統が受け取ったらRDY下げて
処理終わったらRDYあげたらダメなの?
0208774ワット発電中さん
垢版 |
2014/07/01(火) 12:20:15.75ID:BZEUNZiC
>>206
191のコードは明からに間違えてるだろ?
上げたフラグは下げたい、って言ってるだろ?
で、おまえはclk1だけで一方的に制御すれば良いって言ったんだろ?
0209774ワット発電中さん
垢版 |
2014/07/01(火) 12:35:14.58ID:RNGxZV4W
>>208

>あるalways1(CLK1で同期)でフラグを立てて
>別のalways2(CLK2で同期)の中でフラグが立っていたら一回だけ処理したい場合どうすればよいのですか?

フラグを下げたいとは書いてない。
CLK1でフラグを立てて、CLK2でエッジ検出すればいいだけ。
0210774ワット発電中さん
垢版 |
2014/07/01(火) 22:46:44.70ID:TvLg77wN
>>191
このソースの一つ目の順次処理文のflagと、
二つ目の順次処理文のflagはまったく同じ信号のつもりっぽいね。
このレベルで非同期の設計は難しいかな。
>>201
記述の間違いはおいといて、というかぜんぜん違うけど。
やりたいことをエスパーして答えると、
その考えの延長では非同期だと上手く動かないよ。
タイミングによって処理1回行うところを間違えて2回行っちゃったりね。
0211774ワット発電中さん
垢版 |
2014/07/01(火) 22:50:19.37ID:WCFSDlTu
なぜカウンタに!
やりたいことによるが、>>205 のいうとおり1ビットでできるはず。
カウンタを使うならグレイコードカウンタを使わないと。
0212774ワット発電中さん
垢版 |
2014/07/01(火) 23:01:34.73ID:WCFSDlTu
>>201
はダメダメかとおもったけど、恐ろしいことに意外とうまく動くかも。

191が懸念している通りcnt1の変化時にラッチするとおかしな値にになるのだが、
cnt1とcnt2が等しいかどうかだけ分ければよいわけだし、cnt1とcnt2が等しいのに
等しくないと判定される可能性はなさそうなのでうまく動きそう。

cnt1とcnt2が等しくないのに等しいと判定されることはあるが、一時的なもので次のクロックでは
正しく判定されるだろうし。
0214774ワット発電中さん
垢版 |
2014/07/01(火) 23:18:21.79ID:TvLg77wN
一応理由を書いとくと、
たとえば3->4に変化するときを2進で書くと011->100となる。
ビットごとに変化を書くとb2:0->1、b1:1->0、b0:1->0。
これらの信号の変化は完全に同時とはならない。
3->4になる瞬間に0,1,2,5,6,7などの複数の信号状態を経由する。
どの信号状態を経由するかは合成・配線毎、
あるいは環境温度で変わるかもしれない。
これを非同期で受けると・・・・以下略。
0215774ワット発電中さん
垢版 |
2014/07/01(火) 23:30:53.57ID:WCFSDlTu
>>214
それを非同期で受けたとして、以下略せずにまずいことが起こるパターンを教えてくれ。
今回に限ってはまずいことが起きないように思えるのよ。
0217774ワット発電中さん
垢版 |
2014/07/02(水) 00:04:22.71ID:8gg5QXac
たとえばcnt2=3でcnt1が3->4に変化する瞬間にラッチするとき。すなわちエラー処理を一度だけ行う必要のある状態。
cnt1が3に見えたらその時は何もしない。次のクロックで4に見えるのでその時エラー処理する。OK。
cnt1が4に見えたらその時エラー処理する。OK。
cnt1が5や6に見えたらその時エラー処理する。次のクロックでは4に見える。OK!!
0218774ワット発電中さん
垢版 |
2014/07/02(水) 00:09:15.93ID:gRh3e6jW
メタスタが起こったら何が起こるか分かんねーからダメに決まってんだろ
0219215
垢版 |
2014/07/02(水) 00:11:15.51ID:8gg5QXac
まあ、いずれにしてもお勧めできる回路ではないから深追いすることもないか。
何かしら191の参考になっていればよいが、混乱させてしまっていたらすまぬ。
0220215
垢版 |
2014/07/02(水) 00:22:48.64ID:8gg5QXac
非同期信号扱う以上、メタスタは回避できないしなぁ…
0221774ワット発電中さん
垢版 |
2014/07/02(水) 00:38:23.88ID:Jlj2msnr
>>219
君の言いたいことはこうかな?
要するに、>>201のソースで。
たとえば cnt1:3->4 と変化するときに
cnt1tmp:3->6->4見たいに変化することがある。
cnt2 != cnt1tmpのときにcnt2はインクリメントされるわけだから、
& 同時性を示すためにcnt2をそのままcnt1tmpの方を括弧付きであらわすと、
cnt2(cnt1tmp):3(3)->3(6)->4(4)
でつじつまが合うと。このケースは確かにそうかな。
メタスと一度でもcnt1<cnt2になったらcnt2がインクリメントし続けるのが気になるけど。
0224774ワット発電中さん
垢版 |
2014/07/02(水) 09:24:15.05ID:EKqWOgbe
FPGAで非同期セットとリセット両方が使えるとは限らんね
Spartan3は出来たと思うけど、Spartan6はムリ
Cycloneは出来るかな?
0225774ワット発電中さん
垢版 |
2014/07/02(水) 23:04:58.98ID:8gg5QXac
メタが気になるなら
cnt1tmp <= cnt1;
cnt1tmp2<= cnt1tmp;
cnt1tmp3<= cnt1tmp2;
と何段かのFFにすればよいんじゃない?
何段にしてもメタの確率0になることはないけど。(これは非同期の宿命)
0226191
垢版 |
2014/07/02(水) 23:12:02.01ID:kqenebzf
>>225
アドバイスありがとうございます!
さっそく実践したいと思います。
FPGAも電子回路も初心者なものでとんでもない物をさらしてしまいましたが
大変勉強になりました。
聞くは一時の恥ってやつですね。
0228774ワット発電中さん
垢版 |
2014/07/03(木) 08:41:13.26ID:jwmrgXxC
191氏がまだ見てるかどうか知らんが、191のシチュエーションだと、
フラグを立てる代わりにフラグをトグルして、トグルされたフラグを
clk2のFFで2回たたいて同期化し、そのあとflagのエッジ検出して処理開始すれば確実だよ。
異なるクロック間で処理開始の伝達はよくある事なので、俺はこれ専用の回路を
モジュール化(IP化)して使いまわしてるけど。
修正案↓
reg flag;
reg [2:0] flag_sync; //flagのclk2同期化とエッジ検出用レジスタ
always(posedge clk1 or rst) begin
 if(rst) flag <= 0;
 else begin
  if(エラー) flag <= !flag;
 end
end

always(posedge clk2 or rst) begin
 if(rst) xx
 else begin
flag_sync <= {flag_sync[1:0],flag} //flagをclk2に同期化
  if(flag_sync[2] != flag_sync[1]) begin //エッジ検出
   なんか一度だけのことをする。たとえばエラーメッセージをバッファに入れるとか。
  end
 end
end
0229774ワット発電中さん
垢版 |
2014/07/03(木) 09:11:46.62ID:4d6yP1bb
>>228
うん、この1bitの同期化受渡しが正解だな
>>225の多bit同期化はbit毎にズレが発生するのでやってはいけない設計
0231774ワット発電中さん
垢版 |
2014/07/03(木) 12:25:59.39ID:v2WkR7YV
非同期のバイナリカウンタでも、2回叩いて値が変わってなければ同期化できたってことでいい。
0232228
垢版 |
2014/07/03(木) 12:38:03.10ID:jwmrgXxC
×flag_sync <= {flag_sync[1:0],flag} //flagをclk2に同期化
○flag_sync <= {flag_sync[1:0],flag}; //flagをclk2に同期化
コロン付け忘れたw

>>230
clk1でフラグをトグルする間隔が、clk2の3クロック周期以上という意味だね。
0233774ワット発電中さん
垢版 |
2014/07/03(木) 18:47:44.76ID:SDLrgbW9
191君がどういう理由でカウンタにしたかは定かではないが、
下記のような状況を考慮した可能性はないのかな?
 clk1側でclk2側に処理させたい事象が短期間に5回発生した。 
 clk2側はその期間に1回の事象しか処理出来ないケースがまれにある。
見たいな。
0235774ワット発電中さん
垢版 |
2014/07/03(木) 20:27:38.62ID:SDLrgbW9
書いた後思ったけど、
(cnt1!=cnt2)の同期が保障されて無いと、
cnt2のビット毎にcnt2+1を通すか、
そのまま保持するか異なってくるタイミングあるかな?
cnt1tmpは省略不可か?
0237191
垢版 |
2014/07/04(金) 21:32:11.46ID:3O9b04Ik
>>228
191です。わざわざありがとうございます!
ありがたく使わせていただきます。

メタステーブルという言葉を教えていただいたので
自分でもいろいろ調べることができました。
おかげさまで勉強がだいぶ進みました。

みなさんありがとうございました
0239774ワット発電中さん
垢版 |
2014/07/09(水) 21:14:51.37ID:DGyXiUmk
シュミレーションは通るけど実機だと動かないから
見てくれと渡されたソースを調べてるんだけど
ちょと見ただけでゲートクロックやシーケンサもどきの部分で
組み合わせ回路からの非同期リセットが
あるんでISEでQuartusのDesign Assistantみたいなチェックをする方法ないですか? あるてらばっかし使ってたんでISEの設定がわからん
ソースごととにQuartusでコンパイルしなそえばみつかるかも知れないけど
0243774ワット発電中さん
垢版 |
2014/08/02(土) 15:14:55.10ID:uBMfcSR0
Verilogになる前のインテルの独自仕様のHDLがどんなだったか興味あるわ
0244774ワット発電中さん
垢版 |
2014/08/03(日) 07:18:32.00ID:3iUqk1+3
やっぱりツールは内製しないと負けるよな
fpgaとかでも、日本は駄目過ぎる
0245774ワット発電中さん
垢版 |
2014/08/03(日) 09:16:25.23ID:wYsvvgCc
ソフトも電子回路ももう日本は圧倒的に後進国だろう
モノづくりが強かったのは金型作るときの職人の腕がすごかっただけで
もう時代が違う
0248774ワット発電中さん
垢版 |
2014/08/04(月) 10:53:08.70ID:C3V8tVMK
つーかな、
日本のメーカーはソフトを軽視しすぎ。
ソフトというより、
あくせく汗水流してるとがんばって働いてるとか。
ホントの頭脳労働してても評価されない。
研究、開発、設計に現場と同じ感覚でQC活動なんかさせんな。
結局、勤勉さと、手先の器用さ以外の部分で見るべきものが全くなくなった
0249774ワット発電中さん
垢版 |
2014/08/04(月) 15:17:02.56ID:iBwRvjJp
殆どの付加価値はソフトウェアで実装されているが、
お客は、ハードが機能を実現していると思っている

経営者がこの感覚におちいっていると、ソフト技術者を冷遇する
経営者がこの現象を理解していると、ソフトを無料で配ってハードを高値で売る

いずれにしてもソフト技術者が尊敬されることは無い
0250774ワット発電中さん
垢版 |
2014/08/14(木) 19:17:23.52ID:8tlq/MX8
いかろすが8月一日に上がってた

入れはしたけど試しようがない・・・
サマリー読む気もない・・・
0251774ワット発電中さん
垢版 |
2014/09/14(日) 20:45:51.71ID:usnjQ+9J
Verilog で複数リセットに対応したいとき

always @(posedge ck or negedge res1 or negedge res2)

と書いても一応論理合成できたんだけどこれでいいんだろうか。

assign res = res1 & res2;

always @(posedge ck or negedge res)

みたいに書かないとダメかなとか思ったりしたけど。
0253251
垢版 |
2014/09/15(月) 00:56:42.56ID:UJFwcfHR
>>252
むむ、何を見ればいいんでしょう。Quartus 使ってます。
0254774ワット発電中さん
垢版 |
2014/09/15(月) 01:33:52.62ID:3MkPeNbp
252じゃないけど
Quartusなら
Tools → Netlist Viewer → Technology Map Viewer (Post-Fittinng)
で合成後の回路が見られる
0257774ワット発電中さん
垢版 |
2014/09/15(月) 18:29:38.41ID:4YpBRKwJ
素朴な疑問なんだが検証はできるの?
0259774ワット発電中さん
垢版 |
2014/09/16(火) 18:52:41.38ID:/7J8UsiO
>>258
クロックのエッジとリセットのエッジで何らかの動作をするという本質をよく表してると思うけど
0260774ワット発電中さん
垢版 |
2014/09/16(火) 20:25:52.82ID:YOoCniuq
>>259
リセットはエッジじゃなくレベルでかかるべきだろ
ダウンエッジでFFがリセットされても
その後強烈なノイズが乗ってFFが1に化けたら
ダウンエッジでしか効かないリセットだとリセットは0なのに
FFは1に化けたままになりそう
0261774ワット発電中さん
垢版 |
2014/09/16(火) 21:04:36.58ID:bTgXr+0e
一応こうとも書けるらしいけど、
http://www.mtl.t.u-tokyo.ac.jp/~jikken/cpu/wiki/index.php?Env%2FVerilog%2FOutline
これはこれでなにか気持ちが悪いんだよな。
いや、単に俺が気持ち悪いだけですけどね・・・
0262774ワット発電中さん
垢版 |
2014/09/16(火) 21:16:50.04ID:/7J8UsiO
>>260
うーん、その強烈なノイズってリセット期間中だけ発生してくれるもんなの?
0263774ワット発電中さん
垢版 |
2014/09/16(火) 21:36:40.16ID:YOoCniuq
>>262
でもレベルでリセットが効く方が有利だろ。
車のパーキングブレーキが
「引いた瞬間しか効かない」ものだったらどうなるか想像してみてくれ。
0264774ワット発電中さん
垢版 |
2014/09/16(火) 21:53:34.64ID:/7J8UsiO
>>263
まぁわかるんだけどね。実装はどうせそうなるし。
でもロジック上は区別がないのが気持ち悪さになるのかな。
0266774ワット発電中さん
垢版 |
2014/09/16(火) 22:43:25.87ID:OTxxyOsv
センシティビティリストってシミュレーションでしか使わないんじゃなかったっけ?
0267774ワット発電中さん
垢版 |
2014/09/17(水) 00:45:10.54ID:7Aw1CviR
>>266
VHDLではRTLシミュレーションでしか意味が無い。
でもverilogはそうじゃない。
0269774ワット発電中さん
垢版 |
2014/09/17(水) 08:11:23.63ID:GzHmrYfC
だから
強烈なnoiseが来たときに
FFを不定なり
リセットなり
掛ければ良いのでは

・・・まぁそんなこと回路か動くことのまえでは意味ないし
ノイズならRTL以外でケアすべきところ
0270774ワット発電中さん
垢版 |
2014/09/17(水) 23:04:47.86ID:XEmKdM0X
>>261
どっちにしてもVHDLにしても変化があった時に動作するのがセンシティビティリストなので結局はレベル動作を表しているわけじゃないけどね。
0271774ワット発電中さん
垢版 |
2014/09/18(木) 07:54:17.14ID:WfnlP8o0
RTLで表現出来る非同期リセットのノイズなら、エッジ評価で問題無いでしょうに。gate cellモデルならprimitive文で非同期リセットをレベル動作モデリングするのが通例。
0272774ワット発電中さん
垢版 |
2014/09/18(木) 17:53:48.18ID:20hcEhHE
下記のようなラッチを
always@(G or D)
if (G) Q <= D;

こう書くのと似た気持ち悪さってことかね。
always@(posedge G or posedge D or negedge G or negedge D)
if (G) Q <= D;

VHDLはそもそもセンシティビティリスト自体不要だったと思うんだけど、
なぜあるんだろうね。
0279774ワット発電中さん
垢版 |
2014/09/21(日) 12:46:47.14ID:MCfBJJ7P
5・7・5
の後に「それにつけても 金の欲しさよ」
を付ける。
0281774ワット発電中さん
垢版 |
2014/10/30(木) 17:00:06.03ID:dNw3/Urz
VerilogでALU的なのを書いていたらはまったのですが、
ModelSim-Altera Starter Edition 10.1e で次のコードを実行したら、
なぜか三つめだけ論理シフトになってしまいます。

これはVerilogの仕様なんでしょうか?あるいはModelSimのバグ?
他の環境ではどうなるのでしょう?

`timescale 1ns / 1ps
module alu_tb;
wire dummy;

initial begin
$display("%x",
$signed(32'hffff8180) >>> 8);
$display("%x",
1 ? $signed(32'hffff8180) >>> 8 :
0);
$display("%x",
1 ? $signed(32'hffff8180) >>> 8 :
0 ? 32'hffff8180 >>> 8 :
0);
$display("%x",
1 ? $signed($signed(32'hffff8180) >>> 8) :
0 ? 32'hffff8180 >>> 8 :
0);
$stop;
end
endmodule
0282774ワット発電中さん
垢版 |
2014/11/02(日) 14:58:30.19ID:6RmVD04Q
>>281

多分Verilogの仕様 。
32'hffff8180はunsignedなので算術シフトしても論理シフトになる。
算術シフトしたいなら32'shffff8180か $signed(32'hffff8180)のように
signedとして扱われるように記述する必要がある。

ただ、後者がセレクトされる理由は分かんないや。ゴメン。
0283774ワット発電中さん
垢版 |
2014/11/02(日) 15:30:56.46ID:RHpjiNww
>>282
あ、3つめも後者の論理シフトが選択されてるわけではなくて、
$signedの付いている方の式を実行してるんです。
紛らわしい例でごめんなさい。
0284774ワット発電中さん
垢版 |
2014/11/02(日) 16:54:34.20ID:iS0fpnsg
>>281
うちにもフリーのツールしかないからModelSim ASEとVerilatorでしか試せてないけど、
Verilatorではちゃんと全部同じ値になった。
ffffff81
ffffff81
ffffff81
ffffff81
Verilogの仕様ってことはないんじゃないかな。
0285sage
垢版 |
2014/11/02(日) 22:44:59.56ID:YxW1cfDO
>>281
仕様書読んでみたけど、3項演算子のときどうなるのかよく分からない。
verilogでsignedは後から追加された仕様だから謎の部分が多い。
どうしても使わなきゃいけない部分以外は、unsigned にしとくほうが安全だね。

http://www.edaplayground.com/
0286774ワット発電中さん
垢版 |
2014/11/04(火) 20:57:45.18ID:Zmp209bf
3番目はこう解釈されてるのかな?
$display("%x",
(1 ? $signed(32'hffff8180) >>> 8 : 0) ? 32'hffff8180 >>> 8 :0);
なぜ3番目だけこうなるのだろう。
0287774ワット発電中さん
垢版 |
2014/11/04(火) 21:12:40.07ID:Zmp209bf
演算子の優先度を調べてみたけど、下記表現が
 a ? b : c ? d : e  ・・・(1)
下記のどちらで解釈されるかは
 (a ? b : c) ? d : e
 a ? b : (c ? d : e)
どこにも書いてない。
未定義なのかな?
未定義だとすると(1)と書くのがそもそも間違いという結論になるのかね。
0288774ワット発電中さん
垢版 |
2014/11/04(火) 21:38:03.82ID:n2YAtGDR
>>286
手元のModelSim ASE 10.1dで試してみると
$display("%x", 1 ? $signed(32'hffff8180) >>> 8 : 0 ? 32'h12345678 : 0);
としても結果は
00ffff81
になるので、後ろの項が選択されているわけではないっぽい。
0291774ワット発電中さん
垢版 |
2014/11/05(水) 00:04:33.47ID:YiwBjnU+
>>289
結合性が左ということは、
>>281
の実行結果は本来こうなるのが正しいということでOK?
ffffff81
ffffff81
00ffff81
00ffff81
0292774ワット発電中さん
垢版 |
2014/11/05(水) 00:45:08.43ID:Y5QyR1i8
>>289
三項演算子が左から右ってありえなくない?
そんなことになったらマルチプレクサ書くのにカッコの山になる。
0296774ワット発電中さん
垢版 |
2014/11/05(水) 09:16:43.08ID:kZzXAAQr
>>292
foo= a ? b : c ? d : e; だと、
c じゃなくて a を先に評価しろってことでしょ?
a が真なら b、
偽なら c ? d : e 。
0299774ワット発電中さん
垢版 |
2014/11/05(水) 10:57:19.69ID:CkzFue08
条件演算子(3項演算子)の優先順位が変テコりんな言語はPHPだけ。
PHP以外は全てC言語と同じだろ?
0302281
垢版 |
2014/11/05(水) 12:51:59.84ID:11EZsYb+
みなさんありがとうございます。
ISE14.7のISimでもやはり三つめが論理シフトになってしまいました。
ModelSimと同じエンジンを使っているという可能性もありますが、
どうもVerilogの仕様かもしれません。

式をいろいろいじったところ、次のような結果になりました。

`timescale 1ns / 1ps
module alu_tb;
wire dummy;

initial begin
$display("%x", $signed(32'hffff8180) >>> 8); //ffffff81
$display("%x", $signed(32'hffff8180) >>> 32'd8); //ffffff81
$display("%x", ($signed(32'hffff8180) >>> 8) + 0); //ffffff81
$display("%x", ($signed(32'hffff8180) >>> 8) + 1); //ffffff82
$display("%x", ($signed(32'hffff8180) >>> 8) + 32'b0); //00ffff81
$display("%x", ($signed(32'hffff8180) >>> 8) + $signed(32'b0));//ffffff81
$display("%x", $signed($signed(32'hffff8180) >>> 8) + 32'b0); //ffffff81
$display("%x", $signed(($signed(32'hffff8180) >>> 8) + 32'b0));//00ffff81
$stop;
end
endmodule

推測ですが、次のようなルールと思われます。

・0や1は符号なしではないが、32'b0は符号なし。

・右辺式のいずれかの値が符号なしだと、全体が符号なしになる。
 このとき$signed()をつけていてもはがれる。
 ただし
 三項演算子では、a ? b : c のとき、aの符号有無はb, cには無関係。
 シフト演算子の第2項の符号有無も第2項には無関係。

・$singed($signed())と二重になっていると、一つだけ(たぶん内側?)はがれる。

これが本当に仕様かどうかは確認できていません。
0303281
垢版 |
2014/11/05(水) 12:56:05.99ID:11EZsYb+
× シフト演算子の第2項の符号有無も第2項には無関係。
○ シフト演算子の第2項の符号有無も第1項には無関係。
0304774ワット発電中さん
垢版 |
2014/11/05(水) 19:25:05.65ID:YiwBjnU+
>>302
> ・0や1は符号なしではないが、32'b0は符号なし。
例を見るとそれっぽいね。

> ・右辺式のいずれかの値が符号なしだと、全体が符号なしになる。
近い感じだけどちょっと違うかな?

> ・$singed($signed())と二重になっていると、一つだけ(たぶん内側?)はがれる。
これはたぶん違うんじゃないかな?
下から2番目
$display("%x", $signed($signed(32'hffff8180) >>> 8) + 32'b0); //ffffff81
に適応すると
$display("%x", ($signed(32'hffff8180) >>> 8) + 32'b0); //ffffff81
これは上から5番目と同じ形だから結果は00ffff81になるはず。

だから >>302 に共通するルールは
 論理シフトを実行する場合、その次に実行される演算まで評価して数値型を決める。
 上記評価範囲内に符号なしが存在すれば符号なし型となり、
 すべて符号付であれば符号付型となる。
じゃないかな?

下から2番目の最初に実行されるシフト演算と、その次に実施される演算を抜き出すと、
$signed($signed(32'hffff8180) >>> 8)
だから、上記部分は$signed(32'hffffff81)となり、以下略。
一番下の最初に実行されるシフト演算と、その次に実施される演算を抜き出すと、
($signed(32'hffff8180) >>> 8) + 32'b0
だから、上記部分は32'h00ffff81 + 32'b0となり、以下略。
0306774ワット発電中さん
垢版 |
2014/11/05(水) 21:27:45.69ID:YiwBjnU+
度々すいません。
もっと単純なルールで説明できますね。
 ・計算式中一つでも符号なしが存在した場合、
  その式は符号なしとして計算される。
 ・$signed(*)見たいなものは*が先に計算されてから$signedに渡される。
  これはFunc(*)等の関数でも同様。
考えてみれば当たり前ですね。

// 08000000
$display("%x",'sh80000001/'sh10 + 'sh0 + 'sh0 + 'h0);
$display("%x",$signed('sh80000001/'sh10 + 'sh0 + 'sh0 + 'h0));
// f8000001
$display("%x",'sh80000001/'sh10 + 'sh0 + 'sh0 + 'sh0 + 'sh0);
$display("%x",$signed('sh80000001/'sh10 + 'sh0 + 'sh0) + 'h0);
$display("%x",$unsigned('sh80000001/'sh10 + 'sh0 + 'sh0) + 'h0);
0310774ワット発電中さん
垢版 |
2014/11/06(木) 08:19:06.95ID:m3ocUVek
符号の扱いは、ieeeの規格書にちゃんと書いてあるだろ。見ているのか?
0311774ワット発電中さん
垢版 |
2014/11/06(木) 12:05:58.55ID:LdPAe1f3
>>307
VCS と irun(nc-verilog) でやってみたぜ。

>>281 をそのままやったら、どちらも
ffffff81
ffffff81
00ffff81
ffffff81
0312774ワット発電中さん
垢版 |
2014/11/06(木) 12:08:23.58ID:LdPAe1f3
>>308
オレが >>285 にリンク貼ってやっただろ
0313774ワット発電中さん
垢版 |
2014/11/07(金) 23:49:04.10ID:0OzJPhtw
算術演算のIP作ったとき、符号付、符号無の混在演算のサポートで結構悩んだなぁ。
割り算IPの場合、符号付A÷符号付B=符号付Qの演算の時とか、
Qの整数部のビット数=Aの整数部のビット数+1にしないと、Qの整数部がオーバーフローするんだよね。
例)
-65536÷(-1) = +65536
0315774ワット発電中さん
垢版 |
2014/11/09(日) 16:51:41.27ID:Qfbx8iBP
身もふたも無いので・・・
>>306
↓これでOK?

$signed(32'hffff8180) >>> 8
$signed(u) >>> s
s >>> s      すべてsなので算術シフト
s
結果は32'shffff8180(signed)。

1 ? $signed(32'hffff8180) >>> 8 : 0
s ? $signed(u) >>> s : s
s ? s >>> s : s      すべてsなので算術シフト
s
結果は32'shffff8180(signed)。

1 ? $signed(32'hffff8180) >>> 8 : 0 ? 32'hffff8180 >>> 8 :0
s ? $signed(u) >>> s : s ? u >>> s : s
s ? s >>> s : s ? u >>> s : s      uがあるので論理シフト
u
結果は32'h00ffff81(unsigned)。

1 ? $signed($signed(32'hffff8180) >>> 8) : 0 ? 32'hffff8180 >>> 8 :0
s ? $signed($signed(u) >>> s) : s ? u >>> s : s
s ? $signed(s >>> s) : s ? u >>> s : s    $signedに渡される s >>> s がすべてsなので算術シフト
s ? $signed(s) : s ? u >>> s : s
s ? s : s ? u >>> s : s      uがあるので論理シフト
u
結果は32'hffff8180(unsigned)。
0316774ワット発電中さん
垢版 |
2014/11/09(日) 20:53:17.93ID:G0OG5WJ6
最近はルート配線で悩んでる
スラックを満たしてるけどクロックに対して余裕が少ない
単クロックばら撒いてるのに配線遅延のせいかタイミングが満たせない
スライス量が増えると適切な配置に限界があるのか
0317774ワット発電中さん
垢版 |
2014/11/10(月) 20:28:56.99ID:mXuY5agi
タイミングの類はベストとワーストでやるだろうから
結構マージンあると思うよ
0318774ワット発電中さん
垢版 |
2014/11/14(金) 11:01:55.38ID:gBlB4OT4
ルート配線… シンセサイズ合成みたいなものか
スラック満たしてるなら全く問題ないと思うけど
ツールは制約満たしてればそれ以上無駄な努力はしないよ
無駄な努力を強制するなら、XilinxならContinue on Impossibleなんてオプションがあるけど
0322774ワット発電中さん
垢版 |
2014/11/23(日) 20:31:08.44ID:CxGRU0aw
マージン増やそうと思ってクロック制約を割増なんてやっていいですか
0324774ワット発電中さん
垢版 |
2014/11/24(月) 00:13:49.50ID:4vvitbkL
多クロック入れる場合は各々入力に制約つけてるがまずいんか
0326774ワット発電中さん
垢版 |
2014/11/29(土) 00:13:09.45ID:eqsRZsDi
Verilogに対するSystemVerilogのようなものって、VHDLにはあるの?
0330774ワット発電中さん
垢版 |
2014/11/30(日) 21:42:33.99ID:81WBD9rk
>>328
テクノマセマティカルでも買ったほうがいいよ。
エンジニアはほとんど残ってないみたいだけど。
0331774ワット発電中さん
垢版 |
2014/11/30(日) 21:56:50.32ID:zx8WHH08
>>328
このスレで「これができる奴は30代でも年収1000万超えてるレベルだろ」って言われてるけど
500万の俺は一体・・・
0332774ワット発電中さん
垢版 |
2014/11/30(日) 22:00:47.47ID:yTkERP9G
IPオフロード処理関連では無く、トランスコーダーの方なんだねぇ

素直にOpenMPとかOpenCL使ったアルゴリズムに力入れた方がヨクネ?とか思ったら負けなんだろうな…
0333774ワット発電中さん
垢版 |
2014/11/30(日) 22:15:54.26ID:GCJWQoae
デバイスドライバの実装はハードウェア設計者とは別だと思うんだが…
0334774ワット発電中さん
垢版 |
2014/12/01(月) 00:48:10.80ID:82dKVpIt
なんだかなぁ、IP集めて何か作ればそれで作ったような気になる、
こんな技術者が多すぎる。
何も自分の頭で基礎を考えようとしない?
それがものづくりなのか?
0335774ワット発電中さん
垢版 |
2014/12/01(月) 01:19:23.62ID:nnM/3m1X
いまさら民主党
0337774ワット発電中さん
垢版 |
2014/12/01(月) 09:13:16.16ID:0F1w/yf8
ライブラリをまったく持っていないだろうな。完成まで2,3年かかると見た。
0341774ワット発電中さん
垢版 |
2014/12/04(木) 18:59:15.88ID:KtbaEH9n
デバドラはMS-DOS時代に書いた事はあるけどWindowsやLinuxでは書いたことないからパスだな
0344774ワット発電中さん
垢版 |
2015/01/06(火) 12:51:49.90ID:8EiV/sDa
勉強中の身なのですが質問があります。
verilogでnビット加算回路を作成したく思っています。

調べたところ、+記号を用いて簡単に作成しているものがありました。

+記号を使わずに、全加算器を用いてnビット加算回路を作成する方法はありますか?

例えば3ビットの場合、全加算器を3つ(または半加算1つと全加算3つ)記述しなければならないのと思うのですが、こういったものをn個(指定した個数)にするといった方法はあるのでしょうか?
0345774ワット発電中さん
垢版 |
2015/01/06(火) 13:16:38.96ID:XbMNxlM+
generate
演算子使わないで全加算器連結なんて、お勉強以外で実際に使う事は無いと思うけど
0346774ワット発電中さん
垢版 |
2015/01/06(火) 14:58:58.25ID:VCO+erxy
>>344
verilogじゃないけどVHDLで全加算器を自動で並べる記述をして
作ったことがあるよ。
この場合、FPGAだとキャリーチェーンを使わなくなってしまい
ロジックの消費も増えてだめだった。
結局素直に+演算子で記述した方が、ロジックの消費を抑えられたよ。
0348774ワット発電中さん
垢版 |
2015/01/06(火) 16:06:16.36ID:1muLcfsw
初心者なんだけどビヘイビアレベルってなに?
vhdlで普通にかいたらrtlレベルの記述になるよね

それと
process(clk)
begin
if(clk'event)

って意味が重複してない?
process(clk)っでclkが変化したときだけ実行されるんだよね?
0349774ワット発電中さん
垢版 |
2015/01/06(火) 16:26:22.81ID:XbMNxlM+
>>346
そうなる罠
FPGAベンダのツールじゃ無くて、Synplifyみたいな高級品使えばそういう所も意図を汲んでくれる、らしい
使った事ないから知らんけど

>>347
ネタじゃ無くて実際にそんなやり方してるの?
0351774ワット発電中さん
垢版 |
2015/01/06(火) 17:25:31.30ID:XbMNxlM+
マジだったのか…そりゃ何でも出来るだろうけどさ
>>344 みたいな言語の構文で十分出来るような事までスクリプト組んで自動生成したいのか?

以前にPCヲタが仕事で「Excelで16進表記したいからVBAでマクロ組んだった」ってドヤ顔するの思い出したわ
0352774ワット発電中さん
垢版 |
2015/01/06(火) 18:36:13.39ID:B2E0K73a
>>348
> 意味が重複してない?
> process(clk)っでclkが変化したときだけ実行されるんだよね?
そう。だから、clk'eventは必ず真になる。
でもこれはVHDLの文法での話であって、
合成ツールはそうじゃない。
合成ツールはVHDLのセンシビティリスト無視するから、
意図した回路ができない。
0353774ワット発電中さん
垢版 |
2015/01/06(火) 19:26:38.59ID:B2E0K73a
後、ビヘイビアレベルだけど、
設計の初期段階に、
 回路合成できるかどうかは無視して抽象的な設計をする
レベルって感じの意味。
たとえば、下記は合成はできないが、
1秒毎進むカウンタを表現している。
細かいことは無視して構想設計して、
次の段階で合成可能なRTLレベルに落とし込んでいくイメージ。
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity Test1 is
port(A : out integer);
end Test1;
architecture behavior of Test1 is
signal B : integer;
begin
A <= B;
process begin
B <= 0;
while true loop
wait for 1 sec;
B <= B +1;
end loop;
end process;
end behavior;
0354774ワット発電中さん
垢版 |
2015/01/06(火) 21:22:38.91ID:Nz1HYU2m
つかココ人居たんだ・・・

アルテラかなんかで32bit加算器を
適当APPNAと+記号で比べたら
+が断然速かったなぁ
0355774ワット発電中さん
垢版 |
2015/01/07(水) 00:14:52.12ID:nzEuH181
>>353

ありがとう!なんとなくわかってきた!

ビヘービアでは論理合成できるとは限らないのか

テストとかでなら使えそうだね
0356774ワット発電中さん
垢版 |
2015/01/07(水) 05:23:16.84ID:r1QvrnDk
テスト用にでっち上げたスタブのRAMとかドライバは中身ちょ〜適当なので合成不可ばっかりだわw
0357774ワット発電中さん
垢版 |
2015/01/07(水) 11:02:38.27ID:2VspyyQf
何が合成可能なのかいまいちわからん
wait系ならwait untilだけ、それも1processにつき一個まで
とか

断片的な知識しかない
合成不可なパターンをまとめたページとかありませんか?
0358774ワット発電中さん
垢版 |
2015/01/07(水) 11:14:59.17ID:5UEMO4Cj
うろ覚えだけど、XilinxのXSTはこんなのも合成してくれると資料に書かれていたような
誰得…

process begin
 wait until rising_edge(CLK);
 data <= '0';

 wait until rising_edge(CLK);
 data <= '1';
end process;

クロック信号と極性は全部同じでないと駄目で、さらにステート保持用にレジスタが生成されるはず
0359774ワット発電中さん
垢版 |
2015/01/07(水) 18:56:23.28ID:D/XG739e
>>357
こう書けば合成可能というしっかりした規格は無いと思う。
が、DesignCompilerという論理合成ツールがスタンダードと考えていい。
下記あたりで回路推定可能な記述はどんな形かを知っておくといい。
http://cseweb.ucsd.edu/~tweng/cse143/VHDLReference/08.pdf
0360774ワット発電中さん
垢版 |
2015/01/21(水) 02:16:05.83ID:uTdAJ0ud
初心者ですが、教えて下さい。

Verilogで、ADコンバータの値を8回の移動平均しようと考えています。
以下のように記述を考えましたが、何か勘違いしているでしょうか?

always @ (posedge CK) begin
 if( RESET ) begin
   ・・・・
 end else begin
  meta <= AD_pin; //メタフィルタ
  AD0 <= meta;  //記憶(最新)
  AD1 <= AD0;  //
  AD2 <= AD1;  //
  AD3 <= AD2;  //
  AD4 <= AD3;  //
  AD5 <= AD4;  //
  AD6 <= AD5;  //
  AD7 <= AD6;  //記憶(最古)
  AD_gokei <= AD0+AD1+AD2+AD3+AD4+AD5+AD6+AD7; //合計する
  AD_heikin <= AD_gokei[19:2]; //8で割る
 end
end

過去7個を持たなくても、前回平均値に「最新値を8で割って」加算すればよいか....
と思っていましたが、それは違うと思いました。
いかがでしょうか
0362774ワット発電中さん
垢版 |
2015/01/21(水) 09:27:36.05ID:esy4Oum6
>>361
FIRとIIRの違い。調べてみよう。

ちなみに、AD_goukei は、レジスタでなくていいのでは?
0365774ワット発電中さん
垢版 |
2015/01/23(金) 01:52:56.48ID:7LyKAswa
8個前のデータを保持するのは、言い換えれば、
8個手前のデータを与えることなので、
8個分の遅延をした値を与えればOK。
0366774ワット発電中さん
垢版 |
2015/01/23(金) 04:06:57.70ID:E3fKCcch
FPGAで2行LCDを駆動しようとプログラム(Verlog)していましたが、
結局今日1日かかってもできませんでした。
待ちに次ぐ待ちで、タイマーを何本も作りましたが、うまく文字が出ませんでした。
reg [19:0] count;

reg timer_start1;
reg timer_start_0;
reg timer_start_1;
reg timer_end1;

timer_start_0 <= timer_start1;
timer_start_1 <= timer_start_0;

if( (timer_start1==1'b0) && (timer_start0==1'b1) ) begin // 立ち上がったら
  if( count < 20'd50000 ) begin             // カウンタが50000より小さいなら
    count <= count + 20'd1;              // カウンタアップ
    timer_end1 <= 1'b0;                // 終了ではない
  end else begin
    timer_end1 <= 1'b1;                // タイマ終了である
  end
end

マイコンだと、__delay_ms(5)って書くと5ms待つんですが、
FPGAは何行も書くのですが、そういう1行の命令はないのでしょうか?
何かコツはありますでしょうか?
0367774ワット発電中さん
垢版 |
2015/01/23(金) 06:40:58.73ID:ERlYt37C
FPGAがどういうものかっていうのを今一度調べ直してみるといいのではなかろうか
0370774ワット発電中さん
垢版 |
2015/01/25(日) 06:34:20.05ID:EhYiihDE
すみません、教えてください。

Verilogで、符号付きの計算で苦戦しています。

符号付きのレジスタは、
reg signed [7:0] tinco [0:7];
で宣言できます。また、正の定数は、
tinco [4] <= 8'sd250;
で、代入できます。

しかし、負の定数の記述方法がわかりません。
tinco [5] <= 8'sd-250;
は違うと思いますし。

宜しくお願いします。
0371774ワット発電中さん
垢版 |
2015/01/25(日) 10:13:41.55ID:JJ8QOH6O
-8'sd250 でも -8'd250 でもどちらでも。
ビット長なんて気にしなくていいから、-250 でいいと思うけど。
0373774ワット発電中さん
垢版 |
2015/01/25(日) 22:13:11.11ID:g2x9f0W/
10年振りにHDLでも弄ろうと思ったら、センシティビティリストとか手抜きできてびっくりした。
0374774ワット発電中さん
垢版 |
2015/01/26(月) 01:58:23.40ID:t2z72wP8
Verilogで signed って使えるんだ。すごい。

reg signed [15:0] s16_aaa;
reg signed [11:0] s12_bbb;
があったとき、

s12_bbb <= s16_aaa; ってやると、どうなるの? ちゃんと値のLSB側が切られて
キャストされて代入されるの?

また逆に、s16_aaa <= s12_bbb; ってやると、ちゃんと符号拡張もやってくれるのかしら。
0376774ワット発電中さん
垢版 |
2015/01/29(木) 03:30:33.03ID:OlvVWTGw
Verilogで、負の数値が扱えなかったころは、どうやって処理したのだろうか。
自分で負の処理を書いたのだろうか。

if( a == 16'h0 ) begin
  a <= 16'hffff;
end else begin
  a <= a - 16'h1;
end
 とか 
0378774ワット発電中さん
垢版 |
2015/01/29(木) 07:33:12.58ID:xZAA/WqV
負数の内部表現は2の補数。unsignedだけでも符号拡張が面倒くさいがさほど困らんよ。
0379774ワット発電中さん
垢版 |
2015/01/29(木) 08:01:11.00ID:Hk1KNEU0
1995と2005では負の値に対するnumberの扱いがちと違う。

詳しくは規格を見てもらうとして、xやzを無視した10進整数に限って言えば
// 1995
decimal_number ::=
 [sign] unsingned_number
 | [size] decimal_base unsigned_number
decimal_base ::= 'd | 'D
// 2005
decimal_number ::=
 unsigned_number
 | [size] decimal_base unsigned_number
decimal_base ::= '[s|S]d | '[s|S]D

もちろん2005でも単項演算子としての-があるからあまり違いを気にする事はないけどね。
0380774ワット発電中さん
垢版 |
2015/01/31(土) 02:21:59.18ID:eKQkzo8n
Xilinx ISEでVerilogをやっています。
少し修正するだけでも一通り全部のコンパイルをするので
時間がかかって困っています。
修正したファイルだけをコンパイルするだけで良いとか、
そういう方法はないのでしょうか?
0381774ワット発電中さん
垢版 |
2015/01/31(土) 03:02:03.89ID:LE69sxSL
時間がかかるのはコンパイルよりP&Rですよ。
困るほど時間がかかるのは、デバイスの使用率が大きすぎるからだと思う。
あと、PCのメモリが足りないんじゃないかな?
0382774ワット発電中さん
垢版 |
2015/01/31(土) 03:29:40.42ID:Vtudet0c
>>380
>修正したファイルだけをコンパイルするだけで良いとか、そういう方法
たぶん無いと思います。ガマンするしかありません。
PCのスペックを上げれば、確かに速くなりますが、劇的ではない予感がします。
時間がかかると言っても、30分程度なら短い方ですよ。
1晩とか平気でかかっていた時代もあったらしいです。
0383774ワット発電中さん
垢版 |
2015/01/31(土) 16:27:08.97ID:XZgAsNTl
最上位だけ別に作っとけば、下位階層は別々にコンパイル出来るよ。

P&amp;Rは、Virtex5で90%くらい使ってたときは一晩かかった。
コンパイル(論理合成)はSynplify Premierだったけど。
0385774ワット発電中さん
垢版 |
2015/02/01(日) 12:07:15.07ID:bpR/jqmF
ISEってインクリメンタルコンパイルってないの?
QuartusIIは有料版なら使えるけど無償版はできない
ISEも似たようなもん?
0387774ワット発電中さん
垢版 |
2015/02/07(土) 20:56:40.92ID:iJrGLt7v
仕事としてHDL使ってる人ってどんなもの作ってるの?
大学2年くらいの時に時計作らされたけどそれだけで発狂しそうになったわ
0388774ワット発電中さん
垢版 |
2015/02/08(日) 00:43:46.08ID:mpFm0YX8
FPGAはもちろん、ほとんどのデジタルICはHDL使ってるんじゃね?
FPGAそのものもHDL使って設計してるらしいよ。
0390774ワット発電中さん
垢版 |
2015/02/08(日) 16:44:26.61ID:ArGz65xC
学生にやらせるのは良いことだと思うよ
キャラクタLCDの初期化を通してマイコンの神々しさを知り崇拝するようになるだろう
0391774ワット発電中さん
垢版 |
2015/02/10(火) 10:21:44.52ID:akjyNrP6
つーか「HDL」ってくくりがおおまかすぎるねん。
たとえば「プログラミング言語」やったら、アセンブリ言語からPrologまで含まれるんやで。
0392774ワット発電中さん
垢版 |
2015/02/11(水) 14:20:32.64ID:IQZNPz3q
HDLとRTLの違いは、何ですか?
意味的にいうと、どっちかが、どっちかに包まれる言葉でしょうか?
0393774ワット発電中さん
垢版 |
2015/02/11(水) 16:49:13.70ID:MvNghKJk
高位合成界隈にはHDLだけどRTLじゃないってものはいくつかありそう。
ただ、OpenCLとかMATLABから高位合成した時にソースをHDLと認識するかとか考えると、
どっちも言ったもん勝ちの部分はありそうだけど。
0394774ワット発電中さん
垢版 |
2015/02/11(水) 17:14:03.24ID:6AMHXY3y
>>392
HDL ⊃ RTL だけど、
この場合のHDL は、Verilog と VHDL くらいで、
edif とか SystemC は入らない気がする。
0396774ワット発電中さん
垢版 |
2015/02/12(木) 03:10:34.97ID:12MXBcpZ
RTL = Registor Transfer Level
データは、クロックによりFFを通って処理されるという回路接続方法という理解で
よいでしょうか?
0397774ワット発電中さん
垢版 |
2015/02/12(木) 09:44:15.40ID:aktX9y/Z
>>395
「HDL言語を使って」とか
「RTLレベルで書かないと」とかつい言っちゃうよね。

「HD言語」「RTレベル」が正しい。
0399774ワット発電中さん
垢版 |
2015/02/12(木) 10:15:43.97ID:2DYCtHvY
高水準のほうから見てくとわかりにくいが、低水準のほうから考えてゆけば良い。
ネットリストのレベルだと、全ての接続を静的に記述するわけだけど、
RTLの場合はそうじゃなくて、「こういった場合の時のはここからここにデータが伝わる」
という感じの記述になる、ということ。
それより高水準のビヘイビア記述は、メーカーとかも結局何がなんだか状態なんじゃねーのw
0400774ワット発電中さん
垢版 |
2015/02/12(木) 11:15:43.16ID:Abxz7T5y
あなたもネットで告発しませんか?

ビッ苦カメラ札幌店 佐藤伸弦 暴行事件
0401774ワット発電中さん
垢版 |
2015/02/12(木) 23:19:50.05ID:GlqxZMeS
HDLの類は、あと10年か20年くらいで、ソフトウェアプログラミング言語と融合すると思うのだが。
眺めていると、そうなってほしくないという感情があるっぽい。
もともとハード屋かな。
0402774ワット発電中さん
垢版 |
2015/02/12(木) 23:21:49.83ID:GlqxZMeS
ソースを書いて、書き換え可能なメモリのようなものに記録する状態で、もう限りなくソフトに近い。
メモリにCPU解釈の命令列を出力するか、実行可能な回路を出力するか、その程度の違い。
0403774ワット発電中さん
垢版 |
2015/02/13(金) 04:05:52.45ID:4hHLN1pP
>>402
僕もそう思う。
だから、人前で「FPGAのプログラム作ってる」と言っています。
マイコンのプログラムと何も違わないから。

しかし、Verilogに慣れると、久々にマイコンでCを書くとき、
Verilogには結構便利な機能があること気づきます。
一番感心するのは「 { } 」連接です。
bit単位で連結したり入れ替えたりできて、とてもありがたい。
Cでやろうとすると、シフトと&の連続ですよね。
0405774ワット発電中さん
垢版 |
2015/02/13(金) 09:40:44.85ID:pzz+U5OG
ソフト屋だけどFPGAに初めて挑戦して
ソフトとハードは考え方から根本的に違うと思った。まる。
0406774ワット発電中さん
垢版 |
2015/02/13(金) 10:01:05.83ID:FqcomeDH
そもそも初期のコンピュータは配線を変えることによって
処理を変えていたんだから、それをプログラミングと呼ぶなら同等だろう。

C言語からそのままハードウェアってのはここ20年くらい言われているけど
ろくに実現できていない。言語の問題じゃなくて、
>>405 の感覚が正しいんだと思う。
0407774ワット発電中さん
垢版 |
2015/02/13(金) 23:39:24.35ID:sc3uuhjm
ブロッキング代入とノンブロッキング代入、どっちが主流なんだろう。
0409774ワット発電中さん
垢版 |
2015/02/14(土) 03:18:39.70ID:VOSEu/vL
ASICはまあなんとかなるかって記述しちゃうけど
FPGAの時は構造がアレだから記述はこうするか
って物理的な問題でブロッキング気にする事はあるが
主流とかは考えてはいないかなぁ
0410774ワット発電中さん
垢版 |
2015/02/14(土) 10:39:22.83ID:O7h4p72O
>>406
HDLとFPGAの組み合わせは、配線を変えたプログラミングより、明らかにソフト寄り。

CPU設計者やFPGA設計者を本物のハード屋だけれども、
HDL屋はハード屋といいにくいと思う。

プログラミングという言葉には命令列生成というニュアンスがあるので、
ソフト的なものであっても『回路設計』にプログラミングという言葉を使うのは
違和感があるのかもしれない。

「ハードウェアとソフトウェア」と「回路設計と命令列設計」という
それぞれの概念軸は直行する考えていいかも。
命令列設計のほうが早くにソフト化したので、ソフトウェア設計と命令列設計
は同一視されたけども、20年後くらいはどうか。


 ハードウェア回路設計(古典的な回路設計、CPU設計、FPGA設計)
 ソフトウェア回路設計(HDLとFPGAの組み合わせ)

 ハードウェア命令列設計(配線変更による太古のプログラミング)
 ソフトウェア命令列設計(現在のプログラミング)

ソフトウェア回路設計とソフトウェア命令列設計は現在は「まだ」融合していない。
0411774ワット発電中さん
垢版 |
2015/02/14(土) 13:53:44.33ID:UbgZWfJb
>>403
>一番感心するのは「 { } 」連接です。
>Cでやろうとすると、シフトと&の連続ですよね。
具体的にCでやるとどうなるんだろう。

MSB←→LSBの入替は、

#define N 0x12
unsigned chr a;
a =(N&0x01)? 0x80 : 0x00;
a+=(N&0x02)? 0x40 : 0x00;
a+=(N&0x04)? 0x20 : 0x00;
a+=(N&0x08)? 0x10 : 0x00;
a+=(N&0x10)? 0x08 : 0x00;
a+=(N&0x20)? 0x04 : 0x00;
a+=(N&0x40)? 0x02 : 0x00;
a+=(N&0x80)? 0x01 : 0x00;

Verilog

wire [7:0] N = 8'h12;
wire [7:0] a = 8'h00;
assign a = { N[0],N[1],N[2],N[3],N[4],N[5],N[6],N[7] };

というところでしょうか?
0412774ワット発電中さん
垢版 |
2015/02/14(土) 14:21:24.19ID:0uPZFPNm
>>411
これがいいかも
ttp://ikautak.hatenablog.com/entry/2013/02/14/221500

他にも分岐不要で出来るものが色々あったと思う
0413774ワット発電中さん
垢版 |
2015/02/14(土) 23:44:45.22ID:6/aIRu8O
>>412
何という情報量の少なさ。

>>411
ハードウェアのすごいところは、ビット入れ替えはゲート数がゼロ。
0414774ワット発電中さん
垢版 |
2015/02/15(日) 03:22:45.40ID:5N+tCfqq
>ハードウェアのすごいところは、ビット入れ替えはゲート数がゼロ。

そうとも限らない
0415774ワット発電中さん
垢版 |
2015/02/15(日) 11:42:04.22ID:9/dk5YAi
verilogで書いた回路をFPGAに実装する場合にテストベンチに当たるものってある?
0418774ワット発電中さん
垢版 |
2015/02/16(月) 00:55:36.07ID:5K8pOZt+
assign a = { N[0],N[1],N[2],N[3],N[4],N[5],N[6],N[7] };
って、VHDLでは、なんと書くのでしょうか?
というか、VHDLでも連接ってできるのでしょうか?
0419774ワット発電中さん
垢版 |
2015/02/16(月) 01:14:04.32ID:ev3QAK1E
Cでのビットの入れ替えは16ビット程度ならテーブルで一発だけどね
0422774ワット発電中さん
垢版 |
2015/02/18(水) 03:27:44.14ID:A5s+y/zG
教えてください。

Xilinxのスパルタン6をVerilogで書いていますが、回路がちょっと多くなるとスグに
「・・・・Dedicated route・・・・」というメッセージが出ます。
クロック信号を、いきなり外に出せるわけないじゃん とか
バンクをまたいでいるので、タイミングの保証はできませんよ。
だから上の呪文をucfに追加してね、という意味かと思います。

このwarningをでないように組むには、どのような点に注意すれば良いのでしょうか?
そもそも このメッセージがでる用では、まだまだプロとは言えない、ということでしょうか?
0424774ワット発電中さん
垢版 |
2015/02/18(水) 12:02:25.26ID:qX4gvd9c
ロジックの出力をクロック信号に使ってるんだろう
誰もが最初に通る道だ
Spartan6ならまず↓を全部読む
ttp://japan.xilinx.com/support/documentation/sw_manuals_j/xilinx14_3/sim.pdf
ttp://japan.xilinx.com/support/documentation/sw_manuals_j/xilinx14_4/xst_v6s6.pdf
0426774ワット発電中さん
垢版 |
2015/02/20(金) 21:25:10.26ID:XKzIXYX7
ISEくらい自分でWin8で使えるようにしろよ
もうメインストリームはVivadoに移行してんだから
0427774ワット発電中さん
垢版 |
2015/02/20(金) 22:02:46.36ID:OGEoxal/
Vivado PlanAheadって、起動にめちゃくちゃ時間がかかりません?
0429774ワット発電中さん
垢版 |
2015/03/01(日) 02:37:00.67ID:oV7uTKnc
マイコンやって来た人にFPGAを説明するのって、とても難しいね。
同時に、一斉に、バラバラに、全速力で動くのが、わからないらしい。
0430774ワット発電中さん
垢版 |
2015/03/01(日) 03:01:53.72ID:rhXFR2oe
>>429
マイコンだけとかパソコンのプログラムだけの人に説明するのには苦労しました
わかっていただけたかはわからないけど
0431774ワット発電中さん
垢版 |
2015/03/01(日) 05:54:03.76ID:EwyBnm4i
ソフト屋にとって同期という概念はない。
概してソフト屋は言葉をハード屋から盗んでくるらしく
「同期」という言葉自体はある。同期・非同期呼出しとか。
でもそれはハードの言う概念とは全く違うんだよなぁ。
0432774ワット発電中さん
垢版 |
2015/03/01(日) 10:05:46.66ID:oV7uTKnc
僕らも便利だから「変数」と言う言葉を使ってしまうけど、実体はD-FFであり、
D端子が入力でQが出力で・・・と思うけど、彼らにとって「変数」とは、
数値記憶という考え方でしかない様子。
reg wire と説明すると、wireって何? と来る。
0433774ワット発電中さん
垢版 |
2015/03/01(日) 10:47:47.11ID:oBL6vBXC
>>432
reg で宣言しても FF になるとは限らないし、
仕様書でも Variable って呼んでるのも混乱の元。
0434774ワット発電中さん
垢版 |
2015/03/04(水) 13:02:38.07ID:R6x/MPNl
>>433
>reg で宣言しても FF になるとは限らないし、
それは、どういう時でしょうか? 教えてください
0435774ワット発電中さん
垢版 |
2015/03/04(水) 14:53:16.24ID:Y8AtL0Wb
always で組み合わせ回路作るとき。

センシティブリストを間違えてラッチができるとかもあるよね。
0436774ワット発電中さん
垢版 |
2015/03/18(水) 16:32:48.35ID:diGuPLNB
Apple Japan合同会社の求人概要 -IC検証エンジニア-
http://next.rikunabi.com/company/cmi0239655055/nx1_rq0011827045/?fr=cp_s01810&;list_disp_no=3

仕事の内容
IC検証エンジニアを担当して頂きます。

対象となる方
8年以上のSystem Verilogとその他の検証言語に関する経験をお持ちの方
0438774ワット発電中さん
垢版 |
2015/03/20(金) 09:38:31.17ID:hRooBFQA
本職さんはここを覗いてる暇なんぞないと思うぞ。
特にアナログ系なんぞ。
ルネとかが放出した人材でもあたってみれば?
0439774ワット発電中さん
垢版 |
2015/03/20(金) 12:50:37.09ID:9yT/HZzX
2ちゃんが、まともな掲示板だと思うようなおめでたい頭しているんだろうなぁ。
ここに書かれてることは便所の落書きと一緒だよ
0440774ワット発電中さん
垢版 |
2015/03/22(日) 07:17:42.24ID:80YU9/mM
僕は、そうは思わない。
有用なことも書いてある。玉石混淆。
0442774ワット発電中さん
垢版 |
2015/03/23(月) 11:53:29.56ID:lXBzJ3SU
昔、便所の落書きに書いてあった電話番号に電話してみたのはオレだけじゃないはず。
0443774ワット発電中さん
垢版 |
2015/03/27(金) 11:36:34.45ID:MXXkLRvS
昔、便所の落書きに書いてあった。
正面に「右を見ろ」
右の面に「左を見ろ」
左の面に「後ろを見ろ」
後ろの面に「キョロキョロするな」
0444774ワット発電中さん
垢版 |
2015/03/28(土) 11:13:34.66ID:28ckET/Q
FPGAを使って、FIRのデジタルフィルタを試したいですが、係数を出してくれるフリーのソフトはないでしょうか?
マトラボは持っていません
0446774ワット発電中さん
垢版 |
2015/04/04(土) 19:46:06.03ID:+A/reOYk
マイコン屋はタイマーとかDMAとかそれぞれ全力で動いてるからわかりそうな気がするけどどうなんだろうな

とりあえず全レジスタの動作を1個のalwaysで書こうとすんのは勘弁してほしい
0447774ワット発電中さん
垢版 |
2015/04/05(日) 02:37:49.23ID:MToPg2av
全部を1つのalwaysはやらないけど、SPIとか、関連するregは1つのalwaysで書くよ。
「1つのalwaysにはFF1個だけだ」という人がいたけど、見にくくてしょうがない。

あと、条件に演算記号を書かない人がいるけど、どうなの?
if( Push_SW ) begin...じゃなくて
if( Push_SW==1'b1 ) begin...と書いて欲しいわ。
0456774ワット発電中さん
垢版 |
2015/04/05(日) 23:55:15.13ID:5HM+Dx7p
verilogでROMを推論させようとするとcase文になるお
この前SystemVerilogなら配列で推論してくれると思って書いたら推論してくれなくてイラッとしたよ。
0461774ワット発電中さん
垢版 |
2015/04/22(水) 15:10:55.09ID:Iv44SatM
中小ってマジで仕様書書かずに作りはじめて物が出来てから手直し繰り返して仕上げるんだな
いままでと真逆のやり方すぎてついていけない・・・
0462774ワット発電中さん
垢版 |
2015/04/22(水) 16:41:53.01ID:hgHIdL2o
>461
そうなんです。では、その仕様書は最後に出来上がった物とどの位合っているの?
最初から完璧な仕様書書ける位なら、とんでもなく楽な仕事だよ。
多分、過去に非常に類似した仕事をしている。
 書かないことが悪いのではなく、書けるほど目標が見えていない。
最終的には報酬との相談になる。
 ユーザー側からみたら”ボッタクリだ”と思うかもしれないが、
では”あなたの希望を完璧な文書で渡してください”と言われてどこまで詳細に仕様を決定できるの?

 出来合いの製品や他社製品の似たような製品で良ければそれでもいいが、発注者と受注者の間で
認識の差がない開発案件はまず無いよ。
 そこをどうやって調整していくかが中小企業とユーザーの努力すべき所です。
多分、大手に依頼しても相手にされない規模の案件でしょ。
0464774ワット発電中さん
垢版 |
2015/04/23(木) 23:57:32.13ID:VyS3ZMgQ
目標が見えてないってのがズバリだな
場当たり的で目の前の一時間だけが最優先で後行程に手間押し付けてる
一事が万事そんな感じ
勘で仕事してるんじゃなく運で仕事してる
0468774ワット発電中さん
垢版 |
2015/04/24(金) 20:03:19.93ID:YqO49T7f
----------------------------------------------------------------------------
◆間違いだらけの設計レビュー [演習付き実践セミナー]
http://coin.nikkeibp.co.jp/coin/itpro-s/seminar/sys/150526/?10mlmg/

 システム構築の生産性や品質を高めるには、仕様書や設計書といったドキュメント
をしっかりとレビューすることが不可欠ですが、実際には、レビューアーがドキュメ
ント作成者の人格攻撃をしてしまったりと、多くの現場が間違ったレビューに陥って
います。
0469774ワット発電中さん
垢版 |
2015/04/26(日) 18:14:39.84ID:eFq/sM0M
FPGA仕事あります?
みなさんやっぱりマイコン屋兼業ですか?
0470774ワット発電中さん
垢版 |
2015/04/27(月) 01:48:02.73ID:+qTlpnJH
FPGAだけの仕事って、無いでしょう。
マイコン出来ーの、FPGA出来ーの、回路設計出来ーの、デジタル、アナログ回路設計出来ーの、
オールマイティにできることが重要。
0471774ワット発電中さん
垢版 |
2015/04/27(月) 06:56:44.40ID:bfKfWz8v
そんな奴は、まずいない。
人材を育てることが重要。
0474774ワット発電中さん
垢版 |
2015/04/27(月) 09:26:20.47ID:wbTPo3Sb
>実際には、レビューアーがドキュメント作成者の人格攻撃をしてしまったりと、
世の中女性化していますからな。
個人的な好き嫌いが全てに影響してしまったりする

じょせーのしゃかいしんしゅつーーー
とやらで、女が増えるとそういう問題も増えるだろうね
0477774ワット発電中さん
垢版 |
2015/04/27(月) 21:27:57.02ID:wbTPo3Sb
>>475
議論で勝てなくなると相手のあら捜しやら過去のことを
引きずり出して個人攻撃に走るというのが女の定番パターン
0478774ワット発電中さん
垢版 |
2015/04/28(火) 04:38:28.77ID:e3rfdhsd
>>477
まあ、それは一般化のしすぎだろ。
全体的に見て、もしかするとそういう傾向はあるかもしれないが。
0479774ワット発電中さん
垢版 |
2015/04/28(火) 21:43:55.97ID:yiSymS0s
>>478
脳味噌の構造上そういう傾向が出やすいみたいだよ。
0480774ワット発電中さん
垢版 |
2015/04/29(水) 14:41:11.68ID:WTCCHXwn
論理記述だけでなく、一般的に、仕様を書いてその通り実装できる程度の仕事の場合、商品企画の出来がかなりいい。
実際には実現可能性と要求仕様の瀬戸際を攻めることになる。
ま、最終的に、モノと仕様が合ってればいいんじゃない。
青筋立てて怒って他人のせいにする輩はどこにでもいるけど。
0482774ワット発電中さん
垢版 |
2015/04/29(水) 15:32:38.49ID:enxmKBMR
>>480
 つまり、仕様書を書いている段階で「出来ること」と「出来るかどうか」という壁が分かっている組織は成功しやすい。
問題は中小企業が出す委託ではそれを望めない現実がある。
要求仕様は高いが当人はそれを理解できず、見積金額は過去の実績を超えることを許さない。
正直、完全な新規では二の足を踏む。
0484774ワット発電中さん
垢版 |
2015/05/01(金) 14:15:55.73ID:++NVgAkl
>>483
それは、なぜなんでしょうか?
僕は、Verilogで始めました。
5年位して、やっと思い通りのソースが書けるようになりました。
0488774ワット発電中さん
垢版 |
2015/05/01(金) 18:23:07.77ID:+caATM85
今時のFPGA開発環境ってVHDLとVerilog両対応してるのがデフォだと思ってました
0489774ワット発電中さん
垢版 |
2015/05/01(金) 23:27:45.77ID:6Q8Rv4/O
俺の都合で言語は決められないからどちらも使うけど、
VHDLのほうが言語として好きだな。
0491774ワット発電中さん
垢版 |
2015/05/02(土) 17:59:39.74ID:N9ddX+7j
VHDL習ってからVerilog覚えたけどVerilogの方が好きだったわ
VHDLはなんか記述が面倒というかなんというか使いにくいイメージだった
0492774ワット発電中さん
垢版 |
2015/05/02(土) 18:08:31.65ID:dNirQRnI
エラーやワーニングを、たくさん出してくれるので
VerilogよりVHDLをやっておけば良かったかな、と思った時期もあった。
けど今は、Verilogでやってる。
文字タイプの数が少ないし、好き。

data_bus[7:3] <= { d6, d[2:0], d4 }; とかの連接は、しびれる。

VHDLではできない表記かな。
0494774ワット発電中さん
垢版 |
2015/05/03(日) 00:17:27.99ID:4TpcG5kk
>>492
data_bus(7 downto 3) <= (d(6) & d(2 downto 0) & d(4));
記述数は確かに多い。
Verilogは左右のビット数があってなくてもエラーが出ない。
VHDLはエラーになる。
unsignedとsignedの掛け算やるとなぜか結果がunsignedになるVerilogの
糞仕様が許せないので俺はVHDL使ってる。
それとVerilogで書かれたコード見てると可読性の悪いきたない書き方する
コードばかりだからverilogはあまり好きになれん。
最初に覚えたのはverilogだったがw
確かケイデンスのセミナーで95年当時小林優氏がやってたセミナーだったと思う。
0495774ワット発電中さん
垢版 |
2015/05/03(日) 03:53:37.27ID:foeCKpNq
「:」の1文字で表せるものを、なんで downto とか書くのですか?
また、&でつなげるのはVBAと似ていますね。
6bit目を示すカッコが ( ) なんですね。計算式の優先順位の ( ) と混乱しませんか?
0496arisa ◆QaHT6HayjI
垢版 |
2015/05/03(日) 10:29:56.71ID:iYrBEYUe
verilog2001だかなんだかで $signed だかなんかがあった希ガス
0497774ワット発電中さん
垢版 |
2015/05/04(月) 07:46:59.08ID:SGZAbOa1
乗算の出力信号定義がsignedじゃないからunsignedになってるんじゃないの?
0498774ワット発電中さん
垢版 |
2015/05/04(月) 10:13:50.66ID:l7rv7ssT
乗算器が、アンサインド×アンサインドしかできないので、

アンサインド × アンサインド = アンサインド
アンサインド × サインド = アンサインド
サインド × アンサインド = アンサインド
サインド × サインド = サインド
ということでしょうか?
0499774ワット発電中さん
垢版 |
2015/05/04(月) 13:42:33.18ID:aPg4LoVn
vhdlが好きなのはaccess recorde unitsとか記述が豊富で、
attributesも豊富で色んな条件記述ができるところかな。
0500774ワット発電中さん
垢版 |
2015/05/04(月) 13:57:55.08ID:7OD5Qxys
じゃあなんでVerilogなんか作ったのよぉ〜
新しいものを生み出す人を卑下するつもりはないけど、自己満と意地で
分裂するあるあるはいい加減やめて欲しいわ
優秀なんだから心の広さも優秀であってほしい
0502774ワット発電中さん
垢版 |
2015/05/04(月) 16:12:16.04ID:A/R6ypsE
なんとかアーキテクチャー is  とか
downto とか 
妙に文章が長いので、Verilogで始めた。
やっぱりVerilogのほうがいいよね。
0503774ワット発電中さん
垢版 |
2015/05/05(火) 02:02:12.47ID:3x5kt68f
一つのprocess文で、機能を全部書こうとする人いるけど、どうなの?
0504774ワット発電中さん
垢版 |
2015/05/05(火) 03:38:32.43ID:wkkr+CzZ
ステートマシンでしっかり状態が遷移するなら、いいと思う。
あとはツールが頑張れるかどうかです。
0505774ワット発電中さん
垢版 |
2015/05/05(火) 08:02:48.53ID:q5SetmJH
見た目、書く量が少ないからと言ってVerilogを勉強し始めて
思わぬところでハマる人はよく見る
0506774ワット発電中さん
垢版 |
2015/05/07(木) 12:37:54.33ID:dM1398bl
>>305
最近VHDLの入門書立ち読みしたら
サンプルコードそれだったんだよなー
絶望した
頑張って独学で勉強したやつがクソコード覚えさせられるとか
最初が肝心なのに
0508774ワット発電中さん
垢版 |
2015/05/09(土) 20:52:43.29ID:67hyxXC+
>>506
どういう書き方だと良いと思うの?
FF 1個につき、1つのprocess文なら満足なの?
0509774ワット発電中さん
垢版 |
2015/05/10(日) 04:05:13.87ID:2pNmAPxs
>>508
そうそう、そういう人いるよね。
でも、FFが離れて記述され、判読性が悪くなると思う。
僕は5つでも6つでも alwaysの中に入れてしまう。
0510774ワット発電中さん
垢版 |
2015/05/10(日) 10:57:22.66ID:dC34s4oK
前の会社で紙に回路図書いてからHDL書いてる人がいて悲惨だった。
0511774ワット発電中さん
垢版 |
2015/05/10(日) 13:11:48.74ID:LFPgwbad
>>510
AND ORの詳細までは書かないけど、FPGA開発ツールの回路図エディタで
機能ブロックとレジスタ、信号の内部構成は必ず書いてる。
そうしないと後で他人が見たとき効率的にデバッグできないし、
1年以上たってから改修するときとか、回路図みて
必要なコードだけ読み返せばいいので効率的だ。
それと回路の無駄な部分が見えてくるのでコンパクト化しやすい。
まさに「急がばまわれ」
0513774ワット発電中さん
垢版 |
2015/05/10(日) 14:19:59.89ID:LFPgwbad
回路図ではない、機能構成図みたいなもの。
回路図だとHDLシミュレータに通せないだろう?
0515774ワット発電中さん
垢版 |
2015/05/10(日) 16:21:11.14ID:Jl/FwsKg
>>513
回路からならedifとか出してシミュレーション出来るだろ。
ってか、普通そうするが。
0516774ワット発電中さん
垢版 |
2015/05/10(日) 21:11:26.83ID:LFPgwbad
edif読めるテストベンチがHDLで書ける
フリーのHDLシミュレーターなんてあるの?
0520774ワット発電中さん
垢版 |
2015/06/04(木) 10:05:38.93ID:Nk+jhl/S
VHDLでnumeric_stdを使用しています。
real型をstd_logic_vectorに変換するにはどう記述すれば良いでしょうか?

ModelSimでreal型数値を与えてシミュレーションしたいと考えています。
回路内は浮動小数点をstd_logic_vectorとして扱っており演算処理するつもりです。

逆は↓で良いようですが、、、
to_real(to_integer(unsigned(slv)));
0521520
垢版 |
2015/06/04(木) 10:25:31.02ID:Nk+jhl/S
↓でコンパイル通りました。
std_logic_vector(to_signed(integer(real(i)),32));

お騒がせしました。
0523774ワット発電中さん
垢版 |
2015/06/08(月) 18:28:09.51ID:WYkKIbsI
VHDLで、トップレベルエンティティのportを、定数によって追加したり無効にする記述
(#ifdefのように)があったら教えて下さい。
シミュレーションの時のみPLLを無効にし、portを追加してテストベンチからクロックを
入れてやりたいのですがうまくいかず、今はコメントアウトで切り替えています。
0526774ワット発電中さん
垢版 |
2015/06/09(火) 15:12:17.13ID:y5oRCkLN
>>524
やはりプリプロセッサを使うしかないのですか…。
LINTツールが日本語コメントにwarning出すのも対処したいので、外部ツールに掛けることにします。

>>525
if generateは「architecture本体、block本体、generate文に記述することができる」そうで、
エンティティ宣言中のportには使えなかったです。
0527774ワット発電中さん
垢版 |
2015/06/10(水) 00:52:26.38ID:Vak2xf0o
>>523
VHDLではportの追加はできないのでport内各入力信号にデフォルト値を定義しておき、
上の階層から呼び出すときにcomponent宣言部で必要なport信号だけ呼び出せば?
(入力ポートを省略するとデフォルト値が入力されたものとして機能することを応用する)
0528774ワット発電中さん
垢版 |
2015/06/10(水) 20:20:22.77ID:8C84KzyO
俺がやっている手法

・PLL.vhdコピー 名前をTEST_PLL.vhdとでもしておく
・端子以外の中身を削除 ※エンティティ名は変更しない
・中身をテスト用のCLK出す記述にする
・PLL.vhdの代わりにTEST_PLL.vhdをコンパイルする
・エンティティ名が一緒なのでPLL.vhdの代わりにTEST_PLL.vhdでSimが走る

ソースをいじらなくて済むし、Sim前に差し替えるものだけコンパイルすればいいので面倒が少ない
0529774ワット発電中さん
垢版 |
2015/06/15(月) 01:18:44.12ID:lsgSbJjN
どこで質問していいかわからなかったので、ここで質問します。
宜しくお願いします。

Spartan6を使って、Verilogを勉強しています。
今はSPIを使って、A/DやD/Aを動かしています。
なんとなく動いているのですが、Warningが100個とか出て、困っています。
SPIでICの内部を設定しますが、24bitとかのレジスタに固定値を書くので、
「このbitが、いつもゼロじゃん」のWarningが大量に出ます。それがいくつかあって
100個以上もWarningが出ます。多すぎて気持ちが悪いので、
これを出ないようにしたいのですが、どのようにしたら良いでしょうか?

固定値なので、ソースの中に即値を埋め込めばWarningは減ると思いますが、
それではHDLで書くうまみがないと思います。
このような場合、みなさんは、どのようにしているのでしょうか?
宜しく教えて下さい。
0531774ワット発電中さん
垢版 |
2015/06/15(月) 11:33:59.00ID:lsgSbJjN
ありがとうございます。
気にしないでOKなのでしょうか。
YouTubeでISEの画面を見ていると、緑色の丸いマークが綺麗に並ぶのに、
僕のものでは、黄色三角ばっかりなんです。
0532774ワット発電中さん
垢版 |
2015/06/15(月) 12:26:01.32ID:ezhwOx8k
うちもそういうのは気にしないかなあ
設計段階で極力そういうのないようにしてるけど、今後の拡張を見越して予備端子を持ってる時はどうしても出るし
業務でWarningなしで通ったことないよ
もちろんWarningは全部チェックしてるけど
0533774ワット発電中さん
垢版 |
2015/06/15(月) 12:35:26.79ID:0qyqa6/C
全部なくすのは難しいよね。
Warning 除けの記述ばかりになると何してるのか分からなくなるし。
少なくとも趣味なら気にしないかな。
0534774ワット発電中さん
垢版 |
2015/06/15(月) 14:15:58.11ID:m/gBV2xZ
でも、ニコ動の、ネギ降りマスターのやつは、気持ちよく緑丸ばかりなんですが。
0536774ワット発電中さん
垢版 |
2015/06/15(月) 23:56:40.78ID:8HCRsuUn
xのwarningは糞味噌ごちゃまぜだし、おめー(ip内部)の問題だろ、ってのが多い。
全部チェックしてる人はすごいと思うわ。
vivadoは少しましになったけども。
alteraもこんな感じ?
0537774ワット発電中さん
垢版 |
2015/06/16(火) 01:28:55.04ID:J6Kohop9
>>534
ばか、おまえ、そこは動画用に一生懸命Warning消しに勤しんだに決まってんだろ
0538774ワット発電中さん
垢版 |
2015/06/16(火) 09:36:52.30ID:FqDakbch
そのワーニングが無視してもいい内容だけど、無視できないワーニングが出たときに
気がつきにくくなるから、なるべくワーニングはとるようにしている。
リセット信号で反転でもしておくとか。消費リソース増えるだろうけど。
0540774ワット発電中さん
垢版 |
2015/06/16(火) 15:37:47.92ID:sGfTj4p3
default nettype none
にしているとき、IP内部がwire宣言してないぞ!というワーニングも出る。
「そんなの、俺は知らないよ。XilinxのIPの話じゃんか」
ということで、また1つワーニングが増える。
0549774ワット発電中さん
垢版 |
2015/06/17(水) 16:42:09.94ID:cv854e4S
横文字は許容する。国語ができないのは
アレなんだなと納得する。
0550774ワット発電中さん
垢版 |
2015/06/22(月) 22:36:13.61ID:LAEL9iZl
cpuからアドレスデータバスなど使ってfpgaのレジスタに機能情報をライトするが
多次元配列を使ってるからスライスを消費してしまう

本当はRAMを使いたいが、RAMだとFPGA側からアドレスカウンタとかFIFO使ってアクセスせにゃならん

CPUのコントローラー部分が一番消費するがいい方法はないだろうか
0553774ワット発電中さん
垢版 |
2015/07/08(水) 16:25:56.54ID:Eu/eSZdc
箱根山日経平均Appleギリシャ神田愛花なでしこ

その日の夕方、部屋で布団に入りうつ伏せになってたら、父(父=嶋●慎太郎)が来て

後ろから覆いかぶさり、胸を触りもみ。「舐めていいか?」と聴かれ結子は舐められ、次はクリを触られ

結子(ザキシマ結子=元稲城市立向陽台小学校評判Y子)は「気持ちいい」と言ってしまい父は「そうか、気持ちいいのかぁ」

と嬉しそうに沢山触っていました。兄(嶋●亮介(東京電機大学中学校評判万引少年)は小人病を苦に自殺。

ザキシマ結子一家の顔がGoogle検索『稲城市立向陽台小学校評判Y子』
0554774ワット発電中さん
垢版 |
2015/07/09(木) 22:55:38.70ID:McDsP4yu
Vivadoはシミュレーションでアナログ表示あるのにISEではない
VHDLだからうんこ
0555774ワット発電中さん
垢版 |
2015/08/08(土) 22:03:27.60ID:H0J5FdQb
しばらく書き込みが途切れているようなので、
ネタとして頭の体操w  知っている人も多いかな?
---

wire [15:0] X , P , Q , R , S ;

とする時、以下の乗算を行う回路を16bitのCarry In付き加算器で実現して下さい。
それぞれ何個必要になるでしょうか?
なお、インバータは任意に使用してもらって可です。
また演算のオーバーフローに対するケアは不要(頭の体操ということで考え方重視)。

(1) P = X * 80 ;
(2) Q = X * 60 ;
(3) R = X * 81 ;
(4) S = X * 75 ;

※(1)〜(4)はそれぞれ独立の(個別の)問題です。
 ですので、(1)の結果のPを(3)の演算に利用するのはナシ、ね。
0562774ワット発電中さん
垢版 |
2015/08/10(月) 07:32:42.10ID:p4oZHNgq
違う、こうだ
(1) 0個
(2) 1個
(3) 0個
(4) 2個
0566555
垢版 |
2015/08/10(月) 21:19:59.47ID:fWXIgi/I
閑古鳥が鳴いているスレなのに、釣り認定だけは早いのねwww

>>556〜565
ほかにも解はあると思うけど、標準的な解答。

wire [15:0] X , P , Q , R , S ;
wire [15:0] X64 , X16 , X4 , nX4 , X9, X15 , nX ;

(1)80倍は64倍+16倍
  assign X64 = ( X << 6 ) ;
  assign X16 = ( X << 4 ) ;
  assign P = X64 + X16 ; // →加算器1個

(2)60倍は64倍−4倍
  assign X4 = ( X << 2 ) ;
  assign nX4 = ~X4 ; // Xの4倍値の補数。
  assign Q = X64 + nX4 + 1 ; // →加算器1個(+1はcarry in に)

(3)81倍は64倍+16倍+1倍
  assign R = X64 + X16 + X ; // →加算器2個

 別解として、81倍は9倍(=8倍+1倍)の9倍(=8倍+1倍)
  assign X9 = ( X << 3 ) + X ; // →加算器1個
  assign R = ( X9 << 3 ) + X9 ; // →加算器1個。合計で加算器2個

(4)75倍は15倍(=16倍-1倍)の5倍(=4倍+1倍)
  assign nX = ~X ; // Xの補数。
  assign X15 = X16 + nX + 1 ; // →加算器1個(+1はcarry in に)
  assign S = ( X15 << 2 ) + X15 ; // →加算器1個。合計で加算器2個

ということで、>>556は全問正解かな(詳細が分からないけど)。
>>562の「0個」という答えはマジで気になっている。
0567774ワット発電中さん
垢版 |
2015/08/10(月) 21:42:06.78ID:p4oZHNgq
完全に16倍を16ビットシフトと勘違いしてたわwww
0個はないわwww
0569774ワット発電中さん
垢版 |
2015/08/26(水) 12:21:56.14ID:PIMX37xz
タイミング制約で、クロックの50%になるようにかける制約の
記述って何でしたっけ?
0570774ワット発電中さん
垢版 |
2015/08/28(金) 00:10:22.05ID:hepd3KOU
乗算器はspartanなら18×18でロジック遅延含めて、パイプライン化するのが定石だけど

32×32で2つ乗算器使う場合は遅延も大きくなるんだよな
高クロックかつ、時分割で乗算器使い回すとき32×32は無謀か
0571774ワット発電中さん
垢版 |
2015/09/03(木) 01:09:31.24ID:cYYq7YP4
お騒がせしました。
0572774ワット発電中さん
垢版 |
2015/10/30(金) 03:42:16.73ID:C7PxhMms
Xilinxのスパルタン3でVerlilogの勉強をしています。

質問があり書き込みました。宜しくご指導願います。

異なる更新周期のデータの受け渡しの方法がわかりません。
例えば、A/Dコンバータでデジタルデータを得て、その結果を別のクロック同期回路が読む
という場合です。
・A/Dのサンプルが1ms、それを読み出す側の周期が1msなら、出入りの速度が同じなので
  FIFOで一時的に保管すれば、不足も過剰もなくできそうに思います。
・A/D周期1ms、読み取り周期1.2msだと、FIFOは満タンになってしまいます。
  FIFO満タンならA/Dが書き込むのを諦めればいいですが、古いデータを読むことになってしまいます。
・逆の場合は、A/Dの書き込みは問題ありませんが、読み出すデータが空になってしまいます。
  前回のデータで代用して済ますのでしょうか?

一般にこういう場合、どのように処理をしているのでしょうか?

宜しくお願いします。
0573774ワット発電中さん
垢版 |
2015/10/30(金) 09:22:39.62ID:t31kn5FP
読み出したデータをどうしたいのか?
来たデータだけ処理するのでは不都合なのか?
0574774ワット発電中さん
垢版 |
2015/10/30(金) 09:26:09.47ID:IzQRxBSC
>>572
ADのデータが全て必要なら1ms以内で読み出すように作る。
読み出し側が早い場合は無効な値を読み込まない処理が必要。
例えばFIFO内のデータ数を読んでからデータを読み出すとか、
FIFOステータスも一緒に読み出すとか。

ADサンプルが常に実行されていて(止まらない)、
読み取りが遅い場合はデータ取りこぼしは仕方ないよね。
ADサンプルが一定期間ならその期間分データを貯められる
FIFOサイズにすれば良いと思う。
0578774ワット発電中さん
垢版 |
2015/10/30(金) 15:08:59.84ID:L9XXnXEO
>>572
ADCを別な周期で動作させない
後段の処理がそんなブレブレならADCのサンプルを後段のタイミングに合わせも問題無いんじゃねえの
そうじゃ無いなら後段を確実に速くして処理落ちしないようにするかだね
0579774ワット発電中さん
垢版 |
2015/10/30(金) 20:15:01.36ID:QL+C7A8K
要は非同期回路間のデータの受け渡しと考えていいのかな。
この場合だと
 AD側が"データ取ってくれ信号"を発行して、
  ↓
 使う側がその信号を見てデータを取得して、
 "データ取ったよ信号"を発行する。
  ↓
 取ったよ信号を受けたAD側が"データ取ってくれ信号"を無効にする。
  ↓
 使う側が取ってくれ信号無効を見て、"データ取ったよ信号"を無効にする。
こんな感じじゃね。
0580774ワット発電中さん
垢版 |
2015/10/30(金) 23:26:40.61ID:6/OCltZu
ん?最初はボード上にADCとFPGA並べて単純に繋げるイメージかと思ったけど
ストリーミングの同期再生みたいに完全に独立してて限り無く歪まないシステムを組たいのかな?
0581774ワット発電中さん
垢版 |
2015/10/31(土) 01:22:02.77ID:IGOq6ueV
>>580
それなら読み出しを高速にしないとデータ取りこぼすのは当たり前だよね
AD出力が連続データなのか歯抜けデータなのか分からんと何もアドバイスできんよね
0582774ワット発電中さん
垢版 |
2015/10/31(土) 22:27:41.29ID:IN4fwEua
>>572
Xilinxのスパルタン3でVerlilogの勉強中、とあるので、
ふと思いついた素朴な疑問なのかな?

前提条件がはっきりしないので何とも言えないけど、
一般にメモリを挟んで書き込み側と読み出し側のクロックが違う場合
(メモリを用いてクロックを乗換える場合)っていうのは、
映像信号みたいな、規則的で断続的なデータ入出力じゃないのかな。

その場合はブランキング期間というデータが途切れる期間を有効活用して、
書き込みと読み出しのメモリアドレスが追いつき追い越されないように
ちゃんとタイミング設計するので、
読み出す前に新しいデータで上書きしてしまったりとか、
新しいデータが来ないので古いデータを読んでしまう、なんて回路は作らないよ。
0583774ワット発電中さん
垢版 |
2015/11/04(水) 18:29:53.05ID:5PpTOzD9
携帯電話のときはどうなんでしょうかね。
自分のDACは相手のADCクロックに同期しないと
(圧縮コーデックはとりあえず無しとして)
いけないような気がするけど
そんなことしてるのかなぁ
音声波形データだったら誤魔化せそうだけど
時々(10秒に一回くらい?)サンプル抜けても/重複しても
人は判らないよね
0584774ワット発電中さん
垢版 |
2015/11/05(木) 12:12:31.59ID:bt4Prqjr
人の耳は位相のずれには鈍感らしい
0585774ワット発電中さん
垢版 |
2015/11/05(木) 21:25:48.94ID:mdcFfu6V
普通は必要な帯域が40KHzなり、100KHzだとしたら、
それより十分早いDACやADC使うと思うけど。
0587774ワット発電中さん
垢版 |
2015/11/15(日) 22:28:27.78ID:iRZYSWky
>・A/D周期1ms、読み取り周期1.2msだと、FIFOは満タンになってしまいます。
そもそも、1.2ms周期でしか読み取らないということは、1.2msよりも
速い変化が捉えられてもしょうがないということなんだから、
1.2ms周期で読んだら新規データよこせっていうので充分。
スタートかける=>+1ms後に次のデータ確定=>+1.2ms後にデータ取得
=>スタートかける=>・・・
0588774ワット発電中さん
垢版 |
2015/11/16(月) 02:42:53.54ID:XSfm7BAl
XilinxのMicroBlaze MCS は、途中でTclを操作しなければなりません。(と、本に書いてあった)
でもTclができません。
何かもう少し簡単にSpartaの上にマイコンを日宇制する方法は無いでしょうか?
0589774ワット発電中さん
垢版 |
2015/12/04(金) 22:31:53.19ID:Rv9OglyE
32bitのレジスタが更新されたのを判断したいんだが、前の値と比較するしか無いですよね?
0590774ワット発電中さん
垢版 |
2015/12/05(土) 00:57:42.65ID:7LjEZ5o+
ライトイネーブル見るだけだと、
同じ値が書かれたときに困るか。
0592774ワット発電中さん
垢版 |
2015/12/05(土) 11:22:19.74ID:vTMa8y5Q
タイミングが間に合えば書こうとしている値と今の値を比較するとか
0594774ワット発電中さん
垢版 |
2015/12/08(火) 19:26:35.74ID:ajiZG8Ta
更新の定義があいまい。
書き込み動作の前後で値変わらなくても更新でいいなら >>593 だし。
変わったことを検出するなら、
入力と出力の比較結果を同期で受けるぐらいしかないでしょ。
0595774ワット発電中さん
垢版 |
2015/12/23(水) 02:48:40.39ID:Vk8R0wOj
教えてください。

マイコンのPIOとしてFPGAを使うことがあると思います。
0598774ワット発電中さん
垢版 |
2015/12/23(水) 07:14:40.50ID:3ABb7uTn
>>595
それで?
0601774ワット発電中さん
垢版 |
2016/01/20(水) 02:55:21.62ID:L9DYXBNl
クロックを5分周したいだけの簡単なことなんですけど

statement is not synthesizable since it does not hold its value under NOT(clock-edge) condition

ってエラーが、 if (RST = '1') thenの行にでるのはなぜでしょう?
まだvhdl初めて間もないのですが、ここは別の動作したコードをコピーしただけのつもりです

CLKが2.5周期の時点でQ5をあげて、さらに2.5周期の時点でQ5を下げるだけのコンセプトです
0602774ワット発電中さん
垢版 |
2016/01/20(水) 02:57:00.05ID:L9DYXBNl
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_unsigned.all;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity frec5 is
Port ( CLK : in STD_LOGIC;
RST : in STD_LOGIC;
Q5 : inout STD_LOGIC;
Q : out STD_LOGIC_VECTOR (2 downto 0));
end frec5;

architecture Behavioral of frec5 is

signal DFF_8 : std_logic_vector(2 downto 0);

begin
Q <= DFF_8;


process(CLK,RST,DFF_8)
begin
if (RST = '1') then         ←ここ
DFF_8 <= "000";
Q5 <= '0';
elsif (falling_edge(CLK)) then
if (DFF_8 = "010") then
Q5 <= not Q5;
end if;
elsif (rising_edge(CLK)) then
if (DFF_8 = "100")then
Q5 <= not Q5;
DFF_8 <= "000";
else
DFF_8 <= DFF_8 + '1';
end if;

end if;
end process;


end Behavioral;
0604774ワット発電中さん
垢版 |
2016/01/20(水) 08:31:37.44ID:rJCRWvMk
>>601
その行に出るのは、そのifが閉じるend processの直前のend ifまでにエラーがあるから。
クロック信号の立ち上がりと立ち下がりのどちらでも値を更新できる回路は合成できないんじゃないかな。
0605774ワット発電中さん
垢版 |
2016/01/20(水) 12:05:53.86ID:oGDvJEbi
回答ありがとうございます


if ・・・
elsif ・・・
elsif ・・・
endif
endif
endif
(インデント略)

という何重にもなっているのif文一つのなかに立ち上がり、立下り両方を書くことができないわけですね

今環境がないので試せないのですが、対策として
a(4bit)という別の信号を定義して

if falling_edge(CLK)
a<=a+1
endif

if rising_edge(CLK)
a<=a+1
endif

と別々に記述すれば、aのLSBはclkの2倍の周波数をもつようになって

aが4の時かつclk立ち上がりで5Q反転(0→1)

aが9の時かつclk立ち下がりで5Q反転(1→0)

としようと考えています
0607774ワット発電中さん
垢版 |
2016/01/20(水) 12:11:06.25ID:ijNmvkFK
>aのLSBはclkの2倍の周波数をもつようになって

ならないしさ・・・
タイミングチャートからかな。
0608774ワット発電中さん
垢版 |
2016/01/20(水) 12:12:11.71ID:zuDDUCYg
それはどうがんばってもムリです
ロジックではクロックの奇数分周はできない
↑↓両エッジで書き換えられるレジスタは作れないから
HDLは正しくてもハードに落とせない

プログラムとは違うのだよ。プログラムとは
0609774ワット発電中さん
垢版 |
2016/01/20(水) 12:37:38.03ID:hFgc6Y1f
>>608
>ロジックではクロックの奇数分周はできない

そうだね。
一番理解しやすそうなのは、0〜4まで回るカウンタを回して
0,1の時にHigh
2,3,4の時にLow
という回路かな。デューティ比が2:3だけどたいていの場合は問題ないよ。
0610774ワット発電中さん
垢版 |
2016/01/20(水) 12:40:11.54ID:ijNmvkFK
>それはどうがんばってもムリです
>ロジックではクロックの奇数分周はできない
そんなことないでしょ。

>↑↓両エッジで書き換えられるレジスタは作れないから
「作れない」というのは、原理的にということ?合成ツールのこと?
0611774ワット発電中さん
垢版 |
2016/01/20(水) 13:58:15.12ID:bGlvMSjd
>>610 そんな事無いならロジックで5分周出来る具体例を出して下さいな
>>609が出してる以外の方法があるんなら是非知りたい

>>↑↓両エッジで書き換えられるレジスタは作れないから
>「作れない」というのは、原理的にということ?合成ツールのこと?
ASICにならそんな便利なFFもあるのかもしれんが、一般的なCPLD/FPGAでは両エッジトリガのFFは出来ない
確かXilinxのCoolRunner-2辺りが両エッジFFがあるけど、あれは相当特殊なケース
0612774ワット発電中さん
垢版 |
2016/01/20(水) 16:54:29.87ID:ijNmvkFK
>>611
ほれ

module div5(input clk, output clk5, input rstn);

reg [2:0] cnt;
always @(posedge clk or negedge rstn)
if(!rstn) cnt<= 0;
else cnt<= (cnt==4) ? 0 : (cnt + 1);

assign clk5= cnt[1] | (cnt[2] & clk);

endmodule

VHDL でなくて悪いな。
そもそも、>>601 はFPGAだともASICだとも言っていないが?
0613774ワット発電中さん
垢版 |
2016/01/20(水) 17:04:00.99ID:ijNmvkFK
module div5(input clk, output clk5, input rstn);

reg [2:0] cnt;
always @(posedge clk or negedge rstn)
if(!rstn) cnt<= 0;
else cnt<= (cnt==4) ? 0 : (cnt + 1);

reg [2:0] ncnt;
always @(negedge clk or negedge rstn)
if(!rstn) ncnt<= 0;
else ncnt<= cnt;

assign clk5= cnt[1] | ncnt[1];

endmodule

こっちのほうがグリッジが出なくていいな。実用的。
まあ普通はPLL回すだろうが。
0615774ワット発電中さん
垢版 |
2016/01/20(水) 17:26:09.82ID:hFgc6Y1f
>>613
>まあ普通はPLL回すだろうが。

最初にPLLでclkの2倍の周波数のマスタークロックmclkを作っといて
その2分周で本番用のclkを作る。
また>>609の考え方でmclkの5分周クロックmclk5を作って、
それを2分周してデューティ50:50の本番用の5分周クロックclk5を作る。
そんな感じかな。
0616774ワット発電中さん
垢版 |
2016/01/21(木) 00:38:28.03ID:RYekdWsp
それが正道だけど結局は5clkに一回のenableで良かったってオチだよな大抵
0617774ワット発電中さん
垢版 |
2016/01/21(木) 14:21:49.91ID:iGyXSyxi
そうだね
例えば以前は雑誌なんかにも載ってたのが、非同期シリアルとかI2Cのモジュール
クロックにビットレートの16倍のを供給前提とかね

他のモジュールとのインタフェースがなきゃそれでいいかもだけど
FPGAの設計教科書としては、クロックじゃなく enable 作るっていうの
教えないと、って思った
0618601
垢版 |
2016/01/21(木) 22:10:57.66ID:2Xk80YFB
601です、遅れました
現段階の知識では不可能みたいですねぇ
ありがとうございました
0621774ワット発電中さん
垢版 |
2016/02/07(日) 19:11:47.77ID:fhJ8NCfo
CD-ROMでVerilongの独習をしているものです。
下記の修了判定が分かりません。

・8ビットのダウンカウンタを記述する
・ckの立ち上がりで、255,254,253とダウンカウントする
・RESが1で非同期リセットする(初期値は全ビット1とする)
・減算演算子を用いて記述する

module DOWNCOUNT(CK, RES, Q);
input CK,RES;
output [7:0] Q;

always @(posedge CK orposedge RES)
if(RES ==1'b1')
Q <= 「ここにどう記述すればいいんでしょうか?」 ;
else
Q <= Q - 8'h01;
endmodule
0623774ワット発電中さん
垢版 |
2016/02/07(日) 19:21:10.06ID:fhJ8NCfo
>>622

つまり、どのように下記に記述すればよいのでしょうか?
「Q <= ;」
0626774ワット発電中さん
垢版 |
2016/02/07(日) 21:15:36.21ID:jITFVCe9
>>621
>・減算演算子を用いて記述する

とあるけど、こういう書き方はいかが?
(実際の回路設計だとマイナスは使わないと思うので)

module DOWNCOUNT(CK, RES, Q) ;
input CK, RES ;
output [7:0] Q ;

always @(posedge CK or posedge RES)
Q <= RES ? 8'hff : Q + 8'hff ;

endmodule

動作は、255,254,・・・2,1,0の次は255になる。
0628774ワット発電中さん
垢版 |
2016/02/08(月) 12:39:32.26ID:oWwwNL1o
減算って、補数にして加算(+)する書き方が普通じゃないの?
シミュレーションだけだったら、マイナスで書いてもいいと思うけど。
0632774ワット発電中さん
垢版 |
2016/02/08(月) 14:56:39.79ID:UXSfRfbU
>>631
*4 とか *8 って書くけど?
乗算器に割り当てるかシフターにするかは合成ツールが考えればいいこと。
0634774ワット発電中さん
垢版 |
2016/02/08(月) 20:36:47.15ID:Ny6QE0eK
合成環境ないからわからないけどunsigned設定で a+a , a*2 , a<<2 って、
違う回路合成するのかな?
0636774ワット発電中さん
垢版 |
2016/02/08(月) 21:14:00.96ID:Ny6QE0eK
昔入れたQuartusの環境を思い出したんで、
下記を合成して見たら全部同じ回路になってた。
module Test0001
( input [31:0] a
, output [31:0] b
, output [31:0] c
, output [31:0] d
);
assign b = a+a;
assign c = a*2;
assign d = a<<1;
endmodule

スケマの感覚で下手に気を使ってソース書くと、
合成ツールの最適化が上手く働かなくなる可能性があるから、
(入力の不定値等も考えて厳密に同じ演算ではなくなってるケースなど)
やりたい演算を素直に書くのがいいと俺も思う。
タイミング間に合わなくなったらしょうがなくお世話する程度で。
0637774ワット発電中さん
垢版 |
2016/02/09(火) 08:30:19.57ID:aD7gi6qC
>>636
乙デアリマス。

定数乗算器をシフトで書くとか、
減算を補数でとか、20年前で止まってんじゃないかな?
(Abel でも減算は出来たけど)

生産性低いよね・・・
まあ、好きにすればいいけど。
0640774ワット発電中さん
垢版 |
2016/03/25(金) 15:55:18.35ID:GXTolrdw
Synthesizeがエラーも出ずにずっと回りっぱなしで終わらないんですけど,
どういう時に起こるんですか?
0643774ワット発電中さん
垢版 |
2016/04/09(土) 05:10:22.18ID:Kf7VbiEL
>>621

module DOWNCOUNT(
input rst_n,
input clk,
output reg [7:0] Q
);

always @(negedge rst_n or posedge clk) begin
if (rst_n ==1'b0) begin
Q <= {8{1'b1}};
end else begin
Q <= Q - 1;
end
end

endmodule


リセットを非同期負論理リセット、クロックの信号名を変えておいたがこんな感じ。
0644774ワット発電中さん
垢版 |
2016/04/10(日) 02:14:18.79ID:/KLfeoRF
>>643
input rst_n, clk, と続けて書かない理由は何?
また
input wire rst_n,
input wire clk,   と wire と書かない理由は何?
0646774ワット発電中さん
垢版 |
2016/04/10(日) 11:16:02.37ID:9g8SLq3j
>>643
最近はinput,outputの書き方変わったのか。
Q - 1; はカウンターを推定させるために1'b1と書いてた。
20年以上前の話だけど。
0647774ワット発電中さん
垢版 |
2016/04/10(日) 12:33:20.96ID:niBWLNk9
>>644
input は、wire しかないんだから、わざわざ書く必要なくね?
むしろ、書く理由は?

output reg も、「一見してレジスタ出力だと判る」という利点がありそうだけど、実は組み合わせ回路にもなりうるという落とし穴がある。
0648774ワット発電中さん
垢版 |
2016/04/10(日) 21:32:34.47ID:oyxhmEcn
DNA用の「プログラミング言語」をMITが開発。望みの機能をコーディング〜コンパイルし、細胞へインストール
http://japanese.engadget.com/2016/04/05/dna-mit/

verilogベースで作られているらしい
転職先として……と思ったけど、さすがに分野違いすぎてつらいな
0649774ワット発電中さん
垢版 |
2016/04/12(火) 11:59:34.34ID:K2Uok63W
>>647
直行性があり、ミスが起こりにくいと思う。
`default nettype none

module AAA (
  input wire    CLK,
  input wire     RESET,
  output reg [7:0]  DBUS,
  output wire [3:0]  CODE
);
  always @ ( posedge CLK ) begin
    if( RESET == `L ) begin
      ・・・・
    else
      ・・・・
    end
  end

という感じね。
0652774ワット発電中さん
垢版 |
2016/04/13(水) 00:38:52.15ID:62K8ZRVl
アメリカの半導体メーカーで働いてるけど、verilogで input wire xxx って記述初めて見たわ
0653774ワット発電中さん
垢版 |
2016/04/13(水) 01:04:20.19ID:TW8pKd9k
>>652
だったら今回見ておいて良かったですね。
Googleで input wire で検索しただけでも、ゾロゾロでて来るんですが、
>>652の国では、出てこないのかな。

直交性という意味では、
input wire [0:0] CLOCK,
input wire [7:0] BUS,
output wire [0:0] ENABLE,
output reg [3:0] state,
など、省略せずにちゃんと書くようにしたほうが、バグが出にくくていいよね。

先頭行で
`default_nettype none にしておけば、input CLOCK, と書いたときにエラーを出してくれる。
最終行で
`default_nettype wire にしておかないといけない。
XilinxのCoreGenで生成したソースで、 input XXX と書いてあって、エラーになるから。
0654774ワット発電中さん
垢版 |
2016/04/13(水) 01:25:42.69ID:62K8ZRVl
ミスが少なくなるので良さそうだけど、
手書きで書いた部分と自動生成した部分で扱いが異なるのは、ちょっと気持ち悪くないですか?

今社内のコーディングルールを改定しようとしてるので提案してみるわ。
うちも自動生成されるコードもあるけど、その位はツールベンダーに依頼すれば対応してもらえるし。
0658774ワット発電中さん
垢版 |
2016/04/13(水) 12:58:14.11ID:GN9RZ9iZ
>>657
FPGAは同期リセット推奨らしいぞ
Xilinxの人が「リセットは同期で作ってくれ〜」って言ってた
又聞きだがAlteraもそうらしい
というかできるならリセット記述すらしないでレジスタ宣言やsignal宣言(VHDL)に初期値を書けということだった
0659774ワット発電中さん
垢版 |
2016/04/13(水) 13:03:52.56ID:gFfvRMHA
リセットなしで、どうやってIPの初期化するんだろうね?
初期値書くのは、シミュレーションやFPGAの初期化直後はいいけど。
非同期だとタイミングの保証が面倒くさい。
0660774ワット発電中さん
垢版 |
2016/04/13(水) 13:08:28.21ID:gFfvRMHA
>>653
>output wire [0:0] ENABLE,

使うときも if(ENABLE[0]) begin って書いてね〜
0664774ワット発電中さん
垢版 |
2016/04/13(水) 21:36:55.39ID:rI6mKa2X
非同期リセットは解除時のタイミングが合わないから必要最低限にして、他は同期リセットにするのがわしは好き。
0665774ワット発電中さん
垢版 |
2016/04/13(水) 22:59:55.70ID:TW8pKd9k
>>646
>Q - 1; はカウンターを推定させるために1'b1と書いてた。
それを言うなら、8'b1じゃないの? [7:0]Q なんだから
0666774ワット発電中さん
垢版 |
2016/04/13(水) 23:03:19.40ID:TW8pKd9k
僕は、常時、100%、必ず、いつも、同期Resetで書いています。
どんな時に非同期Resetが必要なのでしょうか?
0667774ワット発電中さん
垢版 |
2016/04/13(水) 23:14:33.86ID:DWQIXPjB
>>665
1990年ぐらいかな古いHDL Compilerですけど
ビット数を合わせると加算器が選択されるので
あえて1ビットと書いていました。
0670774ワット発電中さん
垢版 |
2016/04/14(木) 00:24:57.85ID:2psijDZI
>>666
ASICの合成で、リセットがないFFが構築され、論理合成後のゲートシミュレーションで、不定が乗って仕事にならない。
0671774ワット発電中さん
垢版 |
2016/04/14(木) 00:37:24.42ID:2psijDZI
>>666
複数の、非同期クロックがある場合。同期リセットだと、リセット回路を考えなくてはならない。
結果、FPGA上のグローバルラインの節約になる。

結局どっちがいいという議論は常にあって、最適なほうを選択する。
RTL設計スタイルガイド に書いてあったような気がするが、高額だし絶版っぽくなってきて。よくわかんねー
0673774ワット発電中さん
垢版 |
2016/04/14(木) 02:03:28.80ID:/SVQW/U8
非同期resetの場合、reset信号の優先度が一番高いという理解で良いでしょうか?
0674774ワット発電中さん
垢版 |
2016/04/14(木) 02:25:48.92ID:2psijDZI
>>673
そらそうだろ。何のためのリセットなんだ。

ファミコンで、リセットボタンを押さないで電源を切って、冒険の書が消えたら大変だろうが。
0675774ワット発電中さん
垢版 |
2016/04/14(木) 05:17:20.50ID:rcybrDH6
>>672
STARC 解散か、それは良かった。

スタイルガイドはタメにはなるけど、
古い合成ツールのクセを引きずってたり、
そもそも、「絶対守れ」みたいに思ってる人がいると面倒だからな。
0679774ワット発電中さん
垢版 |
2016/04/14(木) 11:03:57.20ID:ht+BPKNC
いずれにしろ、signed は、扱いが難しいよね。

式の右辺に、1つでもunsigned が入ると、もうsigned ではなくなるし。
signed の変数に、負のsignedをセットする命令も、なかなか出てこない。
0680774ワット発電中さん
垢版 |
2016/04/14(木) 12:29:53.90ID:1CwzZOTl
signedの場合は必ずsignedと記述するようにしてるよ
ミスもなくなるし、コード見ただけでsignedの信号だとわかるし
0681774ワット発電中さん
垢版 |
2016/04/14(木) 13:01:08.04ID:ht+BPKNC
>signedの場合は必ずsignedと記述するようにしてるよ
これは、変数の中に signed の文字を入れている、という意味ですよね?
例)
signed16_zahyou
0684774ワット発電中さん
垢版 |
2016/04/14(木) 18:17:52.49ID:ht+BPKNC
>>683
Verilogで キャストが出来るんですか?
0685774ワット発電中さん
垢版 |
2016/04/14(木) 19:24:19.25ID:2psijDZI
use IEEE.std_logic_unsigned.all;

use IEEE.std_logic_signed.all;

書いたことない奴と語りたくない。
0686774ワット発電中さん
垢版 |
2016/04/14(木) 19:24:36.94ID:RKRcU1KM
>>671
同期リセットのほうがグローバルラインの節約にならない?ファンアウトが大きければ複数のFFを使えばよいし。
もちろんリセット回路などでロジックは消費するけど。
0687774ワット発電中さん
垢版 |
2016/04/18(月) 02:30:27.11ID:XRg6GlDB
リセットは同期式で書いてください、とTEDの人が言っていた
0689774ワット発電中さん
垢版 |
2016/04/18(月) 08:39:05.87ID:P19smY9y
非同期リセットだと各FFでリセットタイミングが非同期なので気持ち悪いわ。
0690774ワット発電中さん
垢版 |
2016/04/18(月) 10:30:47.74ID:QStvRiuR
十年ほど前までASICの論理設計をずっとやっていたけど、
原則、非同期リセット使用だったな。
回路は大きくなるけど、検証で不定に悩まされること考えたら
リセットを入れさえすれば値が確定し、不定を一掃できるのは、
短期間設計を強いられる身にはありがたい。

>>689の言っていることは分からないな。
0694774ワット発電中さん
垢版 |
2016/04/19(火) 13:50:34.31ID:IIKq7CqQ
飾りじゃ無いのよリセット、ホッホー
0695774ワット発電中さん
垢版 |
2016/04/20(水) 00:29:37.95ID:JQiA2r0L
鬼のように情け容赦がなく値を確定させるのが非道鬼リセット。
不定が残らないか胸をドキドキさせながら実行するのが動悸リセット。
0699774ワット発電中さん
垢版 |
2016/04/20(水) 22:16:09.20ID:HK2VpTOT
フリップフロップの非同期リセットと同期リセット
http://imgur.com/4gtd5BM

非同期リセットフリップフロップはRST_X=Lだけでリセットがかかる。
同期リセットの場合、クロック(CLK)が入らないとリセットはかからない。
0700774ワット発電中さん
垢版 |
2016/04/20(水) 23:53:29.02ID:S0GAT74N
マ イ ン ド コ ン ト ロ ー ル の手法

・沢山の人が、偏った意見を一貫して支持する
 偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法

・不利な質問をさせなくしたり、不利な質問には答えない、スルーする
 誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法

偏った思想や考え方に染まっていたり、常識が通じない人間は、頭が悪いフリをしているカルト工作員の可能性が高い

靖 国 参 拝、皇 族、国 旗 国 歌、神 社 神 道を嫌う カ ル ト

10人に一人は カ ル ト か 外 国 人

「ガ ス ラ イ テ ィ ン グ」 で 検 索 を !
0701774ワット発電中さん
垢版 |
2016/04/25(月) 11:10:06.32ID:XY4y5vDf
>>689
リセット信号はクロックに同期化して使うものじゃないの?
ここで言ってる非同期、同期リセットってのは
DFFのリセット端子に接続するのが非同期リセットで
組み合わせ回路に組み込むのが同期リセット
0702774ワット発電中さん
垢版 |
2016/04/25(月) 20:41:52.06ID:utlCRzPD
素朴な疑問だけど、
"リセット信号はクロックに同期化して使う"ならば、
非同期リセットを使うメリットって何?
同期リセットのメリットは、
同期にするだけで対ノイズ性はよくなるし、
CTSはりやすくなるだろうしなんとなく分かるんだけど。
0703774ワット発電中さん
垢版 |
2016/04/26(火) 06:44:08.43ID:ehiKBWfk
>>702
設計の失敗でFF出力がダイレクトにバスドライバーをON/OFFしているとき。
0706774ワット発電中さん
垢版 |
2016/04/27(水) 00:02:36.22ID:IQdL5SmA
Xilinxのホワイトペーパー WP231から抜粋
同期リセットと非同期リセットでLUTの数に差が出る
すべてのFFに対してLUTが増えるのでリソースを圧迫する
http://i.imgur.com/XkeuvjZ.png
http://i.imgur.com/94gDLs6.png

まぁこれはFPGAの合成についての話なので、ASIC化を考えているなら非同期リセット使うべきだろうね
0708774ワット発電中さん
垢版 |
2016/04/27(水) 05:37:08.49ID:vw8XUNYC
考え方は変わらないよ。FPGAでは同期リセット使った方が得な感じだね。
Xの話だけど

FFのR、C、CEの線はSlice単位で共通
DSP Blockは同期リセットしかない
リセットが無ければSRLやDMEMが推論出来る
同期の場合はLUT使うかFFのR線使うかをツールが判断する
非同期の場合は強制的にFFのR線を使う
この辺が基本ルールらしい。

回路からリセットを無くせるならそれがベター
フレーム単位ならGSRが使える
US以上ならGSRの自由度は高い
非同期リセットの場合はクロックのとレーシングを必ず考慮する
(全てのFFが同時にリセット解除されるとは「限らない」)
なんて話も。
0709774ワット発電中さん
垢版 |
2016/04/27(水) 14:41:27.76ID:zbUHs6vO
>>704
自分もそう思ってたんだけど、今Spartan-6のSLICE構造確認したら
FFのSet/Reset機能をSync/Asyncのどちらかに設定できる構造に
なってる
だから、同期リセット使ってもそのために余分なLUT使うこともないし
逆に論理合成の一部にこのSet/Reset機能を使って >>706の引用してる図
みたいにLUT使用を減らすことができるケースもある、ってことらしい
0710774ワット発電中さん
垢版 |
2016/04/27(水) 17:45:50.24ID:3wbhCdSJ
すみません、教えて下さい。

VerilogでSpartan6をプログラムしています。

bit幅の違うsignedの値の代入は、どのようになるのでしょうか?

reg signed [15:0] s16bit;
reg signed [13:0] s14bit; が、あるとき、

s16bit <= s14bit;
は、   { [13],[13], [13:0] } でしょうか、
それとも { [13:0], 2'b00 } なのでしょうか、

また
s14bit <= s16bit;
は、{ [15:2] } と、LSB欠落でしょうか
それとも、{ [15][12:0] } [14:13]が欠落でしょうか

宜しくお願いします。
0712774ワット発電中さん
垢版 |
2016/04/27(水) 19:33:41.49ID:3wbhCdSJ
>>711
さっそくありがとうございます。
どちらの場合も、右詰め基準で処理されるということですね。
ありがとうございます。

増える方は符号拡張で、右詰で良いと思いますが、
減る方は[15,14]が欠落しても、符号bitは降りてくると考えれば
よいでしょうか。
つまり、符号は同じで、数値の絶対値が小さくなるということです。
0713774ワット発電中さん
垢版 |
2016/04/27(水) 19:52:02.70ID:WvjMIZM6
>>712
[15,14]が欠落であって[14,13]が欠落じゃない。
符号は合ってて絶対値が変わるとか便利か?
Cでlongをshortに代入とか左シフトとか想像してみ。
オーバーフローが起きうるなら自分で検出して対処。
0714774ワット発電中さん
垢版 |
2016/04/27(水) 22:33:34.74ID:zbUHs6vO
>>710=712
質問に対する答えではないんだけど、結果がどうなるか確信持てないときは
とりあえずは確信持てる表記で書くほうがいいのでは?

どういうのを期待してるか分からないけど、例えば
 s16bit <= {2'b00, s14bit};
 s14bit <= s16bit[13:0];
とか書いたからって、「そんな書き方するな!」とか文句言うやつは
誰もいないと思うけど・・・
0715706
垢版 |
2016/04/27(水) 23:36:07.49ID:+w/6mK+W
非同期リセットについて色々と調べてみた

Xilinxについては、RAMやDSPが同期リセットを前提とした作りになっているため非同期リセットはそもそもNGなんだと
というか非同期リセットのFF出力をRAMにつないだりするとVivadoでErrorになってそもそも合成できない(たしか)
リセットについて書かれているUserGuideすべてに「Xilinxでは非同期リセットを推奨していません」と注意書きが書かれてる
あと、リセットするときはアクティブHighにすること
FFはアクティブHighの論理で作られているので、アクティブLowで記述した場合、リセット入力前に反転する回路が作られてリソースを圧迫する
そもそもリセットの配線自体が回路を圧迫するので、リセット記述自体の削減を検討すること
signal a : std_logic := '1'; みたいに初期値を書けば、立ち上がった時にその値が反映されるのでそれを活用すること
こういったコーディング手法は「Vivado Design SuiteでのUltraFast設計手法」でトレーニング可能なので知りたい人は受講したほうが良いとのこと
(42,000円かぁ……うーん……)

Alteraについては特に資料見つからなかった
もしかしたら公開してないだけかもしれないけど
0716774ワット発電中さん
垢版 |
2016/04/28(木) 00:05:10.63ID:DDDVrqna
>>714
むしろうちの会社はそう書かないとコードレビューで弾かれる
社内のコーディング規約にも書いてあるし
STARCルールにもそういうのなかったかな
0719774ワット発電中さん
垢版 |
2016/04/28(木) 12:32:04.11ID:7osbKzj8
>>718
コンフィグって、なに?
0720774ワット発電中さん
垢版 |
2016/05/03(火) 12:01:25.17ID:/AL+CPaC
FPGAにおいては、電源投入後 ユーザー回路が動くように
RAMの情報を書き換えて準備すること。
0721774ワット発電中さん
垢版 |
2016/05/06(金) 00:32:41.21ID:jHduD6g7
>>715
なんでFPGAだけで調べてんだよ。
ここはHDL言語の板

FPGAの同期リセット推奨の世界でおまえが生きたいんだったらそれ以上調べず押し付けてくんな
0722774ワット発電中さん
垢版 |
2016/05/06(金) 04:40:17.66ID:f1rl2Pal
FFをCMOS回路れべるで描けないと無理だよ。

複数クロックの問題もあるし
0726774ワット発電中さん
垢版 |
2016/05/06(金) 20:21:07.06ID:QxEnI6Uy
スキャンまで大学で教えてるところはそうないんじゃね?
スキャン付きFFは面積デカくなるよな。
0728774ワット発電中さん
垢版 |
2016/05/10(火) 11:21:13.51ID:fdceohCP
ソフトウェア出身なのでよくわからないのですが、ハードウェアのテスト(シミュレーション)にも条件網羅や境界値分析のような基準があるのでしょうか?
テスト手法に関する著名な図書があれば教えていただきたく…
0729774ワット発電中さん
垢版 |
2016/05/10(火) 20:27:54.56ID:i76bA3yq
100%だよ
緩和については各々の事情による

ゴンペルツ曲線に合うようにテストするんだぞ
見つけ過ぎたりしちゃダメだからな配分考えて
0730774ワット発電中さん
垢版 |
2016/05/10(火) 21:12:48.81ID:zjM4uPOh
>>729
アドバイスありがとうございます

コードカバレッジ100%ですね
基本的な考え方はソフトと同じだと思えてきました

ゴンペルツ曲線は久しぶりに(初めて?)聞きました
今後意識してみます

あと職場の本棚に『Verilog HDL&VHDLテストベンチ記述の初歩』があったので熟読しておきます
0731774ワット発電中さん
垢版 |
2016/05/10(火) 22:36:09.56ID:D8/k7BjM
ソフト屋が RTL やると、カウンタの判定でまずハマる (経験談)。
0734774ワット発電中さん
垢版 |
2016/05/12(木) 23:52:15.26ID:sKNOTwXk
>>733
ありがとうございます
ModelSimって結構高機能だったんですね(小並感)
ちょっと使い方を調べてきます
0735774ワット発電中さん
垢版 |
2016/05/13(金) 08:56:53.78ID:0YJlXOfI
開発規模がわからないけどフォーマル検証やランダム検証なんかも使えるといいね
エミュレート環境もあれば便利だよFPGAなら実機あるかもだけど
0736774ワット発電中さん
垢版 |
2016/05/27(金) 23:26:48.46ID:jV/oAcm1
固定小数点の除算ってどうすればいいでしょうか?
(? / ?)*(2**小数部ビット数)でやってるんですがうまくいきません
0737774ワット発電中さん
垢版 |
2016/05/27(金) 23:54:29.75ID:xGSVIS28
シミュレーションが出来ない
合成できない
リント通らない
タイミングメットしない
ゲート規模デカすぎる

他になにかあるかな?
0739774ワット発電中さん
垢版 |
2016/05/28(土) 00:33:24.72ID:8D70xttd
>>738
最初は整数で実装してみたんですが小数精度がないとうまく動きませんでした
とりあえず掛け算は resize( (? * ?) / (2 ** 小数部ビット数) , 全ビット数)
でうまく動いているみたいなのですが割り算でつまずいています
0740774ワット発電中さん
垢版 |
2016/05/28(土) 00:44:30.44ID:uKWD48qj
>>739
割ってから掛けるんじゃなくて、先に掛けるべきだな

>>737
シミュレーションはできるんじゃね?
0741774ワット発電中さん
垢版 |
2016/05/28(土) 06:52:12.85ID:9YsLJlaU
>>740
シミュレーションできて合成出来ないなら合成ツールの問題とも言える。あと20年経ったらできるかも知れない。

そもそも ** なんて演算子あったっけ?
0745774ワット発電中さん
垢版 |
2016/05/28(土) 17:50:54.29ID:DTbvPBnh
ASICでやらかしたのを遠目に見たことはある。<除算が合成できない。
配線で直せたらしいが。
0747774ワット発電中さん
垢版 |
2016/05/29(日) 14:52:12.40ID:JjforECz
合成出来ないのにシリコン化ってのが有り得ないよな
ECOでバグ直したってのなら分かるけど
0748774ワット発電中さん
垢版 |
2016/05/29(日) 18:45:41.02ID:yfNsMcqN
おっしゃる通り。バグ自体は数式の転写ミス。
本来の数式なら除算があったが、
合成が(そのバグ部分は)あっさり成功していた。
0750774ワット発電中さん
垢版 |
2016/06/08(水) 20:33:52.01ID:QQfJu5fi
altera de1-soc での外部メモリを使う方法がわからん
情弱すぎてつらいんだが
外部メモリ使用した経験ある人いませんか?
0751774ワット発電中さん
垢版 |
2016/06/13(月) 17:04:10.62ID:zPjI7duP
差動クロックをタイミング制約で動作周波数を落としたいのですがPN両方ではなくP側のみの制約を掛けなければならないのですか?
0752774ワット発電中さん
垢版 |
2016/06/14(火) 16:18:02.34ID:M+ZoFngS
binファイルが途中から読み込めなくなる現象が起きているんですが、原因わかりませんか?
3次元配列しているbinを$readmembでレジスタに配置して、alwaysで要素を取り出しassignしているのですが
一定アドレスから読み込まれずハイインピー状態になります。
誰か解決策教えてください。
0753774ワット発電中さん
垢版 |
2016/06/14(火) 18:28:23.23ID:GIkUv0Ll
$readmembで reg [31:0]ROM[0:9][0:99]; みたいなのに
読み込んでるってことなのかな?
ROMの内容をダンプしてみたら? 多分読み込めてないんだと思う
0754774ワット発電中さん
垢版 |
2016/06/14(火) 18:32:22.92ID:GIkUv0Ll
あ、ゴメン、そこは見当ついてるってことか
原因は $readmemb の仕様だと思うから、上の例だと
reg [31:0]ROM[0:999]; みたいな形にしてみたら行けるのでは
0755774ワット発電中さん
垢版 |
2016/08/14(日) 05:12:53.53ID:S0I4J04X
質問いいでしょうか?

FPGAのリセット信号をDCM_Lockを反転して使っている記事なとを見かけますが、
DCM素子を使わないことも多いんです。

リセット信号発生のためだけに
0757774ワット発電中さん
垢版 |
2016/08/14(日) 13:36:16.40ID:O4huRkYu
DCMがないっていうんなら別だけど、あるなら、リセット信号発生のためだけに
使ってもいいんでは?
単に外部クロックx1として使ってもいいし
0760774ワット発電中さん
垢版 |
2016/08/15(月) 00:03:10.15ID:uGZ7Tjz5
触れてはならない闇に触れようとしたから、書いてる途中で消されてしまったのか・・・
0761774ワット発電中さん
垢版 |
2016/08/15(月) 00:35:55.50ID:c9XijXTt
すみません、755です。
書いている途中に MPが来て連行されてしまいました。
質問は、リセット信号の生成のためだけに DCMを使うという DCMの使い方は
邪道でしょうか? 
外部にリセットICやリセットSWを置くよりも、楽で寿司。

もう一つ教えてください。
FPGAにマイコンを書いて行うのが流行だと思いますが、
Xilinxだと、有料版でないと使えなかったり制限があったりするようです。
なので、マイコン(H8)を外部バスモードにしてFPGAをつなごうと思っています。
「今どき、別々でやるんか?」と言われるのではないかと心配しています。
やはり、おかしいでしょうか?
0762774ワット発電中さん
垢版 |
2016/08/15(月) 01:18:24.43ID:1HTnyLKQ
ソフトコアなんぞ話題性を出してソフト屋に売り込みたいだけの話で、主流でも何でもないと思うが。
普通はソフト資産なりハード資産なり大人の事情なりで先にプロセッサーが決まっててそこに足りないものを継ぎ足すものでしょ。
0763774ワット発電中さん
垢版 |
2016/08/15(月) 01:55:03.83ID:uGZ7Tjz5
FPGAのソフトコアCPU使ったからといって、FPGAだけでできるっていう
わけにはいかないんだよね
普通は、外部にプログラム・データ用のRAMとかROMが必要になる

今時のマイコンだとそういうのは内蔵されてるから、マイコン+FPGAって
構成は当然ありだし、マイコンに内蔵されてるLCD・USBインターフェイスの
ようなものをFPGAに組み込むことに時間と労力を費やすのもどうかと思う
(いくらIPとライブラリがあったとしても、1日でできるとかありえないから)
0764774ワット発電中さん
垢版 |
2016/08/15(月) 16:10:18.67ID:+HyJQTyf
> ソフトコアなんぞ話題性を出してソフト屋に売り込みたいだけの話

> マイコンに内蔵されてるLCD・USBインターフェイスの
> ようなものをFPGAに組み込むことに時間と労力を費やす

なんかこう・・・
0766774ワット発電中さん
垢版 |
2016/08/15(月) 18:09:47.62ID:PtN2WXNj
USBもLCDCも内蔵されてるマイコンもあれば無いのもあるし
内蔵してる奴は大抵fpBGAでアマチュアだと厳しく
でもSATA1.5G程度でも実装可能な高速serdes持ってるfpgaもfpBGAだっりする訳で
色々とままならず
つまひは立場によるって話でしかなく
0769774ワット発電中さん
垢版 |
2016/08/16(火) 23:01:40.47ID:VCBjYydD
MicroBlazeとか、出始めた頃はその頃のマイコンとしては高性能の部類だったけど
今となっては、Cortex-M3の安いやつくらいの性能しかない
だからホントは、マイコン―高速バス―FPGAって感じの構成が一番いいと
思うけど、残念ながら高速バスは標準がないし、最近の高集積マイコンは
外部バス自体なかったりするんだよな
0771774ワット発電中さん
垢版 |
2016/08/17(水) 00:23:31.80ID:AQmTpAMT
んなもん生えてるマイコンは良いじゃん言えるほど無いし、パフォーマンスも出なかったりするけどな
0772774ワット発電中さん
垢版 |
2016/08/17(水) 00:24:16.34ID:/i4c9OrV
ラズパイクラスでもPCIeなんてついてないでしょ
FPGAのほうも、PCIeでインタフェースするくらいなら
Zynqとかってなっちゃうし
0775774ワット発電中さん
垢版 |
2016/08/22(月) 20:26:30.52ID:tqckmrN+
そんなコスト無視のアドバイスされてもなあ
マイコン+FPGAだと2千円くらいからできるけど
ハードコアCPU内臓FPGAだと1万くらいからでしょ?
0777774ワット発電中さん
垢版 |
2016/08/22(月) 20:59:01.14ID:Se6nq+Lw
んなもん要件次第だろ。お前が何作ろうとしてるかなんか知るかよ
0779774ワット発電中さん
垢版 |
2016/08/23(火) 14:54:56.46ID:j5Axv+ou
XとかAにも Cortex-M3かM4クラスのがのったチップが欲しいね
ソフトコアの上がA9とかギャップがありすぎ
0781774ワット発電中さん
垢版 |
2016/08/23(火) 21:29:50.29ID:Y3KcuaQA
べつに大きい分には困らないでしょ
ZYNQはFPGAにしては安いし
0782774ワット発電中さん
垢版 |
2016/08/27(土) 23:28:12.02ID:lFMWVUKk
VHDLの記述方法に関して教えて下さい。
Vivado2016.2を使用しています。

階層間を接続する記述の仕方でエラーが発生します。

ena <= sig_a, (OK)
ena <= not sig_a, (NG)

調べるとVivadoがサポートしているVHDL-93ではNGの記述がサポートされていない事が
原因と分かったのですが、これを回避するにはどう記述するのが定石なのでしょうか?

今は↓こんな感じで3行で書いているのですが、面倒だし行数が増えて嫌なんですが・・・
何か良い方法をアドバイス頂けませんか?

signal not_sig_a : std_logic;
not_sig_a <= not sig_a;
ena <= sig_a,
0783774ワット発電中さん
垢版 |
2016/08/28(日) 01:12:17.25ID:21NvIqvt
・集団ストーカー・電磁波犯罪被害の科学的根拠及び、技術上の根拠は以下のアドレスへ (警察板より退避)
http://jbbs.shitaraba.net/bbs/read.cgi/study/12517/1415977550/
これを読まずして、貴方は、集団ストーカー・電磁波犯罪被害者を統合失調症呼ばわり出来ない

・レーザーは赤外線だと軌道が見えないし、軌道から外れたら、計測も困難を極めるだろう。
マイクロ波の周波数帯だったら、メーザー呼ばれ、軌道が見えないし、 軌道から外れたら計測が出来ないから、計測は困難だぞ。
学者・研究者でも証明は困難だぞ。
究極の個人攻撃が可能だ。
レーザー・メーザーを照射されていると主張しているからと言って、精神病とは限らない。 大問題になるぞ、人権的にも。
メーザー
http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%BC%E3%82%B6%E3%83%BC
レーザー
http://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%82%B6%E3%83%BC
レーザーポインター
http://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%82%B6%E3%83%BC%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC

・マイクロ波聴覚効果
http://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E6%B3%A2%E8%81%B4%E8%A6%9A%E5%8A%B9%E6%9E%9C
ファクトシートNo.226 1999年6月 電磁界と公衆衛生:「レーダーと人の健康」
http://www.who.int/peh-emf/publications/facts/radars_226.pdf
電波は聞こえるよーん。ここに詳しい解説があるから、勉強しておいてね。
『ガリレオ2』第3話の数式、パルス電磁波のフレイ効果による耳の奥の弾性波か
http://tenmei.cocolog-nifty.com/matcha/2013/04/post-6f27.html

これでも、電波は聞こえないという奴は、科学の敵だ。
0784774ワット発電中さん
垢版 |
2016/08/28(日) 01:12:32.95ID:21NvIqvt
集団ストーカー・電磁波犯罪被害の加害装置はレーザー・メーザーらしいな
・レーザー兵器について知ろう!
ドキュメンタリー - 未来の戦争 レーザー兵器
https://www.youtube.com/watch?v=t6vPM-S1YdE
防ぐことは、ほぼ、不可能。核兵器以上かもね
・集団ストーカー・電磁波被害の加害装置がレーザー・メーザーによるものだとしたら、レーダーを使うはず。加害者にはこのように見えているハズ。ちょっと、エロです。
64MHzの電波を使って撮像しているMRIの動画
MRI Shows What Sex Looks Like From The INSIDE | What's Trending Now
https://www.youtube.com/watch?v=nDhYLaGPmGU
見えている各臓器、脳も含めて、レーザーを照射すれば、危害を加える行為が成立する
参考までにCTの動画
Radiologist discusses CT and xray small bowel obstruction Imaging
https://www.youtube.com/watch?v=8dNTHdUO_3Q
PCB Imaging: 3D/CT X-Ray Animated Slicing (Top to Bottom)
https://www.youtube.com/watch?v=itTkItXiHsk
・レーザー・メーザーが開発されたのが、1950年台以降、メーザー初の発振が1953年、レーザーの初の発振が1960年
https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%82%B6%E3%83%BC
この記念すべき年以降の、人体の自然発火現象は怪しい
人体自然発火現象
https://ja.wikipedia.org/wiki/%E4%BA%BA%E4%BD%93%E8%87%AA%E7%84%B6%E7%99%BA%E7%81%AB%E7%8F%BE%E8%B1%A1
No.31 突然人間が燃え上がり、焼死に至る「人体発火現象」
http://ww5.tiki.ne.jp/~qyoshida/kaiki/31zintaihakka.htm
No.157 人体発火現象2
http://ww5.tiki.ne.jp/~qyoshida/kaiki2/157jintaihakka2.htm
人体 自然 発火現象 : 人の体が突然 灰になるまで 燃えつきる / 世界の衝撃ストーリー
dailymotionを上のタイトルで検索してみ
・モスクワシグナル事件
興味のある方は、集団ストーカー・電磁波犯罪被害の基礎知識として、知って下さい
あなたの脳は誰のもの?(1)モスクワシグナル 前編
http://nueq.exblog.jp/17871225/
あなたの脳は誰のもの?(2)モスクワシグナル 後編
http://nueq.exblog.jp/17875689/
0785774ワット発電中さん
垢版 |
2016/08/28(日) 01:12:47.62ID:21NvIqvt
「自分達は手を出さず人を追い込む方法があるんだってさ」
「多人数で人を追い込むんだってさ」
「電波攻撃で攻撃するんだってさ」

「他人の考えとか想いがわかる装置があるんだってさ」

集団ストーカー(組織的ストーカー行為)・電磁波被害の加害装置を持たせる時の誘い文句だそうです。

他にもいろいろあると思いますが、これに類するセリフを聞いた事がある人は、警察に一報をいれて貰えたらと思います。
0786774ワット発電中さん
垢版 |
2016/08/28(日) 11:28:16.64ID:4hUD09au
>>782
矢印の向きが違う気がするけどport mapのことだよね?
であれば標準のVHDL-93はそういうもの。VHDLは何かと行数が増える。
VHDL-2008にしたらNG記述でも行けるはず。

でも、QuartusだとなぜかnotだけならVHDL-93でもNG記述で行けていたような気がする。
0788774ワット発電中さん
垢版 |
2016/08/28(日) 23:36:30.39ID:VQ+b249R
alteraはMAX+plus IIの時代から、かなり汚い文法でも行けた。port mapに定数を置いたり。
0789774ワット発電中さん
垢版 |
2016/08/30(火) 22:11:04.38ID:SgzUEwI4
port mapに定数よく使ってるけど本当はダメなのか。
でもいままでエラーになったツールはみたことないような気がする。
0790774ワット発電中さん
垢版 |
2016/10/07(金) 21:40:18.40ID:38Z+SGOz
verilogで論理回路設計の勉強を始めたのですが
例えばあるクロックを生成するモジュールを作って、そのモジュールにワンショットのトリガー信号が入ったら、クロックを10発だけ出すといったような場合どういった記述をすればいいのでしょうか
0791774ワット発電中さん
垢版 |
2016/10/07(金) 22:16:36.36ID:j3+Wtknq
>>790
省電力のためどうしてもというのでない限り、クロックを生成するような回路設計はやめた方がいい。
0792774ワット発電中さん
垢版 |
2016/10/07(金) 22:33:48.86ID:SyWqDWh6
クロックって書いちゃったからなぁ。

↓以下、ダメ出しが続きます。
0795774ワット発電中さん
垢版 |
2016/10/08(土) 01:18:25.70ID:sFDtwLAt
>>790です
ご指摘ありがとうございます
一つ勉強になりました。以後気をつけます

>>794
パルスをカウントしたレジスタを見てトリガー信号からイネーブル信号を作ってみたいな感じになるでしょうか
0796774ワット発電中さん
垢版 |
2016/10/08(土) 14:47:31.31ID:tO3CgMWD
トリガーは1でアクティブ
出力はデフォルトL
パルス幅は1クロック周期とする
異常状態は考えない
行頭空白はご愛嬌

input clk,xrst,trigger;
output pulse;
reg [4:0] count;

always@(posedge clk or negedge xrst) begin
 if(~xrst) begin
  count <= 5'd0;
 end
 else if(count > 0) begin
  count <= count -5'd1;
 end
 else if(trigger) begin
  count <= 5'd19;
 end
end

assign pulse = count[0];
0798774ワット発電中さん
垢版 |
2016/10/08(土) 15:34:22.28ID:AFFtgHMK
troggerを微分しなくていいの? 連続Hが来続けたら、スタートしないよ。
動作中に再trigger来たら、スタートに戻ってしまうよ。

input wire  clk, nRESET, trigger;
output wire pulse;
reg     p;
reg [4:0] count;
wire    RESET;

assign RESET = ~nRESET;

always @ (posedge clk) begin
 if (nRESET == 1'd1) begin
   p <= 1'd0;
   count <= 5'd0;

 end else begin
   if( p == 3'd0 ) begin
     if( trigger == 1'd1 ) begin
       count <= 5'd19;
       p <= 3'd1;
     end
   end else if( p == 3'd1 ) begin
     if(count > 5'd0) begin
       count <= count -5'd1;
     end else begin
       p <= 3'd0;
       count <= 5'd0;
     end
   end
 end
end

assign pulse = count[0];
0801774ワット発電中さん
垢版 |
2016/10/08(土) 15:58:19.63ID:tO3CgMWD
>>798
もちろん微分した方がいい。
減算を優先しているのでスタートしないことはないが、
逆にtrigger=H固定入力だとパルス列が終わらず、
出続けるという動作をしたりする。
0802774ワット発電中さん
垢版 |
2016/10/08(土) 18:25:03.78ID:IhihHlxD
>>790です
ありがとうございます
減算を使ってですね。その発想は出なかったのですごく勉強になりました
トリガ信号は1クロック分のパルスを作るので大丈夫そうです
I2CやSPIのプログラムも自作で作ってみたいみたいのですが、同様の考え方で行うものでしょうか
0803774ワット発電中さん
垢版 |
2016/10/08(土) 19:17:03.14ID:oqE2bdG+
>>797
本質じゃないけど
×画竜点晴
○画竜点睛
どこが違うか見つかるか、×の方は意味なさないからね。
0804774ワット発電中さん
垢版 |
2016/10/08(土) 20:45:35.69ID:C30lqwUN
魚に青なのか、その下が円なのかは、単に書体の違いぐらいらしいのに、
日の青なのか、その下が円なのかは、意味が違ってくるんだね。

サバと同じでどっちでも良いものだと思っていました。勉強になるわ。
0805774ワット発電中さん
垢版 |
2016/10/08(土) 21:23:53.88ID:AFFtgHMK
>>802
>同様の考え方で行うものでしょうか
考え方は同じです。
秋月などの文字表示液晶の初期化などを作ると、しびれるほどエキサイティングです。

マイコン処理のように、ステップ毎に進んで行く処理は、
状態遷移を使って処理していきます。

always @( posedge CLOCK ) begin
  if(リセット=1)なら、
    その他のFF=初期値にして
    状態遷移=0にして

  そうではなくて通常なら、
    if(状態=0)のなら
      if(○○=xx)になったら
        aaをして
        次は状態=1に行く
      end

    そうでなくてif(状態=1)なら
      if(vvvv)なら
        WWWWをして
        次は状態=2に行く
      end

    そうでなくてif(状態=2)なら
      if(UUUU)なら
        DDDDをして
        次は状態=3に行く
      end

    そうでなくてif(状態=xx)なら
      if(UUUU)なら
        DDDDをして
        次は状態=0に行く
      end
    end

    毎回スキャンしたいことは、ここに書く。
    あるいは、
    別の状態のグループを置いてもいい。(簡単なマルチタスクのイメージ)
  end
end

という感じにすれば、
微分も必要ないし、思い通りの処理ができます。
流れを変えたければ、状態番号を変えるだけで楽だし、
状態の値で、どこを処理しているかわかるので、LEDなどでデバッグ
しやすいです。

この方法に気づくまでは、毎晩徹夜ばかりしていました。
0806774ワット発電中さん
垢版 |
2016/10/08(土) 22:53:47.87ID:rncrFR0r
これじゃダメかな。

integer i;
reg CLK;

always @( posedge TRIGGER) begin
for( i=1; i<=10; i=i+1) begin
CLK = 1'b1;
#10 CLK = 1'b0;
#10;
end
end
0807774ワット発電中さん
垢版 |
2016/10/08(土) 23:31:35.17ID:oqE2bdG+
>>804
残念。月と円の違いもあるけど本質的じゃなく、
本当の違いは左側が「日」か「目」か。
晴は天気の良いことだけど、睛は「ひとみ」の意味なんだよ。
画竜点睛を欠くとは、
絵にかいた龍に最後に書き入れる目が足りないという意味。

「がりょうてんせい」全体で漢字変換する事を勧める。
スレチでした。
0808774ワット発電中さん
垢版 |
2016/10/08(土) 23:34:04.34ID:h82z50Iq
>>802
横からだけど
「減算で」っていうのは必須じゃないよ
ある値まで加算する、っていうのでもいいし、実装したときの
使用リソースも(固定値と比較する場合は)変わらないはず

減算が有利なのはカウント値をプログラマブルにするときかな
0809774ワット発電中さん
垢版 |
2016/10/09(日) 00:37:27.65ID:wbyXhJ5E
>>805
ありがとうございます
あとは自分なりに考えてみたいと思います
例えばI2CであればROMにデータを書いて、それをCLOCK同期でデータを読み出していくような感じで作れればと思ってるのですが、SCLがSDAの半分ってのがこれまたどうするのか?と。。
出来たらあげたいと思うのでその時は指導お願い致します

>>806
ありがとうございます
ソフトウェア的なこういった記述も出来るんですか?
ちょっと調べてみます

>>808
ありがとうございます
減算をこういった形で使うのを意識したことがなかったので目からウロコでした
0810774ワット発電中さん
垢版 |
2016/10/09(日) 04:02:32.81ID:yYvEbQTn
>>809
上の798さんのサンプル見ても分かるとおり、出力するパルスは
FPGAのクロックとイコールじゃない

I2CのSCL,SDAも同じことで、SCLをクロックと考えると間違える
あくまでもFPGAのクロックから生成されるパルスだってことを
しっかり押さえといがほうがいい
0811774ワット発電中さん
垢版 |
2016/10/09(日) 04:37:24.58ID:oJtloawK
>>806
それって、配置配線できるの?
シミュレーション専用のおまじないじゅなくて?
0812774ワット発電中さん
垢版 |
2016/10/09(日) 08:57:45.55ID:xUw7C9j9
>>811
>>806はシミュレーション用の記述だろう。合成はできないよ。
0813774ワット発電中さん
垢版 |
2016/10/09(日) 10:22:01.41ID:tPYLHFhE
申し訳ありません。
シミュレーションするためのクロックだと思ったので。

論理合成するならこちら

reg [1:0] t2;
reg [4:0] count;
reg CLK2; // variable

always @( posedge CLK ) begin
if( t2 == 2'b01 ) begin
count = 5'd20;
end
else begin
if( count != 5'd0 ) begin
count = count - 1'b1;
end
end

CLK2 = count[0];

t2 = {t2[0], TRIGGER};
end

減算に 1'b1 としているのは回路の初期にカウンタを推定させるため
20年ぐらい前の古い書き方かも知れません。
0814774ワット発電中さん
垢版 |
2016/10/09(日) 10:37:12.99ID:WBW8mo1f
んじゃ、あたいからは一点。
FFだと考えてるならノンブロッキング代入文を使おう。
文中だけでも、CLK2とかSimと実物で動き変わんで。
0815774ワット発電中さん
垢版 |
2016/10/09(日) 10:50:29.28ID:tPYLHFhE
>>814
昔、Cで検証してからVerilogに書き直してたので
こんな書き方になりました。
0816774ワット発電中さん
垢版 |
2016/10/09(日) 10:55:48.24ID:oJtloawK
.
インデントされていないと、読む気にならないので添削した

reg [1:0] t2;
reg [4:0] count;
reg    CLK2;   // variable ← 出力のことでしょ?

always @( posedge CLK ) begin
  t2 = {t2[0], TRIGGER};     // 意味合い的に、この位置に書こう
                  // = でいいの? <=ではなくて?
  if( t2 == 2'b01 ) begin
    count = 5'd20;

  end else begin
    if( count != 5'd0 ) begin
//     count = count - 1'b1;  // = は間違いと思う
      count <= count - 1'b1;  //
    end
  end

// CLK2 = count[0];        // = でいいの? <=ではなくて?
  CLK2 <= count[0];        //
                  
end
0817774ワット発電中さん
垢版 |
2016/10/09(日) 11:34:56.56ID:tPYLHFhE
>>816
重ね重ねすいません。
書き直しました。

wire CLK2;
reg [1:0] t2;
reg [4:0] count;

assign CLK2 = count[0];

always @( posedge CLK ) begin
 t2 <= {t2[0], TRIGGER};

 if( t2 == 2'b01 ) begin
  count <= 5'd20;
 end
 else begin
  if( count != 5'd0 ) begin
   count <= count - 1'b1;
  end
 end
end
0818774ワット発電中さん
垢版 |
2016/10/09(日) 12:22:33.75ID:oJtloawK
>>817
>count <= count - 1'b1;
は、count <= count - 5'b1; だと思う。

リトリガー可能な10発パルス発生器ですね。
0824774ワット発電中さん
垢版 |
2016/10/09(日) 22:42:44.88ID:b9rLnd16
>>818
>count <= count - 5'b1;
count <= count - 1;
はいけない子ですか?
0825774ワット発電中さん
垢版 |
2016/10/09(日) 23:29:59.27ID:tPYLHFhE
こっちの記述の方が良いわ。

reg [1:0] t2;
reg [19:0] line_buf;
reg CLK;

always @( posedge CLKx2 ) begin
 if( t2 == 2'b01 ) begin
  CLK = 1'b0;
  line_buf = 20'b1010101010101010101010101010101010101010;
 end
 else begin
  {CLK, line_buf} = {line_buf, 1'b0};
 end

 t2 = {t2[0], TRIGGER};
end
0826774ワット発電中さん
垢版 |
2016/10/10(月) 01:50:38.95ID:yG1AVqIm
>>824
はい、よくないです。
5bit幅の変数に、1bit幅の1は減算できません。
5bit幅の変数には、同じ5bit幅の1、00001を減算します。

あと、if() else では、どちらの場合でも ちゃんと変数の値を指定しましょう。

 if( t2 == 2'b01 ) begin
  CLK <= 1'b0;
 end

と、書く人が多いですが、ちゃんと

 if( t2 == 2'b01 ) begin
  CLK <= 1'b0;

 end else begin
  CLK <= 1'b1;
 end
のように書きましょう。
0827774ワット発電中さん
垢版 |
2016/10/10(月) 03:59:02.07ID:/UcYzAMc
FFは<=
組み合わせ論理は=

FFで<=使わないのは分周クロック生成ぐらい。
0828774ワット発電中さん
垢版 |
2016/10/10(月) 07:57:54.61ID:SJoJLhav
>>826
ありがとう

nビットカウンタのレジスタqをクリアするとき
reg [n-1 : 0] q

q <= 0
としてたけど、これもいけない子ですか?
0829774ワット発電中さん
垢版 |
2016/10/10(月) 08:11:18.99ID:yZ3oZRGD
>>826
それは間違い。
//a--------------
 if( t2 == 2'b01 ) begin
  CLK <= 1'b0;
 end

//b-----------------
 if( t2 == 2'b01 ) begin
  CLK <= 1'b0;
 end else begin
  CLK <= 1'b1;
 end
 
a,bは意味がちがう。
aは
 if( t2 == 2'b01 ) begin
  CLK <= 1'b0;
 end else
   CLK <= CLK;
に等価だ。

それに不必要なbegin endは入れない。ビット幅が決まっているのに
いちいちビットを指定してはいけない。わかりづらい。
 if( t2 == 2'b01 )
  CLK <= 0;
 else
  CLK <= 1;

もしくは
  CLK = (t2 == 2'b01) ? 1 : 0;
0830774ワット発電中さん
垢版 |
2016/10/10(月) 08:16:37.85ID:yZ3oZRGD
>q <= 0 としてたけど、これもいけない子ですか?

このほうが良い。ビット幅を指定しないと誤まるようなコンパイラは今ではない。
であるから悪習は早くやめるべき。
0831774ワット発電中さん
垢版 |
2016/10/10(月) 08:31:32.15ID:yZ3oZRGD
>>817
 if( t2 == 1 )
  count <= 20;
 else if( count != 0 )
  count <= count - 1;
このほうが見やすいだろ。
0832774ワット発電中さん
垢版 |
2016/10/10(月) 09:43:44.24ID:6iMx+As8
>>830
ありがとう
ちょっと安心しました

ついでにもう一ついいですか?
モジュールの接続は
MODULE_A MODA(
.a(a),
.b(b)
);

MODULE_A MODA(a,b);
のどちらの記述がいいですか?
0833774ワット発電中さん
垢版 |
2016/10/10(月) 10:36:24.05ID:yG1AVqIm
>>830
>ビット幅を指定しないと誤まるようなコンパイラは今ではない。
だけど、ISEがWarningをいっぱい出すよね。
常にデフォルトの32bitで書くのはどうかと思います。

>>832
xxx yyy ( .(a), .(b) );
のほうがよいです。寝ぼけていてもミスが発見されやすいです。

順番で書く方の、順番を確認するのが手間です。
0834774ワット発電中さん
垢版 |
2016/10/10(月) 10:51:47.37ID:6iMx+As8
>>833
なるほどなるほど
ありがとう
モジュールのほうは共有して認識あるライブラリを使う場合は順番のほうでもありかな?
0836774ワット発電中さん
垢版 |
2016/10/10(月) 11:44:56.86ID:MzKpf8a7
古いDesign Compiler の制約を引きずった書き方してきたので
最近の記述方法が知りたいなあ。

論理合成のために、こんな記述してた。
count = count - 1'b1;
A = A + B + 1'b1;
0837774ワット発電中さん
垢版 |
2016/10/10(月) 12:41:26.14ID:yZ3oZRGD
>>833
ISEはそうなの? Primeしか知らない。Primeは問題なし。
0838774ワット発電中さん
垢版 |
2016/10/10(月) 12:42:02.60ID:yZ3oZRGD
Verilogのテクとして
ifロジック記述ではbegin endは使わない。
どうしても必要な大きなロジックの場合はfunctionにする。
したがって大きな組み合わせ回路はすべてfunctionで書く。
★alwaysを使った組み合わせ回路は書かない。
このようにするとregとwireが意味的に混在することがない。
これはverilog文法の混乱している箇所だから、禁則にする。

<=はレジスタライト専用
=はアサイン、組み合わせ回路専用

最近verilogを始めたばかりだが、驚くほど間違った通説があるようだ。
言語もひどいが教科書が酷い。間違いが多い。
alwaysで組み合わせを書くときにはregで定義するとか、何を考えて
コンパイラを作ったのか理解に苦しむ。
0839774ワット発電中さん
垢版 |
2016/10/10(月) 12:48:20.08ID:Qmw2RVOM
言語仕様で出来上がりが確定しちゃうより
中の人に自由に頑張って貰って、よりラッチやら何やら減らして貰った方が良いじゃん
0841774ワット発電中さん
垢版 |
2016/10/10(月) 14:18:00.41ID:eSYzpTpi
>>838
例えば>>798 のソースを例にとると、
どんなコメントがありますか? もしかしてボロクソに言っちゃいますか?
僕は見やすいと思うんですけど。
0842774ワット発電中さん
垢版 |
2016/10/10(月) 14:24:04.65ID:Q6I3vfg+
>>838
ある条件でデータをロードしつつイネーブルを立てるなんて時はどうするの?
2つのif文に分けるの?

if(x==A) begin
data<= hoge;
enable<= 1;
end
0844774ワット発電中さん
垢版 |
2016/10/10(月) 18:36:10.58ID:PcSZfyN6
838は自分ルールとしては概ね合理性あるように思うけど
if文でbegin〜end使うなっていうのはちょっと無理があるような
0845774ワット発電中さん
垢版 |
2016/10/10(月) 19:08:22.79ID:eSYzpTpi
if文でbegin〜end使うなっていうのは、マイコンのアセンブラみたい。
次の行を実効するか、1つ飛ばした行を実効するか、みたいな。

実効 → 実行のまちがいです。
0846774ワット発電中さん
垢版 |
2016/10/10(月) 19:19:45.06ID:6IT8b84b
>>844
>if文でbegin〜end使うな
の意味がわからないよな

if(hoge) {
hoge;
}

でいう{ }を使うなって言ってるようなもんだろ
0847774ワット発電中さん
垢版 |
2016/10/10(月) 19:44:06.11ID:DoI5RKN2
>>842
これだと
assign 三項演算子で済んでしまわない?
論理合成が違うんだっけ?
0848774ワット発電中さん
垢版 |
2016/10/11(火) 04:42:00.08ID:03S+S6sS
>begin endは使わない
わいは逆やな。if分岐では必ずbegin endで括る。
case文では可読性重視で削ってるけど。
0849774ワット発電中さん
垢版 |
2016/10/11(火) 11:50:45.12ID:rkzrhgEy
>>842
 まあ例外もあるからどうしてもってときは許可する。
しかしこれのほうがいい。4行が2行だし、紙が節約できる。

  enable <= (x == a);
  data   <= (x == a) ? hoge : data;

always もbeginendはなるべく入れない。
モジュールのinput,outputは2度書きしない。

module oneshot(input clk, reset, pls, output pr_q);

   reg srff; wire cy; reg [3:0] count_q;

   assign pr_q = srff;
   assign cy = (count_q == 4'd10);
  
   always @(posedge clk or posedge reset) 
      if (reset)
         srff <= 0;
      else if (pls | cy)
         srff <= pls & (!cy);
         
   always @(posedge clk or posedge reset) 
      if (reset)
         count_q <= 0;
      else if (srff)
         count_q <= cy ? 0 : count_q + 1;
         
endmodule
0850774ワット発電中さん
垢版 |
2016/10/11(火) 12:06:37.08ID:rkzrhgEy
>>841
 798はちょっと意味わからんのだけど、ワンショット回路なら↑ね。
0851774ワット発電中さん
垢版 |
2016/10/11(火) 12:11:14.96ID:rkzrhgEy
なんで非同期リセットをいれるかというとRTLがきれいになる。非同期リセットを
入れないと、プリミティブのクロックイネーブルを使わない回路になりやすい。
ある寺の場合だけど。
しかたないので非同期リセットを入れてる。W
0852774ワット発電中さん
垢版 |
2016/10/11(火) 12:33:52.34ID:rkzrhgEy
>わいは逆やな。if分岐では必ずbegin endで括る。

いろいろ試してみたがbegin endは煮ても焼いても食えない。
悪いことはいわん、とにかく削除すべし。
0853774ワット発電中さん
垢版 |
2016/10/11(火) 12:40:29.15ID:uySzsvl5
>>849
>  if(reset)
>    srff<=0;

もう1行増えたらどうするの? begin end 使うのですよね?

  if(reset)
    srff<=0;
    dff<=1;
0854774ワット発電中さん
垢版 |
2016/10/11(火) 14:05:11.72ID:rkzrhgEy
  if(reset)
    {srff,dff}<= {0,1};


上の奴もこういう書き方が望ましい。
 if(x==A)
   {enable, data} <= {1, hoge};
0855774ワット発電中さん
垢版 |
2016/10/11(火) 14:13:45.21ID:rkzrhgEy
>もう1行増えたらどうするの? begin end 使うのですよね?

300ページある教科書をみたが、一か所も必要ないな。

それから
独自cpu開発って本400ページあるのをみたがパイプライン処理のところ
1箇所くらいやな。
あとはbegin end 削ったらずいぶん簡単なソースコードになる。
コードが激減する。
0856774ワット発電中さん
垢版 |
2016/10/11(火) 14:45:05.76ID:rkzrhgEy
だから複雑な組み合わせが発生する可能性はもちろんある。その場合はfunction
で書く。
しかし普通の制御はbegin endなんて必要ない。必要な時は下手な回路やと考えて
間違いない。

教科書に一か所もないというのは嘘で、必要なところは一か所もないということ。
例えばシリパラ変換
reg [7:0] ps;
begin
ps <= ps <<1;
ps[0] <= si;
end
こんな風に教科書にはかいてあるが,こんな書き方はまずい。

正しくは
ps <= {ps[6:0] << 1, si};

こうすると意味がはっきりする。
0857774ワット発電中さん
垢版 |
2016/10/11(火) 14:47:35.71ID:rkzrhgEy
もっと分かり易くかくとすると
{ps[7:1],ps[0]} <= {ps[6:0] << 1, si};
0858774ワット発電中さん
垢版 |
2016/10/11(火) 14:55:13.78ID:03S+S6sS
>    {srff,dff}<= {0,1};
こういうの見ただけで儂の頭がバグりそうになる。
0859774ワット発電中さん
垢版 |
2016/10/11(火) 15:18:54.51ID:rkzrhgEy
>858
慣れよ。
ただし、その場合にはbit幅を指定しないとエラーになる。
正しくは

{srff, dff} <= {1'd0, 1'd1};

ちょっと見づらいな。

{srff, dff} <= {low, high};

これなら見やすいが,,,,
0861774ワット発電中さん
垢版 |
2016/10/11(火) 15:37:36.54ID:rkzrhgEy
俺もまだ慣れてないからな。W
0864774ワット発電中さん
垢版 |
2016/10/11(火) 16:10:19.48ID:03S+S6sS
pythonぽいという意味では今風。
そういう書き方にカブレて言語批判を繰り広げるも、
実力が伴わずバグを続出。
0866774ワット発電中さん
垢版 |
2016/10/11(火) 18:01:09.86ID:uySzsvl5
カッコ内に○×をつけてください
( ) begin end を使わないほうが、コンパイル時間が速い
( ) begin end を使う  ほうが、コンパイル時間が速い
( ) begin end を使っても使わなくても、コンパイル時間は変わらない

( ) begin end を使わないほうが、FFの使用量が少ない
( ) begin end を使う  ほうが、FFの使用量が少ない
( ) begin end を使っても使わなくても、FFの使用量は変わらない
0868774ワット発電中さん
垢版 |
2016/10/11(火) 19:10:50.51ID:rkzrhgEy
Python一目見たが好きになれないな。W
どこが似てるのかなーー?

begin endは大きなゴミ。まずは大きなゴミは履いて捨てる。
ゴミの代わりに?とリストを積極的に使うだけだものな。

 assign decode = !ena ? 4'b0000 :
       sel == 0 ? 4'b0001 :
       sel == 1 ? 4'b0010 :
       sel == 2 ? 4'b0100 :
       sel == 3 ? 4'b1000 :
              4'bxxxx ;
 ?のこんな使い方はCライクだと思うが、、、どこがPython?
 
    begin 
      ps <= ps <<1; 
      ps[0] <= si; 
    end 
こんなんより
    ps <= { ps[6:0] << 1, si };

このほうが昔も今もセンスは上だな
0869774ワット発電中さん
垢版 |
2016/10/11(火) 20:35:41.71ID:03S+S6sS
× ps <= { ps[6:0] << 1, si };
○ ps <= { ps[6:0], si };
0870774ワット発電中さん
垢版 |
2016/10/11(火) 22:16:06.01ID:l9D3Os+V
・マイクロ波の危険性 法の外にいる御用学者達
https://www.youtube.com/watch?v=EJluXfJQCuk
・元MI5部員Dr. Barrie Trowerの語る電磁波兵器@
https://www.youtube.com/watch?v=NRoN2Fsci3o
・ニック・ベグジェッチ博士 HAARP 機密科学ハイテク洗脳@
https://www.youtube.com/watch?v=Kpf2iKOtSfg

動画「陰謀論 脳侵略者」
https://vimeo.com/119665215
https://vimeo.com/118485020
https://vimeo.com/119029616

それぞれの動画の加害装置の電磁波の出力が「小さい」と言っている理由について
レーザーに例えると、60Wでプラズマ核融合炉のプラズマを発生させるためにつかっているのに対して、家庭では電球が60W
このギャップに気付かなければならない
誘導放出され、増幅されたマイクロ波を計測するのではなく、メーザーの出力の表示の数字が強さの目安
だから、動画のインタビューに出てくる人達は、「弱い」とか「小さい」という単語を使っていると思われ
0871774ワット発電中さん
垢版 |
2016/10/11(火) 23:12:53.94ID:uySzsvl5
 assign decode = !ena ? 4'b0000 :
       sel == 0 ? 4'b0001 :
       sel == 1 ? 4'b0010 :
       sel == 2 ? 4'b0100 :
       sel == 3 ? 4'b1000 :
バスのアドレスデコーダで、こんな書き方していました
0872774ワット発電中さん
垢版 |
2016/10/11(火) 23:39:53.72ID:DM05OVZL
>>849
紙を節約したいならalwaysもifも改行せずに1行にしたほうがいいんじゃないの?
0874774ワット発電中さん
垢版 |
2016/10/12(水) 01:23:35.50ID:KzFQnxH+
>○ ps <= { ps[6:0], si };

そうか。こうだ!!!
めっちゃ美しい。

ps <= ps <<1;
こんな書き方では最下位ビットはどうなるのかわからん。
<<の演算子はいらないな。どう考えても使い道がない。ゴミ決定。

ifのbegin end,<<,>> 使用禁止
0875774ワット発電中さん
垢版 |
2016/10/12(水) 01:24:05.70ID:KzFQnxH+
>紙を節約したいならalwaysもifも改行せずに1行にしたほうがいいんじゃないの?

alwaysを1行にするのはダメ。
ifを1行にするのはありだとは思う。しかし

always @(posedge clk or posedge reset) 
  if (reset)                  //DFFの非同期リセット
    count_q <= 0;
  else if (srff)               //DFFのクロックエネーブル
    count_q <= cy ? 0 : count_q + 1; //DFFのデータ

RTLをみると上は
count[*].clr =(reset)            //DFFの非同期リセット
count[*].ena =(srff)            //DFFのクロックエネーブル
count[*].d  = cy ? 0 : count[*].q + 1; //DFFのデータ
のように合成される。
ifはenableを意識した書き方だな。
0876774ワット発電中さん
垢版 |
2016/10/12(水) 06:08:52.13ID:APrV9kJg
>>874
> ps <= ps <<1;
> こんな書き方では最下位ビットはどうなるのかわからん。

シフトした残りには0が入るって決められてるから、
分からん訳じゃ無いと思うけど。
0877774ワット発電中さん
垢版 |
2016/10/12(水) 06:10:37.09ID:C5En5uqG
おまえら、VHDL使え。Verilogの緩い文法議論が、くそうぜえ。使ってないから、そういう議論が頭悪いことに気づかないのか
0879774ワット発電中さん
垢版 |
2016/10/12(水) 06:36:12.10ID:Z8kt2vjy
>>876
なんか、色々分かってない感じだよね。
ハードもソフトも。

「僕の考えた最強の書き方」
0880774ワット発電中さん
垢版 |
2016/10/12(水) 07:04:43.82ID:C5En5uqG
>>879
ニッポンから技術者が消えて、馬鹿な豚どもになりつつあるんだよ。だから仕方が無い。
0881774ワット発電中さん
垢版 |
2016/10/12(水) 07:08:13.45ID:C5En5uqG
>>874
ps[7:0] <= { ps[6:0], si };
ps(7 downto 0) <= (ps(6 downto 0) & si );

じゃないとだめ。

ああ、VHDLしばらく触らせてもらえないから忘れてきた。

つうか、大手半導体レイアウト会社でも、VHDLをどうして使うかってわかんないんだな。しっかり、符号演算のためって書いてあげたのに。

ニッポンやバイヨ。
0882774ワット発電中さん
垢版 |
2016/10/12(水) 07:26:02.86ID:GrfPE86B
>しばらく触らせてもらえない
やはりVHDLは廃れますか。
verilogとVHDLの中間ぐらいでいいんだが、
System-verilogに向かうのかねえ。
0883774ワット発電中さん
垢版 |
2016/10/12(水) 07:35:05.20ID:C5En5uqG
>>882
業種による。

アセンブラは廃れるけど、スーパーマリオの重力計算の微分方程式はすごいよ。

最近、オブジェクト指向の「ハードわかんね」というソフトウエアの技術者が、FPGAあたりをかじってマンセーとか、
ニコニコ本社で、「どうだオレサマすごいだろ」とかいうプレゼンをみせられたりして、つまんないというか、めんどくさい。

ぐらいに、廃れはしないと思うよ。
廃れていると思ったら、目線が狭いんだよ
0884774ワット発電中さん
垢版 |
2016/10/12(水) 08:02:12.04ID:KzFQnxH+
>シフトした残りには0が入るって決められてるから、
>分からん訳じゃ無いと思うけど。

つまりps[0]に関していえば、同じalways内で
ps[0] <= 0;
ps[0] <= si;
って2回書くってことだよな。この意味が不明というか、好きじゃない。

この書きかたは好きじゃない。こういう書き方って普通にやるのか?
ps[0] <= a;
ps[0] <= b;
ps[0] <= c;

これと同じなんだろうけど、
ps[0] <= a or b or c;
0885774ワット発電中さん
垢版 |
2016/10/12(水) 08:04:13.54ID:KzFQnxH+
>おまえら、VHDL使え。Verilogの緩い文法議論が、くそうぜえ。使ってないから、そういう議論が頭悪いことに気づかないのか

VHDLはverilogよりもっと糞だということに早く気が付けよ。W
0886774ワット発電中さん
垢版 |
2016/10/12(水) 08:25:37.39ID:GrfPE86B
>>884
orではない。
最後の代入のみが有効。

>意味が不明というか、好きじゃない。
それは同意。
二回以上代入するような書き方はコンパイラは認めても
真面目なレビューなら落とされる。
0887774ワット発電中さん
垢版 |
2016/10/12(水) 08:51:34.42ID:MInAQ2CY
psはffの出力
ps<<1はpsを入力とする組み合わせ回路の出力
<<1がpsのffそのものをシフトするように勘違いしてるように見える
0888774ワット発電中さん
垢版 |
2016/10/12(水) 09:21:58.82ID:H6KHsZ+P
国防省がソフトはAda,ハードはVHDLとして無理強いした。
Adaが糞で、糞から生まれたVHDLは糞の子。
0889774ワット発電中さん
垢版 |
2016/10/12(水) 11:18:39.63ID:+FcNU1ya
ps[0] <= a;
ps[0] <= b;
ps[0] <= c;
これって、エラーで通らないんじゃないですか?
ps[0]俺はどうすりゃいいんだ? となる。

Verilogの柔軟な書き方は歓迎
でも、もう少し厳しい文法チェックが欲しい。
徹夜でもうろうとしているとデバッグが進まないから。
0890774ワット発電中さん
垢版 |
2016/10/12(水) 12:45:24.04ID:KzFQnxH+
>ps<<1はpsを入力とする組み合わせ回路の出力
><<1がpsのffそのものをシフトするように勘違いしてるように見える

組み合わせ回路だけどシフトだろ。

ps <= ps << 1

これは

ps[7].d = ps[6].q;
ps[6].d = ps[5].q;
ps[5].d = ps[4].q;
ps[4].d = ps[3].q;
ps[3].d = ps[2].q;
ps[2].d = ps[1].q;
ps[1].d = ps[0].q;
ps[0].d = 0;

こういう意味だよ。
だから
ps[0].d = si; こいつをもう一度書く。
2重定義でしか入力をセットできない。
0891774ワット発電中さん
垢版 |
2016/10/12(水) 12:46:10.16ID:KzFQnxH+
>これって、エラーで通らないんじゃないですか?

通るんじゃね。それなんとなく見たことあるから。
orじゃないかもしれないが、、、、

もしエラーになるんならひょっとするとディフォールトかな?
count <= 99;
if(a == 3)
count <= count + 1;

これはa != 3の時はcount=99になるだろ。

ps[0].d = 0;じゃなくて
ps[0].d = 未定;
ps[0] <= si; で未定が確定なのかもしれない。
0892774ワット発電中さん
垢版 |
2016/10/12(水) 14:21:30.74ID:cg1IM12S
久しぶりに設計やらないといけなくなったんだけど
昔Model Simってテストベンチかかなくても、GUIで波形成形出来なかったっけ?
0893名無しさん
垢版 |
2016/10/12(水) 15:04:12.25ID:/kKoBx9M
if (test&mode[3:0]==4'b0010)
のコードを見て、verilog死ねと思った
0894774ワット発電中さん
垢版 |
2016/10/12(水) 18:03:22.04ID:qYGEQeZr
ちょくちょく教科書という単語が出てくるけど何の本を指してるの?
0896arisa ◆QaHT6HayjI
垢版 |
2016/10/12(水) 18:12:14.69ID:NOMuf+ZS
verilogで$signed使うと、バグが出て。
VHDLでuse IEEE.std_logic_unsigned.all すると止まるのは、
何とかならないものでしょうか。
0897arisa ◆QaHT6HayjI
垢版 |
2016/10/12(水) 18:13:47.06ID:C5En5uqG
間違った・・・・

verilogで$signed使うと、バグが出て。
VHDLでuse IEEE.std_logic_signed.all すると止まるのは、
何とかならないものでしょうか。
0898774ワット発電中さん
垢版 |
2016/10/12(水) 18:57:27.39ID:6xhXCb4o
ps<<1を利用してpsを左シフトしつつps[0]にsiを代入したいから
always文の中でシーケンシャルな代入文を記述してるってことか

話を勘違いしてた
0899774ワット発電中さん
垢版 |
2016/10/12(水) 20:19:21.64ID:y9GS8u9k
>>897
何書いたか知らんけどverilogの仕様じゃないの?
過去スレで$signedでさわいでたときがあるよ
0900arisa ◆QaHT6HayjI
垢版 |
2016/10/13(木) 05:35:53.77ID:dZW5rAGi
>>899
VHDLでつくったのを戻してビット幅あわせてもおこるんよ。
VHDLで組むと起きないので、verilogの深くて単純な話にはまりそう。なので仕事では諦めた。
これ以上追うのは趣味の世界だし。

全てVHDLで組む信号処理の分野も理解できるし、verilog万歳な気持ちもよくわかる。
verilogがVHDLのように厳密な言語仕様にする別モードがあったら、VHDLいらない。
負の演算があるFIRフィルターを、verilogで組んでくださいとか言われたら切れるね。
できなくはないけど10倍デバックがかかる。
そこがデバック終わって数値演算ライブラリがverilogでできればいいけど、外部コンポーネント参照山のようにして、誰が見ても理解不能コードになることうけあい
面倒くさいから最初からVHDLでかいたほうがいいいやん。

テストベンチは、verilogの方が便利ね。
特にバス調停の決まり切った物。task文とか

verilogが曖昧過ぎて、その曖昧な部分を埋めたシミュレータとか論理合成ツールは偉いと思う。でも、デバックはVHDLじゃないと出来なさそうw
0901774ワット発電中さん
垢版 |
2016/10/13(木) 11:26:42.15ID:i7+FYgaz
>>900
興味あるなー。でも勘違いしてるんじゃない?
曖昧っていったってビット幅は正確に決められるしどんなところが問題なのか、具体的
な例はないの?
「1−1が0にならよ」とか、まさか負のキャリが立たないとかW
verilogで負の演算ができないなんてことはないだろ。W

FIRって知らんが、x/+-が素直に動けばもんだいなくできると思うが、、、W
0902774ワット発電中さん
垢版 |
2016/10/13(木) 12:01:44.40ID:1PGgeP2M
>>900
>負の演算があるFIRフィルターを、verilogで組んでくださいとか言われたら切れるね。
なんでですか?
0903774ワット発電中さん
垢版 |
2016/10/13(木) 12:15:39.05ID:sPFxRlgf
signedは敬遠してるな。機械様には全部符号なしで宣言してる。
符号付き演算だと思ってるのは人間だけで、あとは設計書類とコメントぐらい。
S*Sだと、{S1,R1}*{S2,R2}に分解して、筆算。
R1*R2 -((S1)? R2<<a:0) -((S2)? R1<<b:0) +((S1&S2)? 2^c:0);
あとは、例えば(-128)*(-128)をサポートするならbit幅が1つ余分に要るとか。
signedを使いこなせたらもっと楽になるんだろうけど
我ながら低レベルな記述をしてる。
0904774ワット発電中さん
垢版 |
2016/10/13(木) 12:47:23.77ID:i7+FYgaz
signedだからって関係ないだろ。 でも俺もfloat以外では使うことないな。
0906774ワット発電中さん
垢版 |
2016/10/13(木) 21:53:37.92ID:HgzOp4vD
論理回路設計の勉強をしてるのですが、プロの人達はまず最初にブロック図的なものを書くところから始めるのでしょうか
それとも構想を頭で描きながら記述していくのでしょうか

ブロック図などを書く場合はどういったツールを使用していますか
0909774ワット発電中さん
垢版 |
2016/10/13(木) 22:47:21.08ID:64+HsgyJ
紙とシャーペン
ブロック図を書いたら回路図を書いて
フリップフロップをalways、AND,ORはassignにする。
0910774ワット発電中さん
垢版 |
2016/10/13(木) 23:59:52.10ID:i7+FYgaz
基本設計をしてデバイス選定をする。
Libreoffice Writer を立ち上げてタイトルを書く。日付を入れる。
次に概要を書く
解決すべき問題がないかをリストアップする。
IPなど必要資料をリストアップする。
全体構成を箇条書きする。
タイトル名でプロジェクトディレクトリを作成する。
その下に
ドキュメントディレクトリ
VerilogTopディレクトリを作る。さらにその下にサブプロジェクトのディレクトリ
ツリーを作成する。
あとは漫画を描きながら各モジュールを作成してテストベンチを作成してテストする。
漫画はジェットストリームでノートに書く。完成した漫画はスマフォで撮影して
Evernoteでクラウドに挙げて、Libreofficeのドキュメントに貼り付けていく。
テストベンチのWaveデータもsnippingツールで画像コピーをしてドキュメントに
貼り付けていく。
というようなやり方だな。
0911774ワット発電中さん
垢版 |
2016/10/14(金) 02:40:41.01ID:U+MZJOfy
ジェットストリームって、書きやすいですよね
0912arisa ◆QaHT6HayjI
垢版 |
2016/10/14(金) 05:38:50.68ID:M5fLLkZA
Excelとかパワポとか言い出したら、目立・ル○サス系なのでそいつには気をつけろ!自分のやった領域以外の仕事はできない!
Wordでも書くよといいだしたら、信用できるかもw
Visioが使いやすいんじゃないかなあ。Word/Excel/パワポと描画エンジンはもう同じだけどw
要は、就職先によるだろ。

個人の場合は、描かない。めんどくさいし。

ブロック図で描かないと、設計できない人と。描いてしまうと、設計できなくなる人と。分かれる。

ASIC時代の人は、前者が多い。最近の人は、後者。

でも、両方体験して、どっちもできる賢者になるのをおすすめします。


>>910
在宅Webプログラマっぽい。かっこいい。w

余談というか、愚痴。
この仕事になった10年前あたりから、テストベンチの波形データを貼り付けたままで。満足。
「この信号のこの部分が、xx[ns]になっているから、仕様と一致することを確認した」
と書く意識のない奴ってなんなの。なぜかベテランに多い。
そういう人のverilogは、たいてい怪しくて、はまることが多い。

>>911
わし、ユニボール シグノ 0.5mm
ブロック図で、微妙な濃淡。微妙な太い細いが表現できて、毛筆のようなそのときの気持ちが表現できて気に入ってる。

ジェットストリームは、車の中とかの過酷な環境で使っている、あれいいよね。でもすぐになくす。

そういえば、最近、論理記号の定規をみないな、何処にしまったんだろ・・・
0914774ワット発電中さん
垢版 |
2016/10/14(金) 07:46:30.37ID:M87vCzzy
>>906ですが、みなさんありがとうございました
結局は人それぞれってことみたいですがいろいろと参考になりました
とりあえずジェットストリームが欲しくなりましたw
0915774ワット発電中さん
垢版 |
2016/10/14(金) 12:41:12.51ID:D7c3gZma
遠い地平線が消えて、深々とした夜の闇に心を休めるとき…
0918774ワット発電中さん
垢版 |
2016/10/14(金) 17:07:25.67ID:8geS1lyO
>>809のお世話になった者です
I2Cのパターンを途中まで作ってみたのですが、考え方などあっているでしょうか
DATA[7:0]想定です

reg [4:0] cnt_addr;
reg [6:0] cnt_rate;

wire cnt_enable;
wire cry_addr;

// -- cnt_addr ---------------------------------------- 
always @(posedge clk or negedge reset) begin
   if(reset == 1'b0)
      cnt_addr <= 0;
   else if(start_trigger == 1'b1)
      cnt_addr <= 8;
   else if(cnt_addr > 0)
      if(cry_addr == 1'b1)
         cnt_addr <= cnt_addr - 1;
      else
         cnt_addr <= cnt_addr;
   else
      cnt_addr <= 0;
end

assign cnt_enable = (cnt_addr > 0) ? 1'b1 : 1'b0;

// -- cnt_rate ---------------------------------------- 
always @(posedge clk or negedge reset) begin
   if(reset == 1'b0)
      cnt_rate <= 0;
   else if(cnt_enable == 1'b1)
      if(cry_addr == 1'b1)
         cnt_rate <= 0;
      else
         cnt_rate <= cnt_rate + 1;
   else
      cnt_rate <= 0;
end

assign cry_addr = (cnt_rate == 99) ? 1'b1 : 1'b0;
0919774ワット発電中さん
垢版 |
2016/10/14(金) 17:08:41.13ID:8geS1lyO
scl/scl_o、sda/sda_oがあるのはどうしたほうがいいのかよくわからなくなり
とりあえず試しているところです。。

// -- scl ------------------------------------------- 
assign scl = out_scl(cnt_enable,cnt_addr,cnt_rate);

function out_scl;
   input en;
   input [4:0] addr;
   input [6:0] cnt;

   begin
      if(en == 1'b1)
         if(cnt < 50)
            out_scl = 1'b1;
         else
            out_scl = 1'b0;
      else
         out_scl = 1'b0;
   end
endfunction

// -- scl_o ------------------------------------------- 
always @(posedge clk or negedge reset) begin
   if(reset == 1'b0)
      scl_o <= 1'b0;
   else if(cnt_enable == 1'b1)
      if(cnt_rate < 50)
         scl_o <= 1'b1;
      else
         scl_o <= 1'b0;
   else
      scl_o <= 1'b0;
end
0920774ワット発電中さん
垢版 |
2016/10/14(金) 17:09:02.30ID:8geS1lyO
reg [7:0] rom_sda = 8'b10110111;

// -- sda ------------------------------------------- 
assign sda = out_sda(cnt_enable,cnt_addr,rom_sda);

function out_sda;
   input en;
   input [4:0] addr;
   input [7:0] rom_data;

   begin
      if(en == 1'b1)
         out_sda = rom_data[addr - 1];
      else
         out_sda = 1'b0;
   end
endfunction

// -- sda_o ------------------------------------------- 
always @(posedge clk or negedge reset) begin
   if(reset == 1'b0)
      sda_o <= 1'b0;
   else if(cnt_enable == 1'b1)
      sda_o <= rom_sda[cnt_addr - 1];
   else
      sda_o <= 1'b0;
end
0921774ワット発電中さん
垢版 |
2016/10/14(金) 18:01:19.25ID:TNvPoqxe
簡単でも仕様を書く(目標を定める)
○ i2cマスタっぽい何かを作りたい
○ clkは何MHz SCLはその1/50
○ SCL↓とSDAの位相をずらさない
○ SCLもSDAもデフォルトLで構わない
○ スレーブアドレスは渡さない
○ r/wも渡さない
○ アクノリッジも見ない
○ データの8bitだけ渡す
○ シングルスレーブ、書き込みのみ
○ SDAはオープンドレインにしない

文法的にはアレだな。かわいそうだけど
begin~else否定派が生まれちゃったな。
resetは負論理ならxでもnでもpreでもsufでも付けましょう。
0922774ワット発電中さん
垢版 |
2016/10/14(金) 18:09:06.55ID:eJCe6+VN
なかなか筋がいい。綺麗だね。
しかし921がいうように仕様をきめること。
それからステートマシンでプロトコルを書くのが先だな。

スタート待ち
アドレス検出、もし不一致ならストップへ
アック検出
、、、、、、
ストップ
みたいな感じでステートマシンを書く
0923774ワット発電中さん
垢版 |
2016/10/14(金) 19:03:34.03ID:M87vCzzy
>>921>>922
ありがとうございます
いろいろと至らない点がありすみません
指摘頂いたこと以後注意します

今はまだ考え方がふわふわしてて記述に自信が持てません
一応シミュレーションだけはかけていますが。。

begin〜endは自分も全部付けて複数行かくスタイルでやってましたが、ここ最近のスレのやりとりでちょっと見直してみました

考え方が問題なければ、スタート/ストップコンディション、ACK含めステートマシン的な考え方で出来ればと思ってます
0924arisa ◆QaHT6HayjI
垢版 |
2016/10/14(金) 19:13:10.80ID:0y15DUWZ
うーん、opencore.orgのI2C masterを登録してダウンしてみるといいと思う。
今見たらメンテナンス中ってでるけど。
0925774ワット発電中さん
垢版 |
2016/10/14(金) 21:13:05.87ID:M87vCzzy
>>924
ありがとうございます
調べてみます

I2C自体が別に目的ではないんですが、今はいろんな手法を学べればと思ってるのでいろいろ指摘して頂けるとありがたいです
0927774ワット発電中さん
垢版 |
2016/10/14(金) 21:29:27.23ID:TNvPoqxe
次のような記法は好きでない。(cnt_adrが0の時とかね)
rom_sda[cnt_addr - 1]

scl/sdaを組み合わせ回路で組んでいるが、
外部とやり取りする部分は基本FFにする。
0929774ワット発電中さん
垢版 |
2016/10/14(金) 21:38:31.90ID:TNvPoqxe
そういえば、alteraだったかのライブラリで
reg <= 1'bz
という記述があって驚いた。
実際に(FPGAで)合成可能で二度驚いた。
0930774ワット発電中さん
垢版 |
2016/10/14(金) 22:27:22.24ID:M87vCzzy
>>926
すみません
最終的にはトライステート出力にするつもりです

>>927
そうですよね。。
scl_o/scl_oのほうはそのつもりでやってみたのですが、cnt_addrの立ち上がりから1クロックずれるのでどうしたらいいのかと。。根本的な見直しが必要ですかね
0932arisa ◆QaHT6HayjI
垢版 |
2016/10/15(土) 02:28:48.45ID:RFC1SU7U
>>929
FPGAでもASICでも、CMOS FET のゲート電圧を、ドレインーソース間が貫通しないようにすれば、ハイインピーダンスになるんだから、
何で驚くのかそっちの方が疑問。
0933774ワット発電中さん
垢版 |
2016/10/15(土) 07:44:10.02ID:RV4MTfqG
そりゃFFにzを保持できる訳がないという先入観があったからな。
代入される信号もI/Oに繋がっていないと駄目だし、
合成結果も1/0を保持するFFと、open/driveを制御するFFの二つが
出力される。ASICしかしてない時は想像もしてなかった。
0934774ワット発電中さん
垢版 |
2016/10/15(土) 10:35:18.28ID:HFltrKTw
reg [7:0] rom_sda = 8'b10110111;
   sda_o <= rom_sda[cnt_addr - 1];
へー、こういうアクセスってできるんだ。初めて知った。テストベンチなら使い
そうだがロジックでは使ったことがないな。どういう風に合成されるんだろ。
セレクタになるんだろうなきっと。この書き方気に入った。Goodだよ。

>最終的にはトライステート出力にするつもりです

スタート
アドレス
RW選択
アック待ち ここは入力に切り替えてトライステートにしないといけないから、最初
から考えておかないと。

受信はクロックストレッチというのがあって、要するにマスターはHにしてもスレーブがL
にしたままだとSCLがHにならない。
マスターはトライステートにしてSCLがHになるのを確認してから次のSCLをLにする。
ここはI2Cの肝だから、、、
0935774ワット発電中さん
垢版 |
2016/10/15(土) 11:13:17.23ID:T0D5lwKY
>>932, 933
コンパイラで1か0に置き換えられているんじゃないの?もしくはORで合成されるとか。
本当にHi-Zにできたらタイミング解析が無駄に複雑になるだけでメリットないような気がする。
0939774ワット発電中さん
垢版 |
2016/10/16(日) 00:11:12.50ID:p8eBhC7/
reg [7:0] decode[7:0]
= '{
8'b00000001,
8'b00000010,
8'b00000100,
8'b00001000,
8'b00010000,
8'b00100000,
8'b01000000,
8'b10000000
};
こういうのもできるから美しいデコーダができそうと喜んだが、できるのはSystemVerilog
だけのようだね。
これだけのためにコンパイラをSystemVerilogにすると何か問題あるだろうか?
0941774ワット発電中さん
垢版 |
2016/10/16(日) 01:44:31.79ID:MpNji2nG
reg [7:0] decode[7:0]
ではなくて
reg [7:0] decode[0:7]じゃなかったっけ?
0942774ワット発電中さん
垢版 |
2016/10/16(日) 07:55:03.04ID:p8eBhC7/
文法的にはどっちでもいいと思うよ。アクセスの順番が違うだけ。
上の例だと decode[0] が128,decode[7]が1
上を0にする方がわかりやすいから[0:7]が一般的なんだろう。
ってこっちのつもりだった。W
0944774ワット発電中さん
垢版 |
2016/10/16(日) 08:33:29.38ID:GC2K+fku
>>939
なんでこんなverilogでできるやんググレカスレベルなことを恥ずかしくもなく聞いてくるんだよ
0949774ワット発電中さん
垢版 |
2016/10/16(日) 15:16:43.76ID:p8eBhC7/
>943
Prime
記述はまともだとおもうがな。コンパイラが通るから。テストはそのうち
してみるが、今2chで忙しい。
0951774ワット発電中さん
垢版 |
2016/10/17(月) 23:05:58.78ID:O4bfrZzA
カウンターやらシフトレジスタやらロムやら教科書に出てくるようなもん一通り出来たら、何作ればいいかな
会社に入ったら練習させられる課題とかありますか?
0952774ワット発電中さん
垢版 |
2016/10/18(火) 00:27:14.78ID:Q6rSTMVy
UARTはどうだい?
とりあえず受信したデータをエコーバックするだけ
0954774ワット発電中さん
垢版 |
2016/10/18(火) 11:13:25.29ID:Jw2REV+E
module counter(clk,out)

input clk;
output out;

reg [3:0] out;

always@(posedge clk)begin

if(out==4'b1111)
out<=4'b0000;
else
out<=out+1;

end
endmodule

リセット入力無しの4進カウンタ作ろうと思って書いたんですが何度シミュやってもoutが不定出すんです
問題点あったら教えてもらいたいです
0956774ワット発電中さん
垢版 |
2016/10/18(火) 11:52:54.74ID:ep8pCCN6
電源投入直後のレジスタは製造バラつき・温度・電源電圧カーブ・
クロックグリッチ・電磁波・粒子線・量子力学効果その他の影響により、
一般には不定です。
0957774ワット発電中さん
垢版 |
2016/10/18(火) 12:09:20.11ID:Jw2REV+E
>>955

//テストベンチ
module counter_test;

reg clk;
wire out;

parameter STEP=100;

counter uut (
.clk(clk),
.out(out) );

initial begin
clk=0;
end

always@ #(STEP/2)
clk=~clk;

endmodule

こんな感じに出てしまうんですが何が悪いんでしょうか
http://i.imgur.com/nUnNtSQ.png
0958774ワット発電中さん
垢版 |
2016/10/18(火) 12:10:01.66ID:Aj8H3TFE
それをどうやって初期化するかが考えどころだな。
でもな、必死で考えてリセット無しでsim通すことができるようにできても
実際のデバイスには全部リセットが入ってるからな。W
0959774ワット発電中さん
垢版 |
2016/10/18(火) 12:16:30.91ID:Aj8H3TFE
Last Modified: January 13, 2012
Version Found: v11.1Type: Errata
Simulation Fails with NativeLink
Description
When you use the NativeLink to run EDA RTL simulations for Verilog top-level file, the simulation fails and displays the following error message:
#**Error: (vlog-7) Failed to open design unit file ?test.vo? in read mode. # No such file or directory. (errno= ENOENT)

Workaround/Fix
On the Simulation page, under EDA Netlist Writer settings, set Format for output netlist to VHDL. Then, replace the following codes of the generated <variation>.v file to a single-line code before running the NativeLink simulation.

このエラッタ知ってる?
いまでも発生するんだよな。さっきまで何の問題もなくsimできてたのに最後の最後
でtopのデバッグをやろうと始めたらエラーがでる。
いくら頑張っても#**Error: (vlog-7) Failed to open が出る。でwebを探したら
これだよ。 VHDLなら問題なくOK。W
こっちはVerilogなのにVHDLでネット出せってよ。
クッソ腹立つ。
しかし考えても、腹立てても無駄。おとなしく従うほかない。
0960774ワット発電中さん
垢版 |
2016/10/18(火) 12:17:26.43ID:f+QowtL/
verilogなら外部から強制的に値を入力できるから、シミュレーション上動作させることは可能じゃね?
0962774ワット発電中さん
垢版 |
2016/10/18(火) 12:40:03.59ID:6mMvi04/
>>957
テストベンチのwireを[3:0]にすればいいよ
0964774ワット発電中さん
垢版 |
2016/10/18(火) 13:32:01.11ID:Aj8H3TFE
モデルシムではイニシャルが入らないと無理だな。
0965774ワット発電中さん
垢版 |
2016/10/18(火) 14:03:21.36ID:Aj8H3TFE
これならOK リセットなしでも動く

module poweron_reset(input clk, output reset_out);
//1.3msec reset width at 48Mhz

reg [15:0] count_q = 0;
reg res = 0;

assign reset_out = ~res;
always @(posedge clk)
if (count_q != 16'd10)//$1. for test only, Chage to 16'hffff after test.
{ count_q} <= { count_q + 1};
else
{res, count_q} <= {1'd1, count_q};
endmodule
0967774ワット発電中さん
垢版 |
2016/10/18(火) 16:08:14.02ID:Jw2REV+E
テストベンチの
output→output wire [3:0]out
にしたら不定のままで
outputをwire→regにして
initial out=0;
を足したら今度はout=0をずっと出すようになりました
う〜ん
0968774ワット発電中さん
垢版 |
2016/10/18(火) 16:39:31.31ID:b1VviC2x
>>935
AlteraとXilinxのツールは外部端子に接続されている信号ならトライステートバッファ付きに置き換えてくれるよ。

チップ内の信号は…やらんから分からん
0969774ワット発電中さん
垢版 |
2016/10/18(火) 23:14:23.72ID:Aj8H3TFE
おれも不定に困ってめんどくさいから全部リセットを入れて問題なくsimできて喜んだ
のも束の間、最後に「あれ、poweron_resetどうやんの?」
ってことになって焦って作ったのが上。Primeなら問題なく動いてる。W
テストベンチはこれ
`timescale 1 ns/ 1 ps
module poweron_reset_vlg_tst();
parameter CYC = 50; //50nsec
reg clk;
wire reset_out;
poweron_reset i1 (
.clk(clk),
.reset_out(reset_out)
);
initial
begin
#(0) clk = 1'b1;
#(CYC*100) ;
$stop;
end
always #(CYC/2) clk = ~clk; // clock
endmodule
0970774ワット発電中さん
垢版 |
2016/10/18(火) 23:19:46.42ID:Aj8H3TFE
パワーオンリセットとかどうやってやってるんだろ。PLLのロック信号とか?
PLL使わないときはどうすんの?
 「どうせボード作るのは俺じゃないし、めんどくさいから外部リセットIC追加」
とか?
0971774ワット発電中さん
垢版 |
2016/10/19(水) 04:09:46.31ID:xKIW9tHy
PLLがないチップなら別だけど、そうでないなら(リセット専用に)PLL使えばいいだけ
分からならなおさら
0972arisa ◆QaHT6HayjI
垢版 |
2016/10/19(水) 07:28:04.25ID:WXCUTXeQ
CR遅延回路、とかいても。

コンデンサってなんですか?

抵抗ってなんですか?

どうして遅延できるんですか?

とか質問されそう。
0973774ワット発電中さん
垢版 |
2016/10/19(水) 11:49:13.96ID:AL4HUdWZ
>>951
CPU
0974774ワット発電中さん
垢版 |
2016/10/19(水) 15:15:22.34ID:7FziahEk
合成制約の勉強
複雑な演算(例えば32bit*32bit*32bit)を書いて、周波数を確認
パイプラインという概念の理解
あんまり使わないけど除算回路とかを記述してみる
テストログを出力し、(他の言語で)自動チェック
テスト項目の列挙
わざと間違えた回路を書きエラー検出

ラッチ記述や循環参照を一度合成してみる
合成結果・ログの確認

自分なりにコーディングルールを作ってみる。それを変えてみる(客>自社>マイルール)
0975774ワット発電中さん
垢版 |
2016/10/19(水) 18:38:26.91ID:KZz2FIuG
PLLのリセット用の使い方詳しく教えて頂けないでしょうか
0976774ワット発電中さん
垢版 |
2016/10/19(水) 19:02:47.95ID:f7iyAddM
PLLは発信機だから、安定するまでに時間がかかる。1msecくらいかな?
安定すると「安定いたしました。クロックを使ってもいいです」って
知らせる信号がHになる。これをPLLロック信号という。PLLが安定したら
回路を動かしてもいいので、このロック信号をリセット解除にするという
のがPLLのロック信号をリセットに使うということですy。
0977774ワット発電中さん
垢版 |
2016/10/19(水) 19:07:45.88ID:7FziahEk
input clk, locked;
output reset ;//1-active

reg [1:0] locked_d;

always@(posedge clk or negedge locked) begin
 if(locked == 1'b0)
  locked_d <= 2'b00;
 else
  locked_d <= {locked_d[0], locked};
end

assign reset = ~locked_d[1];
0978774ワット発電中さん
垢版 |
2016/10/19(水) 19:41:18.71ID:KZz2FIuG
>>976-977
丁寧な説明ありがとうございます
PON〜コンフィングレーション後の挙動がいまいちよくわかっていないのですが、調べて参考にさせて頂きます
0979774ワット発電中さん
垢版 |
2016/10/19(水) 21:50:31.52ID:laexxhVf
>>976
便乗ですが、PLLをRESETのためだけに使って、CLOCK出力を未使用にすると、
Warningが出ないでしょうか?
0981774ワット発電中さん
垢版 |
2016/10/19(水) 22:10:56.09ID:Op/cxxrm
変ではないよ
非同期信号をD-FFのリセットとデータに入力してクロック乗せ換えをする方法
0982774ワット発電中さん
垢版 |
2016/10/19(水) 22:26:56.19ID:TyHAIg4P
negedgeをどのタイミングでとらえるの?ってことじゃ

センシティビティリストにいらないんじゃね?じゃないの?違うか
0983774ワット発電中さん
垢版 |
2016/10/19(水) 23:31:39.73ID:7FziahEk
locked信号がHになる時、内部のクロックが動き始めた後か?
既に動き始めていることが保障されている→非同期で無くてもよい
ちょっとわからない→非同期で受ける

何故FFで受ける?
完全非同期だと、あるFF群はまだリセットが効いているのに、あるFF群は
動き出してるというケースがあり得る。(実際に不具合が出たと言う話も聞く)
そして、非同期リセットでも解除タイミングは同期化したいという要求が生まれる。
で、同期化の為にFF受けすんだけど、clockに関わらず伝搬させるには非同期で
つまり、〜edgeにする必要がある。

FPGA内臓のPLLは大概locked信号も(PLL自身のクロックで)同期化されてるはずなんだが、
ベンダーがそう言ってるで終わらせず、明示的に書くことも多い。
ASICの場合、こういう細工はSCANモードとの絡みがあるが、実務では先輩が
対策してるだろう。たぶんね。
0984774ワット発電中さん
垢版 |
2016/10/19(水) 23:38:18.22ID:7FziahEk
ちなみに非同期リセットのアサートは、実を言うとエッジじゃなくてレベル。
実デバイスでは時間0から有効だとしてもちゃんと効く。VHDLなんかもレベルで書く。
しかし、verilogのセンシティビティリストでは伝統的に〜edgeと書かれている。
Simでは実際にedgeがないとリセットされなかったり。
0985774ワット発電中さん
垢版 |
2016/10/19(水) 23:53:04.19ID:xKIW9tHy
always@(posedge clk or locked) って書くと
if文の else のほうは (locked != 1'b0)って解釈するほうが自然って
話になるかも
まあ、元々else のほうを暗黙で if(clk == 1'b1) って解釈するのが
強引なんだけど
0986774ワット発電中さん
垢版 |
2016/10/19(水) 23:57:30.80ID:7FziahEk
lockedにedgeが無いと、Simでlockedが立ち上がった時にも
文が実行されちゃう。
0987774ワット発電中さん
垢版 |
2016/10/20(木) 00:15:40.83ID:gs2gxDBW
適当だけど、こんなんはいけないの?


input clk, locked;
output reset ;//1-active

reg locked_d = 1'b1;

always@(posedge clk) begin
  locked_d <= locked;
end

assign reset = ~locked;
0988名無しさん
垢版 |
2016/10/20(木) 00:26:38.13ID:8EyTARlq
クロックが安定していない。

って、かいてなかったっけ?君アスペ?
0989774ワット発電中さん
垢版 |
2016/10/20(木) 08:20:01.50ID:yf8IlF0Q
例えばこんな時
vim>wave zoom range 1000 2000

simulationはpsでやってるがTCLで制御したいときに1000000て入れるのは面倒なので制御単位
をnsecにしたいんだがどうやるの?
0992774ワット発電中さん
垢版 |
2016/10/20(木) 15:11:13.03ID:wnyLsRWX
>>977
二段にせんと駄目ってこと?
0993774ワット発電中さん
垢版 |
2016/10/20(木) 15:43:58.15ID:slxaj7BY
assign reset = ~locked_d[1];
としてるから、
非同期リセット信号として使われる事を想定しての、メタス対策だろ
なら、普通にこうするよ

この程度、ケチった処でタカが知れてるし
0997774ワット発電中さん
垢版 |
2016/10/21(金) 02:28:26.31ID:L/X71M9Y
998
1000arisa ◆QaHT6HayjI
垢版 |
2016/10/21(金) 11:39:03.96ID:KzOpsY4l
VHDLでおっぱいを信号処理したい。MATLABじゃなくてscilabで
1000なら叶う!!!!
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 959日 19時間 2分 2秒
10021002
垢版 |
Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
http://pink-chan-store.myshopify.com/
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況