我有一个模块,可以按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: error:输出端口表达式必须支持连续赋值。 d.v:23::divider_by2的端口out_clk在精化过程中连接到out_clk 2错误。
我该怎么办?
发布于 2018-03-10 08:02:51
您在divider_by2模块中有寄存器,所以不需要顶部模块中的寄存器来公开最后一个除法器的输出。
只需将该reg放到顶层模块的out_clk输出中即可。
https://stackoverflow.com/questions/49205724
复制相似问题