基于FPGA的直接数字(6)

2019-03-22 11:35

青岛大学本科生毕业论文(设计) 实验及开发系统

4.2 演示程序及软件仿真

演示程序为4位频率字输入,采样点256个,8位输出通过D/A转换和低通滤波之后采用示波器观察正弦波形,4位频率字通过键4、3、2、1以16进制的形式输入,由于DAC0832以及低通滤波电路已经在实验开发系统的内部连线,只需要打开D/A转化的电源,将示波器输入端接在D/A转换器的输出端即可。

下面为演示程序的VHDL描述代码:

library IEEE; -- DDSC: DDS主模块 use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; use ieee.std_logic_arith.all;

entity ddsc is -- DDS主模块 generic(adder_width : integer := 8; -- 累加器位宽

romad_width : integer := 8; -- 正弦ROM表地址位宽 rom_d_width : integer := 8); -- 正弦ROM表数据位宽 port( clk : in std_logic;

sel : in std_logic_vector(3 downto 0);

ddsout : out std_logic_vector(rom_d_width-1 downto 0); ledout:out std_logic_vector(3 downto 0) ); end entity ddsc;

architecture behave of ddsc is component i_rom PORT

( address

clock q

: in std_logic_vector (7 downto 0); : in std_logic ;

: out std_logic_vector (7 downto 0));

end component i_rom;

signal acc : std_logic_vector(adder_width-1 downto 0); signal romaddr : std_logic_vector(romad_width-1 downto 0); signal selout:std_logic_vector(3 downto 0); begin selout<=sel; process (clk) begin

