リセットボタンを表すデジタル入力を備えたCPLDがあります。リセットボタンを押すと、信号がハイになります。私がする必要があるのは、ボタンが押されたことがあるかどうかを示す値を持つレジスターを用意することです。基本的にはラッチです。ボタンがハイになると、ラッチレジスタがハイになり、永久にハイのままになります。
これは簡単だと思いましたが、コード化しようとするとたくさんの警告が表示されました。小さなグーグルは「HDLでラッチを作らないでください!悪い習慣です!」と示しましたが、私はここで代替案を実際には見ていません。
これが私の試みです。clk_10mは高速の自走時計で、pwr_off_reqはボタン入力です。
reg pwr_off_req_latched = 0;
always @ (clk_10m or pwr_off_req) begin
if (pwr_off_req == 1'b1)
pwr_off_req_latched <= 1'b1;
else
pwr_off_req_latched <= pwr_off_req_latched;
// I tried this to make sure it's always set to something
end