Räknare med reset i Verilog

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Micke_xyz
Inlägg: 42
Blev medlem: 16 oktober 2006, 15:21:17
Ort: Farsta
Kontakt:

Räknare med reset i Verilog

Inlägg av Micke_xyz »

Sitter och leker lite med Verilog, är väldigt ny på detta.
Jag har en modul som ska räkna antalet pulser på data_in så länge som ingången reset är hög. När reset går låg ska resultatet av additionen skickas ut på data_out. Problemet är att jag måste nollställa tmp nästa gång reset går hög då additonen ska börja om. Hur realiserar jag detta? Jag kan ju inte tilldela tmp även i ett "posedge reset"-block.

Kod: Markera allt

module counter(data_in,reset,data_out);

	input data_in;
	input reset;
	output [3:0]data_out;

	reg [3:0]tmp;
	reg [3:0]count;

	always @ (posedge data_in)
	begin
			
		tmp <= tmp + 1;
		
	end
	
	always @ (negedge reset)
	begin

		count <= tmp;

	end	
	
	assign data_out = count;

endmodule
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Re: Räknare med reset i Verilog

Inlägg av cyr »

Du borde kunna skriva (fungerande) kod såhär:

Kod: Markera allt

always@(posedge data_in or negedge reset)
begin
   if(!reset) count <= 0;
   else count <= count+1;
end
Det bör syntetiseras till en vanlig räknare med asynkron reset.
Problemet är väl att nollställningen sker på samma flank som du använder för att klocka in datan i det andra registret, kan bli timingproblem där.

Måste du verkligen använda "data_in" som klocka och ha asynkron reset-signal?

Generellt så brukar det vara bättre att göra en helt synkron konstruktion... Allt du behöver ha är en konstant klocksignal som är minst så snabbt att man inte missar några höga eller låga perioder av "data_in".
Skriv svar