|
|
|
@ -14,17 +14,17 @@
|
|
|
|
|
// necessary for implementation of the Work that are available from OpenPOWER
|
|
|
|
|
// via the Power ISA End User License Agreement (EULA) are explicitly excluded
|
|
|
|
|
// hereunder, and may be obtained from OpenPOWER under the terms and conditions
|
|
|
|
|
// of the EULA.
|
|
|
|
|
// of the EULA.
|
|
|
|
|
//
|
|
|
|
|
// Unless required by applicable law or agreed to in writing, the reference design
|
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
|
|
|
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
|
|
|
|
|
// for the specific language governing permissions and limitations under the License.
|
|
|
|
|
//
|
|
|
|
|
//
|
|
|
|
|
// Additional rights, including the ability to physically implement a softcore that
|
|
|
|
|
// is compliant with the required sections of the Power ISA Specification, are
|
|
|
|
|
// available at no cost under the terms of the OpenPOWER Power ISA EULA, which can be
|
|
|
|
|
// obtained (along with the Power ISA) here: https://openpowerfoundation.org.
|
|
|
|
|
// obtained (along with the Power ISA) here: https://openpowerfoundation.org.
|
|
|
|
|
|
|
|
|
|
`timescale 1 ns / 1 ns
|
|
|
|
|
|
|
|
|
@ -77,53 +77,28 @@ module tri_regk(
|
|
|
|
|
output [OFFSET:OFFSET+WIDTH-1] dout;
|
|
|
|
|
|
|
|
|
|
parameter [0:WIDTH-1] init_v = INIT;
|
|
|
|
|
parameter [0:WIDTH-1] ZEROS = {WIDTH{1'b0}};
|
|
|
|
|
|
|
|
|
|
// tri_regk
|
|
|
|
|
|
|
|
|
|
generate
|
|
|
|
|
begin
|
|
|
|
|
|
|
|
|
|
wire sreset;
|
|
|
|
|
wire [0:WIDTH-1] int_din;
|
|
|
|
|
reg [0:WIDTH-1] int_dout;
|
|
|
|
|
wire [0:WIDTH-1] vact;
|
|
|
|
|
wire [0:WIDTH-1] vact_b;
|
|
|
|
|
wire [0:WIDTH-1] vsreset;
|
|
|
|
|
wire [0:WIDTH-1] vsreset_b;
|
|
|
|
|
wire [0:WIDTH-1] vthold;
|
|
|
|
|
wire [0:WIDTH-1] vthold_b;
|
|
|
|
|
(* analysis_not_referenced="true" *)
|
|
|
|
|
wire unused;
|
|
|
|
|
|
|
|
|
|
if (NEEDS_SRESET == 1)
|
|
|
|
|
begin : rst
|
|
|
|
|
assign sreset = nclk[1];
|
|
|
|
|
end
|
|
|
|
|
if (NEEDS_SRESET != 1)
|
|
|
|
|
begin : no_rst
|
|
|
|
|
assign sreset = 1'b0;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
assign vsreset = {WIDTH{sreset}};
|
|
|
|
|
assign vsreset_b = {WIDTH{~sreset}};
|
|
|
|
|
assign int_din = (vsreset_b & din) | (vsreset & init_v);
|
|
|
|
|
assign sreset = (NEEDS_SRESET == 1) ? nclk[1] : 0;
|
|
|
|
|
|
|
|
|
|
assign vact = {WIDTH{act | force_t}};
|
|
|
|
|
assign vact_b = {WIDTH{~(act | force_t)}};
|
|
|
|
|
|
|
|
|
|
assign vthold_b = {WIDTH{thold_b}};
|
|
|
|
|
assign vthold = {WIDTH{~thold_b}};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
always @(posedge nclk[0])
|
|
|
|
|
begin: l
|
|
|
|
|
int_dout <= (((vact & vthold_b) | vsreset) & int_din) | (((vact_b | vthold) & vsreset_b) & int_dout);
|
|
|
|
|
always @(posedge nclk[0]) begin: l
|
|
|
|
|
if (sreset)
|
|
|
|
|
int_dout <= init_v;
|
|
|
|
|
else if (act & thold_b)
|
|
|
|
|
int_dout <= din;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
assign dout = int_dout;
|
|
|
|
|
|
|
|
|
|
assign scout = ZEROS;
|
|
|
|
|
assign scout = {WIDTH{1'b0}};
|
|
|
|
|
|
|
|
|
|
assign unused = | {vd, gd, nclk, d_mode, sg, delay_lclkr, mpw1_b, mpw2_b, scin};
|
|
|
|
|
end
|
|
|
|
|
assign unused = | {vd, gd, nclk, d_mode, sg, delay_lclkr, mpw1_b, mpw2_b, scin} | (|nclk[2:`NCLK_WIDTH-1]) | ((NEEDS_SRESET == 1) ? 0 : nclk[1]);
|
|
|
|
|
endgenerate
|
|
|
|
|
|
|
|
|
|
endmodule
|
|
|
|
|