正弦信号发生器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正弦信号发生器设计
一:实验目的
1.进一步熟悉Quartus2的使用;
2.学会用case语句设计正弦信号;
3.掌握DAC0832的使用以及运用示波器观察波形。
二:实验原理
简易正弦信号发生器的结构由如下四部分组成:
1.‘计数器或地址信号发生器
2.正弦信号数据存储器ROM,但在本实验中,为了简便起见,我们采用case 语句直接将数据在程序中给出,而无需调用子模块ROM。并且我们选择的是128个的8位波形数据(一个正弦波形周期)。
3.VHDL顶层程序设计。
4.8位D/A(此实验器件选择DAC0832)。
与每个周期的波形数据点的个数(实地址发生器的时钟CLK的输入频率 f
验中选择了64个),以及D/A输出的频率f的关系是:f=f
/64
波形频率受以下因素制约:
1)D/A的最高工作频率
2)FPGA的工作频率
三:实验步骤
1.程序的编辑:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity sin1 is
port(rst,clk:in std_logic;
q:buffer std_logic_vector(7 downto 0) ); end;
architecture one of sin1 is
signal q1:integer range 0 to 127:=0;
begin
process(clk)
begin
if rst='0' then q<="00000000";
elsif clk'event and clk='1' then
if q1=127 then q1<=0;
else q1<=q1+1;
end if;
case q1 is
when 0=>q<="10000000";
when 1=>q<="10000110";
when 2=>q<="10001100";
when 3=>q<="10010010";
when 4=>q<="10011000";
when 5=>q<="10001110";
when 6=>q<="10100101";
when 7=>q<="10101010";
when 8=>q<="10110000";
when 9=>q<="10110110";
when 10=>q<="10111100";
when 11=>q<="11000001";
when 12=>q<="11000110";
when 13=>q<="11001011";
when 14=>q<="11010000";
when 15=>q<="11010101";
when 16=>q<="11011010";
when 17=>q<="11011110";
when 18=>q<="11100010";
when 19=>q<="11100110";
when 20=>q<="11101010";
when 21=>q<="11101101";
when 22=>q<="11110000";
when 23=>q<="11110011";
when 24=>q<="11110101";
when 25=>q<="11111000";
when 26=>q<="11111010";
when 27=>q<="11111011";
when 28=>q<="11111101";
when 29=>q<="11111110";
when 31=>q<="11111111"; when 32=>q<="11111111"; when 33=>q<="11111111"; when 34=>q<="11111110"; when 35=>q<="11111110"; when 36=>q<="11111101"; when 37=>q<="11111011"; when 38=>q<="11111010"; when 39=>q<="11111000"; when 40=>q<="11110101"; when 41=>q<="11110011"; when 42=>q<="11110000"; when 43=>q<="11101101"; when 44=>q<="11101010"; when 45=>q<="11100110"; when 46=>q<="11100010"; when 47=>q<="11011110"; when 48=>q<="11011010"; when 49=>q<="11010101"; when 50=>q<="11010000"; when 51=>q<="11001011"; when 52=>q<="11000110"; when 53=>q<="11000001"; when 54=>q<="10111100"; when 55=>q<="11010110"; when 56=>q<="10110000"; when 57=>q<="10101010"; when 58=>q<="10100101"; when 59=>q<="10011110"; when 60=>q<="10011000"; when 61=>q<="10010010"; when 62=>q<="10001100"; when 63=>q<="10000110"; when 64=>q<="01111111"; when 65=>q<="01111001"; when 66=>q<="01110011"; when 67=>q<="01101101"; when 68=>q<="01100111"; when 69=>q<="01100001"; when 70=>q<="01011010"; when 71=>q<="01010101"; when 72=>q<="01001111"; when 73=>q<="01001001";