fpga的verilog 代码求救

[复制链接]
2340|8
 楼主| NJUPT0902 发表于 2013-4-16 20:39 | 显示全部楼层 |阅读模式
module Divider_odd
   #(parameter Divnum = 11)
  (Reset,CLOCK_50,QCLK);
       input  Reset;
       input  CLOCK_50;
       output reg QCLK;
                 
                 reg [3:0] counter = 4'h0;
                 
  always @(posedge CLOCK_50,negedge Reset)
    begin
     if(!Reset)
       counter <= 4'h0;
     else if(counter >= 4'h5)
            counter = 4'h0;
          else counter = counter + 4'h1;
    end
  always @(negedge CLOCK_50,negedge Reset)
    begin
     if(!Reset)
       QCLK  <= 1'b1;
     else QCLK <= counter[3];                 
    end
endmodule
这段代码的编译结果中Total logic elements        1 / 33,216 ( < 1 % )
Total combinational functions        1 / 33,216 ( < 1 % )
Dedicated logic registers        1 / 33,216 ( < 1 % )  怎么解决



ifpga 发表于 2013-4-17 09:47 | 显示全部楼层
什么意思,没看明白
难道说的是资源占用 <1%
lionyi 发表于 2013-4-17 11:08 | 显示全部楼层
同上  你遇到一个什么问题,可以详细叙述一下吗?
zhang_2000 发表于 2013-4-17 21:59 | 显示全部楼层
报告说明 综合完只有一个寄存器,
代码有问题,都优化掉了   没有功能

把这个改了吧
reg [3:0] counter = 4'h0;   -->
reg [3:0] counter;
qchwu 发表于 2013-4-17 22:39 | 显示全部楼层
不要同时使用上升沿和下降沿!
huangxz 发表于 2013-4-17 23:21 | 显示全部楼层
io没分配造成的吧
bitshiyan 发表于 2013-4-18 09:42 | 显示全部楼层
Cannot mix blocking and non blocking assignments on signal <counter>.
sibaidong 发表于 2013-4-18 10:09 | 显示全部楼层
有四年多没编也没看过Verilog了,今天试试看,楼下的,看清楚点,别误导楼主了!

楼主是要设计一个同步6分频器吧,把下面的代码拿去编译一次试试:

module Divider_odd
   #(parameter Divnum = 11)
  (Reset,CLOCK_50,QCLK);
       input  Reset;
       input  CLOCK_50;
       output reg QCLK;
                 
                 reg [3:0] counter = 4'h0;
                 
  always @(posedge CLOCK_50)
    begin
     if(!Reset)
       counter <= 4'h0;
     else if(counter >= 4'h5)
            counter <= 4'h0;
          else
            counter <= counter + 4'h1;
    end
  always @(negedge CLOCK_50)
    begin
     if(!Reset)
       QCLK  <= 1'b1;
     else
       QCLK <= counter[3];                 
    end
endmodule
cxh_boy 发表于 2013-4-18 13:30 | 显示全部楼层
   else QCLK <= counter[3];    这里counter[3]用永远为“0”,因为:

counter <= 4'h0;
     else if(counter >= 4'h5)
            counter = 4'h0


这条语句决定了,counter 最大值为:4'b0101;
修改方法:
将:
always @(negedge CLOCK_50,negedge Reset)
    begin
     if(!Reset)
       QCLK  <= 1'b1;
     else QCLK <= counter[3];                 
    end

中的counter[3] 改为:counter[2] ;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

7

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部