EDA技术及应用第8章_第1页
EDA技术及应用第8章_第2页
EDA技术及应用第8章_第3页
EDA技术及应用第8章_第4页
EDA技术及应用第8章_第5页
已阅读5页,还剩288页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 8 章数字系统设计实例第 8 章数字系统设计实例8.1 数字密码锁电路设计数字密码锁电路设计 8.2 IIR滤波器电路设计滤波器电路设计 8.3 简单电子琴电路设计简单电子琴电路设计 8.4 交通信号灯控制器电路设计交通信号灯控制器电路设计第 8 章数字系统设计实例 8.1 数字密码锁电路设计数字密码锁电路设计8.1.1 系统设计要求系统设计要求(1) 密码输入:每按下一个数字键,就输入一个数值,并在显示器上显示出该数值,同时将先前输入的数据依次左移一个数字位置。(2) 密码清除:按下“清除”键可清除前面所有输入的值。第 8 章数字系统设计实例(3) 密码更改:按下“更改”键可将目前的数码

2、设定成新的密码。(4) 密码上锁:按下“上锁”键可将密码锁定。(5) 密码解锁:按下“解锁”键首先检查输入的密码是否正确,密码正确即开锁。第 8 章数字系统设计实例8.1.2 系统设计系统设计根据系统设计要求,系统设计采用自顶向下的设计方法。顶层设计采用原理图设计方式,系统整体设计原理图如图8-1所示。它由密码锁输入模块(SR)、密码锁控制模块(CTRL)和译码显示模块(YM)三部分组成。第 8 章数字系统设计实例图8-1 系统的整体组装设计原理图第 8 章数字系统设计实例8.1.3 模块设计与实现模块设计与实现1密码锁输入模块(1) 时序产生电路。时序产生电路中使用三种不同频率的工作脉冲波形

3、,即系统时钟脉冲、弹跳消除取样信号和键盘扫描信号。(2) 键盘扫描电路。键盘扫描电路的作用是提供键盘扫描信号,扫描信号变化的顺序依次为11101101101101111110。第 8 章数字系统设计实例图8-2 键盘扫描示意图第 8 章数字系统设计实例当键盘扫描信号为1110时,按键位置分别为011(“1”键按下)、101(“2”键按下)、110(“3”键按下);当键盘扫描信号为1101时,按键位置分别为011(“4”键按下)、101(“5”键按下)、110(“6”键按下);当键盘扫描信号为1011时,按键位置分别为011(“7”键按下)、101(“8”键按下)、110(“9”键按下);当键盘

