In verilog è legale implementare un ripristino utilizzando l'assegnazione?
Sto cercando di aggiungere un reset a un contatore e ho questo codice, che sintetizza perfettamente:
module syncRX(clk, signal, detect);
input clk, signal;
output [7:0] detect;
reg [7:0] detect_aux = 8'b0;
reg rst;
assign detect = detect_aux & ~rst;
freq_div div(.clk(clk), .clk_1khz(clk_1khz));
always @(posedge signal)
rst <= 1;
always @(posedge clk_1khz)
detect_aux <= detect_aux + 1;
endmodule // top
module freq_div(input clk, output reg clk_1khz);
reg [12:0] count = 0;
always @(posedge clk)
begin
if(count == 6000)
begin
clk_1khz <= ~clk_1khz;
count <= 0;
end
else
count <= count + 1;
end
endmodule
Il problema è che
reg rst;
assign detect = detect_aux & ~rst;
Le cuciture non fanno nulla. È legale quello che sto provando? Grazie
Risposte
come già detto, non si cambia mai il valore da rst a '1'
poi, il tuo primo non è un reset in termini di progettazione del chip, ma un segnale chiaro, quindi rinominalo in clr.
"tutto" sui reset reali per i moduli:http://www.asic-world.com/tidbits/all_reset.html
Come sottolineato nei commenti, nel tuo codice rstè sempre 0, quindi non influirà mai sul valore di detect. Se vuoi che il ripristino avvenga, dovresti dare rstun input al tuo modulo, e poi impostarlo alto ad un certo punto nel tuo banco di prova.
Ma dovresti anche notare che questo non è davvero un comportamento di ripristino. L'impostazione rstalta costringerà l' detectuscita del modulo ad andare a zero, ma non appena rsttorna bassa detecttornerà al suo valore precedente come memorizzato in detect_aux. Se si trattasse di un ripristino corretto, ci aspetteremmo che il conteggio ricominci da 0 dopo il rstrilascio.