50mhz的时钟分频器(verilog代码)。我试图在fpga上烧这个,但它不能正常工作。我正在使用导师图形模型。请帮助识别我的错误。
module clk_div(
clk,
rst,
count);
parameter count_width=27;
parameter count_max=25000000;
output [count_width-1:0] count;
reg [count_width-1:0] count;
input clk,rst;
initial
count=0;
always@(posedge clk)
if (rst)
begin
count<=0;
end
else if (count<count_max-1)
begin
count<=count+1;
end
else if (count==count_max)
begin
count <=~count;
end
else if (count>count_max)
begin
count<=0;
end
endmodule
答案 0 :(得分:0)
三件事。首先,您的begin
块需要end
和always
。第二,当计数达到最大值时,你为什么要count <= ~count
?你不应该把它设置回0吗?第三,您不能为内部count
寄存器指定与count
输出相同的名称。您需要将其中一个称为其他内容。实际上,为什么要输出count
?如果这是一个时钟分频器,你想输出另一个时钟,对吧?以下应该有效。
module clk_div(
clk,
rst,
outclk);
parameter count_width=27;
parameter count_max=25000000;
reg [count_width-1:0] count;
input clk,rst;
output outclk;
reg intern_clk;
assign outclk = intern_clk;
initial begin
count=0;
intern_clk=1'b0;
end
always @(posedge clk) begin
if (rst)
count <= 0;
else if (count == count_max) begin
count <= 0;
intern_clk <= !intern_clk;
end else
count <= count + 1'b1;
end
endmodule
但似乎你正试图将时钟分频为1 Hz。那是非常多的。我建议您使用PLL而不是自己制作时钟分频器。既然你提到50 MHz时钟,我猜你在使用Altera FPGA?如果是这样,打开MegaWizard插件管理器并创建一个PLL。