任意分频器,仿真对的,综合就有问题了,高手看一下啊!
本帖最后由 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 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 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;
end
assign qout=dq || i;
endmodule 没动手综合,<br>
不过我觉得既然count 是output,怎么也应该用reg定义而不是integer吧? 就是去掉count,或将count改成reg的类型也不能综合啊,有没有高手指教一下啊 显然不能综合哈!因为你在不同的always模块中都对相同的寄存器变量out和count进行了赋值,这是无论如何不允许的,不能在不同的always模块中对同一寄存器变量赋值,仿真当然没有问题,但是综合工具不知道该怎么去综合。<br>
不妨采用你给出的5分频的方式。<br>
<br>
[ 本帖最后由 yzm520xx 于 2007-4-15 10:18 编辑 ] 楼上说得对,这个在综合的时候就会报这个错误的 DQ和int是2:3分频五分频电路,但DQ相位落后int半个周期,两者相或产生1:1的五分频电路 yzm520xx说得对 显然不能综合哈!因为你在不同的always模块中都对相同的寄存器变量out和count进行了赋值,这是无论如何不允许的,不能在不同的always模块中对同一寄存器变量赋值,仿真当然没有问题,但是综合工具不知道该怎么去综合。<br>
不妨采用你给出的5分频的方式。<br>
页:
[1]