forked from Qortal/Brooklyn
159 lines
6.0 KiB
Systemverilog
159 lines
6.0 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_aese1
|
|
(
|
|
|
|
|
|
input wire [127:0] q,
|
|
|
|
output wire [127:0] aese_out,
|
|
output wire [15:0] aese_shf
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wire [127:0] aese_noshf;
|
|
wire [7:0] s00;
|
|
wire [7:0] s01;
|
|
wire [7:0] s02;
|
|
wire [7:0] s03;
|
|
wire [7:0] s10;
|
|
wire [7:0] s11;
|
|
wire [7:0] s12;
|
|
wire [7:0] s13;
|
|
wire [7:0] s20;
|
|
wire [7:0] s21;
|
|
wire [7:0] s22;
|
|
wire [7:0] s23;
|
|
wire [7:0] s30;
|
|
wire [7:0] s31;
|
|
wire [7:0] s32;
|
|
wire [7:0] s33;
|
|
|
|
|
|
|
|
assign s33[7:0] = q[127:120];
|
|
assign s23[7:0] = q[119:112];
|
|
assign s13[7:0] = q[111:104];
|
|
assign s03[7:0] = q[103:96];
|
|
|
|
assign s32[7:0] = q[95:88];
|
|
assign s22[7:0] = q[87:80];
|
|
assign s12[7:0] = q[79:72];
|
|
assign s02[7:0] = q[71:64];
|
|
|
|
assign s31[7:0] = q[63:56];
|
|
assign s21[7:0] = q[55:48];
|
|
assign s11[7:0] = q[47:40];
|
|
assign s01[7:0] = q[39:32];
|
|
|
|
assign s30[7:0] = q[31:24];
|
|
assign s20[7:0] = q[23:16];
|
|
assign s10[7:0] = q[15:8];
|
|
assign s00[7:0] = q[7:0];
|
|
|
|
|
|
assign aese_noshf[7:0] = s00[7:0];
|
|
assign aese_noshf[39:32] = s01[7:0];
|
|
assign aese_noshf[71:64] = s02[7:0];
|
|
assign aese_noshf[103:96] = s03[7:0];
|
|
|
|
assign aese_noshf[15:8] = s11[7:0];
|
|
assign aese_noshf[47:40] = s12[7:0];
|
|
assign aese_noshf[79:72] = s13[7:0];
|
|
assign aese_noshf[111:104] = s10[7:0];
|
|
|
|
assign aese_noshf[23:16] = s22[7:0];
|
|
assign aese_noshf[55:48] = s23[7:0];
|
|
assign aese_noshf[87:80] = s20[7:0];
|
|
assign aese_noshf[119:112] = s21[7:0];
|
|
|
|
assign aese_noshf[31:24] = s33[7:0];
|
|
assign aese_noshf[63:56] = s30[7:0];
|
|
assign aese_noshf[95:88] = s31[7:0];
|
|
assign aese_noshf[127:120] = s32[7:0];
|
|
|
|
assign aese_shf[15] = ~aese_noshf[127];
|
|
assign aese_shf[14] = ~aese_noshf[119];
|
|
assign aese_shf[13] = ~aese_noshf[111];
|
|
assign aese_shf[12] = ~aese_noshf[103];
|
|
assign aese_shf[11] = ~aese_noshf[ 95];
|
|
assign aese_shf[10] = ~aese_noshf[ 87];
|
|
assign aese_shf[ 9] = ~aese_noshf[ 79];
|
|
assign aese_shf[ 8] = ~aese_noshf[ 71];
|
|
assign aese_shf[ 7] = ~aese_noshf[ 63];
|
|
assign aese_shf[ 6] = ~aese_noshf[ 55];
|
|
assign aese_shf[ 5] = ~aese_noshf[ 47];
|
|
assign aese_shf[ 4] = ~aese_noshf[ 39];
|
|
assign aese_shf[ 3] = ~aese_noshf[ 31];
|
|
assign aese_shf[ 2] = ~aese_noshf[ 23];
|
|
assign aese_shf[ 1] = ~aese_noshf[ 15];
|
|
assign aese_shf[ 0] = ~aese_noshf[ 7];
|
|
|
|
assign aese_out[127:120] = {8{ aese_shf[15]}} & {aese_noshf[126:120], 1'b0} |
|
|
{8{~aese_shf[15]}} & aese_noshf[127:120];
|
|
assign aese_out[119:112] = {8{ aese_shf[14]}} & {aese_noshf[118:112], 1'b0} |
|
|
{8{~aese_shf[14]}} & aese_noshf[119:112];
|
|
assign aese_out[111:104] = {8{ aese_shf[13]}} & {aese_noshf[110:104], 1'b0} |
|
|
{8{~aese_shf[13]}} & aese_noshf[111:104];
|
|
assign aese_out[103: 96] = {8{ aese_shf[12]}} & {aese_noshf[102: 96], 1'b0} |
|
|
{8{~aese_shf[12]}} & aese_noshf[103: 96];
|
|
assign aese_out[ 95: 88] = {8{ aese_shf[11]}} & {aese_noshf[ 94: 88], 1'b0} |
|
|
{8{~aese_shf[11]}} & aese_noshf[ 95: 88];
|
|
assign aese_out[ 87: 80] = {8{ aese_shf[10]}} & {aese_noshf[ 86: 80], 1'b0} |
|
|
{8{~aese_shf[10]}} & aese_noshf[ 87: 80];
|
|
assign aese_out[ 79: 72] = {8{ aese_shf[ 9]}} & {aese_noshf[ 78: 72], 1'b0} |
|
|
{8{~aese_shf[ 9]}} & aese_noshf[ 79: 72];
|
|
assign aese_out[ 71: 64] = {8{ aese_shf[ 8]}} & {aese_noshf[ 70: 64], 1'b0} |
|
|
{8{~aese_shf[ 8]}} & aese_noshf[ 71: 64];
|
|
assign aese_out[ 63: 56] = {8{ aese_shf[ 7]}} & {aese_noshf[ 62: 56], 1'b0} |
|
|
{8{~aese_shf[ 7]}} & aese_noshf[ 63: 56];
|
|
assign aese_out[ 55: 48] = {8{ aese_shf[ 6]}} & {aese_noshf[ 54: 48], 1'b0} |
|
|
{8{~aese_shf[ 6]}} & aese_noshf[ 55: 48];
|
|
assign aese_out[ 47: 40] = {8{ aese_shf[ 5]}} & {aese_noshf[ 46: 40], 1'b0} |
|
|
{8{~aese_shf[ 5]}} & aese_noshf[ 47: 40];
|
|
assign aese_out[ 39: 32] = {8{ aese_shf[ 4]}} & {aese_noshf[ 38: 32], 1'b0} |
|
|
{8{~aese_shf[ 4]}} & aese_noshf[ 39: 32];
|
|
assign aese_out[ 31: 24] = {8{ aese_shf[ 3]}} & {aese_noshf[ 30: 24], 1'b0} |
|
|
{8{~aese_shf[ 3]}} & aese_noshf[ 31: 24];
|
|
assign aese_out[ 23: 16] = {8{ aese_shf[ 2]}} & {aese_noshf[ 22: 16], 1'b0} |
|
|
{8{~aese_shf[ 2]}} & aese_noshf[ 23: 16];
|
|
assign aese_out[ 15: 8] = {8{ aese_shf[ 1]}} & {aese_noshf[ 14: 8], 1'b0} |
|
|
{8{~aese_shf[ 1]}} & aese_noshf[ 15: 8];
|
|
assign aese_out[ 7: 0] = {8{ aese_shf[ 0]}} & {aese_noshf[ 6: 0], 1'b0} |
|
|
{8{~aese_shf[ 0]}} & aese_noshf[ 7: 0];
|
|
|
|
endmodule
|
|
|
|
|
|
`define HERCULESAE_UNDEFINE
|
|
`include "herculesae_header.sv"
|
|
`undef HERCULESAE_UNDEFINE
|