我有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 精心制作过程中的错误。
我该怎么办?
答案 0 :(得分:1)
你有divider_by2模块中的寄存器,所以你不需要top模块中的寄存器来公开最后一个分频器的输出。
将reg
放在顶层模块的out_clk输出中。