搜索
您的当前位置:首页正文

基于FPGA的步进电机的PWM控制__细分驱动的实现解读

来源:六九路网


山东大学 威 海 分 校

课 程 设 计 报 告

设计题目: _基于FPGA的步进电机的PWM控制_ ___________ ——细分驱动的实现_

姓 名___秦正运___ _ _ _ 学 号 20059002029 院 系_ _信息工程学院 _ 专 业_ 电子信息科学与技术 年 级___05__________ __

2009年 5 月 3 日

目 录

目 录 ........................................................ 2 摘 要 ........................................................ 3 关 键 词 ....................................................... 3 Abstract ....................................................... 3 Keywords ....................................................... 3 一、引言 ....................................................... 4 二、步进电机细分驱动的基本原理 .................................. 4 三、Quartus II概述 ............................................. 5 四、课题设计 ................................................... 6 (一)总体设计 .............................................. 6 (二)细分电流的实现 ......................................... 6 (三)细分驱动性能的改善 ..................................... 6 (四)程序设计 .............................................. 7 六、仿真与测试结果分析 ......................................... 10 七、结论 ...................................................... 12 参考文献 ...................................................... 13 注 释 ....................................................... 14 附 录 ....................................................... 15 谢 辞 ....................................................... 21

摘 要

在对步进电机细分驱动原理进行分析研究的基础上,提出一种基于FPGA控制的步进电机细分驱动器。利用FPGA中的嵌入式EAB构成LPM-ROM,存放步进电机各相细分电流所需的PWM控制波形数据表,并通过FPGA设计的数字比较器,同时产生多路PWM电流波形,实现对步进电机转角进行均匀细分控制。实验证明,所研制的步进电机驱动器不仅体积小,简化了系统的设计,减少了延迟,改善了低频特性,有良好的适应性和自保护能力,提高了驱动器的稳定性和可靠性。

关 键 词

步进电机;细分驱动;脉宽调制;FPGA

Abstract

In this paper, a divided driving circuit for stepping motor controlled by FPGA is put forward, based on the analysis of the principle of stepping motor divided driving. Using embedded EAB in FPGA to compose LPM-ROM, store PWM control wave form data which stepping motor each phase subdivided driving current is needed.The magnitude comparator designed with FPGA generates several PWM current waveform synchronously, to realize the step angles even division control for three–phase stepping motor.Experimments have proved that the developed subdivision driver is not only smaller,sampler in system, can shorten the delay time,improve the stability in low frequency ,but has good self-adaptation and self-protection ability,and its stability and relibility are higher.

Keywords

stepping motor; divided driving;PWM; FPGA

一、引言

步进电机是把脉冲信号转换成角位移或直线位移的执行元件,是一种输出与输入数字脉冲相对应的增量驱动元件。具有定位精度高、惯性小、无积累误差、启动性能好、易于控制、价格低廉及与计算机接口方便等优点,被广泛应用于数控系统中。但由于脉冲的不连续性又使步进电机的运行存在许多的不足之处,如低频震荡,噪声大,分辨率不高及驱动系统的可靠性差等,严重制约了其应用范围。步进电机的细分控制有效的解决了这一问题,步进电机细分驱动技术可以减小步进电机的步距角,提高电机运行的平稳性,增加控制的灵活性等。但是传统的步进电机驱动大多数采用的是用单片机作为控制芯片,外加分立的数字逻辑电路和模拟电路构成。受单片机工作频率的限制,细分数不是很高,因此控制器的精度较低,控制性能不是很理想。近年来随着可编程逻辑器件的飞速发展,似的可编程逻辑器件功能越来越强大从而促使高集成化高精度的驱动器的出现。本系统是以FPGA为核心的控制器件,将驱动逻辑功能模块和控制器成功地集成在FPGA上。利用FPGA中的嵌入式EAB可以构成存放电机各相电流所需的控制波形表,再利用数字比较器同步产生多路FPGA电流波形,对多相步进电机进行控制。若改变控制波形表的数据、增加计数器和比较器的位数,提高计数精度,就可以提高PWM波形的细分精度,进而对步进电机的步进转角进行任意级细分,实现转角的精确控制。

