我是Verilog的新手。我需要在模块之间共享数据(相同模块的实例和不同模块的实例)。以更简单的示例开始,我尝试使用一个仲裁器模块,该模块仅在启用时将输入移至输出,而另一个模块则读取该输出。以下代码可以在模拟器中编译并运行,但是它没有将数据发送到输出。感谢您的帮助和建议。
模块:MyBidirModule.v和SenderModule.v(使用MyBidirModule并从顶部模块实例化)。[当输入更改时,此代码不会更改输出。
此外,如果成功,我将需要一组双向信号,每个信号都启用发送方和接收方模块实例之间的通信通道。如何创建可变数目的8位输入端口数组?
谢谢, -BReddy
module MyBidirModule(
input oe,
input clk,
input [7:0] inp,
output [7:0] outp,
inout [7:0] bidir
);
reg [7:0] a;
reg [7:0] b;
assign bidir = oe ? a : 8'bz;
assign outp = b;
always @ (posedge clk)
begin
b <= bidir;
a <= inp;
end
endmodule
module SenderModule(
input clk,
output reg [7:0] led
);
wire [7:0] input_value;
wire [7:0] bidir_signal;
wire [7:0] output_value;
reg move_input_output;
reg [7:0] myValue = 8'b00001111;
assign input_value = myValue;
MyBidirModule bidirModule(
.oe(move_input_output),
.clk(clk),
.inp(input_value),
.bidir(bidir_signal),
.outp(output_value)
);
initial begin
#100;
move_input_output = 1'b0; // Disable output on the bidir module
#100;
// read its current values
$display("MyBidirModule: 1 input value: %x\n", input_value);
$display("MyBidirModule: 1 output value: %x\n", output_value);
$display("MyBidirModule: 1 bidir signal: %x\n", bidir_signal);
// enable moving the input to the output:
// we write the current value 11110000 (x0f) in it
move_input_output = 1'b1; // Enable output on the bidir module
#100;
$display("MyBidirModule: 2 input value: %x\n", input_value);
$display("MyBidirModule: 2 output value: %x\n", output_value);
$display("MyBidirModule: 2 bidir signal: %x\n", bidir_signal);
myValue = 8'b11110000; // write (xf0)
#200;
// Check if output_value on the bidir_signal is as expected
if (output_value == 8'b11110000) begin
led[0] <= 1'b1;
$display("MyBidirModule: 3 input value: %x\n", input_value);
$display("MyBidirModule: 3 output value: %x\n", output_value);
$display("MyBidirModule: 3 bidir signal: %x\n", bidir_signal);
end else begin
led[7] <= 1'b1;
$display("MyBidirModule: 4 input value: %x\n", input_value);
$display("MyBidirModule: 4 output value: %x\n", output_value);
$display("MyBidirModule: 4 bidir signal: %x\n", bidir_signal);
end
#100;
move_input_output = 0; // Disable output on the bidir module
$display("MyBidirModule: 5 input value: %x\n", input_value);
$display("MyBidirModule: 5 output value: %x\n", output_value);
$display("MyBidirModule: 5 bidir signal: %x\n", bidir_signal);
end
endmodule
MyBidirModule:1个输入值:0f
MyBidirModule:1个输出值:xx
MyBidirModule:1个双向信号:zz
MyBidirModule:2个输入值:0f
MyBidirModule:2个输出值:xx
MyBidirModule:2个bidir信号:xx
MyBidirModule:4个输入值:f0
MyBidirModule:4个输出值:xx
MyBidirModule:4个bidir信号:xx
MyBidirModule:5个输入值:f0
MyBidirModule:5个输出值:xx
MyBidirModule:5个双体信号:xx