两个模块每次在时钟脉冲的上升沿交换4位数据。是否可行,在真实设备中会不会发生碰撞?

问题描述 投票:0回答:1

在 ModelSim 工作区中,有两个具有相同时钟输入的独立模块 A 和 B。 数字 4'b0101 在时间 0 被写入第一个模块的寄存器中,4'b1110 被写入第二个模块的寄存器中。 每次时钟沿上升时,寄存器都会交换数字。 因此,结果是,4'b1110 被写入第一个寄存器,4'b0101 被写入第二个寄存器。 等等,请告诉我,在这种情况下,如何在更高级别的模块中编写这些子模块端口之间的关系?

编辑:这是我的代码。对于 A、B 模块和测试平台(或顶级模块 C)。 ModelSim 工作空间中的所有模块均已分隔!

enter image description here

module A(clock,AIBO,AOBI);
input clock;
input [3:0] AIBO;
output [3:0] AOBI;
reg [3:0] RA = 4'b0101;
always @(posedge clock) begin
RA <= AIBO;
end
assign AOBI = RA;
endmodule

//

module B(clock,BIAO,BOAI);
input clock;
input [3:0] BIAO;
output [3:0] BOAI;
reg [3:0] RB = 4'b1110;
always @(posedge clock) begin
RB <= BIAO;
end
assign BOAI = RB;
endmodule

//

`timescale 1ns / 1ps
module C;
reg clock;
wire [3:0] A_out;
wire [3:0] B_out;
A uut1(.clock(clock),.AIBO(B_out),.AOBI(A_out));
B uut2(.clock(clock),.BIAO(A_out),.BOAI(B_out));
initial begin
// Initialize Inputs
clock  = 1'b1;
#10;
// Wait 100 ns for global reset to finish
end
always #1 clock = ~clock;  
endmodule

结果:

enter image description here

verilog hdl
1个回答
0
投票

这个设计可以实现吗?

设计是可综合的

真实设备中会不会出现碰撞。

  • 不存在语言命名空间冲突。
  • 没有多个司机

您可以使用systemVerilog的always_ff而不是always;这将导致模拟报告多个驱动程序的出现。

© www.soinside.com 2019 - 2024. All rights reserved.