如何连接模块并传递值

时间:2016-05-27 10:06:46

标签: module verilog vivado

module container(x1, x2, x3, NUMBER);

input x1, x2, x3;
output NUMBER;
wire w0, w1;

dec_counter U1 (x1, x2, x3, w0, w1);
doz_counter U2 (w1, w0, NUMBER);


endmodule


module dec_counter(clk, reset, clk_enable, counter, terminal);

    input clk;
    input reset;
    input clk_enable;
    output reg [3:0] counter;
    output reg terminal;



always @(posedge clk, posedge clk_enable, posedge reset)
        if(reset)
        begin
            terminal <= 1;
            counter <= 0;
        end
        else if(clk && clk_enable)
            if(counter < 9)
            begin
                terminal <= 1;
                counter <= counter + 1; 
            end           
            else
            begin
                terminal <= 1;
                counter <= 0;
            end  
endmodule



module doz_counter(dozens, unity, number);

input dozens;
input unity;
output reg [7:0] number;

initial begin
    number = 8'd0;
end    

always @(posedge dozens)
    if(dozens)
        number <= number + 1;

endmodule

您好!我是verilog的新手,我有第一个问题。我有模块dec_counter,从0到9计数。当它到达9 + 1时它显示0并将“输出终端”设置为1.现在我想将该值传递给我的下一个模块doz_counter作为“输入数十”。我已尝试接线,你可以在模块容器中看到,但在我的模拟中,数十个总是X,即使终端是1。

我觉得我犯了一些关键的设计错误。

1 个答案:

答案 0 :(得分:2)

您发布的代码正常。有关端口连接规则,请参阅下图。输出端口可以是regwire中的任何一个,但输入端口始终为wire

Port connection

几个错误列举如下:

您已将reg [3:0] counter;模块中的 4位端口dec_counter连接到单位端口w0位于{ {1}}模块。这将导致端口连接宽度不匹配。

container

同样,wire [3:0] w0; wire w1; // ... 模块中的单比特端口 NUMBER已连接到{{1}中的 8位端口 container模块。这将导致端口连接宽度不匹配。

number

此外,重置时doz_counter的值可能为零output [7:0] NUMBER; //... - terminal条件正在推动if的相同值。它应该else不同值分别为terminalterminal

以下是您的代码的测试平台供参考:

terminal <= 1