What's błąd następujący kod źródłowy?

L

lzh08

Guest
Moduł LED_flush (rst, CLK, LED3, LED2, LED1, led0);
input clk, rst;
Wyjście LED3, LED2, LED1, led0;
reg LED3, LED2, LED1, led0;

reg [21:0] Mega_cnt;

always @ (posedge CLK i RST negedge)
zacząć
if (! RST)
zacząć
Mega_cnt <= 0;
koniec
w przeciwnym razie
zacząć
Mega_cnt <= Mega_cnt 1;
LED3 <= 1;
LED2 <= 0;
LED1 <= 1;
led0 <= 0;
koniec
koniec

/ / przypisanie LED = Mega_cnt [21];
always @ (posedge CLK)
zacząć
if (Mega_cnt [21])
zacząć
LED3 <= 1;
LED2 <= 0;
LED1 <= 1;
led0 <= 0;
koniec
koniec
endmodule

 
Verilog nie pozwala przypisać tego samego zarejestrować się w więcej niż jednym zawsze oświadczenie.
Miałeś LED0-4 przeznaczone zarówno zawsze oświadczenie!

 
Cześć,

Aby wiedzieć "błąd" w kodzie, powinien nam powiedzieć, co ma robić.

Z kodeksu Mogę sobie wyobrazić, że próbuje się migać diody na przemian, tj. led0 i LED2 włączyć wraz następnie LED1 i LED3 i tak dalej.Czy to przypadek?

Znowu sądząc z kodem, wydaje się, że duży licznik jest tam podzielić zegar mistrza o 4 mega cykle skoro próbują wykorzystać to MSB tj. 21 bit.Prawdopodobnie jest tam do podziału bardzo szybko zegar mistrza i dostosowania go do wybiegu, gdzie ludzkie oczy widziałem migające diody.Right?

Anyways, o ile Verilog idzie, nie ma "błąd" w kodzie, chyba że nie są na przemian diody, tzn. kiedy włączanie LED1 i LED3 zarówno razy zamiast zmień je.

Syntezator, jednak będzie narzekać big time!Kod nie jest synthesizable ponieważ użyłeś elementów logiki w wielu blokach, np. doprowadziły regs.Należy ponownie wpisać kod tak, aby każdy element logiczny (LED regs i mega Licznik cyklu) pojawiają się tylko w jednym bloku.

Rozważmy następujący:Moduł LED_flush (rst, CLK, LED3, LED2, LED1, led0);
input clk, rst;
Wyjście LED3, LED2, LED1, led0;
/ / Reg LED3, LED2, LED1, led0 / / prawdopodobnie nie ma potrzeby regs, druty zrobi do flashowania

reg [21:0] Mega_cnt;

always @ (posedge CLK i RST negedge)
if (! RST) Mega_cnt <= 0;
else Mega_cnt <= Mega_cnt 1;

przypisać LED3 = Mega_cnt [21];
przypisać LED1 = Mega_cnt [21];

przypisać LED2 =! Mega_cnt [21];
przypisać led0 =! Mega_cnt [21];

endmoduleTeraz zachowanie każdego elementu logiki w jednym bloku Verilog tylko:

Mega_cnt: zawsze tylko jeden blok
led0 tylko jeden blok przypisać
LED1: przypisać tylko jeden blok
LED2: przypisać tylko jeden blok
LED3 tylko jeden blok przypisać

Całkowicie synthesizable, I just hope it does tego, czego szukasz

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Uśmiechać się" border="0" />

Później.

 

Welcome to EDABoard.com

Sponsor

Back
Top