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/
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を超えています。これ以上書き込みはできません。

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