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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4065|回復(fù): 1
收起左側(cè)

fpga基于環(huán)扭型計(jì)數(shù)器的流水燈實(shí)驗(yàn)-楠妹

[復(fù)制鏈接]
ID:77367 發(fā)表于 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;

//------------------------------------------------------------------------
//        按鍵檢測(cè)
reg [3:0] key_r_1;                          //        鎖存按鍵輸入信號(hào)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];  //        產(chǎn)生按鍵上升沿和下降沿標(biāo)志位
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位計(jì)數(shù)器,用于計(jì)時(shí)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;

//------------------------------------------------------------------------
//        延時(shí)
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





相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:69240 發(fā)表于 2015-5-22 11:24 | 顯示全部樓層
剛開(kāi)始學(xué)FPGA,不會(huì)流水燈,學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 专业操老外 | 日韩视频第一页 | av一区二区三区在线观看 | 亚洲精品观看 | 色一情一乱一乱一区91av | 日韩欧美中文 | 手机在线看片1024 | 91av免费 | 在线日韩欧美 | 欧美日韩精品一区二区 | 日韩国产在线播放 | 欧美成人一级 | 韩日中文字幕 | 日韩欧美亚洲 | 亚洲伊人av| 亚洲成人免费在线 | 国产一区二区不卡 | 综合伊人久久 | 亚洲综合激情 | 日韩视频在线播放 | 国产一级片免费 | 男女瑟瑟视频 | 国产裸体永久免费视频网站 | 日日爱影视 | 欧美日韩中文在线 | 日韩在线精品视频 | 美日韩一区 | 久久精品视频一区 | 欧美成人精品激情在线观看 | www国产亚洲精品久久网站 | 在线精品一区 | 天天操夜夜摸 | jlzzzjlzzz国产免费观看 | 久久久久久中文字幕 | 国产精品成人国产乱 | 成人欧美在线 | 一级黄色片免费看 | 一区二区久久 | 毛片网站在线观看 | 国产特黄| 国产成人精品av在线观 |