diff --git a/modules/wishbone/wb_irq/wb_irq_slave.vhd b/modules/wishbone/wb_irq/wb_irq_slave.vhd index ec00fc397c27198d979be9a050553ce6f77d658f..51052d8fff4bcb18fda896fc22fb27632ee8036a 100644 --- a/modules/wishbone/wb_irq/wb_irq_slave.vhd +++ b/modules/wishbone/wb_irq/wb_irq_slave.vhd @@ -26,7 +26,6 @@ use ieee.numeric_std.all; library work; use work.wishbone_pkg.all; use work.genram_pkg.all; -use work.eb_internals_pkg.all; use work.wb_irq_pkg.all; @@ -108,21 +107,27 @@ begin end if; end process; - irqfifo : eb_fifo -- TODO: change this to some other component fifo - generic map( - g_width => g_datbits + g_adrbits + g_selbits, - g_size => g_depth) - port map ( - clk_i => clk_i, - rstn_i => s_rst_n, - w_full_o => irq_full(I), - w_push_i => irq_push(I), - w_dat_i => irq_d(I), - r_empty_o => irq_empty(I), - r_pop_i => irq_pop(I), - r_dat_o => irq_q(I)); - - end generate; + irqfifo : generic_sync_fifo + generic map ( + g_data_width => g_datbits + g_adrbits + g_selbits, + g_size => g_depth, + g_show_ahead => true, + g_with_empty => true, + g_with_full => true) + port map ( + rst_n_i => s_rst_n, + clk_i => clk_i, + d_i => irq_d(I), + we_i => irq_push(I), + q_o => irq_q(I), + rd_i => irq_pop(I), + empty_o => irq_empty(I), + full_o => irq_full(I), + almost_empty_o => open, + almost_full_o => open, + count_o => open); + + end generate; ------------------------------------------------------------------------- diff --git a/modules/wishbone/wishbone_pkg.vhd b/modules/wishbone/wishbone_pkg.vhd index ce38c45c03f9bf9dc9bb3dc4183e53350cc4bc8a..407db7a824a5c30f964f15287271a7faa2222854 100644 --- a/modules/wishbone/wishbone_pkg.vhd +++ b/modules/wishbone/wishbone_pkg.vhd @@ -1137,22 +1137,25 @@ package body wishbone_pkg is return t_sdb_record_array is variable result : t_sdb_record_array(instances-1 downto 0); variable i,j, pos : natural; - variable dev : t_sdb_device; - variable serial_no : string(1 to 3); + variable dev, newdev : t_sdb_device; + variable serial_no : string(1 to 3); + variable text_possible : boolean := false; begin + dev := device; + + report "### Creating " & integer'image(instances) & " x " & dev.sdb_component.product.name + severity note; for i in 0 to instances-1 loop - dev := device; + newdev := dev; if(g_enum_dev_id) then dev.sdb_component.product.device_id := std_logic_vector( unsigned(dev.sdb_component.product.device_id) + to_unsigned(i+g_dev_id_offs, dev.sdb_component.product.device_id'length)); end if; - if(g_enum_dev_name) then + if(g_enum_dev_name AND NOT text_possible) then -- find end of name for j in dev.sdb_component.product.name'length downto 1 loop - if(dev.sdb_component.product.name(j) /= ' ') then - report "Found non space " & dev.sdb_component.product.name(j) & "@" & integer'image(j) - severity note; + if(dev.sdb_component.product.name(j) /= ' ') then pos := j; exit; end if; @@ -1160,19 +1163,23 @@ package body wishbone_pkg is -- convert i+g_dev_name_offs to string serial_no := f_string_fix_len(integer'image(i+g_dev_name_offs), serial_no'length); -- check if space is sufficient - assert (serial_no'length <= dev.sdb_component.product.name'length - pos) + assert (serial_no'length+1 <= dev.sdb_component.product.name'length - pos) report "Not enough space in namestring of sdb_device " & dev.sdb_component.product.name & " to add serial number " & serial_no & ". Space available " & - integer'image(dev.sdb_component.product.name'length-pos) & ", required " + integer'image(dev.sdb_component.product.name'length-pos-1) & ", required " & integer'image(serial_no'length+1) - severity Failure; - -- insert - dev.sdb_component.product.name(pos+1) := '_'; + severity Failure; + text_possible := true; + end if; + if(g_enum_dev_name AND text_possible) then + newdev.sdb_component.product.name(pos+1) := '_'; for j in 1 to serial_no'length loop - dev.sdb_component.product.name(pos+1+j) := serial_no(j); - end loop; + newdev.sdb_component.product.name(pos+1+j) := serial_no(j); + end loop; end if; - result(i) := f_sdb_embed_device(dev, (others=>'1')); + + -- insert + result(i) := f_sdb_embed_device(newdev, (others=>'1')); end loop; return result; end f_sdb_create_array;