集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 5950|回复: 12

大侠们帮我看看,clkout波形出不来

[复制链接]
IPO 发表于 2010-10-25 13:53:35 | 显示全部楼层 |阅读模式
module fenpin(clkin,clkout);
  input clkin;
  output clkout;
  reg clkout;
  reg clk0,clk1,clk2;
  reg [7:0] c0,c1,c2;
  reg [3:0] c3;
  always @(posedge clkin) begin
    if(c0<8'd200) c0<=c0+1;
    else begin clk0<=~clk0; c0<=0;end end
  always @(clk0) begin
    if(c1<8'd100) c1<=c1+1;
    else begin clk1<=~clk1;c1<=0; end end
  always @(clk1) begin
    if(c2<8'd100) c2<=c2+1;
    else begin clk2<=~clk2;c2<=0; end end
  always @(clk2) begin
    if(c3<4'd10) c3<=c3+1;
    else begin clkout<=~clkout;c3<=0; end end
endmodule
大侠们帮我看看,clkout波形出不来
 楼主| IPO 发表于 2010-10-25 13:53:55 | 显示全部楼层
肯定没波形出来
 楼主| IPO 发表于 2010-10-25 13:54:29 | 显示全部楼层
为什么呀?
哪里出问题了呀
 楼主| IPO 发表于 2010-10-25 13:54:48 | 显示全部楼层
C0一直在计数
C0到了200,clk0还没翻转,C0就被清零了
翻转清0 是同时的
这是非阻塞赋值
liyujie 发表于 2010-10-25 14:26:19 | 显示全部楼层
分频器不是这样写的
天蝎诀 发表于 2010-10-26 19:05:07 | 显示全部楼层
后面几个敏感列表应该写成  always  @(posedge  clk0)
smallwind1 发表于 2010-10-27 22:14:34 | 显示全部楼层
你这个是分频器?真的很少见这样写的
smallwind1 发表于 2010-10-27 22:21:16 | 显示全部楼层
其实你可以再换一个方法试试,可能c0一直处于高阻态,这样的话,开始的条件可能一直就没进行,还有就是你可以看看其它的波形,clk1,clk2,他们的值都有变化吗?一步步找原因
njithjw 发表于 2010-11-1 22:32:45 | 显示全部楼层
`timescale 1ns/1ns
module fenpin(
    rst_n,
    clkin,
    clkout
    );
input   rst_n;
  input clkin;
  output clkout;
  reg clkout;
  reg clk0,clk1,clk2;
  reg [7:0] c0,c1,c2;
  reg [3:0] c3;

always @(posedge clkin or negedge rst_n)
begin
    if (rst_n == 1'b0)
    begin
       clk0 <= 1'b0;
        c0<=0;
    end
    else if(c0<8'd200)
        c0<=c0+1;
    else
    begin
        clk0<=~clk0;
        c0<=0;
    end
end

always @(posedge clk0 or negedge rst_n)
begin
    if (rst_n == 1'b0)
    begin
        c1<=0;
        clk1<= 1'b0;
    end
    else if(c1<8'd100)
        c1<=c1+1;
    else
    begin
        clk1<=~clk1;
        c1<=0;
    end
end

always @(posedge clk1 or negedge rst_n)
begin
    if (rst_n == 1'b0)
    begin
        c2<=0;
        clk2<=1'b0;
    end
    else if(c2<8'd100)
        c2<=c2+1;
    else
    begin
        clk2<=~clk2;
        c2<=0;
    end
end

always @(posedge clk2 or negedge rst_n)
begin
    if (rst_n == 1'b0)
    begin
        c3<=0;
        clkout<=1'b0;
    end
    else if(c3<4'd10)
        c3<=c3+1;
    else
    begin
        clkout<=~clkout;
        c3<=0;
    end
end

endmodule
liqz 发表于 2010-11-1 23:03:38 | 显示全部楼层
回复 9# njithjw


    用这么多时钟,你这个设计的时序怎么去约束?
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-4 21:46 , Processed in 0.076258 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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