集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 3846|回复: 7

任意分频器,仿真对的,综合就有问题了,高手看一下啊!

[复制链接]
FFT 发表于 2010-6-26 01:14:01 | 显示全部楼层 |阅读模式
本帖最后由 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
VVIC 发表于 2010-6-26 02:44:19 | 显示全部楼层
没动手综合,<br>
不过我觉得既然count 是output,怎么也应该用reg定义而不是integer吧?
longtime 发表于 2010-6-26 03:45:13 | 显示全部楼层
就是去掉count,或将count改成reg的类型也不能综合啊,有没有高手指教一下啊
usd 发表于 2010-6-26 04:19:30 | 显示全部楼层
显然不能综合哈!因为你在不同的always模块中都对相同的寄存器变量out和count进行了赋值,这是无论如何不允许的,不能在不同的always模块中对同一寄存器变量赋值,仿真当然没有问题,但是综合工具不知道该怎么去综合。<br>
不妨采用你给出的5分频的方式。<br>
<br>
[ 本帖最后由 yzm520xx 于 2007-4-15 10:18 编辑 ]
ATA 发表于 2010-6-26 04:45:35 | 显示全部楼层
楼上说得对,这个在综合的时候就会报这个错误的
VVIC 发表于 2010-6-26 05:26:00 | 显示全部楼层
DQ和int[1]是2:3分频五分频电路,但DQ相位落后int[1]半个周期,两者相或产生1:1的五分频电路
UFO 发表于 2010-6-26 05:49:37 | 显示全部楼层
yzm520xx说得对
Sunlife 发表于 2015-6-17 10:52:44 | 显示全部楼层
显然不能综合哈!因为你在不同的always模块中都对相同的寄存器变量out和count进行了赋值,这是无论如何不允许的,不能在不同的always模块中对同一寄存器变量赋值,仿真当然没有问题,但是综合工具不知道该怎么去综合。<br>
不妨采用你给出的5分频的方式。<br>
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-6 17:29 , Processed in 0.074402 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表