二、步进电机细分驱动的基本原理

步进电机的驱动是靠给步进电机的各相励磁绕组轮流通以电流,实现步进电机内部磁场合成方向的变化来使步进电机转动的。设矢量Ta、Tb、Tc、Td为步进电机A、B、C、D四项励磁绕组分别通电时产生的磁场矢量;Tab、Tbc、Tcd、Tda为步进电机中

AB,BC,CD,DA两相同时通电产生的合成磁场矢量。当步进电机的A、B、C、D四相轮流通电时,步进电机内部磁场从TA→TB→TC→TD,即磁场产生了旋转。一般的,当步进电机的内部磁场变化一周时,电机的转子转过一个齿距,即改变一次通电状态,转子转过一个步距角。该步距角的计算公式为:

360 bmZX

其中:α代表接入绕组的线路状态数,m代表电动机的相数,Z x代表转子齿数。由此可见,步进电机一旦制造出来,其相数与转子齿数将为定值,要想减小步距角,以达到细分的目的,用户能改变的只有α。

在无细分的步进电机驱动系统中,通过各相绕组的电流幅值是不变化的,仅在各相通电状态变化时,α值才相应地变化。如对于四相步进电机来说,单四拍或双四拍运行时,α = l ;当电机以四相八拍运行时,α=2,实现了步距角的二细分。由于各相绕组的电流是个开关量,即绕组中的电流只有零和某一额定值两种状态,相应的各相绕组产生的磁场也是个开关量,只能通过各相电流的通电组合来改变步距角。所以要想增大α,必须使绕组中的电流按阶梯上升和下降,即在零与最大相电流之间有多个稳定的中间电流状态,相应的磁场矢量幅值也存在多个中间状态,这样,相邻两相或多相的合成磁场的方向也将有多个稳定的中间状态。图1所示为四相步进电机八细分时各相电流波形,各

相电流均以最大电流值的1/4上升和下降。与单四拍方式相比,α值从2增加到8,步距角θb为单四拍运行方式时的1/8。所以步进电机细分驱动的关键在于控制电机各相励磁绕组中的电流大小及其稳定性。

A相 B相

C相

D相

图 1 三相步进电机八细分各相电流状态图

改变步进电机相电流通常采用电流矢量恒幅均匀旋转的细分方法来实现,即同时改变两相电流iA和iB的大小,使电流合成矢量等幅均匀旋转。iA和iB的变化曲线可描述为:

iA = Imcosx

iB = Imsinx

三相步进电机八细分时的各相电流是以1/4的步距上升或下降的,在两相稳定的中间状态,原来一步所转过的角度将由八步完成,实现了步距角的八细分。

三、Quartus II概述

Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。

Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三放EDA工具。

此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。

四、课题设计

(一)总体设计

从图1中可以看出,一般情况下总有二相绕组同时通电。一相电流逐渐增大,另一相逐渐减小。对应于一个步距角,电流可以变化N个台阶,也就是电机位置可以细分为N个小角度,这就是电机的一个步距角被N细分的工作原理。也可以说,步距角的细分就是电机绕组电流的细分,从而可驱动步进电机平滑运行。

图2为步进电机细分驱动系统结构图。步距细分电路是由PWM计数器、ROM地址发生器、PWM波形存储器、比较器、功放电路所组成。其中,PWM计数器在时钟脉冲作用下递增计数,产生阶梯形上升的周期性锯齿波,同时加载到四相步进电机各相数字比较器的一端;波形ROM输出的数据q[15..12],q[11..8]、q[7..4]、q[3..0]分别加载到比较器的另一端。当PWM计数器的计数值小于波形ROM输出数值时,比较器输出高电平;而当大于波形ROM输出值时,比较器输出低电平。由此可输出周期性的PWM波形。根据图1步进电机八细分电流波形的要求,将各个时刻细分电流波形所对应的数值存放于波形ROM中,波形ROM的地址由地址计数器产生,地址计数器有3个控制端,可用于改变步进电机的旋转方向、转动速度、工作/停止状态。FPGA以产生的PWM信号控制驱动电路的导通和关断。PWM信号随ROM数据而变化,改变ROM中的数据就可以改变输出信号的占空比,实现限流及细分控制,最终使电机绕组电流呈现阶梯形变化,从而达到步距细分的目的。

