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

почему не работает j:= i rem 12; ?

должен быть генератор выдающий последовательность 204 байта

 

В8,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,910,11,12,1,2,3,4,5,6,7,8,9,10,11,12

,1,2,3 ...и.т.д. до конца посылки в 204 байта

 

но вот незадача ISE выдает ошибку на строке "j:= i rem 12;"

с пояснением "ERROR:Xst:769 - "D:/xilinx_diplom/svert_peremej_3/generator.vhd" line 26: Operator <REMAINDER> must have constant operands or first operand must be power of 2"

 

вот собственно код

 library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity generator is
     Port ( clk : in  STD_LOGIC;
            potok : out  STD_LOGIC_vector (7 downto 0);
               sinxro : out  STD_LOGIC );
end generator;

architecture Behavioral of generator is

begin

generator: process(clk)
variable i: integer range 1 to 204;   -- 408
variable j: integer range 1 to 12; 

begin
     if(clk'event and clk='1') then  -- выставление сигнала на фронте импульса
     
         case i is -- формирование выходного сигнала
             when 1 =>           potok <=x"b8"; --B8
             when others =>
                     j:= i rem 12;
                     potok <= conv_std_logic_vector(j,8);
         end case;


         case i is -- формирование синхро импульса
             when 1  =>           sinxro <='1';
             when others =>      sinxro <='0';
         end case;

         i:=i + 1;
     end if;

end process generator;


end Behavioral;

 

подскажите в чем я ошибаюсь

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


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

должен быть генератор выдающий последовательность 204 байта

 

В8,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,910,11,12,1,2,3,4,5,6,7,8,9,10,11,12

,1,2,3 ...и.т.д. до конца посылки в 204 байта

 

но вот незадача ISE выдает ошибку на строке "j:= i rem 12;"

с пояснением "ERROR:Xst:769 - "D:/xilinx_diplom/svert_peremej_3/generator.vhd" line 26: Operator <REMAINDER> must have constant operands or first operand must be power of 2"

...

подскажите в чем я ошибаюсь

 

Ну, по-видимому в том, что XST не может синтезировать схему делителя произвольного числа на константу, во всяком случае, на сколько я знаю, не обязан:). Меняйте код, зачем Вам громоздкая схема комбинаторного делителя? Пусть лучше счетчик считает до 12 и сбрасывается в 0(1). Ну и второй счетчик, для формирования длины всей последовательности.

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


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

спасибо за идею вот что у меня получилось

 

generator: process(clk)

variable i: integer range 1 to 204:=1;

variable j: STD_LOGIC_vector (7 downto 0):=x"01";

 

begin

if(clk'event and clk='1') then -- выставление сигнала на фронте импульса

 

if j >= x"0d" then j:=x"01"; end if;

 

case i is -- формирование выходного сигнала

when 1 =>

sinxro <='1';

potok <=x"b8"; --B8

when others =>

sinxro <='0';

potok <= j ;

end case;

i:=i + 1; j:=j + 1;

end if;

 

end process generator;

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


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

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

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

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

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

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

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

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

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

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