afu reset fix
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user