实时信号处理系统东北大学.docx
- 文档编号:9578280
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:19
- 大小:303.32KB
实时信号处理系统东北大学.docx
《实时信号处理系统东北大学.docx》由会员分享,可在线阅读,更多相关《实时信号处理系统东北大学.docx(19页珍藏版)》请在冰豆网上搜索。
实时信号处理系统东北大学
实时信号处理系统设计报告
软件版本:
QuartusII12.0(64-Bit)
ModelSim-Altera10.0d
目录
一、无符号DA卷积-1-
1.设计思路:
-1-
2.代码描述:
-2-
3.ModelSim仿真:
-4-
1)Testbench代码-4-
2)仿真图-5-
二、滤波器-6-
1.设计要求:
-6-
2.设计思路:
-6-
(a)第1题-6-
(b)第2题-7-
(c1)第3-1题-8-
(c2)第3-2题-9-
(c3)第3-3题-11-
三、附录-11-
一、无符号DA卷积
1.设计思路:
某一根据内积方程
来定义的三阶内积,假设3位系数其分别是c[0]=2、c[1]=3和c[2]=1,最后实现
的LUT的定义如下:
Xb[2]Xb[1]Xb[0]f(c[n],Xb[n])
0001x0+3x0+2x0=010=0002
0011x0+3x0+2x1=210=0102
0101x0+3x1+2x0=310=0112
0111x0+3x1+2x1=510=1012
1001x1+3x0+2x0=110=0012
1011x1+3x0+2x1=310=0112
1101x1+3x1+2x0=410=1002
1111x1+3x1+2x1=610=1102
有关x[n]={x[0]=110=0012,x[1]=310=0112,x[2]=710=1112}的内积如下:
步骤tXt[2]Xt[1]Xt[0]f[t]+ACC[t-1]=ACC[t]
01116x20+0=6
11104x21+6=14
21001x22+14=18
进行数值校验可以看到:
y=
图1-1移位加法器DA体系结构
2.代码描述:
--------------------------文件名:
dacon.vhd--------------------------
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
---------------------------------------------------------------------------------------------------------------------------------
entitydaconis
port(clk,reset:
instd_logic;--时钟,置位
x0_in,x1_in,x2_in:
instd_logic_vector(2downto0);
y:
outstd_logic_vector(5downto0));--输出结果
enddacon;
---------------------------------------------------------------------------------------------------------------------------------
architecturedaconofdaconis
componentlutram--定义LUT元器件
port(table_in:
instd_logic_vector(2downto0);--LUT输入信号
table_out:
outintegerrange0to6);--LUT输出信号
endcomponent;
---------------------------------------------------------------------------------------------------------------------------------
typestate_typeis(s0,s1);
signalstate:
state_type;
signalx0,x1,x2,table_in:
std_logic_vector(2downto0);
signalable_out:
integerrange0to7;
begin
table_in(0)<=x0(0);--输入初始值
table_in
(1)<=x1(0);
table_in
(2)<=x2(0);
---------------------------------------------------------------------------------------------------------------------------------
process(reset,clk)
variablep:
integerrange0to63;--结果变量
variablecount:
integerrange0to3;--计数
begin
ifreset='1'then--复位
state<=s0;
elsifrising_edge(clk)then
casestateis
whens0=>--状态s0
state<=s1;--下一个状态
count:
=0;--计数0
p:
=0;
x0<=x0_in;
x1<=x1_in;
x2<=x2_in;
whens1=>
ifcount=3then--计算结束
y<=conv_std_logic_vector(p,6);--整形转换成信号方便观察仿真
state<=s0;
else
p:
=p/2+table_out*4;--计算
forkin0to1loop--传递
x0(k)<=x0(k+1);
x1(k)<=x1(k+1);
x2(k)<=x2(k+1);
endloop;
count:
=count+1;--记下一个数
state<=s1;--进入下一个状态
endif;
endcase;
endif;
endprocess;
LC_Table0:
lutramportMAP(table_in=>table_in,table_out=>table_out);--调用LUT元器件
enddacon;
--------------------------文件名:
lutram.vhd---------------------------
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
---------------------------------------------------------------------------------------------------------------------------------
entitylutramis
port(table_in:
instd_logic_vector(2downto0);--端口定义
table_out:
outintegerrange0to6);
endlutram;
---------------------------------------------------------------------------------------------------------------------------------
architecturelutramoflutramis
begin
process(table_in)
begin
casetable_inis
when"000"=>table_out<=0;
when"001"=>table_out<=2;
when"010"=>table_out<=3;
when"011"=>table_out<=5;
when"100"=>table_out<=1;
when"101"=>table_out<=3;
when"110"=>table_out<=4;
when"111"=>table_out<=6;
whenothers=>table_out<=0;
endcase;
endprocess;
endlutram;
3.ModelSim仿真:
1)Testbench代码
LIBRARYieee;--包含库文件
USEieee.std_logic_1164.all;
ENTITYdacon_vhd_tstIS
ENDdacon_vhd_tst;
--------------------------------------------------------------结构体---------------------------------------------------------
ARCHITECTUREdacon_archOFdacon_vhd_tstIS
SIGNALclk:
STD_LOGIC;--时钟信号
SIGNALreset:
STD_LOGIC;--复位信号
SIGNALx0_in:
STD_LOGIC_VECTOR(2DOWNTO0);--x0信号输入
SIGNALx1_in:
STD_LOGIC_VECTOR(2DOWNTO0);--x1信号输入
SIGNALx2_in:
STD_LOGIC_VECTOR(2DOWNTO0);--x2信号输入
SIGNALy:
STD_LOGIC_VECTOR(5DOWNTO0);--输出信号观察波形
------------------------------------------------------元件例化--------------------------------------------------------------
COMPONENTdacon
PORT(
clk:
INSTD_LOGIC;
reset:
INSTD_LOGIC;
x0_in:
INSTD_LOGIC_VECTOR(2DOWNTO0);
x1_in:
INSTD_LOGIC_VECTOR(2DOWNTO0);
x2_in:
INSTD_LOGIC_VECTOR(2DOWNTO0);
y:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)
);
ENDCOMPONENT;
---------------------------------------------------调用元器件---------------------------------------------------------
BEGIN
i1:
dacon
PORTMAP(--端口映射
clk=>clk,
reset=>reset,
x0_in=>x0_in,
x1_in=>x1_in,
x2_in=>x2_in,
y=>y);
init:
PROCESS
------------------------------------------------时钟信号----周期100ns------------------------------------------------
BEGIN
CLOCK_LOOP:
LOOP
clk<=transport'0';--时钟高电平
WAITFOR10ns;
clk<=transport'1';--时钟低电平
WAITFOR50ns;
clk<=transport'0';-时钟高电平
WAITFOR40ns;
ENDLOOPCLOCK_LOOP;--循环
---------------------------------------------------------输入信号----------------------------------------------------------
ENDPROCESSinit;
always:
PROCESS
BEGIN
WAITFOR50ns;--等待50ns
reset<='0';--复位清零
x0_in<="001";--输入1
x1_in<="011";--输入3
x2_in<="111";--输入7
ENDPROCESSalways;
ENDdacon_arch;
2)仿真图
二、滤波器
1.设计要求:
2.设计思路:
(a)第1题
根据公式
,系数分别a[k]={480,-302,31}则有y[n]=a[0]x[n]+a[1]x[n-1]+a[2]x[n-2]=480x[n]-302x[n-1]+31x[n-2].将公式h[n]=2x[n]-x[n-1]带入(3.20)得y[n]=256(2x[n]-x[n-1])-16(2x[n]-x[n-1])-32(2x[n-1]-x[n-2])+(2x[n-1]-x[n-2])
=480x[n]-302x[n-1]+31x[n-2]则(3.20)得以验证。
(b)第2题
原始滤波器结构图
图2-1原始滤波器结构图
经过CSD编码后可以有效减少乘积,换成移位寄存器实现运算,简化系统设计,速度得到提升。
CSD编码滤波器结构图
图2-2CSD编码滤波器结构图
由直接CSD码图可以直接看出需要7个加法器。
子表达式共享结构图
图2-3子表达式共享结构图
子表达式共享需要临时变量h[n]一个加法器和公式(3.20)中的三个共计1+3=4个加法器。
(c1)第3-1题
输入为8位,则输入范围为-128~+127。
根据系数可以计算输出最大为408*127+302*128
+31*127=94409,最小为408*-128-302*127-31*128=-94546则输出为18位即可表示。
1.VHDL代码描述
---------------------------------------------------------------------------------------------------------------------------------
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_signed.all;
---------------------------------------------------------------------------------------------------------------------------------
entitycsdis
generic(y_n:
integer:
=17);--输出信号长度为17位
port(clk,reset:
instd_logic;--时钟,置位
x_in:
instd_logic_vector(7downto0);--8-bit输入信号
y_out:
outstd_logic_vector(y_ndownto0));--输出信号
endcsd;
---------------------------------------------------------------------------------------------------------------------------------
architecturecsdofcsdis
signaltmpx0,tmpx1:
integerrange-128to217:
=0;--中间信号
signaltmph0,tmph1,tmpy:
integerrange-131072to131071:
=0;--信号范围-131072to131071
begin
process(clk,reset,tmpy)
begin
ifreset='1'then
y_out<="000000000000000000";--复位输出置零
elsifrising_edge(clk)then
tmpx1<=CONV_INTEGER(x_in);--std_logic_vector转换成integer
tmph1<=tmpx1*2-tmpx0;--计算h[n]=2x[n]-x[n-1]
tmpy<=tmph1*256-tmph1*16-tmph0*32+tmph0;--算法
tmpx0<=tmpx1;--传递
tmph0<=tmph1;
endif;
y_out<=conv_std_logic_vector(tmpy,y_n+1);--integer转换成std_logic_vector
endprocess;
endcsd;
---------------------------------------------------------------------------------------------------------------------------------
(c2)第3-2题
2.ModelSim仿真:
Testbench代码
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYcsd_vhd_tstIS
ENDcsd_vhd_tst;
---------------------------------------------------------------------------------------------------------------------------------
ARCHITECTUREcsd_archOFcsd_vhd_tstIS
SIGNALclk:
STD_LOGIC;
SIGNALreset:
STD_LOGIC;
SIGNALx_in:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALy_out:
STD_LOGIC_VECTOR(17DOWNTO0);
COMPONENTcsd
PORT(
clk:
INSTD_LOGIC;--时钟信号
reset:
INSTD_LOGIC;--复位信号
x_in:
INSTD_LOGIC_VECTOR(7DOWNTO0);--输入信号
y_out:
OUTSTD_LOGIC_VECTOR(17DOWNTO0)--输出信号
);
ENDCOMPONENT;
BEGIN
i1:
csd
PORTMAP(--端口映射
clk=>clk,
reset=>reset,
x_in=>x_in,
y_out=>y_out
);
init:
PROCESS
--------------------------------------时钟信号--周期100ns频率10M-------------------------------------------
BEGIN
CLOCK_LOOP:
LOOP
clk<=transport'0';
WAITFOR10ns;
clk<=transport'1';
WAITFOR10ns;
WAITFOR40ns;
clk<=transport'0';
WAITFOR40ns;
ENDLOOPCLOCK_LOOP;
WAIT;
-------------------------------------------------输入X值为46.13.-9----------------------------------------------------
ENDPROCESSinit;
always:
PROCESS
BEGIN
reset<='1';--复位信号
WAITFOR150ns;--等待150ns
reset<='0';
x_in<="11110111";--补码表示-9
WAITFOR100ns;
x_in<="00001101";--输入13
WAITFOR100ns;
x_in<="00101110";--输入46480*46-302*13+(-9)*31=17875
WAIT;
ENDPROCESSalways;
ENDcsd_arch;
---------------------------------------------------------------------------------------------------------------------------------
仿真图
仿真设x输入为46,13,-9。
根据(3.19)公式可以计算为480*46-302*13+(-9)*31=17875
通过modelsim仿真结果也为17875,则代码得到验证
图2-4modelsim仿真图
(c3)第3-3题
根据QuartusII的CompilationReport可以看出使用逻辑单元为65个,组合功能51个,专用逻
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实时 信号 处理 系统 东北大学