打印
[CPLD]

求大神指导啊 我的程序有错

[复制链接]
2011|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dk77782|  楼主 | 2011-10-17 22:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ST, RS, LED, se, os
实现流水灯  50MHZ  分频成1HZ     斯巴达3        小弟的错误很多  求改啊
  module main(CLK,RST,EN,led,DIVOUT);
     input CLK,RST;
          input  EN;
          output [2:0] DIVOUT;
          output [7:0] led;
          wire CLK,RST;
         reg [7:0] led;
          wire   EN;
          wire  [2:0] DIVOUT;
        //  always @(posedge CLK)
        initial
                begin
                        led = 8'b00000001;
                end
          
        //  div50 div5050(.CLK(CLK),.RST(RST),.EN(EN),.div(DIVOUT[0]));
         // div50 #(1000) div501000(.CLK(CLK),.RST(RST),.EN(DIVOUT[0]),.div(DIVOUT[1]));
         // div50 #(1000) div502000(.CLK(CLK),.RST(RST),.EN(DIVOUT[1]),.div(DIVOUT[2]));
     div50 div5050(CLK,RST,EN,DIVOUT[0]);
          div50 #(1000) div501000(CLK,RST,DIVOUT[0],DIVOUT[1]);
          div50 #(1000) div502000(CLK,RST,DIVOUT[1],DIVOUT[2]);       
          
        always @ (posedge CLK or posedge RST )
                if(RST == 1'b1)
                        begin
                                led = 8'b00000001;
                        end
                else
                        if( DIVOUT[2]==1'b1)
                        begin
                                if(led == 8'b10000000 )
                                        led = 8'b00000001;
                                else
                                        led=led<<1;
                        end
endmodule



module div50(CLK,RST,EN,div
    );
         input RST,CLK,EN;
         reg DIVOUT;
         output wire div;
         parameter MAX_VALUE=50;
        wire [9:0]cnt;
        reg  [9:0] cnt_q;
        assign cnt=(EN==1'b1)?(cnt_q+1'b1):cnt_q;
        always@(posedge CLK or negedge RST)
                        if(!RST)
                                cnt_q<='b0;
                                else
                                        if(cnt_q>=MAX_VALUE-1)
                                                cnt_q<='b0;
                                        else
                                                cnt_q<=cnt;
        always@(posedge CLK or negedge RST)
                if(!RST)
                        DIVOUT<=1'b0;
                else
                        if(cnt_q>=MAX_VALUE-1)
                                DIVOUT<=1'b1;
                        else
                                DIVOUT<=1'b0;
        assign div=DIVOUT;


endmodule

相关帖子

沙发
GoldSunMonkey| | 2011-10-17 23:37 | 只看该作者
什么错误啊?

使用特权

评论回复
板凳
AutoESL| | 2011-10-18 10:27 | 只看该作者
是啊,什么错误要说出来

使用特权

评论回复
地板
AutoESL| | 2011-10-18 10:28 | 只看该作者
不能完全让大家帮你调试
大神可以指点你,但不能替代你

使用特权

评论回复
5
明天我还来| | 2011-10-18 13:58 | 只看该作者
我关注ING

使用特权

评论回复
6
dan_xb| | 2011-10-18 15:18 | 只看该作者
本帖最后由 dan_xb 于 2011-10-18 15:22 编辑

大神不敢当,但是你的代码写得很乱,看起来有些费劲,我重新写了,你看看吧:

module Main(
  input clk50,
  input rst,
  input en,
  output reg [7:0] led,
  output DivOut
);
  reg clk1_in;  //1Hz clock
  wire clk1;    //1Hz clock after BUFG
  reg [24:0] counter;
  always @(posedge clk50)
    if(rst)
      counter<=0;
    else if(counter==(25'd25000000-1))
      counter<=0;
    else
      counter<=counter+1;
  always @(posedge clk50)
    if(rst)
      clk1_in<=0;
    else if(counter==1)
      clk1_in<=~clk1_in;
  BUFG BUFG_inst(
    .O(clk1),
    .I(clk1_in)
  );
  assign DivOut=(en)?clk1:1'b0;
  always @(posedge clk1 or posedge rst)  //因为时钟速度实在太慢,还是异步复位比较靠谱
    if(rst)
      led<=8'b0000_0001;
    else if(en)
      led<={led[6:0],led[7]};
endmodule

使用特权

评论回复
7
dan_xb| | 2011-10-18 15:21 | 只看该作者
:dizzy:为啥代码贴上来以后,换行都被搞没了呢。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

4

帖子

1

粉丝