OUTY[3..0] 数字比较器A 功 放 A相绕组 Vcc

脉宽控制 PWM计数器 数字比较器B 功放 B相绕组 方向控制 使能 地址计数器

地址产生时钟 数字比较器C 功放 C相绕组

PWM ROM 数字比较器D 功放 D相绕组

图2 步进电机细分驱动系统结构图

(二)细分电流的实现

从LPM_ROM输出的数据加在比较器的A端,PWM计数器的计数值加在比较器的B端,当计数值小于ROM数据时,比较器输出低电平;当计数值大于ROM数据时,比较器输出高电平。如果改变ROM中的数据,就可以改变一个技术周期中高低电平的比例。

(三)细分驱动性能的改善

在线性电流的驱动下,步进电机的微步进是不均匀的,呈现出明显的周期性波动。磁场的边界条件按齿槽情况呈周期性重复是导致微步距周期性变化的原因。同时,不可避免的摩擦负载(摩擦力矩是不恒定的,或者说在一定范围内也是不确定的)以及其他负载力矩的波动导致失调角出现不规则的小变动或小跳跃,也使微步距角曲线在周期性波动上出现不光滑的小锯齿形。

步进电机的电流矩角特性并非线性函数,而是近似于正弦函数。若电流呈线性上升或者下降,必然会造成每一细分步的步距角不均匀,从而影响步距精度。为此,要在设

计中提高LPM_ROM的数据精度,将数据提高到16位,使输出的步进细分电流近似为正弦电流,这样不仅提高了步距精度,而且可以改善低频震荡。

(四)程序设计

图3为步进电机PWM控制电路。CNT8是十六进制计数器,构成PWM计数器,将整个PWM周期分成4等份,产生阶梯形上升的周期性锯齿波,同时加载到四相步进电机各相数字比较器的一端;CNT32是三十二进制计数器构成ROM地址发生器,计数器的u_d为方向控制,EN为使能控制,clk_d为速度控制,可以通过u_d、EN和clk_d控制步进电机的旋转方向、工作/停止和旋转速度;s为模式选择控制,可以选择正常运转模式或者是细分驱动模式。ROM是宽度为16位,深度为32位的存储器,存放了各个时刻细分电流波形所对应的数值;CMP为数字比较器,用于ROM输出的数据和PWM计数器计数值的比较。

输出细分电流信号采用FPGA中ROM查表法,它是通过在不同地址单元内写入不同的PWM数据,用地址选择来实现不同通电方式下的可变步距细分。从ROM输出的数据加在比较器的“a”端,PWM计数器的计数值加在比较器的“b”端,当计数值小于ROM数据时,比较器输出高电平;当计数值大于ROM数据时,比较器则输出低电平。如果改变ROM中的数据,就可以改变一个计数周期中高低电平的比例。

图3 步进电机PWM控制电路

下面具体来阐述一下各个元件的设计: 图5为十六进制计数器的RTL图,通过不断输出十六进制数与ROM中的数据作比较。计数器的VHDL语言程序见附录2.

图4 十六进制计数器

图6为三十二进制计数器RTL图,可以输出五位二进制的地址,以便可以查询ROM表。程序见附录3。

图5 三十二进制计数器

图六为四个比较器的RTL图,当计数值小于ROM数据时,比较器输出高电平;当计数值大于ROM数据时,比较器则输出低电平。比较器的输出为步进的四相输入端提供PWM波形,从而达到PWM控制。程序见附录4

图6 比较器

图7为多路选择器,利用s端可以选择控制步进电机的运转方式,s=0时,步进电机为PWM控制,s=1是步进电机的普通运转方式。程序见附录5.

图7 多路选择器

图9的功能是从三十二进制计数器的输出端引入数据并把它转化成步进电机的普通四相驱动方式。程序见附录6

