微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 大家帮我看看我的verilog代码错在那里啊?

大家帮我看看我的verilog代码错在那里啊?

时间:10-02 整理:3721RD 点击:
module fdivision( in_clk,control,out_clk );
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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top