[an error occurred while processing this directive]
Может кто знает, как можно красиво преобразовать Integer в Перечисляемый тип ?
(«Телесистемы»: Конференция «Программируемые логические схемы и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Vasilij 04 ноября 2004 г. 14:01

Есть такие сигналы:
type nios_0_nios_opcode_type is ( ADD, EXT8s, ADDI, SUB, ST8s, SUBI, CMP, CMPI, SAVE, LSL, TRAP, LSLI, JMPC, LSR, CALLC, LSRI, ASR, NOT_c, ASRI, NEG, MOV, ABS_c, MOVI, SEXT8, AND_c, ANDN, RLC, OR_c, RRC, XOR_c, BGEN, SWAP, EXT8d, SKP0, SKP1, LD, ST, STS8s, RESTORE, ADDC, TRET, SUBC, ST8d, FILL8, MSTEP, BR, BSR, SKPRz, PFXIO, SKPS, PFX, WRCTL, STP, RDCTL, LDP, SKPRnz, STS, JMP, LDS, CALL );
signal instr_opcode : nios_0_nios_opcode_type;

и

signal opcode : STD_LOGIC_VECTOR (6 DOWNTO 0);


Надо как-то преобразовать opcode в instr_opcode (исключительно для симуляции), т.е.
"0000000" -> ADD,
"0000001" -> EXT8s,
ну и т.д.

Первая мысль - что-то вроде instr_opcode <= nios_0_nios_opcode_type(CONV_INTEGER(opcode)) (но так делать нельзя, т.к. integer и enumerated не являются близкими типами)

Вторая мысль - сделать с помощью CASE:
case opcode is
when "0000000" => instr_opcode <= ADD;
when "0000001" => instr_opcode <= EXT8s;
.. ну и т.д. (но уж больно коряво выглядит, да и писать долго)

Может кто знает другие, более элегантные решения ? :)

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru