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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

基于verilog的正弦波发生器

發布時間:2024/3/12 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于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代碼:
**

N=2^8; %N為采樣點數 s_p=0:255;%正弦波一個周期的采樣點數 sin_data=sin(2*pi*s_p/N); %sin_data是初步采樣值,浮點數% 編寫到這里,大家可以在任務行中顯示此時的波形 fix_p_sin_data=fix(sin_data*127); %定點化 fix()函數可以直接去除小數點后的值,使之成為整數 for i=1:Nif fix_p_sin_data(i)<0fix_p_sin_data(i)=N+fix_p_sin_data(i)elsefix_p_sin_data(i)=fix_p_sin_data(i);end end%下面是mif文件固定格式,不可更改 fid=fopen('sp_ram_256x8.mif','w+'); fprintf(fid,'WIDTH=8;\n'); fprintf(fid,'DEPTH=256;\n'); fprintf(fid,'ADDRESS_RADIX=UNS;\n'); fprintf(fid,'DATA_RADIX=UNS;\n'); fprintf(fid,'CONTENT BEGIN \n'); for i=1:N fprintf(fid,'%d:%d; \n',i-1,fix_p_sin_data(i)); end fprintf(fid,'END; \n'); fclose(fid); 好了到此為止,我們就編寫完并生成了初始化**mif文件了,下面可以開始verilog編寫了,噢,不對,咱們先來利用quartus

生成一個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的正弦波发生器的全部內容,希望文章能夠幫你解決所遇到的問題。

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