图8 计数转换器

PWM波形ROM表是通过Quartus II中的宏功能模块定制而成,利用FPGA中的嵌入式EAB构成LPM-ROM,存放步进电机各相细分电流所需的PWM控制波形数据表。ROM数据和程序见附录7和附录8.

六、仿真与测试结果分析

图9是四相步进电机PWM仿真波形图,图中展示了FPGA控制步进电机的情况。ROM输出的16位数据q[15..0],作为步进电机各相电流的参考值,每4位二进制(l位八进制)数值控制一个相,分别用于控制步进电机A、B、C,D四相的工作电流。对于每一相来说,当输出数据为0时,该相电流为0;输出数据为1时,脉宽高电平占一个PWM周期的1 / 4; 当输出数据为2时,脉宽高电平占一个PWM周期的2/4;当输出数据为4时,整个PWM周期均输出高电平。PWM输出电流的平均值与旋转角度成正比。

图9中也给出了步进电机从A->AB->B->BC->C->CD->D->DA四相八拍工作过程的仿真波形。首先,步进电机A相导通,B、C、D相截止,q[15..0]输出数据为F000;A相的数据为F,其他相的数据为0。然后逐渐过度到AB相导通,q[16..0]输出数据为F600->F900->FC00->FF00, B相的数据逐渐增大,从1增大到4。电机中的磁场经过4拍,从A相转到了AB相。再经过4拍,从AB相转到B相;q[15..0]输出数据为CF00->9F00->6F00->0F00, A相的数据逐渐减小,从4变为0。从A到AB到B共经过了8拍,实现了步距角的8级细分。此外由于步进电机是电感性负载,对输出的PWM电流具有平滑滤波作用,对电机线圈起作用的是PWM的平均电流,因此在效果上将图中的细小毛刺电流滤除。

图9 仿真波形1

图10是在clk_d的频率比较高的情况下的仿真图。和图9比较可以看出,clk_d的频率越大,PWM波形比较密集,步进电机的转速越高,即clk_d是速度控制信号。

图10 仿真波形2

图11和图9对比,可以看出,当u_d为高电平时,ROM表中输出的数据和图9顺序相反,输出的PWM波形也和图9相反。因此,步进电机的内部磁场从D→DC→C→BC→B→AB→A→DA,电机反转。

图11 仿真波形3

图12是在s为高电平时的仿真图,当s=1时,步进电机为单四拍常规运转方式,内部磁场从AB→BC→CD→DA。

实测结果表明,要是步进电机细分后获得均匀的步进转角,其PWM驱动电流应近似于正弦电流,而非线性递增的电流,因此ROM文件中的数据进行适当选择,使每一步的电流增加量近似正弦波,并根据实际转角做了适当调整。由于PWM的输入时钟频率较高,因此可以获得均匀的平均电流,并且每一步的时间间隔相等,转角近似均匀。

七、结论

通过利用FPGA中嵌入式EAB构成的LPM-ROM存放电机转角细分电流所需的数据表,由数字比较器同步产生多路PWM电流波形,对多相步进电机的转角进行均匀细分,有效地控制步进电机。若提高波形表数据的位数,增加计数器和比较器的位数,就可以提高PWM波形的细分精度,对步进电机的步进转角进行任意细分,实现步进转角的精确控制。此实现方法比目前单片机加D/A的控制方案更加高效。试验证明,此系统功能满足设计要求,控制灵活,集成度高。驱动器在减少体积、降低开发成本的同时,又增加了稳定性和可靠性,具有较好的动态和静态驱动特性,有效地提高步进电机的运行效果。

参考文献

[1] 李华德等,交流调速控制系统.北京:电子工业出版社,2003.3:22-27 [2] 潘松等,EDA技术实用教程[M].北京: 科学出版社2005

[3] 雷凯等,步进电机细分驱动中绕组电流的修正[J].苏州大学学报2003.1:38-40 [4] 杨忠宝,林海波,基于80C196MC的步进电机斩波恒流均匀细分电路的实现[J].微计算机信息2003.7:51-52

