数据未复制到寄存器

Data not copied to register

我是 Verilog 新手,遇到了一个问题。我不知道我做错了什么。我有两个模块(A 和 B)。模块 B 进行一些处理并将值放入寄存器 'Data' 中,该寄存器是模块 B 的输出并作为模块 A 的输入。模块 A 比较 Data 中的值并发送信号以重置寄存器 'Data' in模块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 中的值。他们不应该吗?

您遗漏了部分代码,否则我会模拟它,但这是我注意到的开头:

在模块 B 中,您有两个输出寄存器调用 Data。输入和输出需要有唯一的名称。

看起来您在模块 A 中将 Data 定义为 reg[5:0]。您需要将其声明为电线 [5:0]。 B模块有寄存器,A模块就是一根线

从那个开始,然后post你的完整代码和一个测试平台,如果你有的话。

您将 reg[5:0] Data 定义为 ModuleA 中的一个寄存器,并连接到您模块的输出 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)。您应该可以分配给它。