Перейти к содержанию
    

динамический диапазон бит в регистр

Приветствую.

 

Возможно ли динамический диапазон бит передавать в регистр ?

 

проблема вот в этой строке:

 

slash_reg_data <= prepare_bit_vector(reg_data_mem, slash_reg_data, bit_counter_reg);

 

Error (10779): VHDL error at xxx.vhd(172): expression is not constant

Error (10658): VHDL Operator error at xxx.vhd(172): failed to evaluate call to operator ""&""

Error (10657): VHDL Subprogram error at xxx.vhd(216): failed to elaborate call to subprogram "prepare_bit_vector"

Error (12153): Can't elaborate top-level user hierarchy

 

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use ieee.numeric_std.all;

entity xxx is  
	port (
 clk				 : in std_logic;
  rst				 : in std_logic;
  we		   : in std_logic;
  din			  : in std_logic_vector (127 downto 0);
  data_out		 : out std_logic_vector (15 downto 0)
		  );
end xxx;

architecture rtl of xxx is 

attribute ramstyle : string;

type srl_ram is array (127 downto 0) of std_logic_vector(127 downto 0);

-- 26 bit in row
signal ram : srl_ram :=  --(OTHERS => (OTHERS => '0'));
(
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111001", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111111111111111", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000000000000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000011111111111111110000000000", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100110000000000000010110000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000000000000101000000000000010", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111101000000000000100000000000",
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000000000111000000000000011000", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000000101000000000000", 
"000000000000000000000000000000000000000000000000000000000000000000000000000
0
0000000000000000000000000001000000000000000011000000", 
"111111111111111111111111111111111111111111111111111111111111111111111111111
1
1111111111111111111111111100000000100000000000000001"
);


--attribute ramstyle of ram : signal is "MLAB,no_rw_check";

constant mem_width_read : integer := 26;

signal cnt :  std_logic_vector (5 downto 0):= (OTHERS => '0'); 
signal reg_data_mem : STD_LOGIC_VECTOR(127 DOWNTO 0):= (OTHERS => '0');
signal reg_addr, addr_mem : STD_LOGIC_VECTOR(6 DOWNTO 0):= (OTHERS => '0');
signal bit_counter, bit_counter_reg : integer range 0 to 127 := 0;
signal slash_reg_data : STD_LOGIC_VECTOR (mem_width_read*2 DOWNTO 0 ):= (OTHERS => '0');

function prepare_bit_vector (reg_data_mem_v : std_logic_vector(127 downto 0); bit_vector : std_logic_vector(mem_width_read*2 DOWNTO 0 ); bit_quantity : integer range 0 to 16 ) return std_logic_vector is
variable result : std_logic_vector (mem_width_read*2 DOWNTO 0 ):= (OTHERS => '0');
begin
result(bit_quantity+mem_width_read-1 downto 0) := (reg_data_mem_v ( (mem_width_read - 1) downto 0) & bit_vector( (15+bit_quantity) DOWNTO 16 ));
return result;
end function;

begin

 process (clk)												
   begin														
   if rising_edge(clk) then 
	  if we = '1' then											 
  ram(conv_integer(addr_mem)) <= din;		 
	  end if;															   
 reg_data_mem <= ram(conv_integer(addr_mem)); 
  end if;  

end process; 

data_out <= slash_reg_data(15 downto 0);

process (clk)
 begin


if rising_edge(clk) then

	if rst = '1' then
			cnt <= (OTHERS => '0');
		else

		bit_counter_reg <= bit_counter;

		if ( bit_counter / 16  = 0) then
			cnt <= cnt + "000001";
			addr_mem <= addr_mem + '1';
			bit_counter <= mem_width_read + bit_counter - 16;
		else
			bit_counter <= bit_counter - 16;
		end if;

		if (cnt > 0) then

			if (bit_counter_reg = 0) then
				slash_reg_data( (mem_width_read - 1) downto 0) <= reg_data_mem( (mem_width_read - 1) downto 0);					
			elsif (bit_counter_reg <= 16) then
				slash_reg_data <= prepare_bit_vector(reg_data_mem, slash_reg_data, bit_counter_reg);
			else
				slash_reg_data( ((mem_width_read*2)-16) DOWNTO 0 ) <= slash_reg_data( (mem_width_read*2) DOWNTO 16 );
			end if;

		end if;

	end if;

end if;

 end process;

end rtl;

 

Описание моделируется, но не синтезируется...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Думаю, нужно определить функцию смешивания с побитным выбором:

function bit_mux2(a,b,s:std_logic_vector)return std_logic_vector is begin
  return (a and s) or (b and not s);
end;

И представить необходимую вам функцию в форме композиции сдвигов на переменное число бит и смешиваний с побитным выбором.

Маски для смешивания создавать с помощью сдвигов единичных векторов на переменное число бит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема действительно не понятная...т.к. эта же конструкция в ISE синтезится на "УРА".

так к примеру, кто ходчет попробовать код:

library ieee;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity xxxx is  
        port (
        clk                 : in std_logic;
    rst                 : in std_logic;
    slash        : in integer range 0 to 15;
    din          : in std_logic_vector (15 downto 0);
    data_out     : out std_logic_vector (15 downto 0) := X"0000"
              );
end xxxx;
architecture rtl of xxxx is 
signal reg_empty : STD_LOGIC_VECTOR(3 DOWNTO 0):= (OTHERS => '0');
begin
     process (clk)                                                
       begin                                                        
       if clk'event and clk = '1' then 
                if rst = '1' then
                    data_out <= X"0000";
                else
                    data_out <= din(slash-1 downto 0) & din(15 downto slash); 
                end if;
      end if;  
    end process; 
end architecture;

 

В ISE 14.7 проверял - синтезируется, в QUARTUS 11.0 - выдает ошибку : Error (10394): VHDL error at xxxx.vhd: left bound of range must be a constant.

Как объяснить Quartus-у , что эту конструкцию нужно построить на мультиплексорах...а не плеваться на нее...?! :laughing:

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот если подменить строку для выдачи data_out на =>

data_out <= to_stdlogicvector(to_bitvector(din) ror slash);

то все прекрасно синтезится в ISE и quartus-e ...

вроде бы то же самое написано по функционалу, но видать как-то там эти функции так написаны, что синтезатору они понятнее описаны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...