基于verilog的正弦波发生器
基于verilog的正弦波發生器
這是我在CSDN里的第一篇文章,先做個小廣告。。
我建了一個嵌入式和FPGA的公眾號,里面也是我寫的一些文章,有的是平時學習的筆記,或者實驗的記錄,我希望和大家一起學習,記錄學習的東西。因為剛剛起步,需要大家的支持,希望大家關注一下,也可以給我點建議。。
畢竟是剛剛起步,文章寫的不好,大家別介意,一起努力哈哈哈
*
公眾號:FPGA科技室
**
已改名為:FPGA科技室
這一篇文章是關于基于verilog的正弦波發生器(即產生正弦波波形),這也是我的公眾號第一篇FPGA文章,想讓大家學習一下如何利用開發工具,產生一個正弦波形sinx。
為啥開篇講這個內容呢,因為畢竟第一篇文章,適合循序漸進,從簡單先入手,但大家不要小看這個正弦波波形的設計,因為這將會是直接數字式頻率合成器DDS的基礎,只有會第一步設計,我們才能更加深入到DDS,之后我也會來講述。
開門見山,這次的設計要用到matlab軟件(生成ram ip核的mif文件),multisim 10(仿真波形),UE(編寫代碼)。 想必大家學過數字信號處理DSP,如果要采樣信號,則其采樣頻率必須大于原信號最高頻率的兩倍,即fs>=2fc。ram既然是數字器件,我們無法存入模擬信號正弦波,則需要對其進行采樣定點化(一般fpga器件無法存浮點數,需要定點化),那么我們就用到了matlab,利用其強大的功能,編寫matlab程序,得到采樣點值,并利用matlab生成mif文件(ram的初始化文件)
下面就是大致的設計思路:
將連續的正弦波信號進行離散化;應用matlab 軟件進行實現;
2.將離散化后的正弦波一個整周期存儲到Ram中;
(1).將離散后的數據進行定點化,Ram的規格是256x8,數據規格1bit符號位和7比特小數位。
(2).創建一個Ram 用于存儲離散數據
首先我先給出matlab代碼:
**
生成一個ip ram,因為verilog編寫時需要例化IP哦
我們來生成RAM。。。。首先利用ip工具,create a new ip
選擇類型。。。。。咱們這次用單口ram ,sp_ram_256x8
如下圖是我們創建的ram,256深度,位寬為8哦
最后我們加入剛剛matlab生成的mif文件
完成了一半了,此時我們可以在工作區看到我們新建的ip核工程了
下面來編寫verilig代碼,頂層文件:在頂層中例化了ip核 ,由于我們已經初始化了mif,則ram的寫數據端用不到,我們將其置為0,數據也為0,只由地址端進行操作。
至此,只要再編寫testbench文件即可,
ok,至此我們完成了正弦波的設計,
來吧,這下我們來個仿真,見證奇跡的時刻
總結:
咦,不知道大家發現沒,如果按照這樣的mif編寫規則,我們是不是不光可以生成sinx波形,還可以生成cosx。。。等等的函數波形,因為matlab很強大,幫助了我們很多,這次的設計雖然簡單,但是用到了挺多東西,如何建立ip核,如何初始化。。可見設計一樣東西,需要全面的知識體系,verilog只是一個工具。
哈哈,第一篇文章結束了,寫的不難懂吧,用通俗的話,主要描述了操作。大家可以試試哦
發揮部分:如何實現正弦波的頻率可調?
總結
以上是生活随笔為你收集整理的基于verilog的正弦波发生器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 错误记录一:线程通信时抛出Excepti
- 下一篇: GreenPlum的学习心得和知识总结(