Commit ff1f5a98 authored by Tomasz Wlostowski's avatar Tomasz Wlostowski

wbgen_fifos.lua: fixed FIFO CSR.CLEAR issue reported by Thedi

parent cea56bbe
...@@ -254,27 +254,27 @@ end ...@@ -254,27 +254,27 @@ end
print("Align ",e.name,e.align,o,a); print("Align ",e.name,e.align,o,a);
return a; return a;
end end
function calc_field_offset(e,t) function calc_field_offset(t,e)
local a=t.current_offset; local a=e.current_offset;
if(t.__type==TYPE_FIFO)then if(e.__type==TYPE_FIFO)then
local o=align(e,a); local o=align(t,a);
if((o%DATA_BUS_WIDTH)+e.size>DATA_BUS_WIDTH)then if((o%DATA_BUS_WIDTH)+t.size>DATA_BUS_WIDTH)then
e.align=DATA_BUS_WIDTH; t.align=DATA_BUS_WIDTH;
a=align(e,a); a=align(t,a);
else else
a=o; a=o;
end end
t.current_offset=a+e.size; e.current_offset=a+t.size;
e.offset=a; t.offset=a;
else else
a=align(e,a); a=align(t,a);
t.current_offset=a+e.size; e.current_offset=a+t.size;
e.offset=a; t.offset=a;
end end
e.offset_unaligned=t.current_offset_unaligned; t.offset_unaligned=e.current_offset_unaligned;
t.current_offset_unaligned=t.current_offset_unaligned+e.size; e.current_offset_unaligned=e.current_offset_unaligned+t.size;
if(t.__type==TYPE_REG and t.current_offset>DATA_BUS_WIDTH)then if(e.__type==TYPE_REG and e.current_offset>DATA_BUS_WIDTH)then
die("Total size of register '"..t.name.."' ("..t.current_offset..") exceeds data bus width ("..DATA_BUS_WIDTH..")"); die("Total size of register '"..e.name.."' ("..e.current_offset..") exceeds data bus width ("..DATA_BUS_WIDTH..")");
end end
end end
function calc_num_fields(t,e) function calc_num_fields(t,e)
...@@ -3879,7 +3879,8 @@ elseif(o==MONOSTABLE)then ...@@ -3879,7 +3879,8 @@ elseif(o==MONOSTABLE)then
t.access_bus=WRITE_ONLY; t.access_bus=WRITE_ONLY;
t.access_dev=READ_ONLY; t.access_dev=READ_ONLY;
t.reset_code_main={va(a,0)}; t.reset_code_main={va(a,0)};
t.write_code={vif(vequal(vi("rddata_reg",t.offset),1),{va(a,1)})}; t.write_code={vif(vequal(vi("wrdata_reg",t.offset),1),{va(a,1)})};
table_join(t.read_code,{va(vi("rddata_reg",t.offset),0)});
t.ackgen_code={va(a,0)} t.ackgen_code={va(a,0)}
end end
table.insert(s,t); table.insert(s,t);
......
...@@ -273,7 +273,8 @@ function fifo_wire_bus_ports(fifo) ...@@ -273,7 +273,8 @@ function fifo_wire_bus_ports(fifo)
f.access_bus = WRITE_ONLY; f.access_bus = WRITE_ONLY;
f.access_dev = READ_ONLY; f.access_dev = READ_ONLY;
f.reset_code_main = { va(sig, 0) }; f.reset_code_main = { va(sig, 0) };
f.write_code = { vif(vequal(vi("rddata_reg", f.offset), 1), { va(sig, 1) })}; f.write_code = { vif(vequal(vi("wrdata_reg", f.offset), 1), { va(sig, 1) })};
table_join(f.read_code, { va(vi("rddata_reg", f.offset), 0) });
f.ackgen_code = { va(sig, 0 )} f.ackgen_code = { va(sig, 0 )}
end end
table.insert(csr, f); table.insert(csr, f);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment