欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

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

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

特權(quán)同學(xué)深入淺出玩轉(zhuǎn)FPGA源代碼

[復(fù)制鏈接]
ID:391144 發(fā)表于 2018-8-29 12:09 | 顯示全部樓層 |閱讀模式
特權(quán)同學(xué)深入淺出玩轉(zhuǎn)FPGA課程源代碼
  首先,感謝特權(quán)同學(xué)的分享、教導(dǎo),讓向我這樣的初學(xué)者,能夠有一個(gè)良好的入門平臺(tái)。。言歸正傳,這是我整理出來(lái)的代碼文檔,希望能幫到各位初學(xué)者。

1.分頻器
  1. `timescale 1ns / 1ps
  2. module clkdiv(
  3.                         clk,rst_n,
  4.                         clk_div       
  5.                 );
  6. input clk;                //50MHz
  7. input rst_n;        //低電平復(fù)位信號(hào)
  8. output clk_div;        //分頻信號(hào),連接到蜂鳴器
  9. //---------------------------------------------------
  10. reg[19:0] cnt;        //分頻計(jì)數(shù)器
  11. always @ (posedge clk or negedge rst_n)        //異步復(fù)位
  12.         if(!rst_n) cnt <= 20'd0;
  13.         else cnt <= cnt+1'b1;        //寄存器cnt 20ms循環(huán)計(jì)數(shù)
  14. //----------------------------------------------------
  15. reg clk_div_r;        //clk_div信號(hào)值寄存器
  16. always @ (posedge clk or negedge rst_n)
  17.         if(!rst_n) clk_div_r <= 1'b0;
  18.         else if(cnt == 20'hfffff) clk_div_r <= ~clk_div_r;        //每20ms讓clk_div_r值翻轉(zhuǎn)一次
  19. assign clk_div = clk_div_r;       
  20. endmodule
復(fù)制代碼
  1. 8.串口發(fā)送接收2
  2. `timescale 1ns / 1ps
  3. module my_uart_tx(clk,rst_n,clk_bps,rx_data,rx_int,rs232_tx,bps_start);

  4. input clk;                        // 50MHz主時(shí)鐘
  5. input rst_n;                //低電平復(fù)位信號(hào)
  6. input clk_bps;                // clk_bps的高電平為接收或者發(fā)送數(shù)據(jù)位的中間采樣點(diǎn)
  7. input[7:0] rx_data;        //接收數(shù)據(jù)寄存器
  8. input rx_int;                //接收數(shù)據(jù)中斷信號(hào),接收到數(shù)據(jù)期間始終為高電平,在此利用它的上升沿來(lái)啟動(dòng)發(fā)送數(shù)據(jù)
  9. output rs232_tx;        // RS232發(fā)送數(shù)據(jù)信號(hào)
  10. output bps_start;        //接收或者要發(fā)送數(shù)據(jù),波特率時(shí)鐘啟動(dòng)信號(hào)置位

  11. //---------------------------------------------------------
  12. reg rx_int0,rx_int1,rx_int2;        //rx_int信號(hào)寄存器,捕捉下降沿濾波用
  13. wire pos_rx_int;                                // rx_int下降沿標(biāo)志位

  14. always @ (posedge clk or negedge rst_n) begin
  15.         if(!rst_n) begin
  16.                         rx_int0 <= 1'b0;
  17.                         rx_int1 <= 1'b0;
  18.                         rx_int2 <= 1'b0;
  19.                 end
  20.         else begin
  21.                         rx_int0 <= rx_int;
  22.                         rx_int1 <= rx_int0;
  23.                         rx_int2 <= rx_int1;
  24.                 end
  25. end

  26. assign pos_rx_int =  rx_int1 & ~rx_int2;        //捕捉到上升沿后,neg_rx_int拉地保持一個(gè)主時(shí)鐘周期

  27. //---------------------------------------------------------
  28. reg[7:0] tx_data;        //待發(fā)送數(shù)據(jù)的寄存器
  29. //---------------------------------------------------------
  30. reg bps_start_r;
  31. reg tx_en;        //發(fā)送數(shù)據(jù)使能信號(hào),高有效
  32. reg[3:0] num;

  33. always @ (posedge clk or negedge rst_n) begin
  34.         if(!rst_n) begin
  35.                         bps_start_r <= 1'bz;
  36.                         tx_en <= 1'b0;
  37.                         tx_data <= 8'd0;
  38.                 end
  39.         else if(pos_rx_int) begin        //接收數(shù)據(jù)完畢,準(zhǔn)備把接收到的數(shù)據(jù)發(fā)出去
  40.                         bps_start_r <= 1'b1;
  41.                         tx_data <= rx_data;        //把接收到的數(shù)據(jù)存入發(fā)送數(shù)據(jù)寄存器
  42.                         tx_en <= 1'b1;                //進(jìn)入發(fā)送數(shù)據(jù)狀態(tài)中
  43.                 end
  44.         else if(num==4'd11) begin        //數(shù)據(jù)發(fā)送完成,復(fù)位
  45.                         bps_start_r <= 1'b0;
  46.                         tx_en <= 1'b0;
  47.                 end
  48. end

  49. assign bps_start = bps_start_r;

  50. //---------------------------------------------------------
  51. reg rs232_tx_r;

  52. always @ (posedge clk or negedge rst_n) begin
  53.         if(!rst_n) begin
  54.                         num <= 4'd0;
  55.                         rs232_tx_r <= 1'b1;
  56.                 end
  57.         else if(tx_en) begin
  58.                         if(clk_bps)        begin
  59.                                         num <= num+1'b1;
  60.                                         case (num)
  61.                                                 4'd0:        rs232_tx_r <= 1'b0;         //發(fā)送起始位
  62.                                                 4'd1:        rs232_tx_r <= tx_data[0];        //發(fā)送bit0
  63.                                                 4'd2:        rs232_tx_r <= tx_data[1];        //發(fā)送bit1
  64.                                                 4'd3: rs232_tx_r <= tx_data[2];        //發(fā)送bit2
  65.                                                 4'd4: rs232_tx_r <= tx_data[3];        //發(fā)送bit3
  66.                                                 4'd5: rs232_tx_r <= tx_data[4];        //發(fā)送bit4
  67.                                                 4'd6: rs232_tx_r <= tx_data[5];        //發(fā)送bit5
  68.                                                 4'd7:        rs232_tx_r <= tx_data[6];        //發(fā)送bit6
  69.                                                 4'd8: rs232_tx_r <= tx_data[7];        //發(fā)送bit7
  70.                                                 4'd9: rs232_tx_r <= 1'b1;        //發(fā)送結(jié)束位
  71.                                                  default: rs232_tx_r <= 1'b1;
  72.                                                 endcase
  73.                                 end
  74.                         else if(num==4'd11) num <= 4'd0;        //復(fù)位
  75.                 end
  76. end

  77. assign rs232_tx = rs232_tx_r;

  78. endmodule

  79. `timescale 1ns / 1ps
  80. module ps2_key(clk,rst_n,ps2k_clk,ps2k_data,rs232_tx);

  81. input clk;                        //50M時(shí)鐘信號(hào)
  82. input rst_n;                //復(fù)位信號(hào)
  83. input ps2k_clk;                //PS2接口時(shí)鐘信號(hào)
  84. input ps2k_data;        //PS2接口數(shù)據(jù)信號(hào)
  85. output rs232_tx;        // RS232發(fā)送數(shù)據(jù)信號(hào)


  86. wire[7:0] ps2_byte;        // 1byte鍵值
  87. wire ps2_state;                //按鍵狀態(tài)標(biāo)志位

  88. wire bps_start;                //接收到數(shù)據(jù)后,波特率時(shí)鐘啟動(dòng)信號(hào)置位
  89. wire clk_bps;                // clk_bps的高電平為接收或者發(fā)送數(shù)據(jù)位的中間采樣點(diǎn)

  90. ps2scan                        ps2scan(        .clk(clk),                                  //按鍵掃描模塊
  91.                                                                 .rst_n(rst_n),                               
  92.                                                                 .ps2k_clk(ps2k_clk),
  93.                                                                 .ps2k_data(ps2k_data),
  94.                                                                 .ps2_byte(ps2_byte),
  95.                                                                 .ps2_state(ps2_state)
  96.                                                                 );

  97. speed_select        speed_select(        .clk(clk),
  98.                                                                                 .rst_n(rst_n),
  99.                                                                                 .bps_start(bps_start),
  100.                                                                                 .clk_bps(clk_bps)
  101.                                                                                 );

  102. my_uart_tx                my_uart_tx(                .clk(clk),
  103.                                                                                 .rst_n(rst_n),
  104.                                                                                 .clk_bps(clk_bps),
  105.                                                                                 .rx_data(ps2_byte),
  106.                                                                                 .rx_int(ps2_state),
  107.                                                                                 .rs232_tx(rs232_tx),
  108.                                                                                 .bps_start(bps_start)
  109.                                                                                 );

  110. endmodule

  111. `timescale 1ns / 1ps
  112. module ps2scan(clk,rst_n,ps2k_clk,ps2k_data,ps2_byte,ps2_state);

  113. input clk;                //50M時(shí)鐘信號(hào)
  114. input rst_n;        //復(fù)位信號(hào)
  115. input ps2k_clk;        //PS2接口時(shí)鐘信號(hào)
  116. input ps2k_data;                //PS2接口數(shù)據(jù)信號(hào)
  117. output[7:0] ps2_byte;        // 1byte鍵值,只做簡(jiǎn)單的按鍵掃描
  118. output ps2_state;                //鍵盤當(dāng)前狀態(tài),ps2_state=1表示有鍵被按下

  119. //------------------------------------------
  120. reg ps2k_clk_r0,ps2k_clk_r1,ps2k_clk_r2;        //ps2k_clk狀態(tài)寄存器

  121. //wire pos_ps2k_clk;         // ps2k_clk上升沿標(biāo)志位
  122. wire neg_ps2k_clk;        // ps2k_clk下降沿標(biāo)志位

  123. …………
  124. …………
  125. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

完整的Word格式文檔51黑下載地址(共54頁(yè)):
特權(quán)同學(xué)-深入淺出玩轉(zhuǎn)FPGA源代碼.docx (46.16 KB, 下載次數(shù): 56)



回復(fù)

使用道具 舉報(bào)

ID:267435 發(fā)表于 2025-2-27 13:33 | 顯示全部樓層
正在找特權(quán)同學(xué)資料
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表