4、扫描信号为0111时,按键位置分别为011(“*”键按下)、101(“0”键按下)、110(“#”键按下)。第 8 章数字系统设计实例(3) 键盘译码电路。上述键盘中的按键分为数字按键和功能按键,每个功能按键可能负责不同的功能,例如“清除”键、“上锁”键和“解锁”键等。数字按键主要是用来输入数字的。但是键盘所产生的输出是无法直接拿来用作密码锁控制电路的输入的;另外,不同的按键具有不同的功能,所以必须有键盘译码电路来规划每个按键的输出形式,以便执行相应的动作。第 8 章数字系统设计实例 按键存储电路。因为每次扫描会产生新的按键数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将整个键盘扫描完

5、毕的结果记录下来。本设计采用串入串出移位寄存器实现按键存储电路。第 8 章数字系统设计实例 各按键位置与数码关系如表8-1所示。其中“*”为“上锁”键,“#”为“清除/解锁”键。若按下的是数字键,则译成相对应的BCD码;若按下的是功能键,则译成四位数的码字,并由密码锁控制电路给出相应的动作。第 8 章数字系统设计实例第 8 章数字系统设计实例根据上述分析,密码输入电路的VHDL源程序(SR.VHD)如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARIT

6、H.ALL;第 8 章数字系统设计实例ENTITY SR ISPORT( CLK_IN : IN STD_LOGIC; -时钟信号 KEY_IN : IN STD_LOGIC_VECTOR(2 DOWNTO 0); -按键输入信号 DATA_N : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -数字键数据 DATA_F : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-功能键数据 FLAG_N: OUT STD_LOGIC; -数字键数据标志第 8 章数字系统设计实例 FLAG_F: OUT STD_LOGIC; -功能键数据标志 CQD: OUT

7、 STD_LOGIC; -键盘输入采样时钟 KSEL: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -键盘扫描信号 CSR: OUT STD_LOGIC_VECTOR(1 DOWNTO 0);-按键行号00,01,10,11END ENTITY SR;第 8 章数字系统设计实例ARCHITECTURE ART OF SR IS SIGNAL C_QD: STD_LOGIC; SIGNAL C_SR: STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL N,F: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL FN,FF:

8、STD_LOGIC;第 8 章数字系统设计实例 SIGNAL SEL: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL Q: STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL C: STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN -内部连接 DATA_N = N; -数字键译码值寄存器DATA_F =F; 第 8 章数字系统设计实例FLAG_N = FN; -数字键标志值数据FLAG_F = FF;CQD = C_QD; -键盘输入采样时钟CSR =C_SR; -按键位置KSEL=SEL; -键盘扫描信号C(0) = KE

9、Y_IN(0); -按键输入寄存器(键盘矩阵的输出)C(1) = KEY_IN(1);C(2) = KEY_IN(2);第 8 章数字系统设计实例COUNTER: BLOCK IS;-键盘扫描模块(计数器) BEGIN PROCESS(CLK_IN) IS BEGIN IF(CLK_INEVENT AND CLK_IN=1) THEN Q=Q+1; END IF;第 8 章数字系统设计实例 C_QD=Q(3);-键盘输入采样时钟 C_SR = Q(5 DOWNTO 4);-确定键盘扫描行号 END PROCESS; SEL = 1110 WHEN C_SR=00 ELSE;-扫描“0”行 11

10、01 WHEN C_SR=01 ELSE 1011 WHEN C_SR=10 ELSE 0111 WHEN C_SR=11 ELSE 1111; END BLOCK COUNTER;第 8 章数字系统设计实例 KEY_DECODER: BLOCK;-键盘译码模块 SIGNAL Z: STD_LOGIC_VECTOR(4 DOWNTO 0);-按键位置 BEGIN PROCESS(C_QD);-键盘采样时钟触发 BEGIN Z=C_SR & C;-按键位置(2位)&按键输入(3位) IF(C_QDEVENT AND C_QD=1) THEN第 8 章数字系统设计实例 CASE Z

11、 IS WHEN 11101 = N N N N N N N N N N N F F F=1000; END CASE;第 8 章数字系统设计实例 END IF; END PROCESS; FN = NOT (N(3) AND N(2) AND N(1) AND N(0);-数字键标志 FF = F(2) OR F(0); -功能键标志 END BLOCK KEY_DECODER;END ARCHITECTURE ART;第 8 章数字系统设计实例2密码锁控制模块1) 数字按键输入的相应控制(1) 如果按下数字键,第一个数字会从显示器的最右端开始显示,此后每新按下一个数字,显示器上的数字必须左

12、移一位,以便将新的数据显示出来。第 8 章数字系统设计实例(2) 假如要更改输入的数字,可以按“倒退”键来清除前面输入的一个数字,或者按“清除”键清除所有输入数字,再重新输入四位数。(3) 由于这里设计的是一个四位电子密码锁,所以当输入的数字键超过4个时,电路不予理会,而且不再显示第四个以后的数字。第 8 章数字系统设计实例2) 功能按键输入的相应控制(1) “清除”键:清除所有的输入数字,即作归零动作。(2) “上锁”键:按下此键时可将密码锁上锁(上锁前必须设置四位数字密码)。(3) “解锁”键:按下此键会检查输入的密码是否正确,若密码正确无误则解锁。第 8 章数字系统设计实例下面给出密码锁

13、控制模块的VHDL源程序(CTRL.VHD):LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;第 8 章数字系统设计实例ENTITY CTRL ISPORT ( DATA_N : IN STD_LOGIC_VECTOR(3 DOWNTO 0);-数字键数据 DATA_F : IN STD_LOGIC_VECTOR(3 DOWNTO 0);-功能键数据 FLAG_N : IN STD_LOGIC; -数字键数据标志 FLAG_F : IN S

14、TD_LOGIC; -功能键数据标志 MIMAIN : BUFFER STD_LOGIC; -密码输入标志第 8 章数字系统设计实例 SETIN : BUFFER STD_LOGIC; -密码设置标志 OLD : BUFFER STD_LOGIC; -旧密码设置标志 CQD : IN STD_LOGIC; -键盘输入采样时钟 ENLOCK : OUT STD_LOGIC; -开锁信号 DATA_BCD:OUT STD_LOGIC_VECTOR(15 DOWNTO0);-BCD数据END ENTITY CTRL;第 8 章数字系统设计实例ARCHITECTURE ART OF CTRL IS S

15、IGNAL ACC, REG: STD_LOGIC_VECTOR (15 DOWNTO 0);-ACC暂存键入的信息,REG存储输入的密码BEGIN PROCESS (CQD,FLAG_F) IS BEGIN IF (CQDEVENT AND CQD=0) THEN第 8 章数字系统设计实例 IF FLAG_F=1 THEN IF(DATA_F = 0100) THEN ACC= 1111111111111111; -功能键“*” MIMAIN=0; SETIN=0; OLD ENLOCK MIMAIN = 1; -密码输入标志 ACC SETIN = 1; -密码设置标志 ACC=11111

16、11111111111; OLD NULL;第 8 章数字系统设计实例 END CASE; ELSIF (MIMAIN=1) THEN IF ACC=REG THEN;-密码核对 ENLOCK=0; MIMAIN=0; ELSE MIMAIN=0; END IF;第 8 章数字系统设计实例 ELSIF (SETIN=1) THEN IF (OLD=1) THEN IF(ACC=REG) THEN OLD=0; ELSE SETIN=0; OLD=0; END IF; ELSE第 8 章数字系统设计实例 IF (ACC“1001100110011001”) THEN;-BCD码小于“9999”

17、为有效码 REG=ACC; -密码存储 SETIN=0; END IF; END IF; END IF; END IF;第 8 章数字系统设计实例 ELSIF FLAG_N=1 THEN ACC= ACC(11 DOWNTO 0)& DATA_N;-实现数位左移 END IF; END IF;END PROCESS;DATA_BCD DOUT7 DOUT7 DOUT7 DOUT7 DOUT7 DOUT7 DOUT7 DOUT7 DOUT7 DOUT7 DOUT7=“0000000”; END CASE; END PROCESS;END ARCHITECTURE ART;第 8 章数字系

18、统设计实例8.1.4 波形仿真波形仿真1. 密码锁输入模块的仿真波形密码锁输入模块仿真波形如图8-3所示。第 8 章数字系统设计实例图8-3 密码锁输入模块仿真波形第 8 章数字系统设计实例2. 密码锁控制模块的仿真波形密码锁控制模块仿真波形如图8-4所示。图8-4 密码锁控制模块仿真波形第 8 章数字系统设计实例3. 密码锁译码模块的仿真波形密码锁译码模块仿真波形如图8-5所示。图8-5 密码锁译码模块仿真波形第 8 章数字系统设计实例4. 密码锁系统总体仿真图(1) 设置新密码部分。初始出厂时设置的密码为“0000”,用户重新设置为“0062”。顶层模块仿真波形1如图8-6所示。图8-6

19、顶层模块仿真波形1第 8 章数字系统设计实例(2) 上锁部分。按下“#”表示上锁,设置完毕后上锁键(ENLOCK)有效。顶层模块仿真波形2如图8-7所示。图8-7 顶层模块仿真波形2第 8 章数字系统设计实例 (3) 解锁但输入错误。当按下“0692”、“*”时,上锁键(ENLOCK)仍然有效,表示输入密码有错误,没有解开密码。顶层模块仿真波形3如图8-8所示。第 8 章数字系统设计实例图8-8 顶层模块仿真波形3第 8 章数字系统设计实例(4) 解锁且输入正确。当按下“0062”、“*”时,上锁键(ENLOCK)无效,表示输入的密码正确,解开密码。顶层模块仿真波形4如图8-9所示。第 8 章

20、数字系统设计实例图8-9 顶层模块仿真波形4第 8 章数字系统设计实例 8.2 IIR滤波器电路设计滤波器电路设计8.2.1 概述概述IIR滤波器传输函数的一般形式为kN1kkM0ka(k)z1b(k)zH(z) (8-1) 第 8 章数字系统设计实例其差分方程的一般形式为k)a(k)y(nk)b(k)x(ny(n)N1kM0k(8-2) 常用的IIR数字滤波器实现方法有如下几种: 采用在通用计算机系统中加上专用的加速处理机实现; 利用DSP芯片实现; 采用普通硬件组合实现; 采用EDA技术和FPGA/CPLD器件实现。第 8 章数字系统设计实例在这几种方法中,利用EDA加FPGA/CPLD的

21、方法具有速度快、成本低、效率高等优点。通常利用EDA技术和FPGA/CPLD实现IIR数字滤波器有如下几种方法: 利用VHDL实现; 利用LPM设计方法; 利用DSP Bulider实现; 利用IP核实现。第 8 章数字系统设计实例8.2.2 IIR滤波器设计方案滤波器设计方案式(8-2)的二阶形式如下:2k21k12k21k1k0kzaza1zbzbb(z)H(8-3) 第 8 章数字系统设计实例这样就可以将任意阶的IIR滤波器通过若干二阶网络(也称为滤波器的二阶基本节)级联起来,如图8-10所示。图8-10 级联二阶IIR网络第 8 章数字系统设计实例对于每一个二阶基本节,可以通过转置直接

22、型结构加以实现,如图8-11所示。图8-11 二阶基本节直接型结构第 8 章数字系统设计实例采用这种级联结构实现IIR滤波器的优点是每一个基本节只是关系到滤波器的某一对极点和一对零点,调整系数ai,只单独地调整了滤波器第i对零点,而不影响其他任何零、极点。同样,调整bi系数,也只单独调整了第i对极点。因此,这种结构便于准确地实现滤波器的零、极点,也便于调整滤波器的频率响应性能。第 8 章数字系统设计实例假设要设计一个4阶IIR滤波器,则采用MATLAB实现IIR滤波器的源代码如下:FilterOrder=4;FeedForward,FeedBack = ellip(FilterOrder,3,

23、50,300/500);figure(1);freqz(FeedForward,FeedBack);title(Frequency Response (full precision coefficients);z,p,k = tf2zp(FeedForward,FeedBack);SecOrd = zp2sos(z,p,k); 第 8 章数字系统设计实例可得SecOrd= 0.11160.2086 0.1116 1.0000 -0.5362 0.4138 1.0000 1.4239 1.0000 1.0000 0.5099 0.8690则可得该滤波器的二阶差分方程的系数如表8-2所示,幅频响应

24、如图8-12所示。第 8 章数字系统设计实例第 8 章数字系统设计实例图8-12 IIR幅频响应第 8 章数字系统设计实例8.2.3 IIR滤波器实现滤波器实现1. 设计方案式(8-3)所对应的二阶节系统函数的差分方程为2)y(na1)y(na2)x(nb1)x(nbx(n)by(n)21210(8-4)第 8 章数字系统设计实例2. 主要功能模块设计1) 输入控制单元将输入数据送入输入寄存器中,其VHDL描述如下: input_reg_process : PROCESS (clk) BEGIN IF clkevent AND clk = 1 THEN IF reset = 1 THEN in

25、put_register = 0.0000000000000000E+000;第 8 章数字系统设计实例 ELSIF clk_en = 1 THEN input_register =x; END IF; END IF; END PROCESS input_reg_process; scale1 = input_register * scaleconst1;第 8 章数字系统设计实例2) 移位单元将输入寄存器上一时刻的数据送入delay_section1(0),同时又将delay_section1(0)上一时刻的数据送入delay_section1(1),其VHDL描述如下:第 8 章数字系统设

26、计实例delay_process_section1 : PROCESS (clk) BEGIN IF clkevent AND clk = 1 THEN IF reset = 1 THEN delay_section1(0 TO 1) 0.0000000000000000E+000);第 8 章数字系统设计实例 ELSIF clk_en = 1 THEN delay_section1(0) = a1sum1; delay_section1(1) = delay_section1(0); END IF; END IF; END PROCESS delay_process_section1;第 8

