久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3921|回復: 1
打印 上一主題 下一主題
收起左側

fpga基于環扭型計數器的流水燈實驗-楠妹

[復制鏈接]
跳轉到指定樓層
樓主
ID:77367 發表于 2015-4-19 01:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
module johnson(
        clk,
        rst_n,
        key_1,
        key_2,
        key_3,
        key_4,
        led
        );
       
input clk;
input rst_n;
input key_1;
input key_2;
input key_3;
input key_4;
output reg [7:0] led;

//------------------------------------------------------------------------
//        按鍵檢測
reg [3:0] key_r_1;                          //        鎖存按鍵輸入信號4拍
reg [3:0] key_r_2;
reg [3:0] key_r_3;
reg [3:0] key_r_4;

always @ (posedge clk or negedge rst_n)
        if(!rst_n)
                begin
                key_r_1 <= 4'b1111;
                key_r_2 <= 4'b1111;
                key_r_3 <= 4'b1111;
                key_r_4 <= 4'b1111;
                end
        else
                begin
                key_r_1 <= {key_r_1[2:0],key_1};
                key_r_2 <= {key_r_2[2:0],key_2};
                key_r_3 <= {key_r_3[2:0],key_3};
                key_r_4 <= {key_r_4[2:0],key_4};
                end

wire key_pos_1 = key_r_1[2] & ~key_r_1[3];  //        產生按鍵上升沿和下降沿標志位
wire key_neg_1 = ~key_r_1[2] & key_r_1[3];
wire key_pos_2 = key_r_2[2] & ~key_r_2[3];
wire key_neg_2 = ~key_r_2[2] & key_r_2[3];
wire key_pos_3 = key_r_3[2] & ~key_r_3[3];
wire key_neg_3 = ~key_r_3[2] & key_r_3[3];
wire key_pos_4 = key_r_4[2] & ~key_r_4[3];
wire key_neg_4 = ~key_r_4[2] & key_r_4[3];

//------------------------------------------------------------------------
//        19位計數器,用于計時20ms消抖
reg [19:0] cnt;

always @ (posedge clk or negedge rst_n)
        if(!rst_n)
                cnt <= 20'd0;
        else if((key_pos_1 || key_neg_1) || (key_pos_2 || key_neg_2) || (key_pos_3 || key_neg_3) || (key_pos_4 || key_neg_4))
                cnt <= 20'd0;
        else if(cnt<20'd999_999)
                cnt <= cnt + 1'b1;
        else
                cnt <= 20'd0;

reg [1:0] key_value_1;
reg [1:0] key_value_2;
reg [1:0] key_value_3;
reg [1:0] key_value_4;

always @ (posedge clk or negedge rst_n)
        if(!rst_n)
                begin
                key_value_1[0] <= 1'b1;
                key_value_2[0] <= 1'b1;
                key_value_3[0] <= 1'b1;
                key_value_4[0] <= 1'b1;
                end
        else if(cnt == 20'd999_999)
                begin
                key_value_1[0] <= key_r_1[3];
                key_value_2[0] <= key_r_2[3];
                key_value_3[0] <= key_r_3[3];
                key_value_4[0] <= key_r_4[3];
                end
       
always @ (posedge clk or negedge rst_n)
        if(!rst_n)
                begin
                key_value_1[1] <= 1'b1;
                key_value_2[1] <= 1'b1;
                key_value_3[1] <= 1'b1;
                key_value_4[1] <= 1'b1;
                end
        else if(cnt == 20'd999_999)
                begin
                key_value_1[1] <= key_value_1[0];
                key_value_2[1] <= key_value_2[0];
                key_value_3[1] <= key_value_3[0];
                key_value_4[1] <= key_value_4[0];
                end
               
wire led_star = ~key_value_1[0] & key_value_1[1];
wire led_stop = ~key_value_2[0] & key_value_2[1];       
wire led_lfsh = ~key_value_3[0] & key_value_3[1];
wire led_rgsh = ~key_value_4[0] & key_value_4[1];
       
//------------------------------------------------------------------------
//        左移,右移控制
reg led_en;
reg led_dir;

always @ (posedge clk or negedge rst_n)
        if(!rst_n)
                begin
                led_en <= 1'b0;
                led_dir <= 1'b0;
                end
        else if(led_star)
                led_en <= 1'b1;
        else if(led_stop)
                led_en <= 1'b0;
        else if(led_lfsh)
                led_dir <= 1'b0;
        else if(led_rgsh)
                led_dir <= 1'b1;

//------------------------------------------------------------------------
//        延時
reg [23:0] delay;
always @ (posedge clk or negedge rst_n)
        if(!rst_n)
                delay <= 24'd0;
        else
                delay <= delay + 1'b1;
               
//------------------------------------------------------------------------

always @ (posedge clk or negedge rst_n)
        if(!rst_n)
                led <= 8'b00000001;
        else if((delay == 24'h3fffff)&&(led_en))
                begin
                        case(led_dir)
                                1'b0 : led <= {led[6:0],led[7]};    //        左移
                                1'b1 : led <= {led[0],led[7:1]};                //        右移
                                default: ;
                        endcase
                end
        else ;
       
endmodule





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:69240 發表于 2015-5-22 11:24 | 只看該作者
剛開始學FPGA,不會流水燈,學習一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人精品福利 | 一区二区三区国产精品 | 日韩成人在线视频 | 日日天天| 国产综合视频 | 久久精品国产一区二区 | 久久香焦 | 一区二区国产精品 | 国产黄视频在线播放 | 最新中文字幕久久 | 91视频在线看 | caoporn视频 | h在线播放 | 99在线视频观看 | 久久精彩 | 国产欧美精品一区二区三区 | 久久免费精品 | 1区2区3区视频 | 国产精品观看 | 免费精品视频 | 激情五月婷婷综合 | 日本成年免费网站 | 成人国产精品一级毛片视频毛片 | 天天操天天射天天 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 国产精品久久久久无码av | 国产成人免费视频网站高清观看视频 | 日本亚洲一区 | 美女久久视频 | 成人依人| 99精品欧美一区二区三区综合在线 | 亚洲美女一区二区三区 | 久久五月婷 | 国产精品久久久久久久久久妞妞 | 成人在线观看免费 | 亚洲精品一区二区三区中文字幕 | 欧美成人手机视频 | 久久国产精品偷 | 毛片在线免费 | 欧美精品在线一区 | 亚洲成人av在线播放 |