2016-03-29 13 views
0

Ich weiß nicht, was mit meinem Code falsch ist, wahrscheinlich eine Menge Dinge. Im Moment kann ich nicht herausfinden, wie ich meinen En-Ausgängen Registerwerte zuweisen kann. Ich bin jetzt verpflichtet, den Verilog-Code für einen digitalen Kurs zu verwenden. Ich habe es ein bisschen satt.Verilog Fragen

`timescale 1ns/1ps 
///////////////////////////////////////////////////////////////////////////////// /
// Company: 
// Engineer: 
// 
// Create Date: 13:57:18 03/15/2016 
// Design Name: 
// Module Name: Moving7Seg 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision: 
// Revision 0.01 - File Created 
// Additional Comments: 
// 
////////////////////////////////////////////////////////////////////////////////// 
module Moving7Seg(B, C, Rst, ClkIn, D6, D5, D4, D3, D2, D1, D0, En3, En2, En1, En0); 

input B, C, Rst, ClkIn; 
output D6, D5, D4, D3, D2, D1, D0, En3, En2, En1, En0; 

//wire D6, D5, D4, D3, D2, D1, D0, En3, En2, En1, En0; 

reg ClkOut = 0; 
reg bLast = 0; 
reg cLast = 0; 
//reg rstLast = 0; 

reg [3:0]count = 0; 
reg [3:0]enable = 4'b0001; 


clockdivider getClk(ClkIn, ClkOut); 
seg7 convert(count[3], count[2], count[1], count[0], D6, D5, D4, D3, D2, D1, D0); 



always @(posedge ClkOut) begin 
    if(Rst == 1) begin 
     count = 0; 
     enable = 4'b0001; 
    end 

    if(B != bLast && B == 0) begin 
     case(enable) 
     4'b0001: enable = 4'b0010; 
     4'b0010: enable = 4'b0100; 
     4'b0100: enable = 4'b1000; 
     default: enable = 4'b0001; 
     endcase 
    end 

    if(C != cLast && C == 0) begin 
     count = count + 1; 
    end 

bLast = B; 
cLast = C; 
//rstLast = Rst; 


end 

En3 <= enable[3]; 
En2 <= enable[2]; 
En1 <= enable[1]; 
En0 <= enable[0]; 
convert; 

endmodule 
+1

Ändern Sie den Ausgang D6, D5, D4, D3, D2, D1, D0, En3, En2, En1, En0; 'auf' Ausgang D6, D5, D4, D3, D2, D1, D0; 'und eine andere Zeile 'output reg En3, En2, En1, En0;' – Greg

+0

Alle Zuordnungen wie 'En3 <= enable [3];' sollten in prozeduralen Blöcken liegen. Keine Notwendigkeit, eine Modulinstanz aufzurufen ('convert' am Ende). Instanzen werden bei jedem Zeitschritt automatisch ausgeführt. – rahulcodesinverilog

+0

Ich hatte die Zuweisungen wie 'En3 <= aktivieren [3];' am Ende des immer Block, aber das wurde immer noch nicht erkannt. "Verweis auf skalaren Draht 'En3' ist keine legale reg oder Variable lvalue" – Raisintoe

Antwort

0

1) Wenn diese „En“ gibt den aktuellen Status des enable Signal reflektieren sollen, dann müssen Sie wahrscheinlich zu „zuweisen“ die Werte wie so (und halten sie außerhalb des always Block):

assign En3 = enable[3]; 
    assign En2 = enable[2]; 
    assign En1 = enable[1]; 
    assign En0 = enable[0]; 

2) Wie in einem Kommentar erwähnt, entfernen Sie diese zusätzliche "Convert" -Linie.

3) Alle Zuweisungen, die sich im Block always befinden, sollten wirklich nicht blockierend sein. Verwenden Sie also den Zuweisungsoperator <=, nicht den Operator =.

4) Sie möchten wahrscheinlich einen else Fall für die Überprüfung von Rst. Das bedeutet, dass die Aktualisierung von enable, count usw. nur dann ausgeführt werden sollte, wenn Rst != 0.

5) Sie möchten wahrscheinlich auch bLast und cLast zurücksetzen.