大家帮我看看我的verilog代码错在那里啊?
input in_clk;
input[3:0] control;
output out_clk;
reg[3:0] j;
reg out_clk;
parameter code=4'd0;
if(control==code)
out_clk=in_clk;
else
always@( posedge in_clk )
if ( j==control )
begin
j<=4'd1;
out_clk<=~out_clk;
end
else
j<=j+1;
endmodule
我是一个verilog菜鸟,这是我编写的第一个程序。
基本的功能是这样的:当输入控制字是0000是,输出时钟和输入时钟的频率相同;当输入控制字不是0000是,输出时钟频率是输入时钟频率的控制字的二倍的分频数。
例如:控制字是0001,则输出时钟的频率是输入频率的二分之一。
我的程序总是编译不过去 提示out_clk=in_clk;付值错误,请教高手我这个错在那里啊,应该如何改啊,不胜感激!
, gou cai!
你能告诉我菜在哪里吗?应该如何修改?谢谢
嗯 那个语法 看书先吧
if(control==code)
out_clk=in_clk;
else
always@( posedge in_clk )
这是什么呀?
厉害
if(control==code)
out_clk=in_clk;
这段像是组合逻辑电路,
always@( posedge in_clk )
if ( j==control )
begin
j<=4'd1;
out_clk<=~out_clk;
end
else
j<=j+1;
这段明显的时序逻辑电路
好好看看书先
改成这样试试看
module fdivision( in_clk,control,out_clk,Reset );
input in_clk,Reset;
input[3:0] control;
output out_clk;
reg[3:0] j;
reg out_clk,out_clk1;
parameter code=4'd0;
always @ ( posedge in_clk)
begin if(!Reset) begin out_clk1<=0;j<=0; end
elseif (j==control) begin j<=0;out_clk1<=!out_clk1;end
else j<=j+1;
end
always @ (in_clk or Reset or out_clk)
begin if (!Reset) out_clk<=0;
else if (control==code) out_clk<=in_clk;
else out_clk<=out_clk1;
end
endmodule
主要都是语法错误。另外就是对verilog的语句格式理解不够,基本上所有的语句都必须包含在always的块结构当中。
^_^,真够菜,不过继续努力
module fdivision( in_clk,control,out_clk );
input in_clk;
input[3:0] control;
output out_clk;
reg[3:0] j;
wire out_clk;
parameter code=4'd0;
assign out_clk =(control==code)?in_clkut_clk;
out_clk=in_clk;
always@( posedge in_clk )
if ( j==control )
begin
j<=4'd1;
out_clk<=~out_clk;
end
else
j<=j+1;
endmodule