湖南人文科技学院
课程设计报告
课程名称:VHDL语言与EDA课程设计
设计题目: 正交信号发生器
系 别: 通信与控制工程系
专 业: 电子信息工程 班 级: 10级电子信息工程3班 学生姓名: 学 号:
起止日期: 2013年6月8日 2012年6月18日 指导教师: 教研室主任:
摘 要
EDA技术是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处
理及智能化技术的最新成果,进行电子产品的自动设计。本文详细介绍了基于FPGA的DSP开发技术,提供了一种设计正交信号发生器的方案。在信号检测和信号处理中经常需要正交信号。由于正交方波信号较易得到,所以工程人员进行相关检测时所采用的正交信号源通常为方波信号。但通过对方波信号作傅立叶分析可知,这种信号含有丰富的谐波分量,严重影响相关检测中的接收精度及检测灵敏度。采用可控的正、余弦波作正交信号,就可以有效地避免谐波问题。本文采用Matlab/DSP Builder建立模型来实现正交信号发生器,使用自顶向下的设计方法,设计简单,能够提高设计效率。利用DSP Builder 建立起数学模型,实现了模块化的设计变得直观。在Simulink中进行仿真验证,通过Signal Compiler 将模型转换成硬件描述语言,经过QuartusⅡ仿真正确后,下载到FPGA里,输出的正交信号能灵活的调频,调相,调幅,实现全数字化设计。该方案简化了硬件设计的难度。对各个模块的参数进行简单的设置就能完成复杂的电子设计系统设计。
关键词:EDA技术;DSP Builder;正交信号发生器;Signal Compiler
目 录
设计要求 ................................................................. 2 1、方案论证与对比 ........................................................ 2
1.1方案一 ............................................................ 2 1.2 方案二 ............................................................ 2 1.3方案选择 .......................................................... 3 2、系统总体方案设计及实现 ................................................ 3
2.1正交信号发生器设计 ................................................ 3
2.1.1 DDS原理及设计 ............................................... 3 2.1.2 频率字输入的计算 ............................................ 7 2.1.3 输出波形峰峰值的计算 ........................................ 7 2.1.4 相位差的计算 ................................................ 7 2.1.5正交信号发生器电路模型图 ..................................... 7 2.1.6 Simulink模型的仿真 .......................................... 9 2.2 SignalCompiler的使用 ............................................ 10
2.2.1 分析当前的模块 ............................................. 10 2.2.2 设置SignalCompiler ......................................... 10 2.2.3 把模型文件MDL 转换成VHDL .................................. 10 2.2.4 综合 ....................................................... 10 2.2.5 QuartusⅡ试配 .............................................. 10 2.3嵌入式锁相环的设计 ............................................... 10 2.4 引脚的锁定 ....................................................... 11 3、设计结果与结论 ....................................................... 11 4、结束语及致谢 ......................................................... 11 5、元器件及仪器设备明细表 ............................................... 13 6、参考文献 ............................................................. 13 7、程序清单 ............................................................. 14
正交信号发生器
设计要求
能通过按键进行幅度控制,输出信号的频率在10—50kHZ,或者固定在某一频率上,要求峰-峰值大于3V,且输出波形不失真。
1、方案论证与对比
1.1方案一
该方案根据矩阵式键盘输入给FPGA送出频率控制字与相位控制字,用于设定输出正弦波的频率与相位。高速D/A转换器用于正弦波的DA转换。FPGA构成DDS的核心部分,用于接收送来的频率字与相位字,同时给DA转换器输出正弦波数据。采用字符型液晶显示屏实时显示输出的频率与相位。该方案需借助QuartusⅡ来完成。
图1 方案一原理框图
1.2 方案二
该方案是基于DSP Builder与DDS并借助于MATLAB进行设计的。首先在Matlab中DSP Build的Simulink中进行建模,系统仿真通过SignalCompiler将模型设计文件转换成相应的硬件描述语言(VHDL),在QuartusⅡ平台上进行综合生成网表文件,并
适配下载至FPGA。在这个方案中,有两路正弦信号,一路为参考信号,另一路是可数控的移动信号,并且这两路可同步进行幅度和频率数控,即对于这两路输出的正弦信号,在相位、频率和幅度3个参数上都能完成等步长数控步进,而且还能对指定的参数进行设定。
图2 方案二原理框图
1.3方案选择
方案一是基于QuartusⅡ,在设计的过程中,利用VHDL完成电路设计,必须借助于EDA工具中的综合器、适配器、时序仿真器和编程器等工具进行相应的处理,才能使此项设计在FPGA上完成硬件实现并得到硬件测试,在进行HDL文本输入设计流程中比较繁琐,而且容易出错。而方案二是基于DSP Builder进行手动流程设计,在设计过程中,DSP Builder会自动完成VHDL的转换、综合、适配,而不像方案一那样要进行HDL文本输入,这样的话就能避免文本输入过程中的绝大多数错误。 因而我们选择方案二。
2、系统总体方案设计及实现
2.1正交信号发生器设计
2.1.1 DDS原理及设计
直接数字频率合成技术(Direct Digital Synthesis,DDS)是一种从相位概念出发直接合成所需要的波形的新的全数字频率合成技术,该技术具有频率分辨率高、频率变化速
度快、相位可连续性变化等特点,在数字通信系统中被广泛采用,是信号生成的最佳选择。
DDS主要由相位累加器、相位调制器、正弦ROM查找表、D /A转换器等组成。系统时钟clk由一个稳定的晶体振荡器产生,用来同步整个合成器的各组成部分。同步寄存器的使用是为了当输入的频率字改变时不会干扰相位累加器的正常工作。相位累加器是整个DDS的核心,它由N位加法器和N位相位寄存器级联构成,类似一个简单的加法器,完成上面推导中的相位累加功能。每来一个时钟脉冲,加法器就将输入的N位频率字与相位寄存器输出的累加相位数据相加,然后将相加后的结果送至相位累加器的输入端,相位寄存器就将在上一个时钟作用后产生的新相位数据反馈到加法器的输入端,以使加法器在下一个时钟的作用下继续将相位数据与输入的频率字相加。
当相位累加器累加满量(2π) 时,就会产生一次溢出,完成一个周期性的动作,这个周期就是合成信号的一个周期,累加器的溢出频率就是DDS的合成信号频率。相位调制器接收相位累加器的相位输出,并与一个相位偏移值相加,主要用于信号的相位调制, 如PSK(相移键控)等。在不使用时可去掉该部分,或加一个固定的相位字输入。注意相位字输入也要用同步寄存器保持同步,但相位字输入的宽度M与频率字输入N往往是不相等的,一般M
正弦ROM查找表的作用是完成查表转换,或理解为相位到幅度的转换。将相位累加器或相位调制器输出的相位数据作为取样地址,来寻找正弦ROM表进行相位到幅度的变换,输出不同的幅度编码。经D /A转换器得到相应的阶梯波,最后经过低通滤波器对阶梯波进行平滑处理,得到由输入的频率字决定的连续变化的输出正弦波。下面的即为基本DDS结构的常用参数计算公式:
输出频率:
fout
B
fclk
N2
频率字:
B
fout
2
fclk
N
其中
B
f
是频率控制字,clk为系统基准时钟的频率值,N为相位累加器的数据位宽,
也是频率控制字的数据位宽。
下图为 DDS基本结构原理图,仔细观察。
图3 DDS基本结构原理图
频率控制字的可调整性使得系统输出频率非常容易调整。输出正弦波频率f=fclk*frequword/2^20,系统时钟,频率控制字DDS系统时钟12MHz,异步于CPU时钟20bit频率控制字,8bit相位控制字,8bit数据输出每波形抽样256个点。 相位累加器
相位累加器结构如图(4)所示。假设系统时钟为Fc,输出频率为Fout。每次转动一个角度360°/2N, 则可以产生一个频率为Fc/2N 的正弦波的相位递增量。那么只要选择恰当的频率控制字M,使得 Fout / Fc= M / 2N,就可以得到所需要的输出频率Fout,Fout = Fc*M / 2N,相位幅度转换通过相位累加器,我们已经得到了合成Fout 频率所对应的相位信息,然后相位幅度转换器把0°~360°的相位转换成相应相位的幅度值。
(1)相位累加器结构如图(4)所示。
(2)如图5所示,该部分是频率字输入,不同的频率字输入会使得信号输出波形的频率不同。
图5 频率字输入
(3)如图6所示,该部分是输入地址为6位,输出值位宽为8的正弦查找表模块,且输入地址总线为无符号整数。
图6 LUT模块
高速D/A模块
GW_ADDA板含两片10位超高速DAC(转换速率最高150MHz),D/A全部处于使能状态,除了数据线外,任一器件的控制信号线只有时钟线,这有利于高速控制和直接利用MATLAB/DSP Builder工具的设计。GW_ADDA板上工作时钟必须由FPGA的I/O口提供,优点是时钟频率容易变化,且可通过Cyclone中的PLL的到几乎任何时钟频率。由此即可测试DAC的最高转换频率。
两个电位器可分别调协两个D/A输出的幅度(输出幅度峰峰值不可大于5V,否则波形失真);模拟信号从接插口的2针“AIN”输入,J1和J2分别是模拟信号输出的PA、PB口,也可在两挂钩处输出,分别是两个10位DA5651输出口。电路原理图如图7所示。
相位累加器结构如图(4)所示。假设系统时钟为Fc,输出频率为Fout。每次转动一个角度360°/2N, 则可以产生一个频率为Fc/2N 的正弦波的相位递增量。
下图为高速DA模块电路原理图,认真理解并运用:
数据输出
D7D6D5D4D3D2D1D0
Pin213Pin214Pin193Pin227Pin194Pin228Pin207Pin208
D9D8D7D6D5D4D3D2D1D0
数据输入
Pin141(PIO36)Pin158(PIO37)Pin159(PIO38)Pin160(PIO39)Pin161(PIO40)Pin162(PIO41)Pin163(PIO42)Pin164(PIO43)Pin165(PIO44)Pin166(PIO45)
510/5540
数据输入
Pin128(PIO26)Pin132(PIO27)Pin133(PIO28)Pin134(PIO29)Pin135(PIO30)Pin136(PIO31)Pin137(PIO32)Pin167(PIO46)
D9D8D7D6D5D4D3D2D1D0
5651超高速D/A
模拟信号输出
5651超高速D/A
超高速A/D
AOUT(A)A口输出
ADCLK
Pin144
DACLK
DACLK
AOUT(BB口输出
图7 高速DA模块电路原理图
2.1.2 频率字输入的计算
由DDS的频率输入字公式:
B
fout
2
fclk
N
计算,式中N为相位累加器的
数据位宽,也是频率输入字的数据位宽,fclk是系统基准时钟的频率值。本设计中N=20,fclk=12MHZ,fout=50KHZ根据计算得出频率输入字为4369。 2.1.3 输出波形峰峰值的计算
本设计中正弦查找模块输入地址为8位,输出位宽为10位,且输入地址总线为无符号整数,可设置起始值为0、结束值为2π、步进值为2π/26。为了得到完整满度的波形输出,计算式可写成: 511*sin[0:2*pi/2^8]:2*pi]+512 2.1.4 相位差的计算
本设计用8bit相位控制字,8bit数据输出每波形抽样2^8=256个点,所以每按一键增加或减小相位差为3600/256=1.400 符合设计要求。 2.1.5正交信号发生器电路模型图
两个电位器可分别调协两个D/A输出的幅度,使用时一定要调节好,使之能调幅。
模拟信号输
基于DDS的正交信号发生器是整个系统的设计核心部分,其电路模型图如图8所示。
图8 基于DDS的正交信号发生器MDL模型
DDS用来产生频率、相位和幅度可变的正弦波。DDS的工作原理是利用正弦信号的相位与时间呈线性关系的特性”1,采用相位累加方法作为地址,读出相应ROM中的值,得到正弦信号的瞬时幅值,实现频率合成。DDS包括频率控制字、相位控制字、同步寄存器、相位累加器、波形存储器、数模转换器、低通滤波器。
在系统时钟的控制下.相位累加器对频率控制字K进行累加,得到相位码,相位码寻址ROM得到幅值码,经过数模转换后得到相应的阶梯波,再经过低通滤波得到连续平滑的、由频率控制字K决定的模拟输出波形。DDS可以用来产生多种波形,只要改变ROM中的数据.预先设置成正弦波、余弦波等,根据查表就可以实现不同的波形。利用DSP Builder设计DDS。然后转换成VHDL。DDS的分辨率在相位累加器的位数^,足够大时,理论上可以获得相应的分辨精度。DDS是一个全数字结构的开环系统,无反馈环节,速度非常快。DDS的相位误差主要依赖于时钟的相位特性,相位误差小,相位是连续变化
的,形成的信号具有良好的频谱。这是传统的直接频率合成方法无法实现的。相位字输入的数据宽度M往往小于相位寄存器字长,实际的DDS结构中Ⅳ很大。 其中Subsystem的原理图如图
9
图9 Subsystem的原理图
2.1.6 Simulink模型的仿真
在Sinout模型编辑窗口中,选择Slimulation→Start命令,开始仿真,等待仿真结束后,双击Scope模块,打开Scope观察窗口。其仿真波形如图
10
图10 simulink模型仿真图
2.2 SignalCompiler的使用
2.2.1 分析当前的模块
双击Sinout模型中的SignalCompiler模块,之后单击Analyze按钮后,SignalCompiler就会对Sinout模型进行分析,检查模型有无错误,并在MATLAB主窗口中弹出对话框,并给出相关信息。 2.2.2 设置SignalCompiler
SignalCompiler窗口中大致分为3个功能部分: 项目设置选项 硬件编译流程 信息框
2.2.3 把模型文件MDL 转换成VHDL
当设置好Device和Synthesis后,右侧的硬件编译部分就会列出一个操作: (1)Convert MDL to VHDL (2) Synthesis (3) QuartusⅡ 2.2.4 综合
单击步骤(2)的图标,完成综合过程。 2.2.5 QuartusⅡ试配
单击步骤(3)的图标,调用QuartusⅡ完成编译试配过程,生成编译文件。编译文件可以直接用于FPGA的编译配置。打开QuartusⅡ后 ,需在VHDL文件程序中实体说明中添加: CLK : out std_logic; 在结构体最后加入: CLK
2.3嵌入式锁相环的设计
当输出波形频率较高时,由于采样一个完整周期的波形数据点数减少,势必引起波
形失真,要消除波形失真,一是可以增加采样波形数据的点数,二是提高系统的主工作时钟频率。若不增加外配ROM的情况下,可以使用后一种方法。本系统设计时在充分利用FPGA的存储空间的情况下,为了提高波形的输出频率(在不失真的条件下),还使用了Cyclone器件中的嵌入式锁相环,提高系统的主工作时钟频率,在实际工作时的主时钟频率达12 MHz。
2.4 引脚的锁定
设计中各引脚的锁定如图11所示。
本设计选择工作模式1,通过键盘控制波形输出的幅度。
图11各引脚的锁定
3、设计结果与结论
(1)嵌入式逻辑分析仪输出波形如图
12
图12 嵌入式逻辑分析仪输出波形
(2)波形失真度与储存波形ROM的位数及主工作时钟频率有关。
(3)1.,2,3键控制幅度,其中1是微调,2,3粗调。由于我们频率设定在一个固定值,在10HZ到50KHZ之间,能够实现在峰峰值大于3V波形不失真。且波形较稳定。
4、结束语及致谢
在本文的撰写过程中,老师作为我们的指导老师,他们治学严谨,学识渊博,视野广阔,为我营造了一种良好的学术氛围。置身其间,耳濡目染,潜移默化,使我不仅接受了全新的思想观念,树立了明确的学术目标,领会了基本的思考方式,掌握了通用的研究方法,而且还明白了许多待人接物与为人处世的道理。其严以律己、宽以待人的崇高风范,朴实无华、平易近人的人格魅力,与无微不至、感人至深的人文关怀,令人如沐春风,倍感温馨。
这段时间的学习,使我们了解到了理论和实际之间的差别,第一次真正接触到了实际中的问题,并通过和老师、同学交流,加强了自身的分析问题、解决问题的能力。同时,我们也发现了自己在某些方面的不足,这是我们以后要加以改进的方面。对于如何运用MATLAB与DSPbuilder有了更好的运用,使我们对硬件课程的学习有了更浓的兴趣, 使我们对我们所学的这个方向服了更浓的兴趣。虽然在做课设的过程中遇到过许多困难,尤其是思路一开始不正确的时候也产生过放弃的念头,但最终还是坚持了下来,终于把这个课设完整圆满的做完了。
在此特向老师致以衷心的谢意!向他们无可挑剔的敬业精神、严谨认真的治学态度、
深厚的专业修养和平易近人的待人方式表示深深的敬意!
5、元器件及仪器设备明细表
6、参考文献
[1].边计年,薛宏熙译. 用VHDL设计电子线路. 北京:清华大学出版社,2000. [2].黄正谨,徐坚等. CPLD系统设计技术入门与应用. 北京:电子工业出版社,2002. [3].蒋璇,蔵春华. 数学系统设计与PLD应用技术. 北京:电子工业出版社,2001.. [4].李宗伯,王蓉晖译. VHDL设计表示和综合. 北京:机械工业出版社,2002. [5].潘松,黄继业,王国栋. 现代DSP技术. 西安:西安电子科技大学出版社,2003. [6].王金明,杨吉斌. 数字系统设计与Verilog HDL. 北京:电子工业出版社,2002. [7].王锁萍. 电子设计自动化(EDA)教程. 成都: 电子科技大学出版社,2000. [8].徐志军,徐光辉. CPLD/FPGA开发与应用. 北京:电子工业出版社,2002. [9].Altera Corporation. Altera Digital Library. Altera,2002. [10].Xilinx Inc. Data Book 2001. Xilinx,2000.
7、程序清单
use dspbuilder.dspbuilderblock.all; library lpm;
use lpm.lpm_components.all; library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_signed.all; library dspbuilder; Entity biaozhun1 is
Port(clk:out std_logic;
clock
: : : : : : : :
in std_logic; in std_logic:='0';
sclrp Input
in std_logic_vector(7 downto 0); in std_logic_vector(31 downto 0); in std_logic_vector(7 downto 0); in std_logic_vector(7 downto 0); out std_logic_vector(9 downto 0); out std_logic_vector(9 downto 0)
Input1 Input2 Input3 Output Output1
);
end biaozhun1;
architecture aDspBuilder of biaozhun1 is signal SAOutputO signal SAOutput1O signal sclr signal A0W signal A1W signal A2W signal A3W signal A4W signal A5W
:
:
std_logic_vector(9 downto 0); :
std_logic_vector(9 downto 0);
std_logic:='0'; : : : : : :
std_logic_vector(32 downto 0); std_logic_vector(9 downto 0); std_logic_vector(15 downto 0); std_logic_vector(8 downto 0); std_logic_vector(32 downto 0); std_logic_vector(8 downto 0);
signal A6W signal A7W signal A8W signal A9W
: : : : : : : : : : : : :
std_logic_vector(8 downto 0); std_logic_vector(33 downto 0); std_logic_vector(23 downto 0); std_logic_vector(32 downto 0); std_logic_vector(19 downto 0); std_logic_vector(19 downto 0); std_logic_vector(33 downto 0); std_logic_vector(34 downto 0); std_logic_vector(10 downto 0); std_logic_vector(10 downto 0); std_logic_vector(10 downto 0); std_logic_vector(10 downto 0); std_logic_vector(10 downto 0);
signal A10W signal A11W signal A12W signal A13W signal A14W signal A15W signal A16W signal A17W signal A18W Begin
assert (1
-- Global reset circuitry for the input global reset sclrp sclr
-- Input - I/O assignment from Simulink Block "Input" A3W(7 downto 0) A3W(8)
-- Input - I/O assignment from Simulink Block "Input1" A4W(31 downto 0) A4W(32)
-- Input - I/O assignment from Simulink Block "Input2" A5W(7 downto 0) A5W(8)
-- Input - I/O assignment from Simulink Block "Input3" A6W(7 downto 0)
A6W(8) A0W(32)
-- Constant assignment - Simulink Block "Constant0" A1W(9)
A1W(8 downto 0)
-- Constant assignment - Simulink Block "Constant1" A2W(15)
A2W(14 downto 0)
-- Concatenation Operation - Simulink Block "BusConcatenation" A8W(22 downto 0)
'0';
-- Concatenation Operation - Simulink Block "BusConcatenation1" A9W(31 downto 0)
'0';
A16W(10) A17W(10) A18W(10)
-- Output - I/O assignment from Simulink Block "Output" Outputi : SBF generic map(
width_inl=>11, width_inr=>0, width_outl=>10, width_outr=>0,
lpm_signed=>BusIsUnsigned, round=>0, satur=>0)
port map (
xin=>A17W, yout=>SAOutputO);
-- Output - I/O assignment from Simulink Block "Output1"
Output1i : SBF generic map(
width_inl=>11, width_inr=>0, width_outl=>10, width_outr=>0,
lpm_signed=>BusIsUnsigned, round=>0, satur=>0)
port map (
xin=>A18W, yout=>SAOutput1O);
--Bus Formatting Simulink Block "AltBus" AltBusi : SBF generic map(
width_inl=>34, width_inr=>0, width_outl=>32, width_outr=>0,
lpm_signed=>BusIsUnsigned, round=>0, satur=>0)
port map (
xin yout
=> A7W,
=> A0W(31 downto 0));
-- Delay Element - Simulink Block "Delay" Delayi : SDelay generic map (
LPM_WIDTH => 34, LPM_DELAY => 1, SequenceLength => 1, SequenceValue => 1)
=> A12W,
port map (dataa
clock => clock, => '1', => sclr, => A7W);
ena sclr result
-- Product Operator - Simulink Block "Product" Producti : AltiMult generic map (
LPM_WIDTHA LPM_WIDTHB PIPELINE one_input
=> 11, => 9,
=> 0, => 0, => 1,
=> "UNUSED",
lpm lpm_hint cst_val
=> "000000000",
SequenceLength => 1, SequenceValue => 1, dspb_widthr
=> 20)
port map (
DATAA DATAB clock
=> A14W, => A5W, => '0', => '1', => '0', => A10W);
ena sclr result
-- Product Operator - Simulink Block "Product1" Product1i : AltiMult generic map (
LPM_WIDTHA LPM_WIDTHB PIPELINE one_input
=> 11, => 9,
=> 0, => 0, => 0,
lpm
cst_val => "000000000", SequenceLength => 1, SequenceValue => 1, dspb_widthr => 20) port map ( DATAA DATAB clock => A15W, => A6W, => '0', => '1', => '0', => A11W); ena sclr result
-- Sum Operator - Simulink Block "ParallelAdderSubtractor"
ParallelAdderSubtractori : SAdderSub generic map (
lpm_width =>33, pipeline => 1, SequenceLength => 1, SequenceValue => 1, AddSubVal => AddAdd) port map ( dataa datab clock => A0W, => A9W, => clock, => '1', => sclr, => A12W); ena sclr result
-- Sum Operator - Simulink Block "ParallelAdderSubtractor1"
ParallelAdderSubtractor1i : SAdderSub generic map (
lpm_width =>34, pipeline => 1,
SequenceValue => 1, AddSubVal => AddAdd) port map ( dataa(32 downto 0) dataa(33) datab clock => A4W(32 downto 0), => A4W(32), => A7W, => clock, => '1', => sclr, => A13W); ena sclr result
-- Look-up table - Simulink Block "LUT"
LUTi : lpm_rom generic map (
LPM_WIDTH => 10, LPM_WIDTHAD => 10, lpm_address_control => "REGISTERED", lpm_outdata => "UNREGISTERED", lpm_file => "biaozhun1LUT.hex") port map ( address(9 downto 0) =>A16W(9 downto 0), inclock q =>clock, => A14W(9 downto 0));
A14W(10)
-- Look-up table - Simulink Block "LUT1"
LUT1i : lpm_rom
generic map ( LPM_WIDTH => 10, LPM_WIDTHAD => 10, lpm_address_control => "REGISTERED",
lpm_file => "biaozhun1LUT1.hex") port map ( address(9 downto 0) =>A16W(9 downto 0), inclock q =>clock, => A15W(9 downto 0));
A15W(10)
-- Bus Conversion - Simulink Block "BusConversion1"
BusConversion1i : SRED generic map(
widthin=>32, widthout=>10, msb=>31, lsb=>22, round=>0, lpm_signed=>BusIsUnsigned, satur=>0) port map ( xin(31 downto 0) =>A13W(31 downto 0), yout => A16W(9 downto 0)); -- Bus Conversion - Simulink Block "BusConversion2"
BusConversion2i : SRED generic map(
widthin=>20, widthout=>10, msb=>18, lsb=>9, round=>0, lpm_signed=>BusIsUnsigned, satur=>0) port map ( xin(19 downto 0) =>A10W(19 downto 0),
yout => A17W(9 downto 0)); -- Bus Conversion - Simulink Block "BusConversion3"
BusConversion3i : SRED generic map(
widthin=>20, widthout=>10, msb=>18, lsb=>9, round=>0, lpm_signed=>BusIsUnsigned, satur=>0) port map ( xin(19 downto 0) =>A11W(19 downto 0), yout => A18W(9 downto 0)); clk
end architecture aDspBuilder;
湖南人文科技学院
课程设计报告
课程名称:VHDL语言与EDA课程设计
设计题目: 正交信号发生器
系 别: 通信与控制工程系
专 业: 电子信息工程 班 级: 10级电子信息工程3班 学生姓名: 学 号:
起止日期: 2013年6月8日 2012年6月18日 指导教师: 教研室主任:
摘 要
EDA技术是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处
理及智能化技术的最新成果,进行电子产品的自动设计。本文详细介绍了基于FPGA的DSP开发技术,提供了一种设计正交信号发生器的方案。在信号检测和信号处理中经常需要正交信号。由于正交方波信号较易得到,所以工程人员进行相关检测时所采用的正交信号源通常为方波信号。但通过对方波信号作傅立叶分析可知,这种信号含有丰富的谐波分量,严重影响相关检测中的接收精度及检测灵敏度。采用可控的正、余弦波作正交信号,就可以有效地避免谐波问题。本文采用Matlab/DSP Builder建立模型来实现正交信号发生器,使用自顶向下的设计方法,设计简单,能够提高设计效率。利用DSP Builder 建立起数学模型,实现了模块化的设计变得直观。在Simulink中进行仿真验证,通过Signal Compiler 将模型转换成硬件描述语言,经过QuartusⅡ仿真正确后,下载到FPGA里,输出的正交信号能灵活的调频,调相,调幅,实现全数字化设计。该方案简化了硬件设计的难度。对各个模块的参数进行简单的设置就能完成复杂的电子设计系统设计。
关键词:EDA技术;DSP Builder;正交信号发生器;Signal Compiler
目 录
设计要求 ................................................................. 2 1、方案论证与对比 ........................................................ 2
1.1方案一 ............................................................ 2 1.2 方案二 ............................................................ 2 1.3方案选择 .......................................................... 3 2、系统总体方案设计及实现 ................................................ 3
2.1正交信号发生器设计 ................................................ 3
2.1.1 DDS原理及设计 ............................................... 3 2.1.2 频率字输入的计算 ............................................ 7 2.1.3 输出波形峰峰值的计算 ........................................ 7 2.1.4 相位差的计算 ................................................ 7 2.1.5正交信号发生器电路模型图 ..................................... 7 2.1.6 Simulink模型的仿真 .......................................... 9 2.2 SignalCompiler的使用 ............................................ 10
2.2.1 分析当前的模块 ............................................. 10 2.2.2 设置SignalCompiler ......................................... 10 2.2.3 把模型文件MDL 转换成VHDL .................................. 10 2.2.4 综合 ....................................................... 10 2.2.5 QuartusⅡ试配 .............................................. 10 2.3嵌入式锁相环的设计 ............................................... 10 2.4 引脚的锁定 ....................................................... 11 3、设计结果与结论 ....................................................... 11 4、结束语及致谢 ......................................................... 11 5、元器件及仪器设备明细表 ............................................... 13 6、参考文献 ............................................................. 13 7、程序清单 ............................................................. 14
正交信号发生器
设计要求
能通过按键进行幅度控制,输出信号的频率在10—50kHZ,或者固定在某一频率上,要求峰-峰值大于3V,且输出波形不失真。
1、方案论证与对比
1.1方案一
该方案根据矩阵式键盘输入给FPGA送出频率控制字与相位控制字,用于设定输出正弦波的频率与相位。高速D/A转换器用于正弦波的DA转换。FPGA构成DDS的核心部分,用于接收送来的频率字与相位字,同时给DA转换器输出正弦波数据。采用字符型液晶显示屏实时显示输出的频率与相位。该方案需借助QuartusⅡ来完成。
图1 方案一原理框图
1.2 方案二
该方案是基于DSP Builder与DDS并借助于MATLAB进行设计的。首先在Matlab中DSP Build的Simulink中进行建模,系统仿真通过SignalCompiler将模型设计文件转换成相应的硬件描述语言(VHDL),在QuartusⅡ平台上进行综合生成网表文件,并
适配下载至FPGA。在这个方案中,有两路正弦信号,一路为参考信号,另一路是可数控的移动信号,并且这两路可同步进行幅度和频率数控,即对于这两路输出的正弦信号,在相位、频率和幅度3个参数上都能完成等步长数控步进,而且还能对指定的参数进行设定。
图2 方案二原理框图
1.3方案选择
方案一是基于QuartusⅡ,在设计的过程中,利用VHDL完成电路设计,必须借助于EDA工具中的综合器、适配器、时序仿真器和编程器等工具进行相应的处理,才能使此项设计在FPGA上完成硬件实现并得到硬件测试,在进行HDL文本输入设计流程中比较繁琐,而且容易出错。而方案二是基于DSP Builder进行手动流程设计,在设计过程中,DSP Builder会自动完成VHDL的转换、综合、适配,而不像方案一那样要进行HDL文本输入,这样的话就能避免文本输入过程中的绝大多数错误。 因而我们选择方案二。
2、系统总体方案设计及实现
2.1正交信号发生器设计
2.1.1 DDS原理及设计
直接数字频率合成技术(Direct Digital Synthesis,DDS)是一种从相位概念出发直接合成所需要的波形的新的全数字频率合成技术,该技术具有频率分辨率高、频率变化速
度快、相位可连续性变化等特点,在数字通信系统中被广泛采用,是信号生成的最佳选择。
DDS主要由相位累加器、相位调制器、正弦ROM查找表、D /A转换器等组成。系统时钟clk由一个稳定的晶体振荡器产生,用来同步整个合成器的各组成部分。同步寄存器的使用是为了当输入的频率字改变时不会干扰相位累加器的正常工作。相位累加器是整个DDS的核心,它由N位加法器和N位相位寄存器级联构成,类似一个简单的加法器,完成上面推导中的相位累加功能。每来一个时钟脉冲,加法器就将输入的N位频率字与相位寄存器输出的累加相位数据相加,然后将相加后的结果送至相位累加器的输入端,相位寄存器就将在上一个时钟作用后产生的新相位数据反馈到加法器的输入端,以使加法器在下一个时钟的作用下继续将相位数据与输入的频率字相加。
当相位累加器累加满量(2π) 时,就会产生一次溢出,完成一个周期性的动作,这个周期就是合成信号的一个周期,累加器的溢出频率就是DDS的合成信号频率。相位调制器接收相位累加器的相位输出,并与一个相位偏移值相加,主要用于信号的相位调制, 如PSK(相移键控)等。在不使用时可去掉该部分,或加一个固定的相位字输入。注意相位字输入也要用同步寄存器保持同步,但相位字输入的宽度M与频率字输入N往往是不相等的,一般M
正弦ROM查找表的作用是完成查表转换,或理解为相位到幅度的转换。将相位累加器或相位调制器输出的相位数据作为取样地址,来寻找正弦ROM表进行相位到幅度的变换,输出不同的幅度编码。经D /A转换器得到相应的阶梯波,最后经过低通滤波器对阶梯波进行平滑处理,得到由输入的频率字决定的连续变化的输出正弦波。下面的即为基本DDS结构的常用参数计算公式:
输出频率:
fout
B
fclk
N2
频率字:
B
fout
2
fclk
N
其中
B
f
是频率控制字,clk为系统基准时钟的频率值,N为相位累加器的数据位宽,
也是频率控制字的数据位宽。
下图为 DDS基本结构原理图,仔细观察。
图3 DDS基本结构原理图
频率控制字的可调整性使得系统输出频率非常容易调整。输出正弦波频率f=fclk*frequword/2^20,系统时钟,频率控制字DDS系统时钟12MHz,异步于CPU时钟20bit频率控制字,8bit相位控制字,8bit数据输出每波形抽样256个点。 相位累加器
相位累加器结构如图(4)所示。假设系统时钟为Fc,输出频率为Fout。每次转动一个角度360°/2N, 则可以产生一个频率为Fc/2N 的正弦波的相位递增量。那么只要选择恰当的频率控制字M,使得 Fout / Fc= M / 2N,就可以得到所需要的输出频率Fout,Fout = Fc*M / 2N,相位幅度转换通过相位累加器,我们已经得到了合成Fout 频率所对应的相位信息,然后相位幅度转换器把0°~360°的相位转换成相应相位的幅度值。
(1)相位累加器结构如图(4)所示。
(2)如图5所示,该部分是频率字输入,不同的频率字输入会使得信号输出波形的频率不同。
图5 频率字输入
(3)如图6所示,该部分是输入地址为6位,输出值位宽为8的正弦查找表模块,且输入地址总线为无符号整数。
图6 LUT模块
高速D/A模块
GW_ADDA板含两片10位超高速DAC(转换速率最高150MHz),D/A全部处于使能状态,除了数据线外,任一器件的控制信号线只有时钟线,这有利于高速控制和直接利用MATLAB/DSP Builder工具的设计。GW_ADDA板上工作时钟必须由FPGA的I/O口提供,优点是时钟频率容易变化,且可通过Cyclone中的PLL的到几乎任何时钟频率。由此即可测试DAC的最高转换频率。
两个电位器可分别调协两个D/A输出的幅度(输出幅度峰峰值不可大于5V,否则波形失真);模拟信号从接插口的2针“AIN”输入,J1和J2分别是模拟信号输出的PA、PB口,也可在两挂钩处输出,分别是两个10位DA5651输出口。电路原理图如图7所示。
相位累加器结构如图(4)所示。假设系统时钟为Fc,输出频率为Fout。每次转动一个角度360°/2N, 则可以产生一个频率为Fc/2N 的正弦波的相位递增量。
下图为高速DA模块电路原理图,认真理解并运用:
数据输出
D7D6D5D4D3D2D1D0
Pin213Pin214Pin193Pin227Pin194Pin228Pin207Pin208
D9D8D7D6D5D4D3D2D1D0
数据输入
Pin141(PIO36)Pin158(PIO37)Pin159(PIO38)Pin160(PIO39)Pin161(PIO40)Pin162(PIO41)Pin163(PIO42)Pin164(PIO43)Pin165(PIO44)Pin166(PIO45)
510/5540
数据输入
Pin128(PIO26)Pin132(PIO27)Pin133(PIO28)Pin134(PIO29)Pin135(PIO30)Pin136(PIO31)Pin137(PIO32)Pin167(PIO46)
D9D8D7D6D5D4D3D2D1D0
5651超高速D/A
模拟信号输出
5651超高速D/A
超高速A/D
AOUT(A)A口输出
ADCLK
Pin144
DACLK
DACLK
AOUT(BB口输出
图7 高速DA模块电路原理图
2.1.2 频率字输入的计算
由DDS的频率输入字公式:
B
fout
2
fclk
N
计算,式中N为相位累加器的
数据位宽,也是频率输入字的数据位宽,fclk是系统基准时钟的频率值。本设计中N=20,fclk=12MHZ,fout=50KHZ根据计算得出频率输入字为4369。 2.1.3 输出波形峰峰值的计算
本设计中正弦查找模块输入地址为8位,输出位宽为10位,且输入地址总线为无符号整数,可设置起始值为0、结束值为2π、步进值为2π/26。为了得到完整满度的波形输出,计算式可写成: 511*sin[0:2*pi/2^8]:2*pi]+512 2.1.4 相位差的计算
本设计用8bit相位控制字,8bit数据输出每波形抽样2^8=256个点,所以每按一键增加或减小相位差为3600/256=1.400 符合设计要求。 2.1.5正交信号发生器电路模型图
两个电位器可分别调协两个D/A输出的幅度,使用时一定要调节好,使之能调幅。
模拟信号输
基于DDS的正交信号发生器是整个系统的设计核心部分,其电路模型图如图8所示。
图8 基于DDS的正交信号发生器MDL模型
DDS用来产生频率、相位和幅度可变的正弦波。DDS的工作原理是利用正弦信号的相位与时间呈线性关系的特性”1,采用相位累加方法作为地址,读出相应ROM中的值,得到正弦信号的瞬时幅值,实现频率合成。DDS包括频率控制字、相位控制字、同步寄存器、相位累加器、波形存储器、数模转换器、低通滤波器。
在系统时钟的控制下.相位累加器对频率控制字K进行累加,得到相位码,相位码寻址ROM得到幅值码,经过数模转换后得到相应的阶梯波,再经过低通滤波得到连续平滑的、由频率控制字K决定的模拟输出波形。DDS可以用来产生多种波形,只要改变ROM中的数据.预先设置成正弦波、余弦波等,根据查表就可以实现不同的波形。利用DSP Builder设计DDS。然后转换成VHDL。DDS的分辨率在相位累加器的位数^,足够大时,理论上可以获得相应的分辨精度。DDS是一个全数字结构的开环系统,无反馈环节,速度非常快。DDS的相位误差主要依赖于时钟的相位特性,相位误差小,相位是连续变化
的,形成的信号具有良好的频谱。这是传统的直接频率合成方法无法实现的。相位字输入的数据宽度M往往小于相位寄存器字长,实际的DDS结构中Ⅳ很大。 其中Subsystem的原理图如图
9
图9 Subsystem的原理图
2.1.6 Simulink模型的仿真
在Sinout模型编辑窗口中,选择Slimulation→Start命令,开始仿真,等待仿真结束后,双击Scope模块,打开Scope观察窗口。其仿真波形如图
10
图10 simulink模型仿真图
2.2 SignalCompiler的使用
2.2.1 分析当前的模块
双击Sinout模型中的SignalCompiler模块,之后单击Analyze按钮后,SignalCompiler就会对Sinout模型进行分析,检查模型有无错误,并在MATLAB主窗口中弹出对话框,并给出相关信息。 2.2.2 设置SignalCompiler
SignalCompiler窗口中大致分为3个功能部分: 项目设置选项 硬件编译流程 信息框
2.2.3 把模型文件MDL 转换成VHDL
当设置好Device和Synthesis后,右侧的硬件编译部分就会列出一个操作: (1)Convert MDL to VHDL (2) Synthesis (3) QuartusⅡ 2.2.4 综合
单击步骤(2)的图标,完成综合过程。 2.2.5 QuartusⅡ试配
单击步骤(3)的图标,调用QuartusⅡ完成编译试配过程,生成编译文件。编译文件可以直接用于FPGA的编译配置。打开QuartusⅡ后 ,需在VHDL文件程序中实体说明中添加: CLK : out std_logic; 在结构体最后加入: CLK
2.3嵌入式锁相环的设计
当输出波形频率较高时,由于采样一个完整周期的波形数据点数减少,势必引起波
形失真,要消除波形失真,一是可以增加采样波形数据的点数,二是提高系统的主工作时钟频率。若不增加外配ROM的情况下,可以使用后一种方法。本系统设计时在充分利用FPGA的存储空间的情况下,为了提高波形的输出频率(在不失真的条件下),还使用了Cyclone器件中的嵌入式锁相环,提高系统的主工作时钟频率,在实际工作时的主时钟频率达12 MHz。
2.4 引脚的锁定
设计中各引脚的锁定如图11所示。
本设计选择工作模式1,通过键盘控制波形输出的幅度。
图11各引脚的锁定
3、设计结果与结论
(1)嵌入式逻辑分析仪输出波形如图
12
图12 嵌入式逻辑分析仪输出波形
(2)波形失真度与储存波形ROM的位数及主工作时钟频率有关。
(3)1.,2,3键控制幅度,其中1是微调,2,3粗调。由于我们频率设定在一个固定值,在10HZ到50KHZ之间,能够实现在峰峰值大于3V波形不失真。且波形较稳定。
4、结束语及致谢
在本文的撰写过程中,老师作为我们的指导老师,他们治学严谨,学识渊博,视野广阔,为我营造了一种良好的学术氛围。置身其间,耳濡目染,潜移默化,使我不仅接受了全新的思想观念,树立了明确的学术目标,领会了基本的思考方式,掌握了通用的研究方法,而且还明白了许多待人接物与为人处世的道理。其严以律己、宽以待人的崇高风范,朴实无华、平易近人的人格魅力,与无微不至、感人至深的人文关怀,令人如沐春风,倍感温馨。
这段时间的学习,使我们了解到了理论和实际之间的差别,第一次真正接触到了实际中的问题,并通过和老师、同学交流,加强了自身的分析问题、解决问题的能力。同时,我们也发现了自己在某些方面的不足,这是我们以后要加以改进的方面。对于如何运用MATLAB与DSPbuilder有了更好的运用,使我们对硬件课程的学习有了更浓的兴趣, 使我们对我们所学的这个方向服了更浓的兴趣。虽然在做课设的过程中遇到过许多困难,尤其是思路一开始不正确的时候也产生过放弃的念头,但最终还是坚持了下来,终于把这个课设完整圆满的做完了。
在此特向老师致以衷心的谢意!向他们无可挑剔的敬业精神、严谨认真的治学态度、
深厚的专业修养和平易近人的待人方式表示深深的敬意!
5、元器件及仪器设备明细表
6、参考文献
[1].边计年,薛宏熙译. 用VHDL设计电子线路. 北京:清华大学出版社,2000. [2].黄正谨,徐坚等. CPLD系统设计技术入门与应用. 北京:电子工业出版社,2002. [3].蒋璇,蔵春华. 数学系统设计与PLD应用技术. 北京:电子工业出版社,2001.. [4].李宗伯,王蓉晖译. VHDL设计表示和综合. 北京:机械工业出版社,2002. [5].潘松,黄继业,王国栋. 现代DSP技术. 西安:西安电子科技大学出版社,2003. [6].王金明,杨吉斌. 数字系统设计与Verilog HDL. 北京:电子工业出版社,2002. [7].王锁萍. 电子设计自动化(EDA)教程. 成都: 电子科技大学出版社,2000. [8].徐志军,徐光辉. CPLD/FPGA开发与应用. 北京:电子工业出版社,2002. [9].Altera Corporation. Altera Digital Library. Altera,2002. [10].Xilinx Inc. Data Book 2001. Xilinx,2000.
7、程序清单
use dspbuilder.dspbuilderblock.all; library lpm;
use lpm.lpm_components.all; library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_signed.all; library dspbuilder; Entity biaozhun1 is
Port(clk:out std_logic;
clock
: : : : : : : :
in std_logic; in std_logic:='0';
sclrp Input
in std_logic_vector(7 downto 0); in std_logic_vector(31 downto 0); in std_logic_vector(7 downto 0); in std_logic_vector(7 downto 0); out std_logic_vector(9 downto 0); out std_logic_vector(9 downto 0)
Input1 Input2 Input3 Output Output1
);
end biaozhun1;
architecture aDspBuilder of biaozhun1 is signal SAOutputO signal SAOutput1O signal sclr signal A0W signal A1W signal A2W signal A3W signal A4W signal A5W
:
:
std_logic_vector(9 downto 0); :
std_logic_vector(9 downto 0);
std_logic:='0'; : : : : : :
std_logic_vector(32 downto 0); std_logic_vector(9 downto 0); std_logic_vector(15 downto 0); std_logic_vector(8 downto 0); std_logic_vector(32 downto 0); std_logic_vector(8 downto 0);
signal A6W signal A7W signal A8W signal A9W
: : : : : : : : : : : : :
std_logic_vector(8 downto 0); std_logic_vector(33 downto 0); std_logic_vector(23 downto 0); std_logic_vector(32 downto 0); std_logic_vector(19 downto 0); std_logic_vector(19 downto 0); std_logic_vector(33 downto 0); std_logic_vector(34 downto 0); std_logic_vector(10 downto 0); std_logic_vector(10 downto 0); std_logic_vector(10 downto 0); std_logic_vector(10 downto 0); std_logic_vector(10 downto 0);
signal A10W signal A11W signal A12W signal A13W signal A14W signal A15W signal A16W signal A17W signal A18W Begin
assert (1
-- Global reset circuitry for the input global reset sclrp sclr
-- Input - I/O assignment from Simulink Block "Input" A3W(7 downto 0) A3W(8)
-- Input - I/O assignment from Simulink Block "Input1" A4W(31 downto 0) A4W(32)
-- Input - I/O assignment from Simulink Block "Input2" A5W(7 downto 0) A5W(8)
-- Input - I/O assignment from Simulink Block "Input3" A6W(7 downto 0)
A6W(8) A0W(32)
-- Constant assignment - Simulink Block "Constant0" A1W(9)
A1W(8 downto 0)
-- Constant assignment - Simulink Block "Constant1" A2W(15)
A2W(14 downto 0)
-- Concatenation Operation - Simulink Block "BusConcatenation" A8W(22 downto 0)
'0';
-- Concatenation Operation - Simulink Block "BusConcatenation1" A9W(31 downto 0)
'0';
A16W(10) A17W(10) A18W(10)
-- Output - I/O assignment from Simulink Block "Output" Outputi : SBF generic map(
width_inl=>11, width_inr=>0, width_outl=>10, width_outr=>0,
lpm_signed=>BusIsUnsigned, round=>0, satur=>0)
port map (
xin=>A17W, yout=>SAOutputO);
-- Output - I/O assignment from Simulink Block "Output1"
Output1i : SBF generic map(
width_inl=>11, width_inr=>0, width_outl=>10, width_outr=>0,
lpm_signed=>BusIsUnsigned, round=>0, satur=>0)
port map (
xin=>A18W, yout=>SAOutput1O);
--Bus Formatting Simulink Block "AltBus" AltBusi : SBF generic map(
width_inl=>34, width_inr=>0, width_outl=>32, width_outr=>0,
lpm_signed=>BusIsUnsigned, round=>0, satur=>0)
port map (
xin yout
=> A7W,
=> A0W(31 downto 0));
-- Delay Element - Simulink Block "Delay" Delayi : SDelay generic map (
LPM_WIDTH => 34, LPM_DELAY => 1, SequenceLength => 1, SequenceValue => 1)
=> A12W,
port map (dataa
clock => clock, => '1', => sclr, => A7W);
ena sclr result
-- Product Operator - Simulink Block "Product" Producti : AltiMult generic map (
LPM_WIDTHA LPM_WIDTHB PIPELINE one_input
=> 11, => 9,
=> 0, => 0, => 1,
=> "UNUSED",
lpm lpm_hint cst_val
=> "000000000",
SequenceLength => 1, SequenceValue => 1, dspb_widthr
=> 20)
port map (
DATAA DATAB clock
=> A14W, => A5W, => '0', => '1', => '0', => A10W);
ena sclr result
-- Product Operator - Simulink Block "Product1" Product1i : AltiMult generic map (
LPM_WIDTHA LPM_WIDTHB PIPELINE one_input
=> 11, => 9,
=> 0, => 0, => 0,
lpm
cst_val => "000000000", SequenceLength => 1, SequenceValue => 1, dspb_widthr => 20) port map ( DATAA DATAB clock => A15W, => A6W, => '0', => '1', => '0', => A11W); ena sclr result
-- Sum Operator - Simulink Block "ParallelAdderSubtractor"
ParallelAdderSubtractori : SAdderSub generic map (
lpm_width =>33, pipeline => 1, SequenceLength => 1, SequenceValue => 1, AddSubVal => AddAdd) port map ( dataa datab clock => A0W, => A9W, => clock, => '1', => sclr, => A12W); ena sclr result
-- Sum Operator - Simulink Block "ParallelAdderSubtractor1"
ParallelAdderSubtractor1i : SAdderSub generic map (
lpm_width =>34, pipeline => 1,
SequenceValue => 1, AddSubVal => AddAdd) port map ( dataa(32 downto 0) dataa(33) datab clock => A4W(32 downto 0), => A4W(32), => A7W, => clock, => '1', => sclr, => A13W); ena sclr result
-- Look-up table - Simulink Block "LUT"
LUTi : lpm_rom generic map (
LPM_WIDTH => 10, LPM_WIDTHAD => 10, lpm_address_control => "REGISTERED", lpm_outdata => "UNREGISTERED", lpm_file => "biaozhun1LUT.hex") port map ( address(9 downto 0) =>A16W(9 downto 0), inclock q =>clock, => A14W(9 downto 0));
A14W(10)
-- Look-up table - Simulink Block "LUT1"
LUT1i : lpm_rom
generic map ( LPM_WIDTH => 10, LPM_WIDTHAD => 10, lpm_address_control => "REGISTERED",
lpm_file => "biaozhun1LUT1.hex") port map ( address(9 downto 0) =>A16W(9 downto 0), inclock q =>clock, => A15W(9 downto 0));
A15W(10)
-- Bus Conversion - Simulink Block "BusConversion1"
BusConversion1i : SRED generic map(
widthin=>32, widthout=>10, msb=>31, lsb=>22, round=>0, lpm_signed=>BusIsUnsigned, satur=>0) port map ( xin(31 downto 0) =>A13W(31 downto 0), yout => A16W(9 downto 0)); -- Bus Conversion - Simulink Block "BusConversion2"
BusConversion2i : SRED generic map(
widthin=>20, widthout=>10, msb=>18, lsb=>9, round=>0, lpm_signed=>BusIsUnsigned, satur=>0) port map ( xin(19 downto 0) =>A10W(19 downto 0),
yout => A17W(9 downto 0)); -- Bus Conversion - Simulink Block "BusConversion3"
BusConversion3i : SRED generic map(
widthin=>20, widthout=>10, msb=>18, lsb=>9, round=>0, lpm_signed=>BusIsUnsigned, satur=>0) port map ( xin(19 downto 0) =>A11W(19 downto 0), yout => A18W(9 downto 0)); clk
end architecture aDspBuilder;