Hallo,

Nu het vakantie is heb ik tijd om wat te spelen met het DE1 bordje.
Ik was bezig met een decade counter op een 7 segment te laten tellen, maar ergens in het tellergedeelte gaat het mis.

De opbouw van het hele verhaal is als volgt :
(Clock 50Mhz)----->[prescaler]---(Clock 1Hz)--->[dec counter]---(4 bit's)--->[bcd 7seg decoder]---(7 bit's)--->(7 segment)

De prescaler werkt al, of beter gezegd geeft geen errors.
De decade counter heeft er wel eentje:

module Dec_Counter
(
	// {{ALTERA_ARGS_BEGIN}} DO NOT REMOVE THIS LINE!
	CLK, RESET, BinOut
	// {{ALTERA_ARGS_END}} DO NOT REMOVE THIS LINE!
);

	// {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
	input CLK;                   //1Hz clock
	input RESET;
	output reg [3:0] BinOut;     //4 bit uitgang
	// {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
	
	always @ (posedge CLK) begin
		BinOut = BinOut + 4'b0001;                 //BinOut + 0001
		if ((BinOut == 4'b1010) || !RESET) begin   //BinOut = 0000 als BinOut 10 is, of bij een reset
			BinOut = 4'b0000;
		end
	end

endmodule

Hierbij krijg ik de error : [Error: Illegal wire or bus name "BinOut[3:0]" of type port]

Waarschijnlijk een stomme fout, maar ik zie niet wat er verkeerd aan is.

Ik weet het ook niet, maar hij zegt dat de naam "binout" niet mag. Mischien mag "binladen" wel?

ik heb geen idee wat voor brabbeltaaltje dat is , maar het is geen verilog...


module teller ( 
	input CLK, RESET,
	output reg [3:0] BINOUT);

always @ (posedge CLK) begin
   BINOUT <= BINOUT +1;
   if (BINOUT == 9) BINOUT <=0;	
   if (!reset)      BINOUT <= 0;
end 
endmodule

voila. dat zou het moeten doen. propere scheduled verilog.

we tellen altijd 1 op.
behalve, als we op negen staan gaan we naar nul
behalve als de reset laag wordt gaan we ook naar nul.

verilog synthesisers voeren lijnen code de LAGER staan EERST uit. ( dat noemt scheduling ). het princiepe komt simpelweg door de manier waarop een synthesizer werkt.

fouten in jouw code : je gebruikt = in pplaats van <= in clocked processen
dat gedoe met 'altera do not remove .. geen idee vanwaar dat komt.... lijkt erop dat je een wizard hebt gebruikt.

gebruik voor het gemak altidj UPPERCASE voor je signalen.
en gebruik in je modules ALTIJD positieve logica... zet op je toplevel de nodige inverters. zo voorkom je level verwarring

Die "altera do not remove" is afkomstig van de block tool uit de top level.

http://www.uploadarchief.net/files/download/bdf1.png

De BCD - 7Segment decoder komt later er nog bij.
Ik heb de naam veranderd, maar nog steeds dezelfde error.

module Dec_Counter ( 
	input CLK, RESET,
	output reg [3:0] BCDROMMEL);
 
always @ (posedge CLK) begin
   BCDROMMEL <= BCDROMMEL + 1;
   if (BCDROMMEL == 10) BCDROMMEL <= 0;	
   if (RESET)          BCDROMMEL <= 0;
end 
endmodule

De BCDROMMEL lijkt een rare naam, maar deze is voorlopig als test om te zien of het wat uitmaakt.
Ik heb F_E's code ongeveer letterlijk overgenomen, met nog steeds dezelfde error.

[Error: Illegal wire or bus name "BCDROMMEL[3:0]" of type port]
[Error: Illegal wire or bus name "BCDROMMEL[3:0]" of type mapping]

Kan deze in het block zitten?

##EDIT##
Fout gevonden, blijkbaar is een bus in blok diagram [3..0] en in verilog [3:0] en probeert quartus je te wurgen als je ze toch dooreen durft te halen...
--> binaire teller op led's werkt, nu verder met de BCD-7Seg.

Op 12 april 2011 16:11:22 schreef free_electron:
ik heb geen idee wat voor brabbeltaaltje dat is , maar het is geen verilog...

Psst, er staat precies hetzelfde joh! (het is ook Verilog als het niet aan jouw prive regeltjes voldoet :-)