输入端口在模块之间传递数据

时间:2018-10-27 12:11:15

标签: module verilog shared-memory communication inout

我是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

0 个答案:

没有答案