kola 0 9 декабря, 2022 Опубликовано 9 декабря, 2022 · Жалоба Добрый день, делаю дискретно косинусное преобразование в среде quarus II но есть нюанс. Выдает ошибку Error (10414): VHDL Unsupported Feature error at main.vhd(13): cannot synthesize non-constant real objects or values, на мои созданные типы. В чем может быть проблема? Первый файл: library IEEE; use IEEE.STD_LOGIC_1164.ALL; package add is type matrixreal is array(0 to 7, 0 to 7) of real range -255.0 to 255.0; end package add; Второй файл Возможно ошибок еще много, еще изучаю vhdl язык. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; use ieee.std_logic_unsigned.all; --use ieee.std_logic_arith.all; use work.add.all; entity main is port ( Clk : in std_logic; Start : in std_logic; Din : in matrixreal; Done : out std_logic; Dout : out matrixreal ); end main; architecture main of main is begin process variable i, j, k: INTEGER; variable OutBlock : matrixreal; variable temp : matrixreal; variable dct : matrixreal; variable dctt : matrixreal; variable OutAnother: matrixreal; begin dct := ( (0.354, 0.354, 0.354, 0.354, 0.354, 0.354, 0.354, 0.354), (0.490, 0.416, 0.278, 0.098, -0.098, -0.278, -0.416, -0.490), (0.462, 0.191, -0.191, -0.462, -0.462, -0.191, 0.191, 0.462), (0.416, -0.098, -0.490, -0.278, 0.278, 0.490, 0.098, -0.416), (0.354, -0.354, -0.354, -0.354, 0.354, -0.354, -0.354, 0.354), (0.278, -0.490, 0.098, 0.416, -0.416, -0.098, 0.490, -0.278), (0.191, 0.462, 0.462, -0.191, -0.191, 0.462, -0.462, 0.191), (0.098, 0.278, 0.416, -0.490, 0.490, -0.416, 0.278, -0.098)); wait until Start = '1'; Done <= '0'; for i in 0 to 7 loop for j in 0 to 7 loop temp(i,j) := 0.0; OutBlock(i,j) := 0.0; Dout(i,j) <= 0.0; end loop; end loop; for i in 0 to 7 loop for j in 0 to 7 loop for k in 0 to 7 loop temp(i,j) := temp(i,j) + dct(i,k) * Din(k,j); end loop; end loop; end loop; for i in 0 to 7 loop for j in 0 to 7 loop dctt(i,j) := temp(j,i); end loop; end loop; for i in 0 to 7 loop for j in 0 to 7 loop for k in 0 to 7 loop OutBlock(i,j) := OutBlock(i,j) + dct(i,k) * dctt(k,j); end loop; end loop; end loop; for i in 0 to 7 loop for j in 0 to 7 loop OutAnother(i,j) := OutBlock(j,i); end loop; end loop; wait until Clk = '1' and Clk'event; Done <= '1'; for i in 0 to 7 loop for j in 0 to 7 loop wait until Clk = '1' and Clk'event; Done <= '0'; Dout(i,j)<= OutAnother(i,j); end loop; end loop; end process; end main; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 декабря, 2022 Опубликовано 9 декабря, 2022 · Жалоба он же пишет вам что синтез вещественных типов не поддерживается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kola 0 9 декабря, 2022 Опубликовано 9 декабря, 2022 · Жалоба 42 минуты назад, des00 сказал: он же пишет вам что синтез вещественных типов не поддерживается. Я не понимаю как её исправить. Вот все ошибки которые выдает Цитата Error (10414): VHDL Unsupported Feature error at main.vhd(13): cannot synthesize non-constant real objects or values Error (10414): VHDL Unsupported Feature error at main.vhd(15): cannot synthesize non-constant real objects or values Error (12153): Can't elaborate top-level user hierarchy Error: Quartus II 64-Bit Analysis & Synthesis was unsuccessful. 3 errors, 1 warning Error: Peak virtual memory: 497 megabytes Error: Processing ended: Fri Dec 09 19:25:35 2022 Error: Elapsed time: 00:00:02 Error: Total CPU time (on all processors): 00:00:01 Error (293001): Quartus II Full Compilation was unsuccessful. 5 errors, 1 warning Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 декабря, 2022 Опубликовано 9 декабря, 2022 · Жалоба 1 hour ago, kola said: Я не понимаю как её исправить. Никак не исправить. Нужно либо уходить на фиксированную точку, либо, если вам непременно нужно считать в плавучке, то брать IEEE-754, по учебнику делать модули выполняющие нужные операции, а потом интегрировать эти модули в ваше дкт ядро. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kola 0 13 декабря, 2022 Опубликовано 13 декабря, 2022 · Жалоба В 09.12.2022 в 21:17, des00 сказал: Никак не исправить. Нужно либо уходить на фиксированную точку, либо, если вам непременно нужно считать в плавучке, то брать IEEE-754, по учебнику делать модули выполняющие нужные операции, а потом интегрировать эти модули в ваше дкт ядро. Подскажите точнее, как мне перейти на "фиксированную точку"? Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quato_a 3 13 декабря, 2022 Опубликовано 13 декабря, 2022 · Жалоба 1 hour ago, kola said: Подскажите точнее, как мне перейти на "фиксированную точку"? Заранее спасибо. работать с сигналами формата векторов, в которых часть бит представляет собой целочисленную составляющую (integer part) и другая часть - дробная (fractional part). не забыть еще про знак для знаковых векторов гугл - fixed point arithmetic in vhdl http://math.unife.it/ing/informazione/Linguaggi-hw/lucidi-delle-lezioni/lucidi-anni-precedenti-al-2019-2020/aritmetica-fixed-e-floating-point-in-vhdl а вообще вроде DCT было на opencores.org Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Viktuar 0 13 декабря, 2022 Опубликовано 13 декабря, 2022 · Жалоба Вообще в vhdl есть стандартные библиотеки (packages в библиотеке ieee) для фиксированной и плавающей точки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 14 декабря, 2022 Опубликовано 14 декабря, 2022 · Жалоба 8 hours ago, Viktuar said: Вообще в vhdl есть стандартные библиотеки (packages в библиотеке ieee) для фиксированной и плавающей точки. а вы попробуйте синтезировать(не модулировать в симуляторе!!!) что-то с помощью этого пакета) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться