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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

verilog设计简易正弦波信号发生器_FPGA学习(一)——产生频率可控的正弦波

發布時間:2024/3/12 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 verilog设计简易正弦波信号发生器_FPGA学习(一)——产生频率可控的正弦波 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2018.5.17更新如下

作為小透明,沒想到隨手一寫的學習過程也能被看見,看到有人點贊也還是很高興的,希望能以后自己忘了,還能來看懂,如果對大家能有所幫助,那就再好不過了。

對于輸出的正弦波周期有兩種算法,在這里記錄一下。

因為和昨天使用的不是同一個文件,所以名稱會和昨天的不一樣,不過原理一樣。

另外,在仿真的時候可以不用添加約束文件,只需要仿真時可以直接跳過,如果需要下載進板子的話就必須要寫了。下一篇會介紹。

1.使用DDS輸出的最高位去計算,具體操作如圖

步驟1.2.3,注意黃線的位置和數值

點擊兩次上圖3的圖標

根據兩次的數值就能算出輸出正弦波的周期

可能會覺得頻率控制字可以控制輸出波形的頻率,而輸出位寬又可以計算輸出波形周期,那改變輸出波形會影響什么呢?會影響輸出波形周期嗎?答案是不會。

具體看圖,我將輸出位寬改為10位的仿真結果。

圈圈圈

輸出位寬影響的是輸出波形的幅度(0^◇^0)/

了解DDS的原理就明白了。

2.第二種就是昨天解釋原理時用頻率控制字控制輸出頻率時,fre_word取1的值。

具體算法見原答案。

兩種區別就是一個取最高位,一個取最低位,剛開始容易理不清。


原答案如下

信號調制和解調功能。寫下其中過程當做自己的學習記錄吧。本篇講的是如何產生一個正弦波。

  • 使用的軟件是Vivado 2016.4
  • 實驗室板卡是Nexys Video

  • 1.原理說明

    采用的是自帶DDS IP核,DDS直接數字式頻率合成器(Direct Digital Synthesizer),相信所有人看到這個名字就覺得不會陌生。

    DDS由頻率控制字(Frequency Control Word)寄存器、相位累加器(Phase Accumulator)和正余弦查找表(Sine/Cosine LUT)三部分組成,通過控制相位累加器的位寬和查找表的位寬,可以實現不同頻率和動態范圍的正弦信號的產生。

    關于DDS是如何產生我們需要的波形信號可以查看這篇文章:

    用FPGA實現DDS任意波形發生器 | 電子創新網賽靈思中文社區?xilinx.eetrend.com

    而我們現在不用關心太多原理,經過實驗的過程,自然就能明白其工作原理。

    我們只需要知道如何控制其輸出頻率就行了,首先記住兩個術語(jargon):

    a. 相位累加器:Phase = Phase + fre_word,可以暫且理解為i = i + 1一樣的東西。

    b. 頻率控制字:fre_word,這個東西的值直接影響輸出信號的頻率。

    我們的輸出頻率就是由fre_word來控制。

    具體怎么算的呢?

    DDS核頻率分辨率計算公式如下:

    其中Δθ就是我們的頻率控制字取值后文用fre_word表示,Bθ(n)是相位累加器位寬后文用B表示,fclk為DDS工作時鐘。

    頻率分辨率就是當Δθ=1時的fout。

    先假如我們需要的信號頻率范圍:1M-10MHz,分辨率0.01MHz。

    取Δθ=1,fout=0.01MHz,B=10bit,我們可得DDS工作時鐘fclk=10.24MHz。

    到這里我們就知道,產生一個正弦波信號需要2部分即可:

  • 時鐘分頻器(因為我們的軟件系統時鐘為100MHz,而我們算出的DDS工作時鐘為10.24MHz)
  • DDS IP核

  • 2.具體操作過程

    打開vivado,新建工程

    給工程命名,路徑不能出現中文

    如圖勾選,我們后面自己建源文件

    選擇板卡(這個板卡需要在安裝后自己添加了才會有),點擊接下來的next,finish。

    添加源文件

    取名

    現在不用添加管腳,點擊ok,yes即可

    添加IP 核,找到DDS,藍色的都是一樣的,隨便選一個雙擊

    命名,選擇dds工作時鐘10.24MHz,選擇使用硬件參數,位寬根據前面計算的結果填寫(相位位寬就是我們的頻率控制字位寬,而輸出位寬影響ROM表深度 (大小為

    表示輸出的正弦波一個周期的采樣值,因為DDS是數字信號經DA輸出模擬信號))。

    選擇可編程(因為由fre_word控制),輸出sine,不需要觀測相位輸出

    因為是10位,改為0000000001

    查看summary,可知最小頻率為0.01MHz,點擊ok

    點擊生成

    用時鐘管理核生成時鐘分頻模塊,步驟如圖,不再描述

    咦,,,,好像點擊圖片可以直接描述,第一次用知乎寫,還不會。。。。后面的圖片描述在圖片下方的描述區。。。

    接下來就是例化IP核,首先是時鐘分頻模塊,雙擊.veo文件,因為是Verilog語言寫的

    接下來就是例化IP核,首先是時鐘分頻模塊,雙擊.veo文件(因為是Verilog語言寫的),將程序復制到主程序中去

    同樣的方式例化DDS模塊,修改例化模塊的名字,2.3步

    建立頂層約束文件

    添加代碼,涉及到時序,說起來太麻煩,具體語句就不解釋了,最后會附代碼,復制就行

    添加仿真文件

    注意名稱

    編寫仿真代碼

    重點重點!!!!名字一定要一樣,否則會有驚喜的。mmp被坑慘了

    運行仿真

    右鍵將需要觀測的假如波形窗口

    選中,右鍵,修改為有符號數10進制表示,波形選擇為模擬波形

    周期為100us,我們運行200us查看波形

    3.代碼只要所建名字一樣,可以直接復制使用

    主程序

    頂層約束文件

    set_property -dict {PACKAGE_PIN R4 IOSTANDARD LVCMOS33} [get_ports sysclk] ############################ #https://mp.weixin.qq.com/s/3WoAO4aHYTqTWLTnF56zMA關于時序約束# ############################ create_clock -period 10.000 -name sysclk -waveform {0.000 5.000} [get_ports sysclk]

    仿真文件

    `timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2018/05/16 19:29:18 // Design Name: // Module Name: ZXB_tb // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // //module ZXB_tb();reg clk; // wire [7:0] data;reg [9:0] fw_z;ZXB dut(.sysclk(clk),.fw_z(fw_z),// .led(data));// 初始化 initialbeginclk = 0;fw_z = 10'b0000000001;end//產生100MHz時鐘信號alwaysbegin#5 clk = ~clk;end endmodule

    4.本來應該添上VIO和ILA的,不過沒有板子在,寫了也用不了,就不寫了,大概和這個差不多,主要區別就是VIO是外部板子給信號,而仿真就是軟件假裝的,所以在主程序中會有所不同。會Verilog就懂了。

    5.第一次寫,很簡單的一個功能,居然寫了這么多,說明理解還不是很到位,表達也不是很簡潔明了,ε=(′ο`*)))唉溜了溜了

    總結

    以上是生活随笔為你收集整理的verilog设计简易正弦波信号发生器_FPGA学习(一)——产生频率可控的正弦波的全部內容,希望文章能夠幫你解決所遇到的問題。

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