打印

fpga的verilog 代码求救

[复制链接]
1691|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;

使用特权

评论回复
5
qchwu| | 2013-4-17 22:39 | 只看该作者
不要同时使用上升沿和下降沿!

使用特权

评论回复
6
huangxz| | 2013-4-17 23:21 | 只看该作者
io没分配造成的吧

使用特权

评论回复
7
bitshiyan| | 2013-4-18 09:42 | 只看该作者
Cannot mix blocking and non blocking assignments on signal <counter>.

使用特权

评论回复
8
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

使用特权

评论回复
9
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

粉丝