2017-03-16 112 views
0

我是Verilog的新手,我陷入了一個問題。我不是我做錯了什麼。我有兩個模塊(A和B)。模塊B進行一些處理並將值存入模塊B輸出的寄存器'數據'中,並作爲模塊A的輸入。模塊A比較數據中的值併發送一個信號以重置模塊B中的寄存器'數據'。數據在模塊B處理存在並且是正確而它不是在模塊A出現未將數據複製到寄存器

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 

我已經聲明的數據作爲REG因此從模塊B的值應該被映射。他們不應該嗎?

回答

2

您在ModuleA定義reg[5:0] Data寄存器,並連接到模塊ModuleB的輸出:

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

(我在這裏增加了一個實例名稱,我想這裏有個實例名稱,但你忘了它寫在這裏,否則模擬不會接受它。)

一些Verilog的合成不會接受reg類型的網連接到模塊的輸出,因爲你不能分配到一個reg異步。如果將ModuleA中的網絡Data的類型更改爲連線(wire[5:0] Data)。你應該可以分配給它。

+0

是的,這是問題!我改變了reg在moduleA中的連線,它現在正在工作。謝謝。我有實例名稱,我已經複製了一段有問題的代碼,所以錯過了:) – Eshaal

1

你已經離開了你的代碼的部分,否則我會模仿它,但這裏是我發現開始有:

在模塊B你有兩個輸出寄存器呼叫數據。輸入和輸出需要具有唯一的名稱。

它在模塊A中看起來像是將數據定義爲reg [5:0]。你需要聲明一個線[5:0]。模塊B有寄存器,所以模塊A只是一根電線。

從此開始,然後將您的完整代碼和測試平臺一起發佈(如果有的話)。

+0

將reg更改爲wire工作!我剛剛發佈了導致問題的部分代碼。 – Eshaal