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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2147|回復: 0
收起左側

FPGA三人搶答器核心代碼

[復制鏈接]
ID:1087159 發表于 2023-7-4 12:18 | 顯示全部樓層 |閱讀模式
module Top_Qiangdaqi(
        input clk,//主頻信號,50MHZ
        input rst_n,//低電平復位
        //input [2:0]kint,//按鍵輸入
        input PLA_A,PLA_B,PLA_C,//按鍵輸入
        //input key_ctrl,//主持人按鍵
        output led_d0=0,led_d1,led_d2,led_d3,
        output buzzer,//蜂鳴器
        output [5:0]seg_sel,
        output [7:0]seg_data
        );
       
        /*-----------------------按鍵信號鎖存,消抖,LED顯示-----------------------*/
        /*--------記錄按鍵狀態--------*/
        reg key_rst;
        always @(posedge clk or negedge rst_n)begin
                if(!rst_n)key_rst <= 1'b1;//低電平復位,key_rst信號為1
                else key_rst <= PLA_C&PLA_B&PLA_A;//按鍵按下時,key_rst信號為0
        end
       
        reg key_rst_r;
        always @(posedge clk or negedge rst_n)begin
                if(!rst_n)key_rst_r <= 1'b1;
                else key_rst_r <= key_rst;//上升沿將key_rst信號鎖存到key_rst_r里
        end
       
        /*--------添加20MS消抖--------*/
        wire key_clr=key_rst_r &(~key_rst);//key_rst由1變為0時,key_clr 的值變為高,維持一個時鐘周期,模擬按鍵情況
        reg [19:0]c;//1KHZ---[15:0]clk_1k+[3:0]counter_delay
        always @(posedge clk or negedge rst_n)begin
                if(!rst_n) c <= 20'd0;
                else if(key_clr) c <= 20'd0;
                else c <= c+1'b1;
        end
       
        reg [2:0] reg_key;
        always @(posedge clk or negedge rst_n)begin
        if(!rst_n) reg_key <= 3'b111;//低電平復位,三個按鍵全部賦高電平
                else if(c==20'hffffff)//滿20ms,將按鍵值鎖存到reg_key,20'hffffff=1111_1111_1111_1111_1111
                        reg_key <= {PLA_C,PLA_B,PLA_A};
        end
       
        //時鐘上升沿時將reg_key的信號鎖存到reg_key_r里
        reg [2:0]reg_key_r;
        always @(posedge clk or negedge rst_n)begin
                if(!rst_n) reg_key_r <= 3'b111;
                else reg_key_r <= reg_key;
        end
       
        /*--------控制LED顯示--------*/
        wire [2:0] led_swt=reg_key_r[2:0]&(~reg_key[2:0]);
        reg d0;reg d1;reg d2;reg d3;
        always @(posedge clk or negedge rst_n)begin
                if(!rst_n)begin//全亮
                        d0 <= 1'b0;
                        d1 <= 1'b0;
                        d2 <= 1'b0;
                        d3 <= 1'b0;
                end
                else begin//按鍵控制LED翻轉
                        if(led_swt[1]&led_swt[2])d0 <= ~d0;//倒計時觸發燈
                        //兩個按鍵同時按下也不會因為if語句對LED有干擾
                        if(led_swt[0]&(!led_swt[1])&(!led_swt[2])&led_d2==1'b0&led_d3==1'b0)d1 <= ~d1;
                        if(led_swt[1]&(!led_swt[0])&(!led_swt[2])&led_d1==1'b0&led_d3==1'b0)d2 <= ~d2;
                        if(led_swt[2]&(!led_swt[0])&(!led_swt[1])&led_d1==1'b0&led_d2==1'b0)d3 <= ~d3;
//                        if(led_swt[0]&led_d2==1'b0&led_d3==1'b0)d1 <= ~d1;
//                        if(led_swt[1]&led_d1==1'b0&led_d3==1'b0)d2 <= ~d2;
//                        if(led_swt[2]&led_d1==1'b0&led_d2==1'b0)d3 <= ~d3;
                end
        end
        assign led_d0=d0?1'b1:1'b0;
        assign led_d1=d1?1'b1:1'b0;
        assign led_d2=d2?1'b1:1'b0;
        assign led_d3=d3?1'b1:1'b0;
                       
        /*-----------------------數碼管顯示-----------------------*/
        reg [31:0]tc;//時間計數器
        reg flag_1HZ;//計數使能標志位
        always @(posedge clk or negedge rst_n)begin
                if(!rst_n)begin
                        tc <= 32'd0;
                        flag_1HZ <= 1'b0;
                end
                else if(tc>=32'd49_999_999)begin
                        tc <= 32'd0;
                        flag_1HZ <= 1'b1;//上升沿
                end
                else begin
                        tc <= tc+32'd1;
                        flag_1HZ <= 1'b0;
                end
        end
       
        //蜂鳴器節拍時鐘信號
        wire clk_8;
        clk_div U1(
                .clk(clk),
                .f(8),
                .clk_out(clk_8)
                );

        wire [3:0]count_0;
        wire t0;
        wire en;
        count_m10 U2(
                .clk(clk),
                .clk_8(clk_8),
                .rst_n(rst_n),
                .flag_1HZ(flag_1HZ),
                .clr(1'b0),
                .data(count_0),
                .t(t0),
                .buzzer(buzzer),
                .led_d0(led_d0),
                .led_d1(led_d1),
                .led_d2(led_d2),
                .led_d3(led_d3),
                .PLA_A(PLA_A),
                .PLA_B(PLA_B),
                .PLA_C(PLA_C),
                .en(en)
                );
               
//        wire [3:0]count_1;
//        wire t1;
//        count_m10 count10_m1(
//                .clk(clk),
//                .rst_n(rst_n),
//                .flag_1HZ(t0),
//                .clr(1'b0),
//                .data(count_1),
//                .t(t1)
//                );
//               
               
               
        //譯碼模塊
        wire[7:0] seg_data_0;
        seg_decoder U3(
                 .bin_data  (count_0),
                 .seg_data  (seg_data_0)
        );

               
        seg_scan U4(
                .clk(clk),
                .rst_n(rst_n),
                .en(en),
                .seg_sel(seg_sel),
                .seg_data(seg_data),
                .seg_data_0 ({1'b1,seg_data_0}),
                .led_d0 (led_d0),
                .led_d1 (led_d1),
                .led_d2 (led_d2),
                .led_d3 (led_d3)
                );
       
       
               
//        wire clk_1k,clk_1,clk_8;
//        wire [4:0]kout;
//        clk_div U1(
//                .clk(clk),
//                .f(1000),
//                .clk_out(clk_1k)
//                );
//               
//        clk_div U2(
//                .clk(clk),
//                .f(1),
//                .clk_out(clk_1)
//                );
//               

//        key_clr U4(.clk_1k(clk_1k),.kint(kint),.kout(key_out));
//        key_sel U5(.clk_1k(clk_1k),.clk_1(clk_1));
       
endmodule


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品福利视频 | 亚洲综合资源 | 一区二区三区在线 | h视频免费观看 | 国产91一区二区三区 | 精品久久一区 | 噜噜噜噜狠狠狠7777视频 | 一级中国毛片 | 久久久久久综合 | 一区二区三区国产好 | 成人免费日韩 | 成人国内精品久久久久一区 | 玖玖视频 | 亚洲 中文 欧美 日韩 在线观看 | 亚洲一区二区精品视频 | 人干人操| 久久三区| 91免费福利在线 | 久久精品高清视频 | 亚洲综合色视频在线观看 | 亚洲一区视频在线播放 | 国产成人精品一区二区三区四区 | 免费同性女女aaa免费网站 | 91亚洲国产成人久久精品网站 | 免费人成在线观看网站 | 91久久久精品国产一区二区蜜臀 | 中文字幕成人 | 日韩一区二区三区av | 久久国产成人 | 老司机狠狠爱 | 久久精品视频在线免费观看 | 亚洲高清网 | 久久久国产一区二区三区 | 狠狠干综合视频 | 精久久久| 国产高清在线观看 | 特黄视频 | 国产色播av在线 | 亚洲资源在线 | 久久久久久久av麻豆果冻 | 一级毛片免费完整视频 |