27、 章数字系统设计实例3) 乘加单元先将系数与其相关数据相乘,再进行相加,其VHDL描述如下:PROCESS(scale1,delay_section1,a1sum1)BEGIN inputconv1 = scale1; a2mul1 = delay_section1(0) * coeff_a2_section1; a3mul1 = delay_section1(1) * coeff_a3_section1; b1mul1 = a1sum1;第 8 章数字系统设计实例 b2mul1 = delay_section1(0) * coeff_b2_section1; b3mul1 = delay_s

28、ection1(1); a2sum1 = inputconv1 - a2mul1; a1sum1 = a2sum1 - a3mul1; b2sum1 = b1mul1 + b2mul1; b1sum1 = b2sum1 + b3mul1; scale2 = b1sum1 * scaleconst2;第 8 章数字系统设计实例4) 输出控制单元将输出数据送入输出寄存器输出,其VHDL描述如下: output_register_process : PROCESS (clk) BEGIN IF clkevent AND clk = 1 THEN IF reset = 1 THEN output_re

29、gister = 0.0000000000000000E+000 第 8 章数字系统设计实例 ELSIF clk_enable = 1 THEN output_register = output_typeconvert; END IF; END IF; END PROCESS output_register_process;result 0); dataa_1: IN STD_LOGIC_VECTOR (17 DOWNTO 0) := (OTHERS = 0); dataa_2: IN STD_LOGIC_VECTOR (17 DOWNTO 0) := (OTHERS = 0);第 8 章数字

30、系统设计实例 datab_0: IN STD_LOGIC_VECTOR (17 DOWNTO 0) := (OTHERS = 0); datab_1: IN STD_LOGIC_VECTOR (17 DOWNTO 0) := (OTHERS = 0); datab_2: IN STD_LOGIC_VECTOR (17 DOWNTO 0) := (OTHERS = 0); ena0: IN STD_LOGIC:= 1; result: OUT STD_LOGIC_VECTOR (37 DOWNTO 0);END fmadd;第 8 章数字系统设计实例ARCHITECTURE SYN OF fma

31、dd ISSIGNAL sub_wire0: STD_LOGIC_VECTOR (37 DOWNTO 0);SIGNAL sub_wire1: STD_LOGIC_VECTOR (17 DOWNTO 0);SIGNAL sub_wire2: STD_LOGIC_VECTOR (53 DOWNTO 0);SIGNAL sub_wire3: STD_LOGIC_VECTOR (17 DOWNTO 0);SIGNAL sub_wire4: STD_LOGIC_VECTOR (17 DOWNTO 0);第 8 章数字系统设计实例SIGNAL sub_wire5: STD_LOGIC_VECTOR (1

32、7 DOWNTO 0);SIGNAL sub_wire6: STD_LOGIC_VECTOR (53 DOWNTO 0);SIGNAL sub_wire7: STD_LOGIC_VECTOR (17 DOWNTO 0);SIGNAL sub_wire8: STD_LOGIC_VECTOR (17 DOWNTO 0);COMPONENT altmult_addGENERIC (第 8 章数字系统设计实例addnsub_multiplier_aclr1: STRING;addnsub_multiplier_pipeline_aclr1: STRING;addnsub_multiplier_pipe

33、line_register1: STRING;addnsub_multiplier_register1: STRING;dedicated_multiplier_circuitry: STRING;input_aclr_a0: STRING;input_aclr_a1: STRING;第 8 章数字系统设计实例input_aclr_a2: STRING;input_aclr_b0: STRING;input_aclr_b1: STRING;input_aclr_b2: STRING;input_register_a0: STRING;input_register_a1: STRING;inpu

34、t_register_a2: STRING;input_register_b0: STRING;input_register_b1: STRING;第 8 章数字系统设计实例input_register_b2: STRING;input_source_a0: STRING;input_source_a1: STRING;input_source_a2: STRING;input_source_b0: STRING;input_source_b1: STRING;input_source_b2: STRING;intended_device_family: STRING;lpm_type: ST

35、RING;multiplier1_direction: STRING;第 8 章数字系统设计实例multiplier_aclr0: STRING;multiplier_aclr1: STRING;multiplier_aclr2: STRING;multiplier_register0: STRING;multiplier_register1: STRING;multiplier_register2: STRING;number_of_multipliers: NATURAL;output_aclr: STRING;output_register: STRING;port_addnsub1:

36、STRING;第 8 章数字系统设计实例port_signa: STRING;port_signb: STRING;representation_a: STRING;representation_b: STRING;signed_aclr_a: STRING;signed_aclr_b: STRING;signed_pipeline_aclr_a: STRING;signed_pipeline_aclr_b: STRING;signed_pipeline_register_a: STRING;第 8 章数字系统设计实例signed_pipeline_register_b: STRING;sig

37、ned_register_a: STRING;signed_register_b: STRING;width_a: NATURAL;width_b: NATURAL;width_result: NATURAL);PORT(dataa: IN STD_LOGIC_VECTOR(53 DOWNTO 0); datab:IN STD_LOGIC_VECTOR(53 DOWNTO 0);第 8 章数字系统设计实例 clock0: IN STD_LOGIC ; aclr3: IN STD_LOGIC ; ena0: IN STD_LOGIC ; result: OUT STD_LOGIC_VECTOR

38、(37 DOWNTO 0);END COMPONENT;BEGIN第 8 章数字系统设计实例sub_wire8 = datab_2(17 DOWNTO 0);sub_wire7 = datab_0(17 DOWNTO 0);sub_wire4 = dataa_2(17 DOWNTO 0);sub_wire3 = dataa_1(17 DOWNTO 0);result = sub_wire0(37 DOWNTO 0);sub_wire1 = dataa_0(17 DOWNTO 0);sub_wire2 = sub_wire4(17 DOWNTO 0) & sub_wire3(17 DOW

39、NTO 0) & sub_wire1(17 DOWNTO 0);第 8 章数字系统设计实例sub_wire5 = datab_1(17 DOWNTO 0);sub_wire6 ACLR3,addnsub_multiplier_pipeline_aclr1 = ACLR3,addnsub_multiplier_pipeline_register1 = CLOCK0,第 8 章数字系统设计实例addnsub_multiplier_register1 = CLOCK0,dedicated_multiplier_circuitry = AUTO,input_aclr_a0 = ACLR3,in

40、put_aclr_a1 = ACLR3,input_aclr_a2 = ACLR3,input_aclr_b0 = ACLR3,input_aclr_b1 = ACLR3,input_aclr_b2 = ACLR3,第 8 章数字系统设计实例input_register_a0 = CLOCK0,input_register_a1 = CLOCK0,input_register_a2 = CLOCK0,input_register_b0 = CLOCK0,input_register_b1 = CLOCK0,input_register_b2 = CLOCK0,input_source_a0 =

41、 DATAA,input_source_a1 = DATAA,input_source_a2 = DATAA,第 8 章数字系统设计实例input_source_b0 = DATAB,input_source_b1 = DATAB,input_source_b2 = DATAB,intended_device_family = FLEX10K,lpm_type = altmult_add,multiplier1_direction = ADD,multiplier_aclr0 = ACLR3,multiplier_aclr1 = ACLR3,multiplier_aclr2 = ACLR3,第

42、 8 章数字系统设计实例multiplier_register0 = CLOCK0,multiplier_register1 = CLOCK0,multiplier_register2 = CLOCK0,number_of_multipliers = 3,output_aclr = ACLR3,output_register = CLOCK0,port_addnsub1 = PORT_UNUSED,port_signa = PORT_UNUSED,port_signb = PORT_UNUSED,第 8 章数字系统设计实例representation_a = SIGNED,representa

43、tion_b = SIGNED,signed_aclr_a = ACLR3,signed_aclr_b = ACLR3,signed_pipeline_aclr_a = ACLR3,signed_pipeline_aclr_b = ACLR3,signed_pipeline_register_a = CLOCK0,signed_pipeline_register_b = CLOCK0,signed_register_a = CLOCK0,signed_register_b = CLOCK0,第 8 章数字系统设计实例width_a = 18,width_b = 18,width_result

44、= 38)PORT MAP (dataa = sub_wire2,datab = sub_wire6,clock0 = clock0,aclr3 = aclr3,ena0 = ena0,result = sub_wire0); END SYN;第 8 章数字系统设计实例(2) LPM加法器的VHDL源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;LIBRARY lpm;USE lpm.ALL;第 8 章数字系统设计实例ENTITY adder ISPORT(dataa: IN STD_LOGIC_VECTOR(17 DOWNTO 0);datab:

45、 IN STD_LOGIC_VECTOR (17 DOWNTO 0);cout: OUT STD_LOGIC ;overflow: OUT STD_LOGIC ;result: OUT STD_LOGIC_VECTOR (17 DOWNTO 0);END adder;第 8 章数字系统设计实例ARCHITECTURE SYN OF adder ISSIGNAL sub_wire0: STD_LOGIC ;SIGNAL sub_wire1: STD_LOGIC ;SIGNAL sub_wire2: STD_LOGIC_VECTOR (17 DOWNTO 0);COMPONENT lpm_add_

46、subGENERIC (lpm_direction: STRING;lpm_hint: STRING;lpm_type: STRING;lpm_width: NATURAL);第 8 章数字系统设计实例PORT (dataa: IN STD_LOGIC_VECTOR (17 DOWNTO 0); datab: IN STD_LOGIC_VECTOR (17 DOWNTO 0); overflow: OUT STD_LOGIC ; cout : OUT STD_LOGIC ; result: OUT STD_LOGIC_VECTOR (17 DOWNTO 0);END COMPONENT;第 8

47、 章数字系统设计实例BEGINoverflow = sub_wire0;cout = sub_wire1;result ADD,第 8 章数字系统设计实例lpm_hint = ONE_INPUT_IS_CONSTANT=NO,CIN_USED=NO,lpm_type = LPM_ADD_SUB,lpm_width = 18 )PORT MAP (dataa = dataa,datab = datab,overflow = sub_wire0,cout = sub_wire1,result = sub_wire2);END SYN;第 8 章数字系统设计实例(3) 二阶节IIR滤波器模块iir_

48、1的VHDL构造体源程序如下:ARCHITECTURE translated OF iir_1 IS COMPONENT adder PORT (dataa : IN STD_LOGIC_VECTOR(17 DOWNTO 0); datab : IN STD_LOGIC_VECTOR(17 DOWNTO 0); result : OUT STD_LOGIC_VECTOR(17 DOWNTO 0); cout : OUT STD_LOGIC; overflow : OUT STD_LOGIC);第 8 章数字系统设计实例 END COMPONENT; SIGNAL coef_b1: STD_LO

49、GIC_VECTOR(DLY_WIDTH-1 DOWNTO 0); SIGNAL coef_b2: STD_LOGIC_VECTOR(DLY_WIDTH-1 DOWNTO 0); SIGNAL coef_a0: STD_LOGIC_VECTOR(DLY_WIDTH-1 DOWNTO 0); SIGNAL coef_a1: STD_LOGIC_VECTOR(DLY_WIDTH-1 DOWNTO 0); SIGNAL coef_a2: STD_LOGIC_VECTOR(DLY_WIDTH-1 DOWNTO 0); 第 8 章数字系统设计实例 SIGNAL coef_a2: STD_LOGIC_VE

50、CTOR(DLY_WIDTH-1 DOWNTO 0); SIGNAL result_xhdl1: STD_LOGIC_VECTOR(OUTPUT_WIDTH-1 DOWNTO 0); SIGNAL feedback_fp_xhdl2:STD_LOGIC_VECTOR(OUTPUT_WIDTH-2 DOWNTO 0); SIGNAL wn_xhdl3: STD_LOGIC_VECTOR(DLY_WIDTH01-DOWNTO 0); SIGNAL feedback_xhdl4: STD_LOGIC_VECTOR(DLY_WIDTH01-1DOWNTO 0); 第 8 章数字系统设计实例COMPON

51、ENT fmadd IS PORT (clock0: IN STD_LOGIC; dataa_0: IN STD_LOGIC_VECTOR(17 DOWNTO 0); aclr3: IN STD_LOGIC; datab_0: IN STD_LOGIC_VECTOR(17 DOWNTO 0); dataa_2: IN STD_LOGIC_VECTOR(17 DOWNTO 0); datab_1: IN STD_LOGIC_VECTOR(17 DOWNTO 0); ena0 : IN STD_LOGIC; datab_2: IN STD_LOGIC_VECTOR(17 DOWNTO 0); re

52、sult : OUT STD_LOGIC_VECTOR(37 DOWNTO 0); 第 8 章数字系统设计实例END COMPONENT; COMPONENT tmadd IS PORT (clock0 : IN STD_LOGIC; dataa_0 : IN STD_LOGIC_VECTOR(17 DOWNTO 0); aclr3: IN STD_LOGIC; datab_0: IN STD_LOGIC_VECTOR(17 DOWNTO 0); datab_1: IN STD_LOGIC_VECTOR(17 DOWNTO 0); ena0: IN STD_LOGIC; result: OUT

53、 STD_LOGIC_VECTOR(36 DOWNTO 0); 第 8 章数字系统设计实例END COMPONENT;BEGIN result = result_xhdl1; feedback_fp = feedback_fp_xhdl2; wn = wn_xhdl3; feedback = feedback_xhdl4; coef_b1 = conv_STD_LOGIC_VECTOr( -b1, 18) ; coef_b2 = conv_STD_LOGIC_VECTOR( -b2, 18) ;第 8 章数字系统设计实例 coef_a0 = conv_STD_LOGIC_VECTOR(a0,

54、18) ; coef_a1 = conv_STD_LOGIC_VECTOR(a1, 18) ; coef_a2 = conv_STD_LOGIC_VECTOR(a2, 18) ; feedback_xhdl4 clk, aclr3 = reset,第 8 章数字系统设计实例 ena0 = clken, dataa_0 = wn_xhdl3, dataa_2 = wn_xhdl3, datab_0 = coef_a1, datab_1 = coef_a2, datab_2 = coef_a0, result = result_xhdl1); 第 8 章数字系统设计实例 two_mult_add_

55、inst : tmadd PORT MAP ( clock0 = clk, dataa_0 = wn_xhdl3, aclr3 = reset, datab_0 = coef_b1, datab_1 = coef_b2, ena0 = clken, result = feedback_fp_xhdl2); 第 8 章数字系统设计实例 adder_inst : adder PORT MAP (dataa = x, datab = feedback_xhdl4, result = wn_xhdl3, cout = open, overflow = open); END translated;第 8

56、 章数字系统设计实例总体设计的构造体VHDL源程序如下:ARCHITECTURE translated OF iir_top IS SIGNAL out_1 : BIT_VECTOR(OUTPUT_WIDTH-1 DOWNTO 0); SIGNAL pzeros : BIT_VECTOR(F_BITS-1 DOWNTO 0); SIGNAL xn : BIT_VECTOR(DLY_WIDTH-1 DOWNTO 0); 第 8 章数字系统设计实例 SIGNAL result_w : BIT_VECTOR(OUTPUT_WIDTH-1 DOWNTO 0); SIGNAL xn_reg : BIT_

57、VECTOR(DLY_WIDTH-1 DOWNTO 0); SIGNAL in_2 : BIT_VECTOR(DLY_WIDTH-1 DOWNTO 0); SIGNAL result_xhdl1 : BIT_VECTOR(OUTPUT_WIDTH-1 DOWNTO 0); 第 8 章数字系统设计实例COMPONENT iir_1 is PORT (reset : IN BIT; clk : IN BIT; clken : IN BIT; x : IN BIT_VECTOR(INPUT_WIDTH-1 DOWNTO 0); result : OUT BIT_VECTOR(OUTPUT_WIDTH

58、-1 DOWNTO 0); feedback_fp : OUT BIT_VECTOR(OUTPUT_WIDTH-2 DOWNTO 0); feedback : OUT BIT_VECTOR(DLY_WIDTH-1 DOWNTO 0); wn: OUT BIT_VECTOR(DLY_WIDTH-1 DOWNTO 0); 第 8 章数字系统设计实例END COMPONENT;BEGIN result = result_xhdl1; pzeros = “0000” ; xn = x(INPUT_WIDTH-1) & x(INPUT_WIDTH-1 DOWNTO 0) & pzeros

59、 (F_BITS-1 DOWNTO 0) ;第 8 章数字系统设计实例 PROCESS BEGIN WAIT UNTIL (clkEVENT AND clk = 1); IF (reset = 1) THEN xn_reg 0); result_xhdl1 0); in_2 0); ELSE IF (clken = 1) THEN第 8 章数字系统设计实例 xn_reg = xn; result_xhdl1 = result_w; in_biquad2 a10, a1 = a11,第 8 章数字系统设计实例 a2 = a12, b1 = b11, b2 = b12) PORT MAP (clk

60、 = clk, clken = clken, reset = reset, x = xn_reg, result = out_1); 第 8 章数字系统设计实例 base_iir_2 : iir_1 GENERIC MAP (a0 = a20, a1 = a21, a2 = a22, b1 = b21, b2 = b22) PORT MAP (clk = clk, clken = clken, reset = reset, x = in_2, result = result_w); END translated;第 8 章数字系统设计实例2. 基于DSP Builder的IIR滤波器设计(1) 在MATLAB/Simulink中进行设计输入,即

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论