modo per forzare il syntheziser a mantenere un segnale

F

Farouk

Guest
I wrot un progetto VHDL e ho bisogno di ritardare un segnale per certo numero di orologi, scrivo il codice per il registro a scorrimento e ho usato la sua produzione.quando ho synthesuzed che ricevo un warining che il segnale (dichiarazione che certifichi che il registro a scorrimento) non viene utilizzato ed ottimizzato.Come posso forzare il sintetizzatore di mantenere questo segnale così com'è.

 
Salve,

I'm surpised.Se si utilizza l'ultimo pezzo del tuo registro a scorrimento come uscita, il sintetizzatore può conservare il registro a scorrimento.
Controlla il tuo nomi dei segnali.assicurarsi di utilizzare un segnale di come uscita del vostro disegno.

 
Tipici esempi di una descrizione registro a scorrimento in Verilog e VHDL:

- 4-bit-seriale e seriale-out registro a scorrimento
- CLK: in std_logic;
- DIN: in std_logic;
- DOUT: out std_logic;

REG segnale: std_logic_vector (3 downto 0);
iniziare
process (CLK)
iniziare
se CLK'event e CLK = '1 'then
REG <= DIN & REG (3 downto 1);
end if;
end process;
DOUT <= REG (0);

/ / 4-bit-seriale e seriale-out registro a scorrimento

Modulo shift_reg (DOUT, DIN, CLK);
uscita DOUT;
ingresso DIN, CLK;
reg DOUT;
reg [3:0] REG;

sempre @ (posedge CLK) begin
REG = (DIN, REG [3:1]);
DOUT REG = [0];
fine
endmodule

/ / Esempio di registro a scorrimento a quattro bit
Modulo Shift_reg_01 (Data_in, Data_out, clock, reset);
ingresso Data_in, clock, reset;
uscita Data_out;
reg [3:0] Data_reg;

assegnare Data_out = Data_reg [0];

sempre @ (reset negedge o un orologio posedge)
iniziare
if (reset == 1'b0) Data_reg <= 4'b0;
else Data_reg <= (Data_in, Data_reg [3:1]);
fine
endmodule

/ / Esempio di registro a scorrimento con "new_signal", costituito all'interno di blocco sincronizzato
Modulo shift_reg_02 (Data_in, orologio, reset, sig_d, new_signal);
ingresso Data_in, clock, reset;
uscita sig_d, new_signal;
reg sig_a, sig_b, sig_c, sig_d, new_signal;

sempre @ (reset posedge o un orologio posedge)
iniziare
if (reset == 1'b1)
iniziare
sig_a <= 0;
sig_b <= 0;
sig_c <= 0;
sig_d <= 0;
new_signal <= 1'b0;
fine
altro
iniziare
sig_a <= Data_in;
sig_b <= sig_a;
sig_c <= sig_b;
sig_d <= sig_c;
new_signal <= (~ sig_a) & sig_b;
fine
fine
endmodule

/ / Esempio di registro a scorrimento con "new_signal", costituito al di fuori blocco sincronizzato come un compito permanente.
Modulo shift_reg_03 (Data_in, orologio, reset, sig_d, new_signal);
ingresso Data_in, clock, reset;
uscita sig_d, new_signal;
reg sig_a, sig_b, sig_c, sig_d;

sempre @ (reset posedge o un orologio posedge) begin
if (reset == 1'b1)
iniziare
sig_a <= 1'b0;
sig_b <= 1'b0;
sig_c <= 1'b0;
sig_d <= 1'b0;
fine
altro
iniziare
sig_a <= Data_in;
sig_b <= sig_a;
sig_c <= sig_b;
sig_d <= sig_c;
fine
fine

assegnare new_signal = (~ sig_a) & sig_b;
endmodule

 
Io uso Le (a) n (a) rdo v2001_1a.32

Con il mio modo di utilizzare ogni fase del registro a scorrimento da oerforming operazione OR tra loro e che, nonostante l'avvertimento dire che il segnale (registro a scorrimento) non utilizzati ottimizzato.

 
Se si utilizza synplifypro, è molto facile da fare da l'aiuto di synplify.

 

Welcome to EDABoard.com

Sponsor

Back
Top