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