afu reset fix

This commit is contained in:
Blaise Tine
2021-01-12 17:13:47 -08:00
parent b4b5d6f0ab
commit f18ac24675
3 changed files with 25 additions and 23 deletions

View File

@@ -338,7 +338,6 @@ extern int vx_dump_perf(vx_device_h device, FILE* stream) {
fprintf(stream, "PERF: dram requests=%ld (reads=%ld, writes=%ld)\n", (dram_reads + dram_writes), dram_reads, dram_writes); fprintf(stream, "PERF: dram requests=%ld (reads=%ld, writes=%ld)\n", (dram_reads + dram_writes), dram_reads, dram_writes);
fprintf(stream, "PERF: dram stalls=%ld (utilization=%d%%)\n", dram_stalls, dram_utilization); fprintf(stream, "PERF: dram stalls=%ld (utilization=%d%%)\n", dram_stalls, dram_utilization);
fprintf(stream, "PERF: dram average latency=%d cycles\n", dram_avg_lat); fprintf(stream, "PERF: dram average latency=%d cycles\n", dram_avg_lat);
fprintf(stream, "PERF: dram bandwith=%d cycles\n", dram_avg_lat);
#endif #endif
return ret; return ret;

View File

@@ -126,7 +126,7 @@ wire vx_csr_io_rsp_ready;
wire vx_busy; wire vx_busy;
reg vx_reset; reg vx_reset;
reg vx_enabled; reg vx_dram_en;
// CMD variables ////////////////////////////////////////////////////////////// // CMD variables //////////////////////////////////////////////////////////////
@@ -179,7 +179,8 @@ wire[$bits(cp2af_sRxPort.c0.hdr.mdata)-1:0] cp2af_sRxPort_c0_hdr_mdata = cp2af_s
`DEBUG_END `DEBUG_END
*/ */
wire [2:0] cmd_type = (cp2af_sRxPort.c0.mmioWrValid && (MMIO_CMD_TYPE == mmio_hdr.address)) ? 3'(cp2af_sRxPort.c0.data) : 3'h0; wire [2:0] cmd_type = (cp2af_sRxPort.c0.mmioWrValid
&& (MMIO_CMD_TYPE == mmio_hdr.address)) ? 3'(cp2af_sRxPort.c0.data) : 3'h0;
`ifdef SCOPE `ifdef SCOPE
reg scope_start; reg scope_start;
@@ -187,16 +188,16 @@ reg scope_start;
// disable assertions until full reset // disable assertions until full reset
`ifndef VERILATOR `ifndef VERILATOR
reg [$clog2(RESET_DELAY+1)-1:0] reset_ctr; reg [$clog2(RESET_DELAY+1)-1:0] assert_delay_ctr;
initial begin initial begin
$assertoff; $assertoff;
end end
always @(posedge clk) begin always @(posedge clk) begin
if (reset) begin if (reset) begin
reset_ctr <= 0; assert_delay_ctr <= 0;
end else begin end else begin
reset_ctr <= reset_ctr + 1; assert_delay_ctr <= assert_delay_ctr + 1;
if (reset_ctr == RESET_DELAY) begin if (assert_delay_ctr == RESET_DELAY) begin
$asserton; // enable assertions $asserton; // enable assertions
end end
end end
@@ -349,11 +350,8 @@ always @(posedge clk) begin
if (reset) begin if (reset) begin
state <= STATE_IDLE; state <= STATE_IDLE;
vx_reset <= 0; vx_reset <= 0;
vx_enabled <= 0; vx_dram_en <= 0;
end else begin end else begin
vx_reset <= 0;
case (state) case (state)
STATE_IDLE: begin STATE_IDLE: begin
case (cmd_type) case (cmd_type)
@@ -373,8 +371,7 @@ always @(posedge clk) begin
`ifdef DBG_PRINT_OPAE `ifdef DBG_PRINT_OPAE
$display("%t: STATE START", $time); $display("%t: STATE START", $time);
`endif `endif
vx_reset <= 1; vx_reset <= 1;
vx_enabled <= 1;
state <= STATE_START; state <= STATE_START;
end end
CMD_CSR_READ: begin CMD_CSR_READ: begin
@@ -415,12 +412,16 @@ always @(posedge clk) begin
STATE_START: begin STATE_START: begin
// vortex reset cycles // vortex reset cycles
if (vx_reset_ctr == $bits(vx_reset_ctr)'(RESET_DELAY)) if (vx_reset_ctr == $bits(vx_reset_ctr)'(RESET_DELAY)) begin
vx_reset <= 0;
vx_dram_en <= 1;
state <= STATE_RUN; state <= STATE_RUN;
end
end end
STATE_RUN: begin STATE_RUN: begin
if (cmd_run_done) begin if (cmd_run_done) begin
vx_dram_en <= 0;
state <= STATE_IDLE; state <= STATE_IDLE;
`ifdef DBG_PRINT_OPAE `ifdef DBG_PRINT_OPAE
$display("%t: STATE IDLE", $time); $display("%t: STATE IDLE", $time);
@@ -508,7 +509,7 @@ assign cci_dram_req_tag = AVS_REQ_TAGW'(0);
//-- //--
assign vx_dram_req_valid_qual = vx_dram_req_valid && vx_enabled; assign vx_dram_req_valid_qual = vx_dram_req_valid && vx_dram_en;
assign vx_dram_req_addr_qual = vx_dram_req_addr[`VX_DRAM_ADDR_WIDTH-1:`VX_DRAM_ADDR_WIDTH-DRAM_ADDR_WIDTH]; assign vx_dram_req_addr_qual = vx_dram_req_addr[`VX_DRAM_ADDR_WIDTH-1:`VX_DRAM_ADDR_WIDTH-DRAM_ADDR_WIDTH];
@@ -816,9 +817,9 @@ assign cmd_read_done = (0 == cci_wr_req_ctr) && cci_pending_writes_empty;
always @(posedge clk) always @(posedge clk)
begin begin
if (reset) begin if (reset) begin
cci_wr_req_addr <= 0; cci_wr_req_addr <= 0;
cci_wr_req_ctr <= 0; cci_wr_req_ctr <= 0;
cci_dram_rd_req_ctr <= 0; cci_dram_rd_req_ctr <= 0;
cci_dram_rd_req_addr_r <= 0; cci_dram_rd_req_addr_r <= 0;
end end
else begin else begin

View File

@@ -147,6 +147,7 @@ def remove_comments(text):
def add_macro(name, args, value): def add_macro(name, args, value):
macro = (name, args, value) macro = (name, args, value)
macros.append(macro) macros.append(macro)
'''
if not args is None: if not args is None:
print("*** token: " + name + "(", end='') print("*** token: " + name + "(", end='')
for i in range(len(args)): for i in range(len(args)):
@@ -156,6 +157,7 @@ def add_macro(name, args, value):
print(")=" + value) print(")=" + value)
else: else:
print("*** token: " + name + "=" + value) print("*** token: " + name + "=" + value)
'''
def find_macro(name): def find_macro(name):
for macro in macros: for macro in macros:
@@ -273,7 +275,7 @@ def expand_text(text, params):
def parse_include(filename, nesting): def parse_include(filename, nesting):
if nesting > 99: if nesting > 99:
raise Exception("include recursion!") raise Exception("include recursion!")
print("*** parsing '" + filename + "'...") #print("*** parsing '" + filename + "'...")
content = None content = None
with open(filename, "r") as f: with open(filename, "r") as f:
content = f.read() content = f.read()
@@ -306,7 +308,7 @@ def parse_include(filename, nesting):
elif key == '"elsif': elif key == '"elsif':
br_stack.pop() br_stack.pop()
br_stack.append(taken) br_stack.append(taken)
print("*** " + key + "(" + cond + ") => " + str(taken)) #print("*** " + key + "(" + cond + ") => " + str(taken))
continue continue
# parse endif # parse endif
m = re.match(vl_endif_re, line) m = re.match(vl_endif_re, line)
@@ -315,7 +317,7 @@ def parse_include(filename, nesting):
top = br_stack.pop() top = br_stack.pop()
if key == 'else': if key == 'else':
br_stack.append(not top) br_stack.append(not top)
print("*** " + key) #print("*** " + key)
continue continue
# skip disabled blocks # skip disabled blocks
if not all(br_stack): if not all(br_stack):
@@ -360,7 +362,7 @@ def parse_includes(includes):
def load_include_dirs(dirs): def load_include_dirs(dirs):
for dir in dirs: for dir in dirs:
print("*** include dir: " + dir) #print("*** include dir: " + dir)
include_dirs.append(dir) include_dirs.append(dir)
def load_defines(defines): def load_defines(defines):
@@ -573,7 +575,7 @@ def gen_vl_header(file, modules, taps):
skey_list = key.split(',') skey_list = key.split(',')
_taps = taps[key] _taps = taps[key]
for skey in skey_list: for skey in skey_list:
print('processing node: ' + skey + ' ...') #print('*** processing node: ' + skey + ' ...')
paths = skey.strip().split('/') paths = skey.strip().split('/')
ntype = paths.pop(0) ntype = paths.pop(0)
curtaps = visit_path(alltaps, ports, ntype, paths, modules, _taps) curtaps = visit_path(alltaps, ports, ntype, paths, modules, _taps)