#!/usr/bin/perl #use strict; #use warnings; my $RV_ROOT = $ENV{RV_ROOT}; my $TOTAL_INT=$ARGV[0]; print "// argv=".$ARGV[0]."\n"; my $NUM_LEVELS; if($TOTAL_INT==2){$NUM_LEVELS=1;} elsif ($TOTAL_INT==4){$NUM_LEVELS=2;} elsif ($TOTAL_INT==8){$NUM_LEVELS=3;} elsif ($TOTAL_INT==16){$NUM_LEVELS=4;} elsif ($TOTAL_INT==32){$NUM_LEVELS=5;} elsif ($TOTAL_INT==64){$NUM_LEVELS=6;} elsif ($TOTAL_INT==128){$NUM_LEVELS=7;} elsif ($TOTAL_INT==256){$NUM_LEVELS=8;} elsif ($TOTAL_INT==512){$NUM_LEVELS=9;} elsif ($TOTAL_INT==1024){$NUM_LEVELS=10;} else {$NUM_LEVELS=int(log($TOTAL_INT)/log(2))+1;} print ("// TOTAL_INT=".$TOTAL_INT." NUM_LEVELS=".$NUM_LEVELS."\n"); $next_level = 1; print ("`ifdef RV_PIC_2CYCLE\n"); if($TOTAL_INT > 2){ print ("// LEVEL0\n"); print ("logic [TOTAL_INT+2:0] [INTPRIORITY_BITS-1:0] level_intpend_w_prior_en_".$next_level.";\n"); print ("logic [TOTAL_INT+2:0] [ID_BITS-1:0] level_intpend_id_".$next_level.";\n"); print (" for (m=0; m<=(TOTAL_INT)/(2**(".$next_level.")) ; m++) begin : COMPARE0\n"); print (" if ( m == (TOTAL_INT)/(2**(".$next_level."))) begin \n"); print (" assign level_intpend_w_prior_en_".$next_level."[m+1] = '0 ;\n"); print (" assign level_intpend_id_".$next_level."[m+1] = '0 ;\n"); print (" end\n"); print (" cmp_and_mux #(\n"); print (" .ID_BITS(ID_BITS),\n"); print (" .INTPRIORITY_BITS(INTPRIORITY_BITS)) cmp_l".$next_level." (\n"); print (" .a_id(level_intpend_id[0][2*m]),\n"); print (" .a_priority(level_intpend_w_prior_en[0][2*m]),\n"); print (" .b_id(level_intpend_id[0][2*m+1]),\n"); print (" .b_priority(level_intpend_w_prior_en[0][2*m+1]),\n"); print (" .out_id(level_intpend_id_".$next_level."[m]),\n"); print (" .out_priority(level_intpend_w_prior_en_".$next_level."[m])) ;\n"); print (" \n"); print (" end\n\n"); for (my $l=1; $l