Jako iż dopiero zaczynam zabawę z tym językiem pojawił mi się problem potrzebuję zrobić nietypowy multiplekser gdyż - ma on być 16bitowy przy czym chcę sprawić aby przy wyborze SELECT raz mi dane przechodziły z daneARM do danePAMIECI, a przy niewybranym SELECT kierunek odwrotny czyli z danePAMIECI do daneFPGA
czyli najprościej:
SELECT=1 to danePAMIECI -> daneFPGA
SELECT=0 to daneARM -> danePAMIECI
zamieszczam tutaj mój program a raczej to co wyszło z prób jego napisania:)
Kod: Zaznacz cały
module mux_inout(daneFPGA, daneARM, danePAMIECI, select);
output [0:15] daneFPGA;
input [0:15] daneARM;
inout [0:15] danePAMIECI;
input select;
reg [0:15] daneFPGA;
reg [0:15] danePAMIECI;
always @(select or danePAMIECI or daneARM)
if(select)
daneFPGA = danePAMIECI;
else
danePAMIECI = daneARM;
endmodule
Illegal redeclaration of inout 'danePAMIECI' as a reg
próbowałem zmienić deklarację
reg [0:15] danePAMIECI; na wire [0:15] danePAMIECI;
ale wtedy występuje mi nie dość ze ten sam problem z deklaracja to jeszcze dochodzą następne:
-Illegal left hand side of blocking assignment
lub jego odpowiednik gdy próbowałem zamieniać na nieblokujące:
-Illegal left hand side of nonblocking assignment
Nie wiem dlaczego ten wspaniały program nie rozumie moich intencji
Byłbym wdzięczny za pomoc w rozwiązaniu tego problemu gdyż domyślam się iż dla kogoś wprawionego to błahostka:)
w sumie idea jest bardzo prosta tak jak mówisz w zależności od sygnału SELECT=0 dane maja być przesyłane albo z magistrali A do B, albo gdy SELECT=1 przesył ma być w innym kierunku z magistrali B do C.
Wydaje mi się, iż jest to możliwe do wykonania nawet na zasadzie opisu asynchronicznego na czym właśnie mi zależy, gdyż nie mogę sobie pozwolić na wprowadzenie dodatkowego sygnału zegarowego ponieważ układ i tak już pędzi 40Mhz, a chcąc sterować ten przesył synchronicznie musiałbym wprowadzić kolejny zegar tyle ze 80MHz, a to trochę więcej i większe problemy z liniami długimi na płytce.
Mój problem polega tylko ona tym, iż nie wiem jak zadeklarować i opisać taką kostkę - z tym że ja bym powiedział, iż ma to być nie o tyle nietypowy mux co połączenie w jednym multipleksera z demultiplekserem.
Próbowałem jeszcze zmienić deklarację wszystkich we/wy na typu inout lecz też niepomaga - problem z tym iż przy danej typu inout nie może być użyta deklaracja typu reg - a ja nie wiem w jaki sposób rozwiązać ten problem.