
JIANGSU UNIVERSITY OF TECHNOLOGY
FPGA综合训练报告
题 目: 基于FPGA的波形生成器
专 业: 电子信息工程__
班 级: 11电子2
姓 名: 小龙人
学 号: 12311222_
指导教师: ___陈海忠 ___ __
时 间: 2015年9月 __
1基于DDS技术的信号发生器设计--------------------------------------------------------2
1.1 功能要求------------------------------------------------------------------------------------2
1.2 整体设计------------------------------------------------------------------------------------2
1.3 DDS技术的基本原理---------------------------------------------------------------------3
2 FPGA硬件系统设计------------------------------------------------------------------------4
2.1 功能要求 ----------------------------------------------------------------------------------4
2.2 FPGA硬件系统组成--------------------------------------------------------------------5
2.3 FPGA最小系统简介--------------------------------------------------------------------6
2.4 FPGA外围电路设计--------------------------------------------------------------------7
2.5 程序设计------------------------------------------------------------------------------------8
2.5.1 锯齿波产生程序设计及仿真----------------------------------------------------------9
2.5.2 三角波产生程序设计及仿真---------------------------------------------------------10
2.5.3 正弦波产生程序设计及仿真---------------------------------------------------------11
2.5.4 顶层程序设计及仿真-----------------------------------------------------------------12
2.5.5分频程序及作用------------------------------------------------------------------------13
2.6 硬件测试及结果分析-------------------------------------------------------------------14
3设计分析与总结----------------------------------------------------------------------------15
3.1 故障分析----------------------------------------------------------------------------------15
3.3 设计总结及感想-------------------------------------------------------------------------15
4 参考文献------------------------------------------------------------------------------------16
5 附录------------------------------------------------------------------------------------------17
1基于DDS技术的信号发生器设计
1.1 功能要求
具有产生正弦波、三角波、锯齿波3种周期性波形的功能。
1.2 整体设计
如图1.1所示:
图1.1
相位累加器的作用:在时钟的作用下,进行相位累加。
波形存储器的作用:进行波形的相位—幅值转换。
频率预置与调节电路的作用:实现频率控制量的输入。
D/A转换器的作用:把已经合成的正弦波的数字量转换成模拟量。滤除生成的阶梯形正弦波中的高频成分,将其变成光滑的正弦波。
如图1.2所示:
图1.2
1.3 DDS技术的基本原理
DDS这种结构主要由相位累加器、 相位调制器、 波形 ROM 查找表、 D/ A 构成。其中相位累加器、 相位调制器、 波形 ROM 查找表是 DDS 结构中的数字部分 ,由于具有数控频率合成的功能 ,又合称为 NCO[2]。
它的工作原理是:将要产生的波形数据存入波形存储器 ,然后在参考时钟的作用下 ,对输入的频率数据进行累加 ,并且将累加器的输出一部分作为读取波形存储器的地址 ,将读出的波形数据经D/A转换为相应的模拟电压信号。本研究的重点就是用VHDL来实现DDS的功能 ,能够达到高精度的输出 ,同时标准波形数据生成存放在 ROM 中 ,可以简化运算过程 ,提高运算速度 ,加快反应时间。
2 FPGA硬件系统设计
2.1 功能要求
在本设计中,利用FPGA,采用EDA(Electronic Design Automation)中自顶向下(top-to-down)的设计方法,选用基于相位累加器的直接数字合成/ DDS技术来完成数字信号发生器各功能模块的设计。
本设计主要通过VHDL语言实现频率控制、波形控制、 波形数据的提取、 波形的产生工作。其中 ,波形数据运用VHDL语言编写 。控制部分主要采用产生高低电平的拨码开关控制。程序下载到 FPGA 上实现 ,经过D/ A 输出波形。并通过Altera公司QuartusII9.0软件进行波形的仿真,从而完成整个设计。
本设计的任务是设计一个基于FPGA的数字信号发生器,根据任务书要求必须达到以下要求:
1.利用EDA开发系统、Quartus II 9.0软件实现数字信号发生器的设计;
2.根据整体电路的工作原理,完成各个子模块的设计及实现;
3.对数字信号发生器完成VHDL语言描述;
4.该数字信号发生器能够产生正弦波、方波、三角波、锯齿波信号;
5.产生的波形信号频率和幅度可通过按键进行调节;
6.用按键调节实现各种波形的转换。
2.2 FPGA最小系统简介
本设计使用是FPGA芯片,其典型逻辑门数(包括逻辑门和RAM)为50000门,最大可用系统门数为116000门,逻辑单元(Logic elements)为2880个,逻辑阵列模块(Logic array blocks)为360个,嵌入式阵列模块(Embedded array blocks)为10个,RAM总容量为20480字节,用户可用的I/O引脚最多为310个。芯片的工作电压为+5V。其内部结构如图2.1所示。
图2.1 芯片结构图
通常情况下在硬件调试的过程中一般使用下载电缆进行下载,而当调试完成以后要用配置芯片对FPGA进行配置。配置芯片在每次系统上电以后自动将配置文件加载到FPGA中形成电路。
2.3 FPGA硬件系统组成
该数字信号发生器系统主要由输入部分、FPGA部分、D/A转换部分、频率、幅值调节和波形转换部分组成。
原理图如图2.2所示。
图2.2 数字信号发生器系统原理图
2.4 FPGA外围电路设计
D/A转换器电路的设计:从波形RAM中读出的幅度量化数据还只是一个数字信号,要得到最后的输出信号必须经过数模转换器。因此在波形RAM之后要设计一个D/A转换电路。
数模(D/A)转换电路的作用是把已经合成的波形幅值的数字量转换成模拟量,其速度和特性直接影响整个系统的性能。D/A转换器件的首要特性要求是高速,其次是转换位数,本设计中选用8位的D/A芯片DAC0832。波形幅度量化序列经D/A转换后成为阶梯波。频率合成器对D/A转换器的分辨率有一定的要求,D/A转换器的分辨率越高,合成的波形台阶数就越多输出的波形的精度也就越高。D/A的输出用电压形式表示一般应为:
式中D为D/A的输入数据值,N为D/AC的位数,即通常所指的D/AC的分辨率,为输入D/A的参考电压。D/A转换电路的设计首先是要选择一款合适的D/A转换芯片。D/A转换芯片种类繁多。选择D/A转换芯片要根据很多因素来确定,最主要的就是要考虑字长和转换速度。本设计采用DAC0832 作为D/A 转换器件,其具有数字量的输入锁存功能,DAC0832芯片的输出通过放大器OP07,即可用示波器观察。100KΩ的电位器在+5V和0V电压间为DAC0832提供参考电压。D/A转换电路的原理图如图2.3所示:
图2.3 D/A转换电路的原理图
2.5 程序设计
mif文件生成
使用C程序:
#include #include "math.h" main() {int i;float s; for(i=0;i<1024;i++) { s = sin(atan(1)*8*i/1024); printf("%d : %d;\\n",i,(int)((s+1)*1023/2)); } } 生成该mif文件后需要创建该rom对应的eda程序,即创建对应的.vhd文件,创建完成后要注意程序内访问rom文件的地址是否正确。同时对这vhd文件另存为一个新的工程,再编译,生成对应的bsf。 2.5.1 锯齿波产生程序设计及仿真 锯齿波模块 锯齿波生成程序如下: Q <= SUB_WIRE0(9 DOWNTO 0); ALTSYNCRAM_COMPONENT : ALTSYNCRAM GENERIC MAP ( PORT MAP ( CLOCK0 => CLOCK, ADDRESS_A => ADDRESS, Q_A => SUB_WIRE0 ); END SYN; 程序详见附录 仿真图形如图2.4.1: 图2.4.1 2.5.2 三角波产生程序设计及仿真 三角波模块 三角波产生程序如下: PORT MAP ( CLOCK0 => CLOCK, ADDRESS_A => ADDRESS, Q_A => SUB_WIRE0 ); END SYN; 程序详见附录 仿真图形如图2.4.2: 图2.4.2 2.5.3 正弦波产生程序设计及仿真 正弦波模块 正弦波程序如下: BEGIN Q <= SUB_WIRE0(9 DOWNTO 0); ALTSYNCRAM_COMPONENT : ALTSYNCRAM GENERIC MAP ( CLOCK_ENABLE_INPUT_A => "BYPASS CLOCK_ENABLE_OUTPUT_A => "BYPASS" 程序详见附录 仿真图形如图2.4.3: 图2.4.3 2.5.4 顶层程序设计及仿真 (1) 程序的功能 整合所有的子程序,产生所需要的波形 (2) 结构图或实体图 (3) 顶层程序(输出方案) U1:ADDER32B PORT MAP(A=>F32B,B=>D32B,S=>DIN32B); U2:REG32B PORT MAP(DOUT=>D32B,DIN=>DIN32B,LOAD=>CLK1); U3:ADDER10B PORT MAP(A=>P10B,B=>D32B(31 DOWNTO 22),S=>LIN10B); U4:REG10B PORT MAP(DOUT=>SIN10B,DIN=>LIN10B,LOAD=>CLK1); U5:SIN_ROM PORT MAP(ADDRESS=>SIN10B,Q=>V1,CLOCK=>CLK1); U6:SJBROM PORT MAP(ADDRESS=>SIN10B,Q=>V2,CLOCK=>CLK1); U7:JCBROM PORT MAP(ADDRESS=>SIN10B,Q=>V3,CLOCK=>CLK1); U8:XZQ PORT MAP(SEL1=>SEL,D1=>V1,D2=>V2,D3=>V3,Q=>FOUT); U9:FPQ PORT MAP(INCLK=>CLK,OUTCLK=>CLK1); END ; 程序详见附录 (4) 仿真波形及分析 2.5.5 分频程序及作用 (1)程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_11.ALL; ENTITY ONEMHZ IS PORT( CLKIN:IN STD_LOGIC; --时钟信号输入 CLKOUT:OUT STD_LOGIC); --时钟信号输出 END ONEMHZ; ARCHITECTURE ONEMHZ OF ONEMHZ IS SIGNAL DATA:INTEGER RANGE 0 TO 149; SIGNAL Q:STD_LOGIC; BEGIN PROCESS(CLKIN) BEGIN IF RISING_EDGE(CLKIN) THEN IF(DATA=50) THEN --此句为你想要的分频比,DATA=0,1,2,3,4.......9的分频比为1,2,3,,10 DATA<=0; Q<=NOT Q; ELSE DATA<=DATA+1; END IF; END IF; CLKOUT<=Q; END PROCESS; END ONEMHZ; 程序详见附录 (2)作用 由于FPGA提供的频率为50MHz,在不加处理的情况下,DAC无法分辨,且调频无法实现。 (3)频率区间 先对其500分频,故而为50MHz/500 由于有公式: DAC内N=10; 故;在 所能产生的各个频率包括 97.65*(000001B~111111B)Hz 2.5 硬件测试及结果分析 通过杜邦线接高低电平于FPGA,频率控制与相位控制接0上电,进行调试。 可以产生正弦、锯齿、三角波,但是在放大后,图形不光滑,有许多尖刺出现。接上滤波后,大为缓解。 3设计分析与总结 3.1 故障分析 设计过程中出现的故障分析 故障一: (1)现象:只能产生一种波形 原因分析:FPGA芯片烧录错误、引脚使用错误。 (2)现象:波形不光滑。 原因分析:没有接滤波,波形为直接合成,接上滤波后大为缓解。 3.2功能分析 采用杜邦线来选择波形,01是正弦波,10是三角波,11锯齿波。(1为高电平,0接地) 3.3 设计总结及感想 在这里感谢指导老师给我耐心的指导,在这次设计期间,碰到许多专业方面的难题,都一一予以解答,特别在教学繁忙的情况下,还为我们提供了许多宝贵的资料和意见,对我们进行了详细的分析,使我们更加顺利地完成此次课程设计。通过这一个多月的时间,使我学到许多知识,明白了许多以前上课时无法理解的知识,还积累了一些较简单的问题解决方案。与此同时也感谢同组做课题设计的同学,在设计过程中,有许多东西我不懂,他们都耐心地给我讲解,给予我技术支援,帮助我解决了不少难题。 4 参考文献 [1]朱小斌.电子测量仪器.北京:电子工业出版社,1996 [2]Michael Lauterbach Artpin.任意波形发生器在通讯测试中的应用.电子产品世界,1997 [3]史海明.个人仪器多功能任意波形发生器的研制.仪表技术,1988 [4]林青.DDS在数字调制中的应用.无线电工程,2001 [5]张开增,张迎新,王尚忠.高分辨率高稳度宽带函数发生器的研制.华北工学院学报 [6]华清远见嵌入式培训中心.FPGA应用开发入门与典型实例.北京:人民邮电出版社,2008 [7]薛刚.基于DDS技术的任意信号发生器.自动化与仪器仪表,1995 [8]陈冠百.锁相与频率合成.北京:电子工业出版社,1995 [9]赵新民.智能化仪器设计基础.哈尔滨:哈尔滨工业大学出版社,1999 [10]M.S.高西,K.R.赖克.现代滤波器设计.北京:科学出版社,19 5 附录 硬件原理图 实验波形图。 最低值 理论值 三个频率分别为 97.65Hz 97.60Hz 97.63Hz,相对误差为:-0.027% 理论输出 三个频率分别为 488.30Hz 488.23Hz 488.36Hz,相对误差为:+0.0102% 理论输出 三个频率分别为 683.51Hz、 683.51Hz、 683.58Hz,相对误差为:-0.0072% 均在范围,十分精确。 详细程序 主程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DDS IS PORT(CLK:IN STD_LOGIC; SEL:IN STD_LOGIC_VECTOR(1 DOWNTO 0); FWORD:IN STD_LOGIC_VECTOR(7 DOWNTO 0); PWORD:IN STD_LOGIC_VECTOR(7 DOWNTO 0); FOUT:OUT STD_LOGIC_VECTOR(9 DOWNTO 0)); END ENTITY; ARCHITECTURE ONE OF DDS IS COMPONENT REG32B PORT (LOAD:IN STD_LOGIC; DIN: IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); END COMPONENT; COMPONENT REG10B PORT (LOAD:IN STD_LOGIC; DIN: IN STD_LOGIC_VECTOR(9 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(9 DOWNTO 0)); END COMPONENT; COMPONENT ADDER32B PORT(A:IN STD_LOGIC_VECTOR(31 DOWNTO 0); B:IN STD_LOGIC_VECTOR(31 DOWNTO 0); S: OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); END COMPONENT; COMPONENT ADDER10B PORT(A:IN STD_LOGIC_VECTOR(9 DOWNTO 0); B:IN STD_LOGIC_VECTOR(9 DOWNTO 0); S: OUT STD_LOGIC_VECTOR(9 DOWNTO 0)); END COMPONENT; COMPONENT SIN_ROM PORT(ADDRESS: IN STD_LOGIC_VECTOR (9 DOWNTO 0); CLOCK: IN STD_LOGIC ; Q: OUT STD_LOGIC_VECTOR (9 DOWNTO 0)); END COMPONENT; COMPONENT SJBROM PORT(ADDRESS: IN STD_LOGIC_VECTOR (9 DOWNTO 0); CLOCK: IN STD_LOGIC ; Q: OUT STD_LOGIC_VECTOR (9 DOWNTO 0)); END COMPONENT; COMPONENT JCBROM PORT(ADDRESS: IN STD_LOGIC_VECTOR (9 DOWNTO 0); CLOCK: IN STD_LOGIC ; Q: OUT STD_LOGIC_VECTOR (9 DOWNTO 0)); END COMPONENT; COMPONENT XZQ PORT(SEL1:IN STD_LOGIC_VECTOR(1 DOWNTO 0); D1,D2,D3:IN STD_LOGIC_VECTOR(9 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(9 DOWNTO 0)); END COMPONENT; COMPONENT FPQ PORT(INCLK:IN STD_LOGIC; OUTCLK:OUT STD_LOGIC); END COMPONENT; SIGNAL F32B,D32B,DIN32B:STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL P10B,LIN10B,SIN10B:STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL V1,V2,V3:STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL CLK1:STD_LOGIC; BEGIN F32B(27 DOWNTO 20)<=FWORD; F32B(31 DOWNTO 28)<="0000"; F32B(19 DOWNTO 0)<="00000000000000000000"; P10B(9 DOWNTO 2)<=PWORD; P10B(1 DOWNTO 0)<="00"; U1:ADDER32B PORT MAP(A=>F32B,B=>D32B,S=>DIN32B); U2:REG32B PORT MAP(DOUT=>D32B,DIN=>DIN32B,LOAD=>CLK1); U3:ADDER10B PORT MAP(A=>P10B,B=>D32B(31 DOWNTO 22),S=>LIN10B); U4:REG10B PORT MAP(DOUT=>SIN10B,DIN=>LIN10B,LOAD=>CLK1); U5:SIN_ROM PORT MAP(ADDRESS=>SIN10B,Q=>V1,CLOCK=>CLK1); U6:SJBROM PORT MAP(ADDRESS=>SIN10B,Q=>V2,CLOCK=>CLK1); U7:JCBROM PORT MAP(ADDRESS=>SIN10B,Q=>V3,CLOCK=>CLK1); U8:XZQ PORT MAP(SEL1=>SEL,D1=>V1,D2=>V2,D3=>V3,Q=>FOUT); U9:FPQ PORT MAP(INCLK=>CLK,OUTCLK=>CLK1); END ; 三角波 LIBRARY IEEE; USE IEEE.STD_LOGIC_11.ALL; LIBRARY ALTERA_MF; USE ALTERA_MF.ALL; ENTITY SJBROM IS PORT ( ADDRESS : IN STD_LOGIC_VECTOR (9 DOWNTO 0); CLOCK : IN STD_LOGIC ; Q : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) ); END SJBROM; ARCHITECTURE SYN OF SJBROM IS SIGNAL SUB_WIRE0 : STD_LOGIC_VECTOR (9 DOWNTO 0); COMPONENT ALTSYNCRAM GENERIC ( CLOCK_ENABLE_INPUT_A : STRING; CLOCK_ENABLE_OUTPUT_A : STRING; INIT_FILE : STRING; INTENDED_DEVICE_FAMILY : STRING; LPM_HINT : STRING; LPM_TYPE : STRING; NUMWORDS_A : NATURAL; OPERATION_MODE : STRING; OUTDATA_ACLR_A : STRING; OUTDATA_REG_A : STRING; WIDTHAD_A : NATURAL; WIDTH_A : NATURAL; WIDTH_BYTEENA_A : NATURAL ); PORT ( CLOCK0 : IN STD_LOGIC ; ADDRESS_A : IN STD_LOGIC_VECTOR (9 DOWNTO 0); Q_A : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) ); END COMPONENT; BEGIN Q <= SUB_WIRE0(9 DOWNTO 0); ALTSYNCRAM_COMPONENT : ALTSYNCRAM GENERIC MAP ( CLOCK_ENABLE_INPUT_A => "BYPASS CLOCK_ENABLE_OUTPUT_A => "BYPASS INIT_FILE => "C:\\USERS\\ADMINISTRATOR\\DESKTOP\\DDS\\SANJIAO.MIF INTENDED_DEVICE_FAMILY => "CYCLONE II LPM_HINT => "ENABLE_RUNTIME_MOD=NO LPM_TYPE => "ALTSYNCRAM NUMWORDS_A => 1024, OPERATION_MODE => "ROM OUTDATA_ACLR_A => "NONE OUTDATA_REG_A => "UNREGISTERED WIDTHAD_A => 10, WIDTH_A => 10, WIDTH_BYTEENA_A => 1 ) PORT MAP ( CLOCK0 => CLOCK, ADDRESS_A => ADDRESS, Q_A => SUB_WIRE0 ); END SYN; 正弦波 LIBRARY IEEE; USE IEEE.STD_LOGIC_11.ALL; LIBRARY ALTERA_MF; USE ALTERA_MF.ALL; ENTITY SIN_ROM IS PORT ( ADDRESS : IN STD_LOGIC_VECTOR (9 DOWNTO 0); CLOCK : IN STD_LOGIC ; Q : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) ); END SIN_ROM; ARCHITECTURE SYN OF SIN_ROM IS SIGNAL SUB_WIRE0 : STD_LOGIC_VECTOR (9 DOWNTO 0); COMPONENT ALTSYNCRAM GENERIC ( CLOCK_ENABLE_INPUT_A : STRING; CLOCK_ENABLE_OUTPUT_A : STRING; INIT_FILE : STRING; INTENDED_DEVICE_FAMILY : STRING; LPM_HINT : STRING; LPM_TYPE : STRING; NUMWORDS_A : NATURAL; OPERATION_MODE : STRING; OUTDATA_ACLR_A : STRING; OUTDATA_REG_A : STRING; WIDTHAD_A : NATURAL; WIDTH_A : NATURAL; WIDTH_BYTEENA_A : NATURAL ); PORT ( CLOCK0 : IN STD_LOGIC ; ADDRESS_A : IN STD_LOGIC_VECTOR (9 DOWNTO 0); Q_A : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) ); END COMPONENT; BEGIN Q <= SUB_WIRE0(9 DOWNTO 0); ALTSYNCRAM_COMPONENT : ALTSYNCRAM GENERIC MAP ( CLOCK_ENABLE_INPUT_A => "BYPASS CLOCK_ENABLE_OUTPUT_A => "BYPASS INIT_FILE => "C:\\USERS\\ADMINISTRATOR\\DESKTOP\\DDS\\SIN.MIF INTENDED_DEVICE_FAMILY => "CYCLONE II LPM_HINT => "ENABLE_RUNTIME_MOD=NO LPM_TYPE => "ALTSYNCRAM NUMWORDS_A => 1024, OPERATION_MODE => "ROM OUTDATA_ACLR_A => "NONE OUTDATA_REG_A => "UNREGISTERED WIDTHAD_A => 10, WIDTH_A => 10, WIDTH_BYTEENA_A => 1 ) PORT MAP ( CLOCK0 => CLOCK, ADDRESS_A => ADDRESS, Q_A => SUB_WIRE0 ); END SYN; 锯齿波 LIBRARY IEEE; USE IEEE.STD_LOGIC_11.ALL; LIBRARY ALTERA_MF; USE ALTERA_MF.ALL; ENTITY JUCHI IS PORT ( ADDRESS : IN STD_LOGIC_VECTOR (9 DOWNTO 0); CLOCK : IN STD_LOGIC ; Q : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) ); END JUCHI; ARCHITECTURE SYN OF JUCHI IS SIGNAL SUB_WIRE0 : STD_LOGIC_VECTOR (9 DOWNTO 0); COMPONENT ALTSYNCRAM GENERIC ( CLOCK_ENABLE_INPUT_A : STRING; CLOCK_ENABLE_OUTPUT_A : STRING; INIT_FILE : STRING; INTENDED_DEVICE_FAMILY : STRING; LPM_HINT : STRING; LPM_TYPE : STRING; NUMWORDS_A : NATURAL; OPERATION_MODE : STRING; OUTDATA_ACLR_A : STRING; OUTDATA_REG_A : STRING; WIDTHAD_A : NATURAL; WIDTH_A : NATURAL; WIDTH_BYTEENA_A : NATURAL ); PORT ( CLOCK0 : IN STD_LOGIC ; ADDRESS_A : IN STD_LOGIC_VECTOR (9 DOWNTO 0); Q_A : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) ); END COMPONENT; BEGIN Q <= SUB_WIRE0(9 DOWNTO 0); ALTSYNCRAM_COMPONENT : ALTSYNCRAM GENERIC MAP ( CLOCK_ENABLE_INPUT_A => "BYPASS CLOCK_ENABLE_OUTPUT_A => "BYPASS INIT_FILE => "JUCHI.MIF INTENDED_DEVICE_FAMILY => "CYCLONE II LPM_HINT => "ENABLE_RUNTIME_MOD=NO LPM_TYPE => "ALTSYNCRAM NUMWORDS_A => 1024, OPERATION_MODE => "ROM OUTDATA_ACLR_A => "NONE OUTDATA_REG_A => "UNREGISTERED WIDTHAD_A => 10, WIDTH_A => 10, WIDTH_BYTEENA_A => 1 ) PORT MAP ( CLOCK0 => CLOCK, ADDRESS_A => ADDRESS, Q_A => SUB_WIRE0 ); END SYN; 分频,频率控制 LIBRARY IEEE; USE IEEE.STD_LOGIC_11.ALL; ENTITY ONEMHZ IS PORT( CLKIN:IN STD_LOGIC; --时钟信号输入 CLKOUT:OUT STD_LOGIC); --时钟信号输出 END ONEMHZ; ARCHITECTURE ONEMHZ OF ONEMHZ IS SIGNAL DATA:INTEGER RANGE 0 TO 149; SIGNAL Q:STD_LOGIC; BEGIN PROCESS(CLKIN) BEGIN IF RISING_EDGE(CLKIN) THEN IF(DATA=50) THEN --此句为你想要的分频比,DATA=0,1,2,3,4.......9的分频比为1,2,3,,10 DATA<=0; Q<=NOT Q; ELSE DATA<=DATA+1; END IF; END IF; CLKOUT<=Q; END PROCESS; END ONEMHZ;
