Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Licznik - quartus

Moderatorzy: Jacek Bogusz, Moderatorzy

kizdas
-
-
Posty: 1
Rejestracja: 3 sty 2011, o 12:53
Lokalizacja: Gdańsk

Licznik - quartus

Postautor: kizdas » 3 sty 2011, o 13:09

Witam,

Mam następujący problem, chcę napisac sobie licznik, który będzie liczył od FF do 0. Mam następujące kody ale niestety liczy mi tylko od 3 do 0 i tyle. (jest jeszcze opcja liczenia w górę ale ona jest nieistotna). Bardzo proszę o pomoc:
module laboreczki (
output [6:0] DIGIT_OUT,
output [1:0] BIN_OUT,
input MCK,
input SW_UP,
input SW_DOWN,
output SLOW_CLK
);

prescaler u1 (
.inclk(MCK),
.outclk(SLOW_CLK),
);

digit_decoder u2 (
.bin_data(BIN_OUT),
.digit(DIGIT_OUT),
);

up_down_cntr_u3 (
.clk(SLOW_CLK),
.sw_up(SW_UP),
.sw_down(SW_DOWN),
.odata(BIN_OUT)
);

endmodule
module prescaler (
input inclk,
output reg outclk
);

reg [31:0] cntr;
parameter MAX_COUNT = 25175000; // stała

always@ (posedge inclk) // zbocze narastajace
begin
if (cntr < (MAX_COUNT/2)) // przez 2 bo jeszcze sa zbocza malejace!
cntr <= cntr + 1;
else
begin
cntr <= 0;
outclk <= ~outclk;
end
end

endmodule
module up_down_cntr (
input clk,
input sw_up,
input sw_down,
output reg [1:0] odata
);

always@(posedge clk)
begin
if(sw_up==0)
begin
odata <=odata + 1;
end

else if(sw_down==1)
begin
odata <= odata - 1;
end
end

endmodule
module digit_decoder (
input [3:0] bin_data,
output reg [6:0] digit
);

always@(bin_data)
case(bin_data)
4'h0: digit <= 7'b0000001;
// tu jeszcze duzo innych takich linii
default: digit <= 7'b1111111;
endcase

endmodule
Dzięki!

Piotr Czak
-
-
Posty: 22
Rejestracja: 1 lut 2009, o 20:07
Lokalizacja: Wejherowo

Postautor: Piotr Czak » 3 sty 2011, o 13:30

Cześć,

podeślij do mnie cały kod to na niego zerknę. Pierwsze co widzę to trzeba zastosować sygnał resetu który ustawi początkowe wartości. Dodatkowo potrzebne jest by w przypadku przekroczenia odpowiednich wartości ustawiana była odpowiednia następna.
Podeślesz to Ci dopisze co trzeba i odeśle.

Widzę, że w module up_down_cntr dana wyjściowa odata jest dwu-bitowa przez co działa tylko tak, że wyświetla od 3 do 0.

Pozdrawiam
Piotr

Wróć do „PLD/FPGA i inne zagadnienia techniki cyfrowej”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 98 gości