This commit is contained in:
Blaise Tine
2019-11-22 12:32:45 -05:00
6 changed files with 154 additions and 29 deletions

View File

@@ -12,7 +12,7 @@
// `define SYN 1
// `define ASIC 1
// `define SYN_FUNC 1
`define SYN_FUNC 1
`define NUM_BARRIERS 4

View File

@@ -116,7 +116,7 @@ module VX_gpr_stage (
wire store_curr_real = !delayed_lsu_last_cycle && stall_lsu;
VX_generic_register #(.N(256)) lsu_data(
VX_generic_register #(.N(`NT*32*2)) lsu_data(
.clk (clk),
.reset(reset),
.stall(!store_curr_real),
@@ -133,7 +133,7 @@ module VX_gpr_stage (
assign VX_lsu_req.base_address = (delayed_lsu_last_cycle) ? temp_base_address : real_base_address;
VX_generic_register #(.N(77 + `NW_M1 + 65*(1 + `NT))) lsu_reg(
VX_generic_register #(.N(77 + `NW_M1 + 1 + (`NT))) lsu_reg(
.clk (clk),
.reset(reset),
.stall(stall_lsu),
@@ -142,7 +142,7 @@ module VX_gpr_stage (
.out ({VX_lsu_req.valid , VX_lsu_req.lsu_pc ,VX_lsu_req.warp_num , VX_lsu_req.offset , VX_lsu_req.mem_read , VX_lsu_req.mem_write , VX_lsu_req.rd , VX_lsu_req.wb })
);
VX_generic_register #(.N(224 + `NW_M1 + 1 + 65*(`NT))) exec_unit_reg(
VX_generic_register #(.N(224 + `NW_M1 + 1 + (`NT))) exec_unit_reg(
.clk (clk),
.reset(reset),
.stall(stall_rest),
@@ -154,7 +154,7 @@ module VX_gpr_stage (
assign VX_exec_unit_req.a_reg_data = real_base_address;
assign VX_exec_unit_req.b_reg_data = real_store_data;
VX_generic_register #(.N(68 + `NW_M1 + 1 + 33*(`NT))) gpu_inst_reg(
VX_generic_register #(.N(36 + `NW_M1 + 1 + (`NT))) gpu_inst_reg(
.clk (clk),
.reset(reset),
.stall(stall_rest),

View File

@@ -5,13 +5,13 @@
// sftp, ftp or ftps
"type": "sftp",
"save_before_upload": true,
"upload_on_save": true,
"save_before_upload": false,
"upload_on_save": false,
"sync_down_on_open": false,
"sync_skip_deletes": false,
"sync_same_age": true,
"sync_same_age": false,
"confirm_downloads": false,
"confirm_sync": true,
"confirm_sync": false,
"confirm_overwrite_newer": false,
"host": "ece-rschsrv01.ece.gatech.edu",

View File

@@ -219,7 +219,13 @@ Instruction *WordDecoder::decode(const std::vector<Byte> &v, Size &idx, trace_in
imeed = 0 | (bits_10_1 << 1) | (bit_11 << 11) | (bits_19_12 << 12) | (bit_20 << 20);
inst.setSrcImm(signExt(imeed, 20, j_immed_mask));
if (bit_20)
{
imeed |= ~j_immed_mask;
}
// inst.setSrcImm(signExt(imeed, 20, j_immed_mask));
inst.setSrcImm(imeed);
usedImm = true;
trace_inst->valid_inst = true;

View File

@@ -1507,6 +1507,8 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
break;
case 2:
{
Word VLMAX = (c.vtype.vlmul * c.VLEN)/c.vtype.vsew;
switch(func6){
case 24: //vmandnot
{
@@ -1526,6 +1528,11 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint8_t * result_ptr = (uint8_t *) vd[i].val;
*result_ptr = result;
}
for(uint8_t i = c.vl; i < VLMAX; i++){
uint8_t *result_ptr = (uint8_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 16) {
for(uint16_t i = 0; i < c.vl; i++){
@@ -1539,6 +1546,11 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint16_t * result_ptr = (uint16_t *) vd[i].val;
*result_ptr = result;
}
for(uint16_t i = c.vl; i < VLMAX; i++){
uint16_t *result_ptr = (uint16_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 32) {
for(uint32_t i = 0; i < c.vl; i++){
@@ -1552,6 +1564,11 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
for(Word i = c.vl; i < VLMAX; i++){
uint32_t *result_ptr = (uint32_t *) vd[i].val;
*result_ptr = 0;
}
}
}
break;
@@ -1573,6 +1590,10 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint8_t * result_ptr = (uint8_t *) vd[i].val;
*result_ptr = result;
}
for(uint8_t i = c.vl; i < VLMAX; i++){
uint8_t *result_ptr = (uint8_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 16) {
for(uint16_t i = 0; i < c.vl; i++){
@@ -1587,6 +1608,11 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
*result_ptr = result;
}
for(uint16_t i = c.vl; i < VLMAX; i++){
uint16_t *result_ptr = (uint16_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 32) {
for(uint32_t i = 0; i < c.vl; i++){
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
@@ -1599,6 +1625,11 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
for(Word i = c.vl; i < VLMAX; i++){
uint32_t *result_ptr = (uint32_t *) vd[i].val;
*result_ptr = 0;
}
}
}
break;
@@ -1620,7 +1651,13 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint8_t * result_ptr = (uint8_t *) vd[i].val;
*result_ptr = result;
}
for(uint8_t i = c.vl; i < VLMAX; i++){
uint8_t *result_ptr = (uint8_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 16) {
uint16_t *result_ptr;
for(uint16_t i = 0; i < c.vl; i++){
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
uint16_t *second_ptr = (uint16_t *)vr2[i].val;
@@ -1629,11 +1666,15 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint16_t result = (first_value | second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint16_t * result_ptr = (uint16_t *) vd[i].val;
result_ptr = (uint16_t *) vd[i].val;
*result_ptr = result;
}
for(uint16_t i = c.vl; i < VLMAX; i++){
result_ptr = (uint16_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 32) {
uint32_t *result_ptr;
for(uint32_t i = 0; i < c.vl; i++){
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
@@ -1642,9 +1683,14 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint32_t result = (first_value | second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
cout << "VLMAX: " << VLMAX << endl;
for(Word i = c.vl; i < VLMAX; i++){
result_ptr = (uint32_t *) vd[i].val;
*result_ptr = 0;
}
}
}
break;
@@ -1655,6 +1701,7 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
vector<Reg<char *>> vr2 = c.vreg[rsrc[1]];
vector<Reg<char *>> vd = c.vreg[rdest];
if(c.vtype.vsew == 8){
uint8_t *result_ptr;
for(uint8_t i = 0; i < c.vl; i++){
uint8_t *first_ptr = (uint8_t *)vr1[i].val;
uint8_t *second_ptr = (uint8_t *)vr2[i].val;
@@ -1662,12 +1709,15 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint8_t second_value = (*second_ptr & 0x1);
uint8_t result = (first_value ^ second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint8_t * result_ptr = (uint8_t *) vd[i].val;
result_ptr = (uint8_t *) vd[i].val;
*result_ptr = result;
}
for(uint8_t i = c.vl; i < VLMAX; i++){
result_ptr = (uint8_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 16) {
uint16_t *result_ptr;
for(uint16_t i = 0; i < c.vl; i++){
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
uint16_t *second_ptr = (uint16_t *)vr2[i].val;
@@ -1676,11 +1726,17 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint16_t result = (first_value ^ second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint16_t * result_ptr = (uint16_t *) vd[i].val;
result_ptr = (uint16_t *) vd[i].val;
*result_ptr = result;
}
for(uint16_t i = c.vl; i < VLMAX; i++){
uint16_t *result_ptr = (uint16_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 32) {
uint32_t *result_ptr;
for(uint32_t i = 0; i < c.vl; i++){
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
@@ -1689,9 +1745,13 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint32_t result = (first_value ^ second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
for(Word i = c.vl; i < VLMAX; i++){
uint32_t *result_ptr = (uint32_t *) vd[i].val;
*result_ptr = 0;
}
}
}
break;
@@ -1713,7 +1773,10 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint8_t * result_ptr = (uint8_t *) vd[i].val;
*result_ptr = result;
}
for(uint8_t i = c.vl; i < VLMAX; i++){
uint8_t *result_ptr = (uint8_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 16) {
for(uint16_t i = 0; i < c.vl; i++){
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
@@ -1726,6 +1789,10 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint16_t * result_ptr = (uint16_t *) vd[i].val;
*result_ptr = result;
}
for(uint16_t i = c.vl; i < VLMAX; i++){
uint16_t *result_ptr = (uint16_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 32) {
for(uint32_t i = 0; i < c.vl; i++){
@@ -1739,6 +1806,10 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
for(Word i = c.vl; i < VLMAX; i++){
uint32_t *result_ptr = (uint32_t *) vd[i].val;
*result_ptr = 0;
}
}
}
break;
@@ -1760,6 +1831,10 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint8_t * result_ptr = (uint8_t *) vd[i].val;
*result_ptr = result;
}
for(uint8_t i = c.vl; i < VLMAX; i++){
uint8_t *result_ptr = (uint8_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 16) {
for(uint16_t i = 0; i < c.vl; i++){
@@ -1774,6 +1849,11 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
*result_ptr = result;
}
for(uint16_t i = c.vl; i < VLMAX; i++){
uint16_t *result_ptr = (uint16_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 32) {
for(uint32_t i = 0; i < c.vl; i++){
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
@@ -1786,6 +1866,12 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
for(Word i = c.vl; i < VLMAX; i++){
uint32_t *result_ptr = (uint32_t *) vd[i].val;
*result_ptr = 0;
}
}
}
break;
@@ -1796,6 +1882,8 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
vector<Reg<char *>> vr2 = c.vreg[rsrc[1]];
vector<Reg<char *>> vd = c.vreg[rdest];
if(c.vtype.vsew == 8){
uint8_t *result_ptr;
for(uint8_t i = 0; i < c.vl; i++){
uint8_t *first_ptr = (uint8_t *)vr1[i].val;
uint8_t *second_ptr = (uint8_t *)vr2[i].val;
@@ -1804,10 +1892,13 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint8_t result = !(first_value | second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint8_t * result_ptr = (uint8_t *) vd[i].val;
result_ptr = (uint8_t *) vd[i].val;
*result_ptr = result;
}
for(uint8_t i = c.vl; i < VLMAX; i++){
result_ptr = (uint8_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 16) {
for(uint16_t i = 0; i < c.vl; i++){
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
@@ -1820,8 +1911,13 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint16_t * result_ptr = (uint16_t *) vd[i].val;
*result_ptr = result;
}
for(uint16_t i = c.vl; i < VLMAX; i++){
uint16_t *result_ptr = (uint16_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 32) {
for(uint32_t i = 0; i < c.vl; i++){
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
@@ -1833,12 +1929,19 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint32_t * result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
for(Word i = c.vl; i < VLMAX; i++){
uint32_t *result_ptr = (uint32_t *) vd[i].val;
*result_ptr = 0;
}
}
}
break;
case 31: //vmxnor
{
D(3, "vmxnor");
uint8_t *result_ptr;
vector<Reg<char *>> vr1 = c.vreg[rsrc[0]];
vector<Reg<char *>> vr2 = c.vreg[rsrc[1]];
vector<Reg<char *>> vd = c.vreg[rdest];
@@ -1851,11 +1954,16 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint8_t result = !(first_value ^ second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint8_t * result_ptr = (uint8_t *) vd[i].val;
result_ptr = (uint8_t *) vd[i].val;
*result_ptr = result;
}
} else if(c.vtype.vsew == 16) {
for(uint8_t i = c.vl; i < VLMAX; i++){
result_ptr = (uint8_t *) vd[i].val;
*result_ptr = 0;
}
}
else if(c.vtype.vsew == 16) {
uint16_t *result_ptr;
for(uint16_t i = 0; i < c.vl; i++){
uint16_t *first_ptr = (uint16_t *)vr1[i].val;
uint16_t *second_ptr = (uint16_t *)vr2[i].val;
@@ -1864,11 +1972,17 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint16_t result = !(first_value ^ second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint16_t * result_ptr = (uint16_t *) vd[i].val;
result_ptr = (uint16_t *) vd[i].val;
*result_ptr = result;
}
for(uint16_t i = c.vl; i < VLMAX; i++){
result_ptr = (uint16_t *) vd[i].val;
*result_ptr = 0;
}
} else if(c.vtype.vsew == 32) {
uint32_t *result_ptr;
for(uint32_t i = 0; i < c.vl; i++){
uint32_t *first_ptr = (uint32_t *)vr1[i].val;
uint32_t *second_ptr = (uint32_t *)vr2[i].val;
@@ -1877,9 +1991,14 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
uint32_t result = !(first_value ^ second_value);
cout << "Comparing " << *first_ptr << " + " << *second_ptr << " = " << result << '\n';
uint32_t * result_ptr = (uint32_t *) vd[i].val;
result_ptr = (uint32_t *) vd[i].val;
*result_ptr = result;
}
for(Word i = c.vl; i < VLMAX; i++){
result_ptr = (uint32_t *) vd[i].val;
*result_ptr = 0;
}
}
}
break;
@@ -1944,10 +2063,10 @@ void Instruction::executeOn(Warp &c, trace_inst_t * trace_inst) {
//trace_inst->is_lw = true;
//trace_inst->mem_addresses[t] = memAddr;
}
for(Word i = c.vl; i < VLMAX; i++){
/*for(Word i = c.vl; i < VLMAX; i++){
int * result_ptr = (int *) vd[i].val;
*result_ptr = 0;
}
}*/
D(3, "Vector Register state after addition:");
for(int i=0; i < c.vreg.size(); i++)

View File

@@ -11,7 +11,7 @@ for number_of_warps in 2 4 8 16 32; do
echo "Warp Count: $number_of_warps Thread Count: $number_of_threads Launched"
echo "\`define NT $number_of_threads" > ../rtl/VX_define_synth.v
echo "\`define NW $number_of_warps" >> ../rtl/VX_define_synth.v
make dc | tee run.log
make dc | tee run.log 1>/dev/null
sleep 30
moved_filename="${number_of_warps}_Warps__${number_of_threads}_threads__400MHz.log"
mv ./vortex_syn.log ../../$moved_filename