本帖最后由 fpgaw 于 2010-7-6 06:11 编辑
这个代码我用modelsim仿真了,是对的,就是在quartus,synplify里面综合好像都不能通过,高手看一下有没有什么问题啊?
(好像这个分频器一直就有问题,仿真没错,但要是综合就有问题了,关键是有没有器件即在上升沿响应,有在下降沿也能响应?
好像没有器件可以分别在上升沿计数,又在下降沿计数)
module div(clk,reset,out,count);
input clk,reset;
output out,count;
reg out;
integer count;
parameter i=6;
always @(posedge clk)
begin
if(reset)
begin
out<=0;
count<=0;
end
elseif(count==i)
begin
out<=~out;
count<=0;
end
else
count<=count+1;
end
always @(negedge clk)
begin
if(count==i)
begin
out<=~out;
count<=0;
end
else
count<=count+1;
end
endmodule
测试代码:
module div_test;
reg clk,reset;
wire out;
wire[7:0] count;
div div(clk,reset,out,count);
always #10 clk=~clk;
initial
begin
clk=0;
reset=0;
#5 reset=1;
#20 reset=0;
end
initial
begin
$monitor($time,,,"clk=%b out=%b",clk,out);
#5000 $finish;
end
endmodule
下面的是一个五分频的分频器,高手给解释一下这个分频的原理,这个分频器就能综合出来RTL级的电路,
module div5(reset,clk,qout);
input reset;
input clk;
output qout;
reg [2:0] i;
reg dq;
always @(posedge clk)
begin
if (!reset)
i<=0;
else if (i==3'b100)
i<=0;
else
i<=i+1;
end
always @(negedge clk)
begin
if (!reset)
dq<=0;
else
dq<=i[1];
end
assign qout=dq || i[1];
endmodule |