日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

verilog实现三人表决器

發布時間:2023/12/14 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 verilog实现三人表决器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

?

文章目錄

  • 要求
  • 一、38譯碼器的實現并封裝成IP核
  • 二、蜂鳴器的簡易實現
    • 1.引入庫
    • 2.讀入數據
  • 三、用封裝好的38譯碼器IP核來實現3人表決器
  • 四、FPGA板上驗證
  • 總結

?


要求


一、38譯碼器的實現并封裝成IP核

module v74x138(g1, g2a_l, g2b_l,a,y_l) ; input g1,g2a_l,g2b_l; input[2:0] a; output[7:0] y_l; reg[7:0] y_l=0; always@(*) begin if(g1&&~g2a_l&&~g2b_l) case(a) 7:y_l=8'b01111111; 6:y_l=8'b10111111; 5:y_l=8'b11011111; 4:y_l=8'b11101111; 3:y_l=8'b11110111; 2:y_l=8'b11111011; 1:y_l=8'b11111101; 0:y_l=8'b11111110; default:y_l=8'b11111111; endcase else y_l=8'b11111111; end endmodule

RTL 分析

封裝成IP核并再調用它的詳細步驟:

https://www.icourse163.org/learn/UESTC-1002525007?tid=1463513442#/learn/content?type=detail&id=1241758007&sm=1

封裝好的IP核

?

二、蜂鳴器的簡易實現

?

module beep(ext_clk_25m, ext_rst_n, buzzer);input ext_clk_25m;input ext_rst_n;output reg buzzer;reg [19:0] cnt; //20 bit get the maximum number of 1048575;//計數模塊,計數達到1000 000次,計數器清零always @ (posedge ext_clk_25m or posedge ext_rst_n)beginif(!ext_rst_n)cnt <= 20'b0;else if(cnt < 20'd999_999)cnt <= cnt + 1'b1;elsecnt <= 20'b0;endalways @ (posedge ext_clk_25m or posedge ext_rst_n)beginif(!ext_rst_n)buzzer <= 1'b0;else if(cnt < 500_000)buzzer <= 1'b1;else buzzer <= 1'b0;endendmodule RTL分析

本來想實現的功能是: 按下按鍵——蜂鳴器第一次響(表示投票開始)、松開按鍵——蜂鳴器停止

待三人都做出投票動作后,再次 按下按鍵——蜂鳴器第二次響(表示投票結束)、松開按鍵——蜂鳴器停止

整個過程結束。

但實際的是:按下按鍵,蜂鳴器不響;時序邏輯還沒有搞清楚........


三、用封裝好的38譯碼器IP核來實現三人表決器(自己添加的功能是:用數碼管顯示贊成人數,以及蜂鳴器提示投票開始或結束)

module dsbiq_useip(a, b,c,f,SEG_DATE,DIG1,led, ext_clk_25m, ext_rst_n, buzzer); input a; input b; input c; output f;output reg[5:0] DIG1;//片選數碼管//蜂鳴器對應IO口 input ext_clk_25m; input ext_rst_n; ? output wire buzzer;output reg[2:0]led; //三盞燈表示三人的投票情況output reg[6:0]SEG_DATE; ?//載入三個輸入的值parameter?SEG_NUM0=7'h3f, //數碼管顯示0SEG_NUM1=7'h06, //數碼管顯示1SEG_NUM2=7'h5b, //數碼管顯示2SEG_NUM3=7'h4f; //數碼管顯示3always@(*) beginled[2]=a; ?//亮燈 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?led[1]=b;led[0]=c; ?DIG1=6'b111110 ?; //選中第一個數碼管 end?always@(*) //七段碼實現 begincase({a,b,c})3'b000:SEG_DATE=SEG_NUM0;3'b001:SEG_DATE=SEG_NUM1;3'b010:SEG_DATE=SEG_NUM1;3'b011:SEG_DATE=SEG_NUM2;3'b100:SEG_DATE=SEG_NUM1;3'b101:SEG_DATE=SEG_NUM2;3'b110:SEG_DATE=SEG_NUM2;3'b111:SEG_DATE=SEG_NUM3;//defalut:SEG_DATE=SEG_NUM0;endcase ?? endwire [7:0]y_l; assign f=~(y_l[7]&y_l[6]&y_l[5]&y_l[3]); ?//f為1 即通過//IP核v74x138的調用 v74x138_0 uut_0 (.g1(1),.g2a_l(0),.g2b_l(0),.a({c,b,a}),.y_l(y_l) );//調用beep模塊 beep u_beep(.ext_clk_25m ? ?(ext_clk_25m),.ext_rst_n ? ? ?(ext_rst_n),.buzzer ? ? ? ? ? (buzzer) );endmodule

?

?

RTL分析

?

六片數碼管和三盞燈的IO管腳分配

?

七段碼和剩余端口IO管教分配

?

四、FPGA板上驗證

三人表決器

?

?

補充:數碼管顯示數字原理

?


其中,高位到低位依次是:DP_G F E _D C B A, 共陰極數碼管——輸入為高電平亮!

下圖為,共陰極數碼管的編碼表

共陰極數碼管的編碼表

?

總結

以上是生活随笔為你收集整理的verilog实现三人表决器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。