请各位高手指点迷津!!小弟初学Verilog,想学一学模块调用,自编了一段小代码,编译出错~~

代码如下:
module clk(clk_in,q);
input clk_in;
output[7:0] q;
reg[7:0] q;
reg clk_out;
parameter cnt=1000000;
reg[25:0] o;
always @(posedge clk_in)
begin
o<=o+1'b1;
if(o==cnt-1)
begin
clk_out<=!clk_out;
o<=0;
end
end
integer a;
always @(posedge clk_out)
begin
for(a=0;a<8;a=a+1)
q=(q<<a);
end
endmodule

module try(i,clk_in,q);
input[3:0] i;
input clk_in;
output[7:0] q;
reg[7:0] q;
reg clk_out;
always @(i)
begin
case(i)
4'b0001:
begin
q<=8'b00000001;
clkCK1(.clk_in(clk_in),.q(q)); //调用上面的模块clk
end
4'b0010:
begin
q<=8'b00000010;
clkCK2(.clk_in(clk_in),.q(q)); //调用上面的模块clk
end
endcase
end
endmodule
错误提示:

Error (10159): Verilog HDL error at try.v(42): "clk" is not a task or void function

谢谢各位了

1、进程里面不能调用模块,只能调用函数或者任务,然而在clk模块里含有always等,所以也无法写成任务或者函数;
2、在try这个模块里,q如果定义成reg型的,就不能用作例化模块的信号(clk CK2(.clk_in(clk_in),.q(q)); ),因为主模块的接口信号必须是wire型的,但如果改成wire型的话非阻塞赋值语句q<=8'b00000001;就会出现问题,wire型的只能是阻塞赋值。追问

受教了, 非常感谢!!还请指点一下,这段代码有没有其他问题?

追答

从语法上来说没有了,try模块里的clk_out好像就定义了一下,模块里面没有用到。

温馨提示:内容为网友见解,仅供参考
无其他回答

请各位高手指点迷津!!小弟初学Verilog,想学一学模块调用,自编了一段小...
1、进程里面不能调用模块,只能调用函数或者任务,然而在clk模块里含有always等,所以也无法写成任务或者函数;2、在try这个模块里,q如果定义成reg型的,就不能用作例化模块的信号(clk CK2(.clk_in(clk_in),.q(q)); ),因为主模块的接口信号必须是wire型的,但如果改成wire型的话非阻塞赋值语句...

相似回答