VHDL文件向DSP Builder模块的转化
- 格式:doc
- 大小:103.50 KB
- 文档页数:2
DSP Builder系统设计工具DSP Builder是Altera推出的一个数字信号处理(DSP)开发工具,它在Quartus Ⅱ FPGA设计环境中集成了MathWorks的Matlab和Simulink DSP开发软件。
Altera的DSP系统体系解决方案是一项具有开创性的解决方案,它将FPGA的应用领域从多通道高性能信号处理扩展到很广泛的基于主流DSP的应用,是Altera第一款基于C代码的可编程逻辑设计流程。
在Altera基于C代码的DSP设计流程中,设计者编写在Nios Ⅱ嵌入处理器上运行的C代码。
为了优化DSP算法的实现,设计者可以使用由Matlab和Simulink工具开发的专用DSP指令。
这些专用指令通过Altera的DSP Builder和SOPC Builder工具集成到可重配置的DSP设计中。
对DSP设计者而言,与以往FPGA厂商所需的传统的基于硬件描述语言(HDL)的设计相比,这种流程会更快、更容易。
除了全新的具有软件和硬件开发优势的设计流程之外,Altera DSP系统体系解决方案还引入了先进的S tratix和Stratix Ⅱ系列FPGA开发平台。
Stratix器件是Altera第一款提供嵌入式DSP块的FPGA,其中包括能够有效完成高性能DSP功能的乘法累加器(MAC)结构。
Stratix Ⅱ FPGA能够提供比Stratix器件高四倍的DSP带宽,更适合于超高性能DSP应用。
6.1 DSP Builder安装6.1.1 软件要求使用DSP Builder创建HDL设计需要有下面的软件支持:? Matlab 6.1或6.5版本;? Simulink4.1或5.0版本;? Quartus Ⅱ 2.0以上版本;? Synplify 7.2以上版本或LeonardoSpectrum 2002c以上版本(综合工具);? ModelSim5.5以上版本(仿真工具)。
6.1.2 DSP Builder软件的安装在安装DSP Builder之前,首先安装Matlab和Simulink软件以及Quartus Ⅱ软件。
电子131 XXX XXXXXX1、说明DSP Builder 的主要功能DSP Builder 是Altera 公司提供的一种DSP 系统设计工具,是Matlab/Simulink 设计工具和QuartusII 设计工具之间的一个桥梁,把Matlab/Simulink 中的DSP系统设计转化为HDL文件,在QuartusII 工具中实现到具体的器件中。
产生于Matlab\DSP Builder\Quartus II 流程的DSP 模块或其他功能模块可以成为单片FPGA 电路系统中的一个组成部分,担任某个局部电路的功能;通过Matlab\DSP Builder ,可以直接为Nios II 嵌入式处理器设计各类加速器,成为Nios II 系统的一个接口设备,与整个片内嵌入式系统融为一体。
DSP Builder 是一个系统级(或算法级)设计工具,它架构在多个软件工具之上,并把系统级和RTL 级两个设计领域的设计工具连接起来,最大程度地发挥了两种工具的优势。
2、说明DSP Builder 的设计流程 Simulink 模型仿真综合(Quartus II,LeonardoSpectrum,Synplify)ATOM Netlist产生Quartus II HDL仿真(ModelSim)综合(Quartus II,LeonardoSpectrum,Synplify)Quartus II 生成编程文件(.pof,.sof)下载至硬件自动流程手动流程mdl转成vhdlMatlabSimulink建立模型第一步是在Matlab 的Simulink 环境中建立一个mdl 模型文件,调用Altera DSP Builder 和其它Simulink 库中的图形模块(Block),构成设计框图(或称Simulink 设计模型)。
第二步是利用Simulink 强大的图形化仿真、分析功能,分析此设计模型的正确性,完成模型仿真。
1.说明DSP Builder的主要功能DSP Builder在算法友好的开发环境中帮助设计人员生成DSP设计硬件表征,从而缩短了DSP设计周期。
已有的MATLAB函数和Simulink模块可以和Altera DSP Builder模块以及Altera知识产权(IP)MegaCore功能相结合,将系统级设计实现和DSP 算法开发相链接。
DSP Builder支持系统、算法和硬件设计共享一个公共开发平台。
设计人员可以使用DSP Builder模块迅速生成Simulink系统建模硬件。
DSP Builder包括比特和周期精度的Simulink模块,涵盖了算法和存储功能等基本操作。
可以使用DSP Builder模型中的MegaCore功能实现复杂功能的集成。
Altera还提供DSP Builder高级模块集,这一Simulink库实现了时序驱动的Simulink综合。
Altera MegaCore是高级参数化IP功能,例如有限冲击响应(FIR)滤波器和快速傅立叶变换(FFT)等,经过配置能够迅速方便的达到系统性能要求。
MegaCore功能支持Altera的IP评估特性,使您在购买许可之前,便可以验证功能及其时序。
Altera IP MegaStore网站上为DSP Builder和IP评估流程提供DSP IP完整介绍DSP Builder SignalCompiler模块读取由DSP Builder和MegaCore模块构建的Simulink建模文件(.mdl),生成VHDL文件和工具命令语言(Tcl)脚本,进行综合、硬件实施和仿真。
图示为DSP Builder设计流程。
DSP Builder是一个系统级(或算法级)设计工具,它构架在多个软件工具之上,并把系统级和RTL级两个设计领域的设计工具连接起来,最大程度地发挥了两种工具的优势【10】。
DSP Builder依赖于Math Works公司的数学分析工具Matlab/Simulink,以Simulink的Blockset出现,可以在Simulink中进行图形化设计和仿真,同时又通过Signal Compiler可以把Matlab/Simulink的设计文件(.mdl)转成相应的硬件描述语言VHDL设计文件(.vhd),以及用于控制综合与编译的TCL脚本。
VHDL语言数据类型及相互转换标准数据类型1,整数(INTEGER)范围:-2147483547---21474836462,实数(REAL)范围:-1.0E38---1.0E38 (综合器不支持)书写时一定要有小数.3,位(BIT)在数字系统中,信号经常用位的值表示,位的值用带单引号的'1'和'0'来表示标准数据类型4,位矢量(BIT_VECTOR)位矢量是用双引号括起来的一组位数据"010101"5,布尔量(BOOLEAN)只有"真"和"假"两个状态,可以进行关系运算6,字符(CHARACTER)字符量通常用单引号括起来,对大小写敏感明确说明1是字符时: CHARACTER'('1')标准数据类型7,字符串(STRING)字符串是双引号括起来的由字母,数字或@,%,$组成的一串字符.区分大小写"laksdklakld" "1010101010"8,时间(TIME)时间的单位:fs,ps,ns,ms,sec,min,hr例: 10 ns整数数值和单位之间应有空格标准数据类型9,错误等级(SEVERITY LEVEL)在VHDL仿真器中,错误等级用来表示系统的状态,它共有4种:NOTE(注意)WARNING(警告)ERROR(错误)FAILURE(失败)标准数据类型10,自然数(NATURAL) 正整数(POSITIVE)自然数是整数的一个子类型,包括0和正整数;正整数也是整数的一个子类型. 只能是正整数数据除定义类型外,有时还需要定义约束范围.INTEGER RANGE 100 DOWNTO 0BIT_ VECTOR (3 DOWNTO 0)REAL RANGE 2.0 TO 30.0IEEE定义的逻辑位与矢量在IEEE的程序包std_logic_1164中定义了两个非常重要的数据类型:1 ,std_logic取值:0,1,Z,X,W,L,HZ:高阻X:不定W:弱信号不定L:弱信号0 H:弱信号12,Std_logic_vector注意1,在使用"std_logic"和"std_logic_vector"时,在程序中必须声明库及程序包说明语句,即LIBRARY ieee和std_logic_1164.ALL这两句在程序中必不可少.2, std_logic有多个取值,与BIT不同,在编程时应特别注意,需要考虑全所有情况.用户自定义的数据类型1,枚举类型格式:TYPE 数据类型名IS(元素,元素,…);TYPE STD_LOGIC IS('U','X','0','1','Z','W','L','H','-');TYPE week IS (Sun,Mon,Tue,wed,Thu,Fri,Sat);TYPE color IS (red,green,yellow,blue)TYPE lift_state IS(stopon1,doorpeen,doorclose, doorwait1, doorwait2, doorwait3, doorwait4, doorwait5,up,down,stop)枚举类型的声明TYPE color IS (red,green,yellow,blue);V ARIABLE A:COLOR;SIGNAL B:COLOR;A:=RED;B<=YELLOW;TYPE lever IS ('0','1','z');SIGNAL V:lever;V<='1';用户自定义的数据类型2,整数(INTEGER)格式:TYPE 数据类型名IS 数据类型定义约束范围例TYPE digit IS INTEGER RANGE 0 TO 9V ARIABLE A:DIGIT;A:=5;A:=28;用户自定义的数据类型3,实数(REAL)格式:TYPE 数据类型名IS 数据类型定义约束范围TYPE current IS REAL RANGE -1E4 TO 1E4V ARIABLE A:CURRENT;A:=1E3;A:=1E10;用户自定义的数据类型4,数组(ARRAY)格式:TYPE 数据类型名IS ARRAY 范围OF 原数据类型名;例:TYPE word IS ARRAY (1 TO 8) OF STD_LOGIC;TYPE word IS ARRAY (INTEGER 1 TO 8) OF STD_LOGIC;数组常在总线,ROM和RAM中使用.用户自定义的数据类型5,记录(RECODE) 类型将不同的数据类型放在一块,就是记录类型数据格式:TYPE 记录类型名IS RECORD元素名:数据类型名;元素名:数据类型名;::END RECORD[记录类型名];记录(RECODE) 类型例:TYPE bank IS RECORDaddr0: STD_LOGIC_VECTOR(7 DOWNTO 0);addr1: STD_LOGIC_VECTOR(7 DOWNTO 0);r0: INTEGER;END RECORD;记录(RECODE) 类型例:CONSTANT LEN:integer:=100;TYPE array logic IS ARRAY (99 downto 0)OF STD_LOGIC_VECTOR(7 DOWNTO 0) TYPE table IS RECORD a: array logic;b: STD_LOGIC_VECTOR(7 DOWNTO 0);c: integer RANGE 0 to len ;END RECORD;数据类型的转换数据类型转换函数有VHDL语言的包提供例如:STD_LOGIC_1164,STD_LOGIC_ARITHSTD_LOGIC_UNSIGNED等等函数说明1、STD_LOGIC_1164包TO_STDLOGIC_VECTOR(A)TO_BITVECTOR(A)TO_LOGIC(A)TO_BIT(A)由BIT_VECTOR转换成STD_LOGIC_VECTOR由STD_LOGIC_VECTOR转换成BIT_VECTOR由BIT转换成STD_LOGIC由STD_LOGIC转换成BIT2、STD_LOGIC_ARITH包CONV_STD_LOGIC_VECTOR(A,位长)CONV_INTEGER(A)由INTEGER,UNSIGNED和SIGNED转换成STD_LOGIC_VECTOR由UNSIGNED和SIGNED转换成INTEGER3、STD_LOGIC_UNSIGNED包CONV_INTEGER(A)_STD_LOGIC_VECTOR转换成INTEGERVHDL属性VHDL没有一般程序语言中的那些运算类标准函数,取而代之的是多种能反映和影响硬件行为的属性.属性在描述时序电路的VHDL设计文件中几乎处处可见,如检测上升沿,下降沿,知道前一次发生的事件.VHDL属性属性指的是关于实体,结构体,类型及信号的一些特征.有的属性对综合(设计)非常有用. VHDL的属性可分为数值类属性,函数类属性,范围类属性,信号类属性,类型类属性.其引用的一般形式为:对象'属性.数值类属性数值类属性用于返回数组,块或一般数据的有关值,如边界,数组长度等信息.对一般的数据有4种数值类属性:对象类型的左边界,右边界,上边界,下边界,对应的关键字是:LEFT,RIGHT,HIGH,LOW.数组在加一个长度属性LENGTH.数值类属性sdown:IN std_logic_vector(8 DOWNTO 0);sup:IN std_logic-vector(0 to 8);这两个信号的各属性值如下:sdown'left=8; sdown'right=0; sdown'low=0; sdown'high=8; sdown'length=9;sup'left=0; sup'right=8; sup'low=0; sup'high=8; sup'length=9;数值类属性TYPE bit32 IS ARRAY (63 DOWNTO 32)OF BITVARIABLE:left_range,right_range,up_range,low_range,len:INTEGER ;BEGINleft-range:=bit32'LEFT; --return 63right-range:=bit32'RIGHT; --return 32up-range:=bit32'HIGH; --return 63low-range:=bit32'LOW; --return 32len:=bit32'LENGTH; --return 32函数类属性信号属性函数属于函数类属性,用来返回有关信号行为功能的信息.共有5种信号属性函数,分别是: 'EVENT(事件) ; ' ACTIVE(活跃);' LAST_EVENT (最近一次事件到现在经过多少时间);'LAST_ACTIVE (最近一次活跃到现在经过多少时间); ' LAST_V ALUE(信号变化前的取值是什么)EVENTEVENT:它的值为布尔型,取值为TRUE或FALSE;如果刚好有事件发生在该属性所附着的信号上(即信号有变化),取值为TRUE.利用此属性可决定时钟边沿是否有效,即时钟是否发生.EVENTSIGNAL clk: IN std_logic;clk 'EVENT AND clk='1'clk='1' AND clk 'EVENTclk 'EVENT AND clk='0'clk='0' AND clk 'EVENTrising_edge(clk) falling_edge(clk)EVENT 和ACTIVEEVENT 要求信号值发生变化;1到0,0到1ACTIVE 信号值的任何变化,1到1,1 到0,0到1,0到0;所有的事件都是活跃,但并非所有的活跃都是事件范围类属性'RANGE属性,其生成一个限制性数据对象的范围.例SIGNAL data_bus:std_logic_vector(15 DOWNTO 0);data_bus 'RANGE=15 downto 0用VHDL语言设计分频电路,把1KHZ的时钟分至约1HZ左右的时钟LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider ISPORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);END;ARCHITECTURE Devider OF FreDevider IS CONSTANT N:Integer:=499;signal counter:Integer range 0 to N; signal Clk:Std_Logic;BEGINPROCESS(Clkin)beginIF rising_edge(Clkin)THENIF Counter=N thencounter<=0;Clk<=not clk;elsecounter<=counter+1;end if;end if;end process;clkout<=clk;end;。
VHDL并串转换并串转换⼀、电路功能:本电路能实现FPGA与单⽚机的部分接⼝功能,使单⽚机与FPGA 能进⾏简单通信的功能,即单⽚机通过ale、wr、P0、P2管脚与FPGA 相连接,通过这⼏个控制引脚,指导FPGA进⾏并串转换。
同时,在FPGA上⾃带有clr与clk,实现对系统的清零复位,保证串⾏输出有条进⾏。
⼆、电路设计思路:(1)单⽚机是⼀个拥有多扩展模块的芯⽚,所以,⾸先我们要设计地址总线。
本题中设地址为FAH,当ale来⼀个上升沿时,我们要锁存当前P0⼝的地址,然后再将此地址与FAH⽐较。
若⽐较结果相等,则写有效(把wr赋给FPGA的内部信号wr_en)否则写⽆效(把1赋给wr_en),其中wr_en为0有效。
(2)设计数据总线当选择该芯⽚时,若单⽚机发⼀个写有效来,则将P2和P0⼝的数据读⼊FPGA内部数据锁存器.当数据读⼊后,同时,内部应该产⽣⼀个读⼊完成型号a,以便通知FPGA进⾏并串转换。
(3)并串转换当a有效时,开始进⾏并串转换,并输出串⼝按时钟clk将数据⼀个⼀个输出,当并串转换结束后,应当产⽣⼀个结束控制标志(本电路中将ld反馈回电路做结束标志),使a⽆效,停⽌停⽌并串转换。
三、电路原理框图如下:四、具体程序与原理图:(1)地址锁存器library ieee;use ieee.std_logic_1164.all;entity latch_add isport ( ale,clr:in std_logic;P0:in std_logic_vector(7 downto 0);add:out std_logic_vector(7 downto 0));end latch_add;architecture art of latch_add isbeginprocess(clr,ale)beginif(clr='1') thenadd<="00000000";elsif(ale'event and ale='1') then --锁存地址add<=P0;end if;end process;end art;(2)⽐较器library ieee;use ieee.std_logic_1164.all;entity en isport( wr,clr:in std_logic;add:in std_logic_vector(7 downto 0);wr_en:out std_logic);end en;architecture art of en isbeginprocess(add,wr,clr)beginif (clr='1') thenwr_en<='1';elsif(add="11111010") thenwr_en<=wr; --写允许elsewr_en<='1'; --写禁⽌end if;end process;end art;(3)数据锁存library ieee;use ieee.std_logic_1164.all;entity latch_data isport( wr_en,b,clr:in std_logic;P1,P2:in std_logic_vector(7 downto 0);datain:out std_logic_vector(15 downto 0);a:out std_logic); --a是允许并串转换end latch_data;architecture art of latch_data isbeginprocess(wr_en,clr)beginif(clr='1') thena<='0';elsif(wr_en'event and wr_en='0') then --数据读⼊FPGA datain<=P2&P1; a<='1'; --a为1,开始并串转换end if; if(b='1') then --将ld接⼊b端⼝,为并串结束标志a<='0'; --a为0,结束并串转换end if;end process;end art;(4)并串转换library ieee;use ieee.std_logic_1164.all;entity bing_chuan isport( a,clk,clr: in std_logic;datain1:in std_logic_vector(15 downto 0);ld,s_clk,s_data: out std_logic);end bing_chuan;architecture art of bing_chuan issignal b:std_logic; -- b为产⽣输出同步时钟s_clk的控制信号begin process(a,clk)variable I: integer;beginif(clr='1') thenI:=16;ld<='0';elsif( clk'event and clk='1') thenb<=a;if(a='1') thenif(I=0) thenI:=16; ld<='1';s_data<='0';b<='0';elses_data<=datain1(I-1);I:=I-1;end if;else ld<='0';end if;end if;end process ;s_clk<=clk when b='1' else --b为1,产⽣输出同步时钟'0';end art;五、并串转换原理图:仿真结果:六、结果分析仿真如上图,我们可以看出,当ale来上升沿时,FPGA读⼊P0⼝的地址11111010,此地址与设置地址FAH相同,所以写有效(wr_en<=wr)。
基于DSP Builder的电压闪变测量的数字化设计李杰;王爱民;董利科【摘要】介绍了IEC推荐的电压闪变测量的工作原理,利用基于Simulink/DSP Builder的数字信号处理的FPGA设计方法,采用数字滤波的方式在Simulink/DSP Builder环境下设计了电压波动与闪变测量系统的数字模型,并对该数字模型进行了系统功能和时序仿真.仿真结果表明:该方法充分利用了Matlab软件系统建模的优势,同时发挥了FPGA并行执行速度快、测量精度高的优点,设计简洁、高效,能够满足IEC推荐标准的电压波动和闪变测量系统的设计精度要求.【期刊名称】《电力系统保护与控制》【年(卷),期】2010(038)019【总页数】5页(P190-194)【关键词】电压闪变;数字滤波;FPGA;DSP Builder;Matlab【作者】李杰;王爱民;董利科【作者单位】安阳师范学院,河南,安阳,455000;中国科学院研究生院计算与通信工程学院,北京,100039;安阳师范学院,河南,安阳,455000;河南新能光伏有限公司,河南,安阳,455000【正文语种】中文【中图分类】TM930.20 引言电压波动为一系列电压变动或工频电压包络线的周期性变化。
闪变是由于电网中电压波动所引起的灯光闪烁对人视觉产生刺激的响应[1]。
它不仅和电压波动的大小有关,而且和其频率(即对工频电压的调幅频率)、照明灯具的性能以及人的主观视感因素有关[2]。
随着电力系统冲击性负荷的增加,电压闪变已成为衡量电能质量的主要指标之一。
为了抑制和治理电压闪变,电网已经投入了一定的补偿设备。
这些设备的研制和整定均需要准确详细的闪变参数,以提供正确的治理决策,因此对电压闪变实时监测,即准确测量短时间闪变值Pst,长时间闪变值Plt是治理电压闪变的基础[3-4]。
国际电工委员会标准IEC6100-4-15[5]和国标GB1232622000[6]给出了完整的电压闪变测试系统结构框图,以及有关反映人脑对频率选择特性的传递函数,根据该框图可以设计符合IEC标准的闪变测试系统。
1VHDL文件向DSP Builder模块的转化
以“filter”模块为例,下面给出从VHDL文件向DSP Builder模块转化的步骤:
1、完成filter.vhd文件;
2、打开Simulink文件,在DSP Builder的“Altera DSP Builder Blockset”的“AltLab”库中选择“HDL Import”模块,将其加入到Simulink系统中;
3、双击“HDL Import”模块,选择“Add”,在目录中选择filter.vhd文件,将文件加入之后,“Enter name of top level design entity”选项中会自动显示“filter”;
4、单击“Compile”,对文件进行编译;
5、待下面对话框中显示“Quartus II Analysis & Synthesis was successful”,即表示Compile成功后,关闭“DSP Builder HDL Import”即可,此时Simulink文件中已生成filter模块,且其输入、输出端口与VHDL文件中已定义的一致;
6、生成的“HDL Import”模块与DSP Builder库中自带的模块属性相同,可以将生成的filter模块直接接入系统。
并且可以直接对该模块以及包含该模块的Simulink系统文件进行Simulink仿真和“Signal Compiler”编译等工作,需要注意的是Simulink文件和生成的“HDL Import”模块需要保存在同一个文件夹下。