Bug fix in load signed byte from data memory

This commit is contained in:
Douglas Santos 2021-07-13 03:27:03 +02:00
parent ddf5d2e889
commit 8eebe99af5
2 changed files with 47 additions and 31 deletions

View file

@ -12,7 +12,7 @@ entity sim_from_dump is
end entity;
architecture arch of sim_from_dump is
constant period : time := 100 ns;
constant period : time := 20 ns;
signal rstn : std_logic := '0';
signal clk : std_logic := '0';
signal start : std_logic := '0';
@ -174,7 +174,7 @@ begin
-- convert address to integer
addr_v := to_integer(unsigned(dmem_addr_o));
-- check if range is ok
if addr_v < DATA_BASE_ADDR or addr_v > (DATA_BASE_ADDR + DATA_SIZE) then
if addr_v < DATA_BASE_ADDR or addr_v >= (DATA_BASE_ADDR + DATA_SIZE) then
dmem_err_i <= '1';
else
-- grant response
@ -202,10 +202,7 @@ begin
if dmem_usgn_o = '1' then
dmem_rdata_i <= x"000000" & data_mem(addr_v);
else
dmem_rdata_i <= (
31 downto 8 => data_mem(addr_v)(7),
7 downto 0 => data_mem(0)
);
dmem_rdata_i <= (31 downto 8 => data_mem(addr_v)(7)) & data_mem(addr_v);
end if;
-- half-word read with and without sign-extension
@ -230,6 +227,7 @@ begin
report "Wrong parameters to data memory" severity ERROR;
end case;
report to_hstring(dmem_addr_o) & ": " & to_hstring(dmem_rdata_i);
end if;
end if;
-- response for 1 cycle

View file

