リセット回路

同期でやってたけど非同期にしてみる。

input nRST;
input CLK;
input a;
reg rg;

always @(posedge CLK or negedge nRST) begin
if(!nRST) rg <= 0;
else rg <= a;
end

的な感じか。

ただ非同期だとメタステーブルという問題が起きるらしい。
下のPDFで一応原理が分かる
http://www.cqpub.co.jp/dwm/contents/0046/dwm004601190.pdf(注PDF)

大本のRST信号を同期して解除してやると良いらしい。

とまぁ非同期リセットのことを書いたけど調べてみると同期リセットの方がxilinxでは回路規模が小さくなったりしてXilinxの推奨だったするらしい。同期だとクロック安定するまで不安な気がするけどそこら辺はどうなんだろう?
いっそのことクロック安定まで外部にローパスフィルタでも作ってクロックイネーブルでも作ってやれば良いのか?
リセットは奥が深いなぁ。