2017-03-16 1 views
0

Ich bin neu in Verilog und ich stecke in einem Problem fest. Ich tue nicht, was ich falsch mache. Ich habe zwei Module (A und B). Modul B führt eine Verarbeitung durch und setzt den Wert in das Register 'Data', das von Modul B ausgegeben wird und als Eingang von Modul A dient. Modul A vergleicht den Wert in Data und sendet ein Signal zum Zurücksetzen des Registers 'Data' in Modul B. Daten verarbeitet B in Modul vorhanden und korrekt ist, während es nicht in Modul A.Daten nicht kopiert, um zu registrieren

erscheinen
ModuleB (address,indata,Data,reset,clk,ResetSignal,Out) 
input [15:0] address; 
input [15:0] indata; 
input  ResetSignal; 
output [5:0] Data; 
output [15:0] Data; 

reg[15:0] DataReceived; 
reg[0:5] Data = 6'b000000; 
reg[15:0] Out; 

if(address == 16'h01a0) 
begin 
    DataReceived<= indata; 
    Data = (Data| 6'b000001); // all 6 values will be copied on basis of some address 
end 
. 
. 
. 

ModuleA (...) 

reg[15:0] address; 
reg[15:0] indata; 
reg[15:0] Out; 
reg ResetSignal; 
reg[5:0] Data; //it is an internal register of module B which contains data received from module B 

wire reset,clk; 

ModuleB (.address(address),.indata(indata),.Data(Data),.clk(clk),.reset(reset),.ResetSignal(ResetSignal),.Out(Out)); 

always @ (posedge clk or posedge reset) 
begin 
if (reset) 
    ResetSignal = 1'b0; 
else if (Data == 6'b111111) 
    begin 
    //set some signals 
    ResetSignal = 1'b1; // send signal back to reset the buffer Data 
    end 
end 

ich habe Daten als reg erklärt so Werte von Modul B abgebildet werden soll. Sollten sie nicht?

Antwort

2

Sie definiert reg[5:0] Data als Register in ModuleA, und mit dem Ausgang des Moduls angeschlossen ModuleB:

ModuleB moduleBInstance(.address(address),.indata(indata),.Data(Data),.clk(clk),.reset(reset),.ResetSignal(ResetSignal),.Out(Out)); 

(ich einen Instanznamen hier hinzugefügt, ich nehme an, es ist ein Instanzname hier, aber sie vergessen, schreibe es hier, sonst würde Simulation es nicht akzeptieren.)

Einige Verilog-Synthesizer akzeptieren keine Verbindung eines Netzes von reg Typ mit der Ausgabe von Modulen, da Sie eine reg asynchron nicht zuordnen können. Wenn Sie den Typ für das Netz Data in ModuleA zu verdrahten (wire[5:0] Data). Sie sollten es zuweisen können.

+0

ja das war das Problem! Ich habe reg in Modul A geändert und es funktioniert jetzt. Vielen Dank. Ich habe Instanznamen, ich habe ein Stück problematischen Code nur so kopiert, dass ich vermisse :) – Eshaal

1

Sie haben Teile des Codes weggelassen, sonst würde ich es simulieren, aber hier ist das, was ich beginnen zu bemerken, mit:

In Modul B zwei Ausgangsregister Daten aufrufen müssen. Die Ein- und Ausgänge müssen eindeutige Namen haben.

Es sieht so aus, als ob Sie in Modul A Daten als reg [5: 0] definieren. Sie müssen dies als Draht [5: 0] deklarieren. Modul B hat das Register, also Modul A ist nur ein Draht.

Beginnen Sie damit und dann Ihren vollständigen Code zusammen mit einem Prüfstand, wenn Sie einen haben.

+0

Ändern der reg für Draht funktioniert !! Ich habe gerade den Teil des Codes veröffentlicht, der das Problem verursacht hat. – Eshaal

Verwandte Themen