时钟分频器由8

时间:2018-03-10 05:35:34

标签: verilog clock divider

我有1个模块用于点击分隔符2

module divider_by2 ( clk ,rst,out_clk );
    output reg out_clk;
    input clk, rst;

    always @(posedge clk)
    begin
        if (~rst) out_clk <= 1'b0;
        else out_clk <= ~out_clk;   
    end

endmodule

现在我想重复使用这个模块来制作时钟分频器8

module top(clk, rst, out_clk);
    output reg out_clk;
    input clk, rst;

    wire out_clk1;
    wire out_clk2;

    divider_by2 obj1(clk, rst, out_clk1);
    divider_by2 obj2(out_clk1, rst, out_clk2);
    divider_by2 obj3(out_clk2, rst, out_clk);

endmodule

顶级模块的tb

module divtb ();
    wire out_clk;
    reg clk, rst;

    top topp(clk, rst, out_clk);

    initial begin
      $dumpfile("dd.vcd");
      $dumpvars(0, divtb);

      clk = 0;
      #1 reset = 1;
      #1 reset = 0;

     #125;
     $finish;
    end
   always
    #1 clk = !clk;
 endmodule

获取错误:

  

d.v:23:reg out_clk;不能由原语或连续分配驱动。

     

d.v:23:错误:输出端口表达式必须支持连续   分配

     

d.v:23::divider_by2的端口out_clk连接到out_clk 2   精心制作过程中的错误。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

你有divider_by2模块中的寄存器,所以你不需要top模块中的寄存器来公开最后一个分频器的输出。

reg放在顶层模块的out_clk输出中。