打印
[Verilog HDL]

请大神写一个流水灯0.5s转换一次的程序

[复制链接]
1339|11
手机看帖
扫描二维码
随时随地手机跟帖
沙发
山东电子小菜鸟| | 2017-9-14 18:42 | 只看该作者
顶起

使用特权

评论回复
板凳
gaochy1126| | 2017-9-14 20:21 | 只看该作者
Verilog?

使用特权

评论回复
地板
gaochy1126| | 2017-9-14 20:21 | 只看该作者
具体说一下是什么流水还是只要反转led就行?

使用特权

评论回复
5
gaochy1126| | 2017-9-14 20:24 | 只看该作者
50Mclk
parameter LED_CNT = 24_999_999;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
  cnt <= 23'd0;
else if(cnt < LED_CNT)
  cnt <= cnt + 1'b1;
else
  cnt <= 23'd0;
end
assign led = (cnt == 25'd24999999)   1'b1 : 1'b0;

使用特权

评论回复
6
玄德| | 2017-9-15 10:04 | 只看该作者
gaochy1126 发表于 2017-9-14 20:24
50Mclk
parameter LED_CNT = 24_999_999;
always@(posedge clk or negedge rst_n)


这个好像不太好,
led端输出1的时间太短,只有一个时钟周期的长度。


使用特权

评论回复
7
gaochy1126| | 2017-9-15 17:42 | 只看该作者
玄德 发表于 2017-9-15 10:04
这个好像不太好,
led端输出1的时间太短,只有一个时钟周期的长度。

那就先分频再驱动也可以。

使用特权

评论回复
8
哎~呀|  楼主 | 2017-9-16 13:56 | 只看该作者
gaochy1126 发表于 2017-9-14 20:24
50Mclk
parameter LED_CNT = 24_999_999;
always@(posedge clk or negedge rst_n)

哥,我写的是这个,可是仿真出来后led值一直不变,是哪儿错了吗?
module led_water(clk,rst,led
    );
         input clk;
         input rst;
         output reg [3:0] led;
         reg [25:0] counter;
         parameter T=26'd49999999;
         
always@(negedge rst or posedge clk)
   if(!rst)
      begin
                   counter<=26'd0;
                        led<=4'b1110;
                end
        else
           begin
                   if(counter==T)
                           begin
                              led<={led[2:0],led[3:0]};
                                   counter<=26'd0;
                                end
                        else
                           begin
                                   led<=led;
                                   counter<=counter+26'd1;
                                end
                end
                       

endmodule

使用特权

评论回复
9
哎~呀|  楼主 | 2017-9-16 14:01 | 只看该作者
gaochy1126 发表于 2017-9-14 20:24
50Mclk
parameter LED_CNT = 24_999_999;
always@(posedge clk or negedge rst_n)

这是我的仿真文件
module tb_led_water;

        // Inputs
        reg clk;
        reg rst;

        // Outputs
        wire [3:0] led;

        // Instantiate the Unit Under Test (UUT)
        led_water uut (
                .clk(clk),
                .rst(rst),
                .led(led)
        );

        initial begin
                // Initialize Inputs
                clk = 0;
                rst = 0;

                // Wait 100 ns for global reset to finish
                #100;
                rst=1;
        
                // Add stimulus here

        end
        always #10 clk=~clk;
      
endmodule

使用特权

评论回复
10
gaochy1126| | 2017-9-16 16:42 | 只看该作者
哎~呀 发表于 2017-9-16 13:56
哥,我写的是这个,可是仿真出来后led值一直不变,是哪儿错了吗?
module led_water(clk,rst,led
    );

led不是一共4个IO吗?

使用特权

评论回复
11
gaochy1126| | 2017-9-16 16:46 | 只看该作者
哎~呀 发表于 2017-9-16 13:56
哥,我写的是这个,可是仿真出来后led值一直不变,是哪儿错了吗?
module led_water(clk,rst,led
    );

重新定义一个变量 reg [3:0] Num;

if(counter==T)
                           begin
if(Num==4) begin Num=0 ;end
else begin Num=Num+1; end
                              led<=1<<Num;
                                   counter<=26'd0;

                                end
                        else
                           begin
   
                                   counter<=counter+26'd1;
                                end

使用特权

评论回复
12
gaochy1126| | 2017-9-16 16:46 | 只看该作者
哎~呀 发表于 2017-9-16 14:01
这是我的仿真文件
module tb_led_water;

你试试代码 ,没有编译器也看出来对错。

使用特权

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

本版积分规则

2

主题

6

帖子

0

粉丝