关于Verilog的一个简单问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 13:47:32
请看一段代码,具体是实现什么的无所谓,为什么编译通不过呢?怎样改呢(不要改变程序的意思)?
module testctl(clk,en,rst,load);
input clk;
output en,rst,load;
reg bclk,en,rst,load;

always@( posedge clk)
begin
bclk<=!bclk;
rst=0;
load<=!bclk;
en <= bclk;
end
bclk=bclk;

always@(posedge clk )
begin
if(bclk==0 && clk==0)
rst=1;
end

endmodule

第13行 bclk = bclk,这句话必须写在always 或者initial块里。
有两点要注意
1,如果你有reg型的变量,就必须要有专门的语句给它们赋初始值,从这段程序看来,只有bclk <= !bclk这是不行的,输出永远是x。在设计模块中,赋初始值一般是用rst信号赋值的。但这里你的rst信号是输出,输入信号只有clk。在验证模块中,赋初始值是用initial块进行的。如initial bclk = 0;这里,我认为你这段代码是testbench,因为用到了阻塞赋值rst=1,rst=0等。
2,如果要是testbench的话,别忘了写实例化部分。

能力有限,错误请指正