forked from Qortal/Brooklyn
79 lines
2.6 KiB
Systemverilog
79 lines
2.6 KiB
Systemverilog
//-----------------------------------------------------------------------------
|
|
// The confidential and proprietary information contained in this file may
|
|
// only be used by a person authorised under and to the extent permitted
|
|
// by a subsisting licensing agreement from ARM Limited or its affiliates.
|
|
//
|
|
// (C) COPYRIGHT 2015-2020 ARM Limited or its affiliates.
|
|
// ALL RIGHTS RESERVED
|
|
//
|
|
// This entire notice must be reproduced on all copies of this file
|
|
// and copies of this file may only be made by a person if such person is
|
|
// permitted to do so under the terms of a subsisting license agreement
|
|
// from ARM Limited or its affiliates.
|
|
//
|
|
// Release Information : HERCULESAE-MP106-r0p1-00eac0
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
// SystemVerilog (IEEE Std 1800-2012)
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
`include "herculesae_header.sv"
|
|
|
|
|
|
module herculesae_vx_sha1
|
|
(
|
|
|
|
|
|
input wire sha1h_v1_i,
|
|
input wire sha1su0_v1_i,
|
|
input wire sha1su1_v1_i,
|
|
input wire [31:0] sha1h_qn,
|
|
input wire [127:0] sha1su0_qd,
|
|
input wire [127:0] sha1su1_qd,
|
|
input wire [127:0] sha1su1_qn,
|
|
|
|
output wire [127:0] sha1_v1_o
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wire [31:0] sha1h_v1;
|
|
wire [63:0] sha1su0_opa_v1;
|
|
wire [127:0] sha1su0_opb_v1;
|
|
wire [127:0] sha1su0_opc_v1;
|
|
wire [127:0] sha1su0_v1;
|
|
wire [127:0] sha1su1_v1;
|
|
wire [127:0] t;
|
|
|
|
assign sha1h_v1[31:0] = {sha1h_qn[1:0], sha1h_qn[31:2]};
|
|
|
|
assign sha1su0_opa_v1[63:0] = sha1su1_qn[63:0];
|
|
assign sha1su0_opb_v1[127:0] = sha1su1_qd[127:0];
|
|
assign sha1su0_opc_v1[127:0] = sha1su0_qd[127:0];
|
|
|
|
assign sha1su0_v1 [127:0] = sha1su0_opc_v1[127:0]
|
|
^ {sha1su0_opa_v1[63:0], sha1su0_opc_v1[127:64]}
|
|
^ sha1su0_opb_v1[127:0];
|
|
assign t[127:0] = sha1su1_qd[127:0] ^ {{32{1'b0}}, sha1su1_qn[127:32]};
|
|
assign sha1su1_v1[127:96] = {t[126:96], t[127]} ^ {t[29:0], t[31:30]};
|
|
assign sha1su1_v1[95:64] = {t[94:64], t[95]};
|
|
assign sha1su1_v1[63:32] = {t[62:32], t[63]};
|
|
assign sha1su1_v1[31:0] = {t[30:0], t[31]};
|
|
|
|
assign sha1_v1_o[127:0] = {128{sha1su0_v1_i}} & sha1su0_v1[127:0] |
|
|
{128{sha1su1_v1_i}} & sha1su1_v1[127:0] |
|
|
{128{sha1h_v1_i}} & {{96{1'b0}}, sha1h_v1[31:0]};
|
|
endmodule
|
|
|
|
|
|
`define HERCULESAE_UNDEFINE
|
|
`include "herculesae_header.sv"
|
|
`undef HERCULESAE_UNDEFINE
|