Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
// Copyright 2019- RSD contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
import BasicTypes::*;
module ResetController #(
parameter CYCLE_OF_RESET_SEQUENCE = 10000
)(
input logic clk, rstTrigger, locked,
output logic rst, rstStart
);
logic unsigned [ $clog2(CYCLE_OF_RESET_SEQUENCE):0 ] count;
always_ff @(posedge clk or posedge rstTrigger) begin
// --- rst
// - rstTriggerがアサートされた後、
// CYCLE_OF_RESET_SEQUENCEサイクルの間アサートされ続ける
if ( rstTrigger || !locked ) begin
count <= 0;
rst <= TRUE;
end
else if ( rst ) begin
count <= count + 1;
rst <= ( count >= CYCLE_OF_RESET_SEQUENCE ? FALSE : TRUE );
end
else begin
count <= 0;
rst <= FALSE;
end
end
// --- rstStart
// - リセットの開始時に1サイクルだけアサートされる信号線。
// RAMなどを初期化する回路は、
// リセット信号がアサートされている間(CYCLE_OF_RESET_SEQUENCEサイクル)駆動するが、
// その初期化回路もリセットを行う必要がある。
// 初期化回路はrstがアサートされている間動くので、
// rstをリセット信号としては使用できない。
// そこで、初期化回路のリセットにはrstStartを用いる。
always_comb begin
rstStart = ( rst && count == 0 ) ? TRUE : FALSE;
end
endmodule
7b65f6ba0This file is pinned to the selected release. Download the original to open it in your design tool.