@ -12,15 +12,15 @@
</db_ref>
</db_ref_list>
<zoom_setting>
<ZoomStartTime time="42035834fs"></ZoomStartTime>
<ZoomEndTime time="44520835fs"></ZoomEndTime>
<Cursor1Time time="43030834fs"></Cursor1Time>
<ZoomStartTime time="0fs"></ZoomStartTime>
<ZoomEndTime time="17000001fs"></ZoomEndTime>
<Cursor1Time time="17000000fs"></Cursor1Time>
</zoom_setting>
<column_width_setting>
<NameColumnWidth column_width="196"></NameColumnWidth>
<ValueColumnWidth column_width="66"></ValueColumnWidth>
<NameColumnWidth column_width="170"></NameColumnWidth>
<ValueColumnWidth column_width="81"></ValueColumnWidth>
</column_width_setting>
<WVObjectSize size="34" />
<WVObjectSize size="40" />
<wvobject type="array" fp_name="/sim_from_dump/INST_DUMP_FILE_PATH">
<obj_property name="ElementShortName">INST_DUMP_FILE_PATH[1:33]</obj_property>
<obj_property name="ObjectShortName">INST_DUMP_FILE_PATH[1:33]</obj_property>
@ -92,6 +92,10 @@
<obj_property name="label">reg_t0</obj_property>
<obj_property name="Radix">HEXRADIX</obj_property>
</wvobject>
<wvobject type="array" fp_name="/sim_from_dump/harv_i/regfile_i/g_normal/regfile_w[10]">
<obj_property name="ElementShortName">[10][31:0]</obj_property>
<obj_property name="ObjectShortName">[10][31:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/sim_from_dump/harv_i/regfile_i/g_normal/regfile_w">
<obj_property name="ElementShortName">regfile_w[31:0][31:0]</obj_property>
<obj_property name="ObjectShortName">regfile_w[31:0][31:0]</obj_property>
@ -143,6 +147,7 @@
<wvobject type="group" fp_name="group177">
<obj_property name="label">imem</obj_property>
<obj_property name="DisplayName">label</obj_property>
<obj_property name="isExpanded"></obj_property>
<wvobject type="other" fp_name="/sim_from_dump/DATA_SIZE">
<obj_property name="ElementShortName">DATA_SIZE</obj_property>
<obj_property name="ObjectShortName">DATA_SIZE</obj_property>
@ -167,14 +172,15 @@
<wvobject type="group" fp_name="group4275">
<obj_property name="label">dmem</obj_property>
<obj_property name="DisplayName">label</obj_property>
<wvobject type="array" fp_name="/sim_from_dump/dmem_data_i">
<obj_property name="ElementShortName">dmem_data_i[31:0]</obj_property>
<obj_property name="ObjectShortName">dmem_data_i[31:0]</obj_property>
</wvobject>
<obj_property name="isExpanded"></obj_property>
<wvobject type="logic" fp_name="/sim_from_dump/dmem_req_o">
<obj_property name="ElementShortName">dmem_req_o</obj_property>
<obj_property name="ObjectShortName">dmem_req_o</obj_property>
</wvobject>
<wvobject type="logic" fp_name="/sim_from_dump/dmem_usgn_o">
<obj_property name="ElementShortName">dmem_usgn_o</obj_property>
<obj_property name="ObjectShortName">dmem_usgn_o</obj_property>
</wvobject>
<wvobject type="logic" fp_name="/sim_from_dump/dmem_wren_o">
<obj_property name="ElementShortName">dmem_wren_o</obj_property>
<obj_property name="ObjectShortName">dmem_wren_o</obj_property>
@ -183,22 +189,13 @@
<obj_property name="ElementShortName">dmem_gnt_i</obj_property>
<obj_property name="ObjectShortName">dmem_gnt_i</obj_property>
</wvobject>
<wvobject type="logic" fp_name="/sim_from_dump/dmem_outofrange_i">
<obj_property name="ElementShortName">dmem_outofrange_i</obj_property>
<obj_property name="ObjectShortName">dmem_outofrange_i</obj_property>
<wvobject type="array" fp_name="/sim_from_dump/dmem_rdata_i">
<obj_property name="ElementShortName">dmem_rdata_i[31:0]</obj_property>
<obj_property name="ObjectShortName">dmem_rdata_i[31:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/sim_from_dump/dmem_byte_en_o">
<obj_property name="ElementShortName">dmem_byte_en_o[1:0]</obj_property>
<obj_property name="ObjectShortName">dmem_byte_en_o[1:0]</obj_property>
<obj_property name="Radix">BINARYRADIX</obj_property>
</wvobject>
<wvobject type="logic" fp_name="/sim_from_dump/dmem_usgn_dat_o">
<obj_property name="ElementShortName">dmem_usgn_dat_o</obj_property>
<obj_property name="ObjectShortName">dmem_usgn_dat_o</obj_property>
</wvobject>
<wvobject type="array" fp_name="/sim_from_dump/dmem_data_o">
<obj_property name="ElementShortName">dmem_data_o[31:0]</obj_property>
<obj_property name="ObjectShortName">dmem_data_o[31:0]</obj_property>
<wvobject type="array" fp_name="/sim_from_dump/dmem_wdata_o">
<obj_property name="ElementShortName">dmem_wdata_o[31:0]</obj_property>
<obj_property name="ObjectShortName">dmem_wdata_o[31:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/sim_from_dump/dmem_addr_o">
<obj_property name="ElementShortName">dmem_addr_o[31:0]</obj_property>
@ -230,4 +227,25 @@
<obj_property name="ElementShortName">DATA_SIZE</obj_property>
<obj_property name="ObjectShortName">DATA_SIZE</obj_property>
</wvobject>
<wvobject fp_name="divider81" type="divider">
<obj_property name="label">ALU</obj_property>
<obj_property name="DisplayName">label</obj_property>
</wvobject>
<wvobject type="array" fp_name="/sim_from_dump/harv_i/gen_normal_alu/alu_i/data1_i">
<obj_property name="ElementShortName">data1_i[31:0]</obj_property>
<obj_property name="ObjectShortName">data1_i[31:0]</obj_property>
<obj_property name="Radix">HEXRADIX</obj_property>
</wvobject>
<wvobject type="array" fp_name="/sim_from_dump/harv_i/gen_normal_alu/alu_i/data2_i">
<obj_property name="ElementShortName">data2_i[31:0]</obj_property>
<obj_property name="ObjectShortName">data2_i[31:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/sim_from_dump/harv_i/gen_normal_alu/alu_i/operation_i">
<obj_property name="ElementShortName">operation_i[3:0]</obj_property>
<obj_property name="ObjectShortName">operation_i[3:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/sim_from_dump/harv_i/gen_normal_alu/alu_i/data_o">
<obj_property name="ElementShortName">data_o[31:0]</obj_property>
<obj_property name="ObjectShortName">data_o[31:0]</obj_property>
</wvobject>
</wave_config>