Я изучал проектирование и моделирование схем Педрони в VHDL с 2010 года. У меня есть плата разработки Open3S500E, и я использую Xilinx ISE 14.7 (новые версии не поддерживают Spartan 3). Я застрял на «Упражнении 9.5: функция my_not», которое требует использования таблицы разрешения (?):
-----------------------------------------------
CONSTANT not_table: stdlogic_1d :=
-----------------------------------------------
-- U X 0 1 Z W L H -
-----------------------------------------------
( 'U', 'X', '1', '0', 'X', 'X', '1', '0', 'X');
-----------------------------------------------
независимо от того, что я делал, всегда получал ошибку Unsupported type stdlogic_1d .
Я пробовал разные вещи, но не удалось каждый раз. Наконец я решил скопировать и собрать Пример 9.6, в котором использовалась похожая таблица:
TYPE stdlogic_table IS ARRAY(STD_ULOGIC, STD_ULOGIC) OF STD_ULOGIC;
CONSTANT and_table: stdlogic_table := (
-----------------------------------------------
--U X 0 1 Z W L H -
-----------------------------------------------
( 'U', 'U', '0', 'U', 'U', 'U', '0', 'U', 'U' ), --| U |
( 'U', 'X', '0', 'X', 'X', 'X', '0', 'X', 'X' ), --| X |
( '0', '0', '0', '0', '0', '0', '0', '0', '0' ), --| 0 |
( 'U', 'X', '0', '1', 'X', 'X', '0', '1', 'X' ), --| 1 |
( 'U', 'X', '0', 'X', 'X', 'X', '0', 'X', 'X' ), --| Z |
( 'U', 'X', '0', 'X', 'X', 'X', '0', 'X', 'X' ), --| W |
( '0', '0', '0', '0', '0', '0', '0', '0', '0' ), --| L |
( 'U', 'X', '0', '1', 'X', 'X', '0', '1', 'X' ), --| H |
( 'U', 'X', '0', 'X', 'X', 'X', '0', 'X', 'X' )); --| - |
----------------------------------------------- `
.. и я получил тот же результат. Наконец, я пришел к выводу, что со Спартанцем 3 должно быть что-то не так, и изменил семью на Спартанец 6, который работал как шарм.
Здесь у меня есть пара вопросов. Почему это работает на спартанец 6 и спартанец 3? Об индексировании с помощью STD_LOGI C, верно? Я думал, что это особенность языка c, а не аппаратная часть. Значения STD_LOGI C перечислены где-нибудь? Если так, то какая разница, если я индексирую с помощью U или 0? Я знаю, что это своего рода конкретный c вопрос, и в конце концов он не имеет значения, так как Спартанец 3 уже древний, но я хотел бы знать ответ.
Отказ от ответственности: я новичок VHDL ie и программист-любитель.
---------Package:-----------------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
----------------------------------------------------------------------
PACKAGE PEX9_6 IS
FUNCTION my_and (a, b: STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR;
END PACKAGE;
----------------------------------------------------------------------
PACKAGE BODY PEX9_6 IS
TYPE stdlogic_table IS ARRAY(STD_ULOGIC, STD_ULOGIC) OF STD_ULOGIC;
CONSTANT and_table: stdlogic_table := (
-----------------------------------------------
--UX01ZWLH-
-----------------------------------------------
( 'U', 'U', '0', 'U', 'U', 'U', '0', 'U', 'U' ), --| U |
( 'U', 'X', '0', 'X', 'X', 'X', '0', 'X', 'X' ), --| X |
( '0', '0', '0', '0', '0', '0', '0', '0', '0' ), --| 0 |
( 'U', 'X', '0', '1', 'X', 'X', '0', '1', 'X' ), --| 1 |
( 'U', 'X', '0', 'X', 'X', 'X', '0', 'X', 'X' ), --| Z |
( 'U', 'X', '0', 'X', 'X', 'X', '0', 'X', 'X' ), --| W |
( '0', '0', '0', '0', '0', '0', '0', '0', '0' ), --| L |
( 'U', 'X', '0', '1', 'X', 'X', '0', '1', 'X' ), --| H |
( 'U', 'X', '0', 'X', 'X', 'X', '0', 'X', 'X' )); --| - |
-----------------------------------------------
FUNCTION my_and (a, b: STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR IS
ALIAS aa: STD_LOGIC_VECTOR(1 TO a'LENGTH) IS a;
ALIAS bb: STD_LOGIC_VECTOR(1 TO b'LENGTH) IS b;
VARIABLE result: STD_LOGIC_VECTOR(1 TO a'LENGTH);
BEGIN
FOR i IN result'RANGE LOOP
result(i) := and_table (aa(i), bb(i));
END LOOP;
RETURN result;
END FUNCTION;
END PACKAGE BODY;
Основной код:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
library functions_and_procedures;
USE functions_and_procedures.PEX9_6.all;
-------------------------------------------------
ENTITY EX9_6 IS
PORT (x1, x2: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END ENTITY;
-------------------------------------------------
ARCHITECTURE myand OF EX9_6 IS
BEGIN
y <= my_and(x1, x2);
END ARCHITECTURE;
-------------------------------------------------
Error message: ERROR:Xst:2092 - "D:/FPGA/Projects/Pedroni2010/PEX9_6.vhd" line 40: Unsupported type stdlogic_table.