kako to ispraviti ovu pogrešku?

S

Simu

Guest
dok sastavljanju moj program napisan za modularne podjele i Montgomery modularno množenje u verilog, ja često dobiti slijedeće greška ...

---- Ne mogu pojednostaviti operatora REM.
---- Loop je ponovljena 64 puta.Koristiti "set-loop_iteration_limit XX 'to ponoviti više.

može u reći mene što je to?

 
Kod za Montgomery modularno množenje
modul mont (x, y, m, n, z);
input [3:0] x;
input [3:0] y;
input [3:0] m;
input [3:0] n;
izlaz [3:0] Z;
reg [3:0];
reg [3:0] v;
reg [3:0] p;
reg [3:0] q;
reg [3:0] Z;
reg [3:0] u;
reg [7:0] t;
Uvijek @ (x, y)
započeti
dodijeliti = y;
dodijeliti v = x;
dodijeliti p = n;
kraj
početna
započeti
dodijeliti u = 0;
kraj
Uvijek @ (x, y)
while (p! = 0) počinju
if (a% 2 == 0)
dodijeliti q = 0;
drugi
dodijeliti q = 1;
dodijeliti = (aq) / 2;
dodijeliti t = ((U (q * v)) / 2);
dodijeliti u = t / 2% m;
dodijeliti p = p-1;
kraj
Uvijek @ (x, y)
ako je (u> = m)
dodijeliti z = um;
drugi
dodijeliti z = u;
endmodule

Kod za Modularna podjela

modul moddiv (x, y, n, z);
input [3:0] x;
input [3:0] y;
/ / input [3:0] m;
input [3:0] n;
izlaz [3:0] Z;
reg [3:0] Z;
žice [3:0] m;
reg., b, u, p;
reg v, l;
reg. t, q;
Uvijek @ (x, y)
započeti
dodijeliti = y;
dodijeliti b = m;
dodijeliti u = x;
dodijeliti p = n;
kraj
početna begin
dodijeliti v = 0;
dodijeliti l = 0;
kraj
Uvijek @ (x, y)
while (p! = 0) počinju
while (% 2 == 0) počinju
dodijeliti = / 2;
dodijeliti u = U / 2% m;
dodijeliti p = p-1;
dodijeliti l = L-1;
kraj
if (l <0) počinju
dodijeliti = t;
dodijeliti = b;
dodijeliti b = t;
dodijeliti t = u;
dodijeliti u = v;
dodijeliti v = t;
dodijeliti l =-l;
kraj
if ((a b)% 4 == 0)
dodijeliti q = 1;
drugi
dodijeliti q = -1;
dodijeliti = (a b * q) / 4;
dodijeliti u = (u q * v) / 4 m%;
dodijeliti p = p-1;
dodijeliti l = L-1;
kraj
Uvijek @ (x, y)
if (b == 1)
dodijeliti z = v;
drugi
dodijeliti z = mv;
endmodule

Evo za zastupanje mod M, JA imati iskorišten% M; je li neki drugi način da predstavljaju mod M.
ili postoji li neki način to ispraviti ovu pogrešku?

 
Zdravo,

Vidim, da se petlja iterira beskonačno.To bi bilo isto pitanje u proceduralnim programskim s računalom, ali bi moglo biti sintaktička ispravan kod.U HDL je također fizički nemoguće, uzrok paralelni logika struktura mora biti zaključen s iterativnom petlju.Ovo će biti ekvivalent beskonačnu vrata računati.

Nemam vremena sada, pogledati dublje u kôd, on svibanj biti jednostavan greška kodiranje.

Pozdravi,
Frank

 
Zdravo,

examinating moddiv kod više temeljito, vidim da su oba iterativna petlje
Šifra:

while (p! = 0) počinju

while (% 2 == 0) počinju

dodijeliti = / 2;

dodijeliti u = U / 2% m;

dodijeliti p = p-1;

dodijeliti l = L-1;

kraj

//...

kraj
 
Hvala

Algoritam za MODDIVUlazi: m: 2 ^ (n-1) <m <2 ^ n, GCD (m, 2) = 1 & premijera
x, y: 0 <= x <m, 0 <y <m
REZULTATI: z = x / y mod m
ALGORITMA
: = y, b: = m; u: = x;
v: = 0; p: = n; l: = 0;
dok je p! = 0 činiti
a mod 2 = 0 činiti
: = / 2, u: = U / 2 mod m;
p: = p-1; l: = l-1;
endwhile
ako l <0 then
t: =,: b = b: = t;
t: = U; u: = v; v: = t;
l: = l;
end if
ako je (a b) mod 4 = 0 then q: = 1;
else q: = -1;
: = (a b * q) / 4;
u: = (U q * v) / 4 mod m;
p: = p-1;
l: = l-1;
endwhile
ako je b = 1 then z: = v;
else / * b = -1 * /
z: = MV;Dodano nakon 30 minuta:
Algoritam za množenje MONTGOMERY MODULARulazi: m: 2 ^ (n-1) <m <2 ^ n, GCD (m, 2) = 1;
x, y: 0 <= x, y <m
output: z = xy2 ^ n mod m
ALGORITMA
: = y; u: = 0; v: = x; p: = n;
dok je p! = 0 činiti
ako mod 2 = 0 then q: = 0 else
q: = 1;
: = (aq) / 2; u: = (U qv) / 2 mod m;
p: = p-1;
endwhile
ako u> = m onda z = um;
drugi
z: = U;

biti početnik u verilog Osjećam teško u tom ispravljanju pogrešaka.
Također sam pokušao neke druge algoritme za ovu podjelu i modularne Montgomery modularno množenje koji je također rezultiralo jednak greška

 

Welcome to EDABoard.com

Sponsor

Back
Top