在 ModelSim 工作区中,有两个具有相同时钟输入的独立模块 A 和 B。 数字 4'b0101 在时间 0 被写入第一个模块的寄存器中,4'b1110 被写入第二个模块的寄存器中。 每次时钟沿上升时,寄存器都会交换数字。 因此,结果是,4'b1110 被写入第一个寄存器,4'b0101 被写入第二个寄存器。 等等,请告诉我,在这种情况下,如何在更高级别的模块中编写这些子模块端口之间的关系?
编辑:这是我的代码。对于 A、B 模块和测试平台(或顶级模块 C)。 ModelSim 工作空间中的所有模块均已分隔!
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
结果:
这个设计可以实现吗?
设计是可综合的
真实设备中会不会出现碰撞。
您可以使用systemVerilog的always_ff而不是always;这将导致模拟报告多个驱动程序的出现。