这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 新手求助.关于verilog

共2条 1/1 1 跳转至

新手求助.关于verilog

助工
2014-03-10 19:24:18     打赏

在学verilog 的时候遇到的问题.希望大神能解决


就是实现对25m的时钟分频来实现8个灯表示的递增进位..

有两个问题.1,是我想着分频后不是可以直接用分频后的信号做led 的时钟信号不就好了.但是改了发现跟原来比对应的第0盏灯不亮.......

                2,然后我自己编了test bench...发现len_h完全没有波形........


********************************顶层*****************

module led_top(input clk,
                    input rst_n,
                    
                    output [7:0]led_h);
                    
    wire  clk_led;

    
    clk_design clk_design_inst(.clk(clk),
                                        .rst_n(rst_n),
                                        .clk_led(clk_led));
                                        
                                        
    led led_inst(.clk_led(clk_led),
               //  .clk(clk),
                    .rst_n(rst_n),
                    .led_h(led_h));
                    
endmodule

**********************************时钟分频******************



module  clk_design(input clk,                //时钟的输入    
                        input rst_n,                //    复位
                        
                        output clk_led);                //led 的控制信号 .

reg[24:0] cnt;

parameter LED_CNT  = 24_999_999;

always@(posedge clk or negedge rst_n)
    begin
        if(!rst_n)
            cnt <= 25'd0 ;
        else  if (cnt < LED_CNT  )
            cnt  <= cnt + 1'b1 ;
        else  cnt  <= 25'd0 ;  
    end

assign clk_led = (cnt == 25'd24_999_999)? 1'b1 : 1'b0;

endmodule

*********************************led*****************

module led(input clk_led,
              input rst_n,
          // input clk,
              
            output reg[7:0] led_h);

    

always@(posedge clk_led or negedge  rst_n)
    begin
        if(!rst_n)
            led_h <= 8'd0;
        else if (clk_led )
            led_h <= led_h + 1'b1;
        else
            led_h <= led_h;
    end
              
endmodule

*************************测试程序************************


`timescale 1 ns/ 1 ps
module led_top_vlg_tst();
reg clk;
reg rst_n;
                                           
wire [7:0]  led_h;

initial                                                
    begin                                                  
        $monitor($time,"led_h value = %b\n",led_h);
        
        clk = 0 ;
        rst_n = 0 ;
        #100;
        @(posedge clk);    
        rst_n = 1 ;          
    end    
    
always                                                 
     #20 clk = ~clk    ;          

                     
led_top i1 (
                .clk(clk),
                .led_h(led_h),
                .rst_n(rst_n));
      
endmodule



高工
2014-03-10 21:07:19     打赏
2楼

关于这个问题,你可以参考下原来DIY活动的的视频教程,

http://v.eepw.com.cn/video/play/id/3637

http://forum.eepw.com.cn/thread/235949/1

 


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]