come correggere questo errore?

S

Simu

Guest
durante la compilazione il mio programma scritto per la divisione modulare e Montgomery moltiplicazione modulare in Verilog, spesso ottengo il seguente errore ...

---- Non può semplificare operatore REM.
---- Loop è iterata 64 volte.Serie Usa '-loop_iteration_limit XX' per scorrere più.

u può dirmi cosa si tratta?

 
Codice di Montgomery moltiplicazione modulare
Modulo di mont (x, y, n, m, z);
input [3:0] x;
input [3:0] Y;
input [3:0] m;
input [3:0] n;
output [3:0] z;
reg [3:0] a;
reg [3:0] v;
reg [3:0] p;
reg [3:0] q;
reg [3:0] z;
reg [3:0] u;
reg [7:0] t;
sempre @ (x, y)
iniziare
assegnare un y =;
assegnare v = x;
assegnare p = n;
fine
iniziale
iniziare
assegnare u = 0;
fine
sempre @ (x, y)
while (p! = 0) begin
if (a% 2 == 0)
assegnare q = 0;
altro
assegnare q = 1;
assegnare un = (aq) / 2;
assegnare t = ((U (q * v)) / 2);
assegnare u = t / m 2%;
assegnare p = p-1;
fine
sempre @ (x, y)
if (u> = m)
assegnare z = um;
altro
assegnare z = u;
endmodule

Codice per modulare la divisione

Modulo moddiv (x, y, n, z);
input [3:0] x;
input [3:0] Y;
/ / input [3:0] m;
input [3:0] n;
output [3:0] z;
reg [3:0] z;
wire [3:0] m;
reg a, b, u, p;
reg v, l;
reg t, q;
sempre @ (x, y)
iniziare
assegnare un y =;
assegnare b = m;
assegnare u = x;
assegnare p = n;
fine
iniziale di iniziare
assegnare v = 0;
assegnare l = 0;
fine
sempre @ (x, y)
while (p! = 0) begin
while (a% 2 == 0) begin
assegnare a = a / 2;
assegnare u = u / m 2%;
assegnare p = p-1;
assegnare l = l-1;
fine
if (l <0) begin
assegnare t = a;
assegnare a = b;
assegnare b = t;
assegnare t = u;
assegnare u = v;
assegnare v = t;
assegnare l =-l;
fine
if ((a b)% 4 == 0)
assegnare q = 1;
altro
assegnare q = -1;
assegnare a = (a q * b) / 4;
assegnare u = (u q * v) / 4% m;
assegnare p = p-1;
assegnare l = l-1;
fine
sempre @ (x, y)
if (b == 1)
assegnare z = v;
altro
assegnare z = mv;
endmodule

Qui per rappresentare mod M, ho usato% M; c'è altro modo per rappresentare mod M.
o c'è un modo per correggere questo errore?

 
Ciao,

Vedo, che il ciclo si ripete all'infinito.Che sarebbe anche un problema di programmazione procedurale con un computer, ma potrebbe essere sintattica del codice corretto.In HDL è anche fisica impossibile, causa una struttura parallela logica deve essere dedotta da un ciclo iterativo.Questo sarebbe equivalente a un conteggio infinito cancello.

Non ho tempo adesso, a guardare più a fondo il codice, può essere un semplice errore di codifica.

Saluti,
Frank

 
Ciao,

prendere in esame il codice moddiv più a fondo, mi rendo conto che entrambi i cicli iterativi
Codice:

while (p! = 0) begin

while (a% 2 == 0) begin

assegnare a = a / 2;

assegnare u = u / m 2%;

assegnare p = p-1;

assegnare l = l-1;

fine

//...

fine
 
Thankyou

Algoritmo per MODDIVINGRESSI: m: 2 ^ (n-1) <m <2 ^ n, MCD (m, 2) = 1 & prime
x, y: 0 <= x <m, 0 <y <m
OUTPUT: z = x / y m mod
ALGORITHM
a: = y; b: = m; U: = x;
V: = 0; p: = n; l: = 0;
mentre p! = 0 do
mentre un mod 2 = 0 do
a: = a / 2; u: = u / 2 mod m;
p: = p-1; l: = l-1;
endwhile
se l <0 Then
t: = a; a: = b; b: = t;
t: = u;: u = v, v: = t;
l: =-l;
end if
if (a b) mod 4 = 0, allora q: = 1;
else q: = -1;
a: = (a q * b) / 4;
U: = (u q * v) / 4 mod m;
p: = p-1;
l: = l-1;
endwhile
se b = 1 allora Z: = v;
else / * b = -1 * /
z: = mv;Aggiunto dopo 30 minuti:
Algoritmo per MONTGOMERY MOLTIPLICAZIONE MODULARIngressi: m: 2 ^ (n-1) <m <2 ^ n, MCD (m, 2) = 1;
x, y: 0 <= x, y <m
Uscita: z = xy2 ^ m n mod
ALGORITHM
a: = y, u: = 0; v: = x;: p = n;
mentre p! = 0 do
se un mod 2 = 0, allora q: = 0 else
q: = 1;
a: = (aq) / 2; U: = (u qv) / 2 mod m;
p: = p-1;
endwhile
se> U = m allora z = um;
altro
z: = u;

essendo un principiante in Verilog mi sento difficile correggere questo errore.
Ho anche provato alcuni altri algoritmi per questa divisione modulare e montgomery moltiplicazione modulare che ha anche portato lo stesso errore

 

Welcome to EDABoard.com

Sponsor

Back
Top