永发信息网

如何用verilog写8个流水灯

答案:1  悬赏:20  手机版
解决时间 2021-04-06 18:43
如何用verilog写8个流水灯
最佳答案
先把问题具体化:
       假如 LED  “1” 为 亮,“0”为灭,需要 LED 每一秒,从左到右点亮,该如何做?
       
       那么这就有二个具体的问题:
        A、一秒如何产生?
                如果你的平台时钟是 50Mhz ,也就 clk = 50Mhz,那么利用分频计数来产生1hz的时钟,也就是 时钟周期为 1秒。实例如下:

reg [31:0] cnt;
reg        clk_1;
always@(posedge clk_50M or negedge rst_n)
    begin    
        if(!rst_n)     
            begin        
                cnt <= 32'd0;        
                clk_1 <= 1'b0;     
            end    
        else     
            begin         
                if(cnt == 32'd50_000_000-1)             
                    clk_1 <= ~clk_1;         
                else             
                    cnt <= cnt + 1;     
        end
end

        B、如何从左向右点亮?
               点亮只需要LED设置为是“1”,从左往右,也就是高位到低位依次为“1”,根据clk_1s 的时钟,对LED进行移位就好了。这里有个问题,当LED移位到为全“0”的时候,则需要将 LED 写成初始值,这样就可以一直 循环点亮 下去。实例如下:
always @(posedge Clk_1s or negedge RESET_N) 
begin
    if(!RESET_N) begin
        led_set <= 8'b0000_0000;
    end
    else begin
        if(led_set == 8'b0000_0000)
            led_set <= 8'b1000_0000;        // 设置初始值
        else
            led_set <= {1'b0,led_set[7:1]};    // led 依次移位
    end
end

下面给一个 led 流水灯的实例:
8个LED 从左到右依次点亮
module led ( 
            input wire Clock,         
            input wire RESET_N,
            output wire [7:0]  LED                      
        );
 
// ---- count 1s ---------
reg [27:0]  cnt_1s;
reg         clk_1s_en;
 
always @(posedge Clock or negedge RESET_N)
begin
    if(!RESET_N) begin
        cnt_1s <= 0;
        clk_1s_en <= 0;
    end
    else begin
        if(cnt_1s == 'd50_000_000-1) begin
            cnt_1s <= 0;
            clk_1s_en <= ~clk_1s_en;
        end
        else
            cnt_1s <= cnt_1s + 1;
    end
end
 
// ----------- led set --------------
reg [7:0] led_set;
 
always @(posedge clk_1s_en or negedge RESET_N) 
begin
    if(!RESET_N) begin
        led_set <= 8'b0000_0000;
    end
    else begin
        if(led_set == 8'b0000_0000)
            led_set <= 8'b1000_0000;
        else
            led_set <= {1'b0,led_set[7:1]};
    end
end
   
assign LED = led_set;

endmodule
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
2015-2016禹州市一高高一下学期期末考试文科
华为p9plus男生用,哪个颜色更好
谁知道海城去台安大客的电话号码?或者知道都
想买个1000—2000元左右的手机,请问朋友们有
描述喀纳斯的句子,描写秋天的喀纳斯湖的句子
单选题皮肤中与排泄有密切关系的结构是A.皮脂
四驱汽车如何爬上四十五度坡
葵涌的申通营业点在哪个具体位置?电话多少
关于恰到好处的句子,有些东西,并不是越浓越
请问泸州三道拐在哪里?谢谢!
百花盛开春满园,万紫千红是春天。春天美,春
已知集合P={x|4≤x≤7},Q={x|-2≤x≤5},求P
哪位来给我介绍一下澳 门《赌……场》是什么
按揭有房产证吗,公房房产证和商品房房产证有
69年下乡,77年招回工作,86年离开工作单位,
推荐资讯
表达对愧疚的诗词,想用一段话形容对父母的愧
如何取消淘宝客推广
使命召唤ol怎么瞬狙?
老式电视机顶盒看节目自动闪退是什么原因
客来安洗衣古县银牌店这个地址在什么地方,我
戴安离子色谱进样针处气泡如何排除
微信红包口令怎么领啊
金石是什么意思,中心郎是什么意思,有什么典故
魅蓝3怎么打开网络权限
NIKE那些鞋子,我朋友能拿到很低的价格,我想
把同一副扑克牌中的红桃6、红桃7、红桃9三张
有人可以提供一下海南春光食品近三年的财务报
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?