if(clk'event and clk = '1') then acc <= acc + sel; -- 相位累加器

23

青岛大学本科生毕业论文(设计) 实验及开发系统

end if; end process;

u1:i_rom port map ( clock => clk,address => romaddr,q => ddsout ); ledout<=selout; end architecture behave;

其中正弦查找表i_rom.mif按照2.2.2节介绍的方法制作,源代码如下: width=8; depth=256; address_radix=dec; data_radix=dec; content begin

0:127;1:130;2:133;3:136;4:139;5:143;6:146;7:149;8:152;9:155;10:158;11:161;12:164; 13:167;14:170;15:173;16:176;17:179;18:182;19:184;20:187;21:190;22:193;23:195; 24:198;25:200;26:203;27:205;28:208;29:210;30:213;31:215;32:217;33:219;34:221; 35:224;36:226;37:228;38:229;39:231;40:233;41:235;42:236;43:238;44:239;45:241; 46:242;47:244;48:245;49:246;50:247;51:248;52:249;53:250;54:251;55:251;56:252; 57:253;58:253;59:254;60:254;61:254;62:254;63:254;64:255;65:254;66:254;67:254; 68:254;69:254;70:253;71:253;72:252;73:251;74:251;75:250;76:249;77:248;78:247; 79:246;80:245;81:244;82:242;83:241;84:239;85:238;86:236;87:235;88:233;89:231; 90:229;91:228;92:226;93:224;94:221;95:219;96:217;97:215;98:213;99:210;100:208; 101:205;102:203;103:200;104:198;105:195;106:193;107:190;108:187;109:184; 110:182;111:179;112:176;113:173;114:170;115:167;116:164;117:161;118:158; 119:155;120:152;121:149;122:146;123:143;124:139;125:136;126:133;127:130; 128:127;129:124;130:121;131:118;132:115;133:111;134:108;135:105;136:102; 137:99;138:96;139:93;140:90;141:87;142:84;143:81;144:78;145:75;146:72;147:70; 148:67;149:64;150:61;151:59;152:56;153:54;154:51;155:49;156:46;157:44;158:41; 159:39;160:37;161:35;162:33;163:30;164:28;165:26;166:25;167:23;168:21;169:19; 170:18;171:16;172:15;173:13;174:12;175:10;176:9;177:8;178:7;179:6;180:5;181:4; 182:3;183:3;184:2;185:1;186:1;187:0;188:0;189:0;190:0;191:0;192:0;193:0;194:0; 195:0;196:0;197:0;198:1;199:1;200:2;201:3;202:3;203:4;204:5;205:6;206:7;207:8; 208:9;209:10;210:12;211:13;212:15;213:16;214:18;215:19;216:21;217:23;218:25; 219:26;220:28;221:30;222:33;223:35;224:37;225:39;226:41;227:44;228:46;229:49; 230:51;231:54;232:56;233:59;234:61;235:64;236:67;237:70;238:72;239:75;240:78; 241:81;242:84;243:87;244:90;245:93;246:96;247:99;248:102;249:105;250:108; 251:111;252:115;253:118;254:121;255:124; end;

romaddr <=acc(adder_width-1 downto 0); -- sinrom

24

青岛大学本科生毕业论文(设计) 实验及开发系统

程序中关键词width表示ROM数据位宽,depth设置ROM数据的深度,即8位数据的数量。程序中设置的256等效于8位地址线宽度,address_radix=dec和data_radix=dec表示设置地址的数据表达格式都是十进制。注意,程序中“content begin”下所示的数据格式是为了节省篇幅,实用中应该使每一数据组(如0:127;)占一行。

4.3 实验过程与结果分析

按照2.2.1节介绍的设计流程,首先建立一个工程文件,然后将上面的原理程序输入,在Quartus II软件中进行编译以及综合。

然后为在实验系统上验证设计的正确性,完成硬件测试,首先将引脚锁定,目标器件是EP1K30,选择实验电路模式5,用键1~4控制频率字输入4位sel ,数码管8显示输入的频率控制字;clk接clock0;输出数字频率信号ddsout接8位D/A转换器。通过短路帽选择clock0接16384Hz信号。

现在根据以上确定的实验模式锁定多路选择器在目标芯片中的具体引脚(见表4.1)及在Quartus II中锁定(图4.2)

管脚 clk ddsout0 ddsout1 ddsout2 ddsout3 ddsout4 ddsout5 ddsout6 ddsout7 sel0 sel1 sel2 sel3 Ledout3 Ledout2 Ledout1 Ledout0 表4.1 芯片EP1K30引脚锁定表 引脚名 clock0 PIO24 PIO25 PIO26 PIO27 PIO28 PIO29 PIO30 PIO31 PIO0 PIO1 PIO2 PIO3 PIO47 PIO46 PIO45 PIO44 引脚号 126 41 42 65 67 68 69 70 72 8 9 10 12 96 95 92 91

25

青岛大学本科生毕业论文(设计) 实验及开发系统

图4.2 quartus中锁定引脚 特别需要注意,将引脚锁定之后,还需要对文件运行一次编译器,以便将引脚信息写入下载文件中。

在将程序下载器件之前,为了测试项目的正确性,要进行逻辑仿真,即首先用Quartus II软件模拟硬件的工作过程,建立波形文件之后,运行仿真器,观察波形图。

图4.3 数字频率输出的仿真结果 26

青岛大学本科生毕业论文(设计) 实验及开发系统

从波形仿真图4.3中看到,当输入频率字为0001(二进制)时,输出数字频率是按照正弦查找表i_rom.mif中的数字“FF-FE-FC-??”变化,验证频率合成器的理论设计是正确的,下面将程序下载到器件中,通过实际电路进行验证。

选择菜单中的“Programmer”选项,在菜单的“Hardware Setup”选项选择计算机的并口下载方式ByteBlaster(MV),“MV”是混合电压的意思,主要是对ALTERA的各类芯片电压(如5V、2.5V、1.8V)的FPGA/CPLD都能由此下载。

完成下载配置后,单击“Start”按钮,向EP1K30芯片下载配置文件,如果连线无误,出现如图4.4的提示窗口,表明下载成功。

图4.4 EP1K30芯片编程下载窗口 下载后,打开系统左上侧的+/-12V开关(D/A输出需要),将示波器的探头接于系统左下角的两个挂钩处,最右侧的时钟选择,用短路帽接插16384Hz处,选择模式5。

由输出与频率控制字K关系fout=K·fclk /2N ,调整时钟频率及频率控制字理论上即可输出任意频率的波形。本次设计频率控制字最大可为15,当时钟频率为5Mhz时,最大即可产生频率为300KHz的输出,且不失真。当输入时钟频率小至256Hz时,可从示波器中观察到相位累加时变换的台阶。因此,设计是符合要求的。

本仿真实验过程中,由于采用了256个采样点,及实验开发系统上的D/A转换芯片DAC0832的输入只有8位,且最高转换速度只有1MHz,为了避免波形失真及根据实际 需要,可采用1024个采样点或更高,D/A转换芯片可采用更高位数(如MAXIM公司的MAX507), 能够产生失真较小及频率更高的输出波形。

27


基于FPGA的直接数字(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2008年全国中考数学压轴题精选1--6

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: