vak: (Улыбка)
[personal profile] vak
Попробовал скомпилить исходники чипа Am2901 используя GHDL. Падает по внутренней ошибке, пытаясь обработать двунаправленные сигналы.
ghdl -a -fexplicit --ieee=synopsys ../types.vhd
ghdl -a -fexplicit --ieee=synopsys ../MVL7_functions.vhd
ghdl -a -fexplicit --ieee=synopsys ../synthesis_types.vhd
ghdl -a -fexplicit --ieee=synopsys ../funct_blocks_alg_beh/funct_block_alg_beh2901.vhdl
ghdl -a -fexplicit --ieee=synopsys ../test_vectors_2901.vhdl
../test_vectors_2901.vhdl:50:52: can't resolve overload for resolution function
../test_vectors_2901.vhdl:50:52: candidate functions are:
disp_subprg: cannot handle IIR_KIND_OVERLOAD_LIST (??:??:??:)

******************** GHDL Bug occured ****************************
Please report this bug on http://gna.org/projects/ghdl
GHDL release: GHDL 0.29 (20100109) [Sokcho edition]
Compiled with GNAT Version: 4.4.0 20080314 (experimental)
In directory: /Users/vak/Project/Besm-6/micro-besm/tests/2901/ghdl/
Command line:
ghdl -a -fexplicit --ieee=synopsys ../test_vectors_2901.vhdl
Exception TYPES.INTERNAL_ERROR raised
Exception information:
Exception name: TYPES.INTERNAL_ERROR
Message: errorout.adb:71
Call stack traceback locations:
0xf913b 0x10082b 0x1f8d72 0x1fb205 0x1fb334 0x1fb6f2 0x21ebd9 0x22101c 0x1fff15 0x226da2 0x22bfae 0x10a7da 0x1f0149 0x1ecb28 0xc1de0 0x29df 0x1f04
******************************************************************

GHDL не может справиться с функцией WiredOr в строке:
    signal RAM0, RAM3, Q0, Q3 : WiredOr MVL7;

Date: 2016-10-03 11:31 (UTC)
From: [identity profile] andrey-yurin.livejournal.com
Исходник, как я понимаю, VHDL? А как функция "WiredOr" задана?

Date: 2016-10-06 05:34 (UTC)
From: [identity profile] andrey-yurin.livejournal.com
Не, я не к тому, что функция задана неправильно и я сейчас весь такой молодЕц возьму и найду ошибку. Я к тому, что мне как-то в голову никогда не приходило тип сигнала определять функцией. Двунаправленный сигнал я использовал лишь как сигнал, определённый для внешнего вывода ПЛИС. Там конструкция получалась примерно такая:

entity траляля is
port(
...
I2C_DATA : inout std_logic;
...);

...

architecture

with i2c_direction select
I2C_DATA <= int_i2c_data_out when '1',
'Z' when others;

int_i2c_data_in <= I2C_DATA ;

end architecture;

здесь int_i2c_data_out - сигнал на выход, который появляется при активном сигнале i2c_direction. Ну а в int_i2c_data_in благополучно считывается всё то, что присутсвует на выводе I2C_DATA. Fitter всё это дело запаковывает в регистр In_Out структуры, который имеет аппаратную поддержку третьего состояния и имеет сигнал enable. А вот что бы использовать двунаправленные сигналы внутри ядра - вот об этом я как-то даже не задумывался. Вроде где-то краем уха слышал, что у XilinX внутрях есть шины с Z-состояниями. У Alter-ы такого нет. Поэтому во что будет превращена конструкция типа inout - не знаю. Может быть Fitter её вообще прожёвывать откажется.
Ну и по поводу того, что бы задавать тип сигнала функцией. Мне даже как-то в голове и не увязать, что именно это будет означать физически. Не, ну ладно, например, сигнал типа: "integer". Понятно, что оно означает и понятно, что это будет синтезировано в шину данных. Так же понятен и std_logic_vector. А вот что бы сигнал задать функцией. Вот это в диковинку, честно говоря. Я чего исходник и хотел посмотреть :)

Date: 2016-10-06 06:33 (UTC)
From: [identity profile] andrey-yurin.livejournal.com
Спасибо. Скачал, посмотрел бегло. Но сходу в структуре проекта что есть что не разобрался. Надо будет попозже ещё раз курнуть этот вопрос. А вообще в глаза бросается стиль, которым всё написано. Резко отличается от того, которым пишу я и который видел у коллег. Что ещё любопытно - такой стиль мне попадался в исходниках Альтеры. Интересно, это связано с тем, что это такие требования по стилю (много мелких файлов, одни постоянно ссылаются на другие) или просто так принято. У меня-то обычно портянка получается длинная и объёмная, как произведения Достоевского. И дробится всего на два-три файла.