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/
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なら叶う!!!!
レス数が1000を超えています。これ以上書き込みはできません。

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