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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

FPGA信號發生器設計 含程序原理圖PCB 可產生正弦波 三角波 方波 幅度頻率控制

  [復制鏈接]
跳轉到指定樓層
樓主
FPGA信號發生器的頂層實體圖如下:

上圖為FPGA信號發生器頂層實體電路圖,其中包括,矩陣鍵盤模塊、頻率主控制模塊、相位累加器模塊、LCD1602顯示器模塊、波形數據存儲模塊ROM、信號選擇器模塊、幅度調制模塊、頻率調制模塊。以上每個模塊都是由程序模塊生成。下面對各個模塊的功能和程序進行介紹.vhdl和veriligHDL程序都有.可產生正弦波 三角波 方波



Altium Designer畫的FPGA信號發生器原理圖和PCB圖如下:(51hei附件中可下載工程文件)


verilog源程序如下:
  1. module control(CLK,reset,//時鐘和復位
  2.                                 keynum,//按鍵值輸入
  3.                                 freq_data,//頻率控制字輸出
  4.                                 vol_ctrl,//電壓輸出
  5.                                 show_vol_ctrl,//顯示電壓輸出
  6.                                 WAVE_MODE,//波形選擇輸出
  7.                                 show_freq//頻率顯示
  8.                                 );
  9. input CLK,reset; //

  10. input [3:0]keynum;
  11. output[7:0]show_vol_ctrl,vol_ctrl;
  12. output [31:0]freq_data;
  13. output [2:0]WAVE_MODE;
  14. output [27:0]show_freq;
  15. reg [31:0]freq_data;
  16. reg [27:0]show_freq;
  17. reg [31:0]fre_reg;  //INIT
  18. reg [2:0]WAVE_MODE=3'b000;
  19. reg[7:0]show_vol_ctrl,vol_ctrl;
  20. reg[2:0]cnt;
  21. reg keyup_flag;
  22. reg [2:0]state=3'b000;//狀態控制
  23. reg[7:0]vol_ctrl_reg;
  24. always @(posedge CLK or negedge reset )//控制進程
  25. begin
  26.    if(!reset) begin
  27.       fre_reg<=32'h00000000;
  28.       vol_ctrl<=3'b000;//幅度控制
  29.       show_freq=27'h0002000;//復位后顯示2000HZ
  30.       keyup_flag =1'b0; //按鍵按下標志
  31.       state<=3'b000;//默認進入狀態轉換控制狀態
  32.       WAVE_MODE=3'b000;
  33.       freq_data<= 32'h00029f18;//默認輸出2000HZ--1718->20hz,20 000->1718*1000=1718000=x"001a36f0"  --29f18=2000
  34.       vol_ctrl<=68;//幅度控制
  35.       vol_ctrl_reg<=8'h68;
  36.       show_vol_ctrl<=8'h68;
  37.     end
  38.    else  begin
  39.      case (state)
  40.         3'b000: begin//狀態 0
  41.                   fre_reg<=32'h00000000;
  42.                   vol_ctrl<=3'b000;//幅度控制
  43.                   show_freq=27'h0002000;//復位后顯示2000HZ
  44.                   keyup_flag =1'b0; //按鍵按下標志
  45.                   state<=3'b010;//默認進入狀態轉換控制狀態
  46.                   WAVE_MODE=3'b000;
  47.                   freq_data<= 32'h00029f18;//默認輸出2000HZ--1718->20hz,20 000->1718*1000=1718000=x"001a36f0"  --29f18=2000
  48.                   vol_ctrl<=68;//幅度控制
  49.                   vol_ctrl_reg<=8'h68;
  50.                   show_vol_ctrl<=8'h68;
  51.         end
  52.         3'b101: begin//狀態1 實現頻率的輸入 按A鍵確認輸入
  53.                          if (keynum==4'b1111 )  keyup_flag =1'b1; //判斷按鍵是否松開
  54.                          else begin
  55.                                   if(keyup_flag==1'b1) begin
  56.                                                 if(keynum<4'b1010 )begin //按下的按鍵小于10
  57.                                                    show_freq=show_freq<<4; //顯示器移位
  58.                                                    show_freq[3:0]=keynum;
  59.                                                         keyup_flag =1'b0;
  60.                                                    end
  61.                                                  else if(keynum==4'b1010)//A  ok確認輸入頻率
  62.                                                     begin
  63.                                                     keyup_flag =1'b0;
  64.                                                     cnt=0;
  65.                                                     state<=3'b001;//跑去下一個狀態
  66.                                                     fre_reg<=32'h00000000;
  67.                                                     end
  68.                                                   else if(keynum==4'b1011)//* select wave out  b選擇波形輸出
  69.                                                     begin
  70.                                                    
  71.                                                     WAVE_MODE=WAVE_MODE+1'b1;
  72.                                                     if(WAVE_MODE==3'b100) WAVE_MODE=3'b000;
  73.                                                     keyup_flag =1'b0;
  74.                                                     end
  75.                                      end
  76.                   end
  77.           end
  78.          3'b001: begin//狀態2 計算頻率控制字
  79.              case(cnt)
  80.                   0:begin fre_reg<=show_freq[27:24]*1000000;cnt=cnt+1'b1; end
  81.                   1:begin fre_reg<=fre_reg+show_freq[23:20]*100000;cnt=cnt+1'b1; end
  82.                   2:begin fre_reg<=fre_reg+show_freq[19:16]*10000;cnt=cnt+1'b1; end
  83.                   3:begin fre_reg<=fre_reg+show_freq[15:12]*1000;cnt=cnt+1'b1; end
  84.                   4:begin fre_reg<=fre_reg+show_freq[11:8]*100;cnt=cnt+1'b1; end
  85.                   5:begin fre_reg<=fre_reg+show_freq[7:4]*10;cnt=cnt+1'b1; end
  86.                   6:begin fre_reg<=fre_reg+show_freq[3:0];cnt=cnt+1'b1; end
  87.                   7:begin   freq_data<=fre_reg*86;//(2^(32))/50000000=85.89==86,,;2^n/50M
  88.                     cnt=cnt+1'b1;
  89.                     state<=3'b010;//完成頻率輸入跳回
  90.                     end
  91.                   endcase        
  92.           end
  93.           3'b010:begin//狀態三 控制狀態的轉換狀態轉換控制狀態
  94.                      if (keynum==4'b1111 )  keyup_flag =1'b1;//按鍵松開
  95.                      else begin
  96.                      if(keyup_flag==1'b1) begin
  97.                                                         if(keynum==4'b1010 )begin //a  freq 確認按鍵按下,進入輸入頻率狀態
  98.                                                                          state<=3'b101;
  99.                                                                          keyup_flag =1'b0;
  100.                                                                         show_freq=23'h000000;
  101.                                                                    end
  102.                                                           else if(keynum==4'b1100 )begin //c  vol C按下,進入輸入幅度狀態
  103.                                                                          state<=3'b011;//調節幅度
  104.                                                                          keyup_flag =1'b0;
  105.                                                                          show_vol_ctrl<=8'h00;//清0顯示
  106.                                                                    end
  107.                                                          else if(keynum==4'b1011)//* select wave out B按下,波形選擇輸出
  108.                                                                         begin
  109.                                                                   
  110.                                                                         WAVE_MODE=WAVE_MODE+1'b1;
  111.                                                                         if(WAVE_MODE==3'b100) WAVE_MODE=3'b000;
  112.                                                                         keyup_flag =1'b0;
  113.                                                                         end
  114.                           end
  115.                   end
  116.           end
  117.           3'b011:begin//幅度調節
  118.                    //show_vol_ctrl<=vol_ctrl_reg;//顯示
  119.                    if (keynum==4'b1111 )  keyup_flag =1'b1;
  120.                    else begin
  121.                      if(keyup_flag==1'b1) begin
  122.                                                                 if(keynum<4'b1010 )begin // 小于10的數按下
  123.                                                                            show_vol_ctrl=show_vol_ctrl<<4; //左移
  124.                                                                            show_vol_ctrl[3:0]=keynum;//按鍵值輸入
  125.                                                                                 keyup_flag =1'b0;
  126.                                                                            end
  127.                                                            else if(keynum==4'b1100 )begin //c  vol C按下,確認更改
  128.                                                                                  //state<=3'b010;
  129.                                                                                  keyup_flag =1'b0;
  130.                                                                                  //vol_ctrl<=vol_ctrl_reg; //送出更改的數據
  131.                                                                                  cnt=0;
  132.                                                                                  state<=3'b100;//跑去下一個狀態
  133.                                                    
  134.                                                                            end
  135.                                                                 else if(keynum==4'b1011)//* select wave out B按下,改變波形
  136.                                                                                 begin
  137.                                                                            
  138.                                                                                 WAVE_MODE=WAVE_MODE+1'b1;
  139.                                                                                 if(WAVE_MODE==3'b110) WAVE_MODE=3'b000;
  140.                                                                                 keyup_flag =1'b0;
  141.                                                                  end
  142.                       end
  143.                    end
  144.          
  145.           end
  146.           3'b100:begin //
  147.                           case(cnt)
  148.                                           0:begin vol_ctrl_reg<=show_vol_ctrl[7:4]*10;cnt=cnt+1'b1; end
  149.                                           1:begin vol_ctrl_reg<=vol_ctrl_reg+show_vol_ctrl[3:0];cnt=cnt+1'b1; end
  150.                                           2:begin  cnt=cnt+1'b1;
  151.                                                  state<=3'b010;//完成幅度輸入跳回控制狀態
  152.                                                  vol_ctrl<=vol_ctrl_reg; //送出更改的數據
  153.                                             end
  154.                           endcase        
  155.           end
  156.          default:  state<=3'b000;
  157.      endcase
  158.   end

  159. end
  160. endmodule
復制代碼


所有資料51hei提供下載:
V9.zip (12.14 MB, 下載次數: 338)




評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2017-5-16 02:18 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:400046 發表于 2018-12-23 20:58 | 只看該作者
#在這里快速回復#verilog文件沒法看
回復

使用道具 舉報

地板
ID:468708 發表于 2019-2-1 16:33 | 只看該作者
無法編譯,編譯錯誤。
回復

使用道具 舉報

5#
ID:502774 發表于 2019-5-23 21:47 來自手機 | 只看該作者
可以可以。fpga真的不錯。速度很快
回復

使用道具 舉報

6#
ID:502774 發表于 2019-5-24 11:29 | 只看該作者
好資料
回復

使用道具 舉報

7#
ID:502774 發表于 2020-4-11 23:50 來自手機 | 只看該作者
我又來了明天下載試試
回復

使用道具 舉報

8#
ID:1120418 發表于 2024-9-26 13:28 | 只看該作者
該quarter II 是什么版本?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.国产一区 | 欧美精品在线一区二区三区 | 在线观看av网站永久 | 色婷婷久久久亚洲一区二区三区 | 黄色成人国产 | 午夜在线免费观看视频 | 韩日在线视频 | 欧美又大粗又爽又黄大片视频 | 精品国产乱码久久久久久影片 | 91精品国产91久久久久久密臀 | 免费一二区 | 亚洲国产一区二区三区在线观看 | 久久久久久国产 | 精品福利在线 | 亚洲午夜一区二区 | 日韩成人精品一区 | jlzzxxxx18hd护士| www.中文字幕| 成人美女免费网站视频 | 日本成人福利视频 | 国产丝袜一区二区三区免费视频 | 久久久久中文字幕 | 亚洲韩国精品 | 99久久婷婷国产亚洲终合精品 | 国产欧美日韩在线观看 | 成人国产精品视频 | 欧美亚洲另类丝袜综合网动图 | 日韩中字幕 | 91视频免费 | 北条麻妃av一区二区三区 | 亚洲视频在线观看 | 欧美一区二区 | av在线一区二区三区 | 婷婷精品| 四虎影院免费在线 | 日韩av一区二区在线观看 | 日本a v在线播放 | 一区二区三区av | 国产三级精品三级在线观看四季网 | 91一区二区 | av性色全交蜜桃成熟时 |