[5] 袁丽肖,王健等,直接转矩控制系统的自适应模糊控制方法的研究[J].微电机 2006.33(9):26-29

[6] 翁良科,伊仕.基于Verilog HDL描述的多用途步进电机控制芯片的设计[J].电子技术应用,2002

[7]程浩.三相混合步进电机细分驱动的研制[D].浙江:浙江大学.2001 [8]李恩光.机电伺服控制技术.东华大学出版社,2003

注 释

PWM技术:

脉宽调制(PWM:(Pulse Width Modulation)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

简而言之,PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。

PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。

对噪声抵抗能力的增强是PWM相对于模拟控制的另外一个优点,而且这也是在某些时候将PWM用于通信的主要原因。从模拟信号转向PWM可以极大地延长通信距离。在接收端,通过适当的RC或LC网络可以滤除调制高频方波并将信号还原为模拟形式。

附 录

附录1:顶层程序

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity djxf is

port(clk,clk_d,u_d,s,en:in std_logic;

y:out std_logic_vector(3 downto 0)); end entity djxf;

architecture behav of djxf is component cnt8

port(clk:in std_logic;

cq:out std_logic_vector(3 downto 0)); end component; component dec2

port(clk: in std_logic;

a: in std_logic_vector(1 downto 0); d: out std_logic_vector(3 downto 0)); end component; component cnt32

port(clk,en,u_d:in std_logic;

cq:out std_logic_vector(4 downto 0)); end component; component pwm_rom PORT (

address : IN STD_LOGIC_VECTOR (4 DOWNTO 0); inclock : IN STD_LOGIC ;

q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0) );

end component; component cmp

port (a,b:in std_logic_vector(3 downto 0); agb:out std_logic); end component; component mux

port(a,b: in std_logic_vector(3 downto 0); s: in std_logic;

y:out std_logic_vector(3 downto 0));

end component;

signal sgn1:std_logic_vector(3 downto 0); signal sgn2:std_logic_vector(4 downto 0); signal sgn3:std_logic_vector(15 downto 0); signal sgn4,f:std_logic_vector(3 downto 0); begin

u1:cnt8 port map(clk=>clk,cq=>sgn1);

u2:cnt32 port map(clk=>clk_d,en=>en,u_d=>u_d,cq=>sgn2); u3:pwm_rom port map(inclock=>clk_d,address=>sgn2,q=>sgn3); cmp1:cmp port map(a=>sgn3(15 downto 12),b=>sgn1,agb=>f(3)); cmp2:cmp port map(a=>sgn3(11 downto 8),b=>sgn1,agb=>f(2)); cmp3:cmp port map(a=>sgn3(7 downto 4),b=>sgn1,agb=>f(1)); cmp4:cmp port map(a=>sgn3(3 downto 0),b=>sgn1,agb=>f(0)); u4:dec2 port map(clk=>clk,a=>sgn2(1 downto 0),d=>sgn4); m:mux port map(a=>f,b=>sgn4,s=>s,y=>y); end architecture behav;

附录2:十六进制计数器

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity cnt8 is

port(clk:in std_logic;

cq:out std_logic_vector(3 downto 0)); end cnt8;

architecture behav of cnt8 is

signal cqi:std_logic_vector(4 downto 0); begin

process(clk) begin

if clk'event and clk='1' then cqi<=cqi+1;end if; end process;

cq<=cqi(4 downto 1); end behav;

附录3:三十二进制计数器

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity cnt32 is

port(clk,en,u_d:in std_logic;

cq:out std_logic_vector(4 downto 0)); end cnt32;

architecture behav of cnt32 is

signal cqi:std_logic_vector(4 downto 0); begin

process(clk,en,u_d) begin

if en='1' then cqi<=cqi;

elsif clk'event and clk='1' then if u_d='1' then cqi<=cqi+1; else cqi<=cqi-1;end if; end if; end process;

cq(4 downto 0)<=cqi; end behav;

附录4:比较器

library ieee;

use ieee.std_logic_1164.all; entity cmp is

port (a,b:in std_logic_vector(3 downto 0); agb:out std_logic); end ;

architecture one of cmp is begin

