Jump to content

    
Sign in to follow this  
porty

ADHL: как сгруппировать Input и Output в единую связку?

Recommended Posts

Добрый день

 

Имеется SubDesign

например такой

SubDesign t_Arbitr
(
clock			:	Input;

A_ADDR[17..0]		:	Input;
A_DATA[15..0]		:	Input;
A_TAG			:	Input;
A_REQ			:	Input;
A_ACK			:	Output;	

B_ADDR[17..0]		:	Input;
B_DATA[15..0]		:	Input;
B_TAG			:	Input;
B_REQ			:	Input;
B_ACK			:	Output;

M_ADDR[17..0]		:	Output;
M_DATA[15..0]		:	Output;
M_TAG			:	Output;
M_REQ			:	Output;
M_ACK			:	Input;	
)

 

У которого A_xxxx и B_xxxx - соединяется с подчинёнными ведомыми арбитрами а M_xxxx с ведущим.

Как это переписать на ADHL чтоб было только одно символьное имя?

Т.е. типа:

 

SubDesign t_Arbitr
(
clock			:	Input;

A_BIND[36..0]		:	BiDir;	
B_BIND[36..0]		:	BiDir;

M_BIND[36..0]		:	BiDir;
)

 

а внутри арбитра уже разделить на конкретные имена?

 

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

при попытке написать

arbitr_master.a_bind = arbitr_slave.m_bind;

 

жалуется на то что невозможно присвоить к порту вывода.

 

Приходится извращаться:

 

variable
...
n[36..0]:node;
...
begin
...
n=arbitr_master.a_bind;
n=arbitr_slave.m_bind;
...

 

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

 

Как описать чтоб можно было сделать напрямую

arbitr_master.a_bind = arbitr_slave.m_bind;

Edited by Porty

Share this post


Link to post
Share on other sites
Bidir Вы можете поставить только снаружи плисины.

Где то в самих исходниках альтеры видел что бидир внутри компонентов использовался.

М.б. не сам бидир а TRI буфер нельзя использовать, т.к. Z состояние реально можно получить только драйверами пинов.

Edited by Porty

Share this post


Link to post
Share on other sites

TRI есть в каждом LUTe, так что для развязки сигналов его и используют. В TRI не используются bidir сигналы, и вы можете с помощью арбитров соединить входы-выходы как Вам надо.

пример от альтеры

Описание TRI

 

Share this post


Link to post
Share on other sites

стоп, вопрос был как из

 

M_ADDR[17..0] : Output;

M_DATA[15..0] : Output;

M_TAG : Output;

M_REQ : Output;

M_ACK : Input;

 

сделать одно имя и как это описать чтоб в сотнях местах не лепить и не наделать ошибки, и только в этом,

давайте о TRI и CHETYRE поговорим в личке или другой ветке.

Share this post


Link to post
Share on other sites
стоп, вопрос был как из

сделать одно имя и как это описать чтоб в сотнях местах не лепить и не наделать ошибки, и только в этом,

никак, если мне не изменяет память, в AHDL нет поддержки массивов векторов. переходите на VHDL/SV

Share this post


Link to post
Share on other sites
сделать одно имя

 

Можно и одномерным массивом работать

типа

parameters (width = 4);
subdesign generat_e
(
a[width-1..0]   : input;
b[width-1..0]   : output;
c[2*width-1..0] : output;
)

begin
for i in 0 to width-1 generate
b[i] = a[width-1-i];
c[2*i] = a[i];
c[2*i+1] = a[i];
end generate;
end;

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this