process(a,b) begin

if a>b then agb<='1'; else agb<='0'; end if; end process; end;

附录5:多路选择器

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity mux is

port(a,b: in std_logic_vector(3 downto 0); s: in std_logic;

y:out std_logic_vector(3 downto 0)); end entity mux;

architecture one of mux is begin

process(a,b,s) begin

if s='0' then y<=a; else y<=b; end if;

end process;

end architecture one;

附录6:转换器

library ieee;

use ieee.std_logic_1164.all; entity dec2 is

port(clk: in std_logic;

a: in std_logic_vector(1 downto 0); d: out std_logic_vector(3 downto 0)); end;

architecture one of dec2 is

signal cq:std_logic_vector(1 downto 0); begin

process(cq) begin

case cq is

when \"00\"=> d<=\"1001\"; when \"01\"=> d<=\"1100\"; when \"10\"=> d<=\"0110\"; when \"11\"=> d<=\"0011\"; when others=> null; end case; end process; process(clk) begin

if clk'event and clk='1' then cq<=a;end if; end process; end;

附录7:PWM_ROM表数据

width=16; depth=32;

address_radix=hex;

data_radix=hex; content begin

0:f000;1:f600;2:f900;3:fc00;4:ff00;5:cf00;6:9f00;7:6f00;8:0f00;9:0f60;a:0f90;b:0fc0;c:0ff0;d:0cf0;e:09f0;f:06f0;10:00f0;11:00f6;12:00f9;13:00fc;14:00ff;15:00cf;16:009f;17:006f;18:000f;19:600f;1a:900f;1b:c00f;1c:f00f;1d:f00c;1e:f009;1f:f006;

end;

附录8:ROM定制程序

LIBRARY ieee;

USE ieee.std_logic_1164.all;

LIBRARY altera_mf;

USE altera_mf.altera_mf_components.all;

ENTITY pwm_rom IS PORT (

address : IN STD_LOGIC_VECTOR (4 DOWNTO 0); inclock : IN STD_LOGIC ;

q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0) );

END pwm_rom;

ARCHITECTURE SYN OF pwm_rom IS

SIGNAL sub_wire0 : STD_LOGIC_VECTOR (15 DOWNTO 0);

COMPONENT altsyncram GENERIC (

intended_device_family : STRING; width_a : NATURAL; widthad_a : NATURAL; numwords_a : NATURAL;

operation_mode : STRING; outdata_reg_a : STRING; address_aclr_a : STRING; outdata_aclr_a : STRING; width_byteena_a : NATURAL;

init_file : STRING; lpm_hint : STRING; lpm_type : STRING ); PORT (

clock0 : IN STD_LOGIC ;

address_a : IN STD_LOGIC_VECTOR (4 DOWNTO 0); q_a : OUT STD_LOGIC_VECTOR (15 DOWNTO 0) );

END COMPONENT;

BEGIN

q <= sub_wire0(15 DOWNTO 0);

altsyncram_component : altsyncram GENERIC MAP (

intended_device_family => \"Cyclone\ width_a => 16, widthad_a => 5, numwords_a => 32,

operation_mode => \"ROM\

outdata_reg_a => \"UNREGISTERED\ address_aclr_a => \"NONE\ outdata_aclr_a => \"NONE\ width_byteena_a => 1,

init_file => \"G:/qin/pwm_rom/pwm_rom.mif\

lpm_hint => \"ENABLE_RUNTIME_MOD=YES, INSTANCE_NAME=ROM\ lpm_type => \"altsyncram\" )

PORT MAP (

clock0 => inclock, address_a => address, q_a => sub_wire0 );

END SYN;

谢 辞

在这里我要感谢我的指导老师郑亚民老师的悉心指导,通过她的指导我才能很好的完成此设计。郑老师在不同的时间定时给我们的毕业设计做出建设性的意见,使我在此次设计中学习到了更多的知识和技巧,而这一点确是比任何东西都有价值的。同时,我还要感谢其他老师和同学给我的支持和帮助,没有他们的帮助,我是不可能这么顺利的完成设计的。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top