logo资料库

智能函数发生器的VHDL 设计与仿真.doc

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
EDA 设计报告 智能函数发生器的设计 姓名:陈晓 班级:电子信息工程二班 学号:200607240205
智能函数发生器的 VHDL 设计与仿真 摘要: 以函数信号发生器的功能为设计对象, 运用 EDA 技术的设计方法, 进行 各种波形的输入设计、设计处理, 项目校验和器件编程。在 VHDL 语言的编写中 按照行为描述, 寄存器传输描述, 实现了几种波形的软件设计和具体逻辑元件 结构的硬件映射。结合 FPGA/ CPLD 的开发集成环境, 产生了函数信号发生器的 各种信号, 同时完成了行为仿真、时序和功能仿真, 给出了在 GW48 - CK 型实 验开发系统上实现的正弦波形仿真结果。实验表明采用该方法能生成锯齿波、三 角波、阶梯波、正弦波等波形, 实现了信号发生器的功能, 说明该设计是行之有 效的。信号发生器功能设计的方法可以推广到其它电子系统的设计中。 关键词:电子设计自动化; VHSIC 硬件描述语言; 智能函数发生器 1 智能函数发生器设计 传统的设计方案智能函数信号发生器一般是指能自动产生方波、三角波、正弦波 等函数信号波形的电路和仪器。根据用途不同 , 函数发生器可以产生多种信号 波形。使用的器件可以(是分立元件 , 也可以采用集成电路 如单片函数发)生器 模块 8038 , 如由集成运算放大器与晶体管差分放大器就可以共同组成方波 - 三角波 - 正弦波函[3]数信号发生器 。这种有模拟电路元器件的构成方式需用 器件多 , 仪器体积较大 , 损耗也大。 2 EDA 技术的设计方案 EDA 技术设计信号发生器的流程函数信号发生器的设计流程 , 如图 1 所示。 信号发生器功能的设计是基于美国 Altera 公司提供的 FPGA/ CPLD 的开发集 成环境 MAX +PLUS Ⅱ软件经过设计输入编辑、编译网表提取、数据库建立、逻 辑综合、逻辑分割、适配、延时网表提取、编程文件装配及编程下载的流程. 方波、三角波、正弦波、阶梯波 , 函数信号发生器的总体框图。如图 所示。 Q[7..0] OUTPUT Q[7..0] BXXZ SEL[1..0] D0[7..0] D1[7..0] D2[7..0] inst sel[1..0] INPUT VCC SJB clk reset INPUT VCC INPUT VCC Q[7..0] CLK RESET inst3 SIN Q[7..0] CLK RESET inst2 JXB Q[7..0] CLK RESET inst1
设计处理: 设计处理的任务是对项目进行编译 , 就是将信号发生器的程序改为 可以用于生成的“语言”, 编译器通过读入设计文件并产生用于编程、仿真和分 析的输出文件。 函数波形和智能选择模块的设计 在利用 HDL 的硬件设计方法中 , 经过了 3 个层次对信号发生器的硬件设计。 第一层行为描述 , 就是对整个系统的数学模型的描述 , 把系统分成几个具体 的模块 , 采用 VHDL 语言生成所需的基本模块。正弦波形的设计: 采用描点法 来描述正弦波 ,仿真波形中可以看到输入输出引脚设置 , 其中 clk 输入时钟 端口 , reset 为输入复位端口, d 为整数输出端口 , 一个周期选取 64 个点 , 计算出 64 个常数后 , 查表输出 。复位信号的级别高于其它信号 , 而且低电 平是有效电平 , 所以整个程序的工作状态应处于高电平状态当时钟检测到上升 沿时 ,计数器计数 , 描点工作开始。没达到最大值之前 ,一直自加 , 否则就自 动转为“0”。那么首先要确定这 64 个点。然后在程序里用 case 语句来选择。 设计中用 VHDL 语言勾画出正弦波的输入输出引脚和内部计数过程的计数状态 变化时序和关系。 三角波的设计: 采用 0~255~0 循环加/减法计数器实现。 方波的设计: 采用高/低电平实现 , 用 cnt 来控制方波的周期 , 用 a 的值来 控制输出到底是高电平还是低电平。注意 cnt 的取值 , 不能太大 , 否则方波 的周期会很大 , 不容易看出是方波了。 波形选择调用模块的设计: 波形选择模块的功能是把前面的几个波形模块联系 起来 , 可以根据外部的开关状态选择输出的波形。在芯片上就是通过几个按键 的选择来选择模块 , sel 就是这个按键 ,sel 的不同值就会选择不同的波形。 如: 当 sel 值为“0”时 , 波形选择就选递增模块与之对应。“1”与递减模块 对应 , 然后“2”、“3”分别与三角、正弦、方波模块对应 , 其他值就设为无 效值。在仿真波形中可以看到 sel 为波形选择端口 , 该模块可以根据外部的开 关状态选择输出的波形。Sel = ‘2’是正弦波形。
波形模块如下: 三角波形模块 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SJB IS PORT(CLK,RESET: IN STD_LOGIC; Q: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END SJB; ARCHITECTURE BEHAVE OF SJB IS BEGIN PROCESS(CLK,RESET) VARIABLE TMP: STD_LOGIC_VECTOR(7 DOWNTO 0); VARIABLE A:STD_LOGIC; BEGIN IF RESET='0' THEN TMP:="00000000"; ELSIF (CLK'EVENT AND CLK='1') THEN IF A='0' THEN IF TMP="111111110" THEN TMP:="11111111"; A:='1'; ELSE TMP:=TMP+1; END IF; ELSE IF TMP="00000001" THEN TMP:="00000000"; A:='0'; ELSE TMP:=TMP-1; END IF; END IF; END IF; Q<=TMP; END PROCESS; END BEHAVE; sin 波形模块 sin 波形 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SIN IS PORT (CLK,RESET: IN STD_LOGIC; Q:OUT INTEGER RANGE 0 TO 255); END SIN; ARCHITECTURE BEHAVE OF SIN IS BEGIN PROCESS(CLK,RESET) VARIABLE TMP:INTEGER RANGE 0 TO 63; BEGIN IF RESET='0' THEN Q<=0; ELSIF (CLK'EVENT AND CLK='1') THEN IF TMP=63 THEN TMP:=0; ELSE TMP:=TMP+1 ; END IF; CASE TMP IS WHEN 00=>Q<=255;WHEN 01=>Q<=254;WHEN 02=>Q<=252; WHEN 03=>Q<=249;WHEN 04=>Q<=245;WHEN 05=>Q<=239; WHEN 06=>Q<=233;WHEN 07=>Q<=225;WHEN 08=>Q<=217; WHEN 09=>Q<=207; WHEN 10=>Q<=197;WHEN 11=>Q<=186; WHEN 12=>Q<=174; WHEN 13=>Q<=162;WHEN 14=>Q<=150; WHEN 15=>Q<=137; WHEN 16=>Q<=124;WHEN 17=>Q<=112; WHEN 18=>Q<=99; WHEN 19=>Q<=87;WHEN 20=>Q<=75; WHEN 21=>Q<=64; WHEN 22=>Q<=53;WHEN 23=>Q<=43; WHEN 24=>Q<=34; WHEN 25=>Q<=26;WHEN 26=>Q<=19; WHEN 27=>Q<=13; WHEN 28=>Q<=8;WHEN 29=>Q<=4;
WHEN 30=>Q<=1; WHEN 31=>Q<=0;WHEN 32=>Q<=0; WHEN 33=>Q<=1; WHEN 34=>Q<=4;WHEN 35=>Q<=8; WHEN 36=>Q<=13; WHEN 37=>Q<=19;WHEN 38=>Q<=26; WHEN 39=>Q<=34; WHEN 40=>Q<=43;WHEN 41=>Q<=53; WHEN 42=>Q<=64; WHEN 43=>Q<=75;WHEN 44=>Q<=87; WHEN 45=>Q<=99; WHEN 46=>Q<=112;WHEN 47=>Q<=124; WHEN 48=>Q<=137; WHEN 49=>Q<=150;WHEN 50=>Q<=162; WHEN 51=>Q<=174; WHEN 52=>Q<=168;WHEN 53=>Q<=197; WHEN 54=>Q<=207; WHEN 55=>Q<=217;WHEN 56=>Q<=225; WHEN 57=>Q<=233; WHEN 58=>Q<=239;WHEN 59=>Q<=245; WHEN 60=>Q<=249; WHEN 61=>Q<=252;WHEN 62=>Q<=254; WHEN 63=>Q<=255; WHEN OTHERS=>NULL; END CASE; END IF; END PROCESS; END BEHAVE; 方波波形模块 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JXB IS PORT (CLK,RESET:IN STD_LOGIC; Q:OUT INTEGER RANGE 0 TO 255); END JXB; ARCHITECTURE BEHAVE OF JXB IS SIGNAL A:BIT; BEGIN PROCESS(CLK,RESET) VARIABLE CNT:INTEGER; BEGIN IF RESET='0' THEN A<='0'; ELSIF (CLK'EVENT AND CLK='1') THEN IF CNT<63 THEN CNT:=CNT+1; ELSE CNT:=0; A<=NOT A; END IF; END IF; END PROCESS; PROCESS(CLK,A) BEGIN IF (CLK'EVENT AND CLK='1') THEN IF A='1' THEN Q<=255; ELSE Q<=0; END IF ; END IF ; END PROCESS; END BEHAVE; 波形选择模块 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY BXXZ IS PORT(SEL:IN STD_LOGIC_VECTOR(1 DOWNTO 0); D0,D1,D2:IN STD_LOGIC_VECTOR (7 DOWNTO 0); Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END BXXZ; ARCHITECTURE BEHAVE OF BXXZ IS BEGIN PROCESS(SEL) BEGIN CASE SEL IS WHEN "00"=>Q<=D0; WHEN "01"=>Q<=D1; WHEN "10"=>Q<=D2; WHEN OTHERS=>NULL; END CASE; END PROCESS; END BEHAVE;
信号发生器的功能与时序仿真测试 上述各功能模块设计完成后 , 根据总体结构的逻辑顺序将模块连接好 , 启动 MAX + PLUS Ⅱ里编译功能 , 调试各分电路的. vhd 文件 , 然后调用波形仿真 工具 , 引入管脚信号 , 设定输入信号 , 然后开始仿真。以正弦波形模块为 例 , clr 是复位信号 , clk 是 时钟信号 , 具体 clk , sel 的赋值可观察到图形 3 结束语 运用 VHDL 语言进行智能函数发生器功能的设计具有以下优势: 1 信号发生器的 功能测试与仿真实验结果表明 , 时序和波形正确 , 达到了设计的功能要求 , 说明该设计是行之有效的。2 为了智能化的选择不同信号的波形 , 系统设计了 波形选择调用模块 , 来完成不同函数信号的输出。
分享到:
收藏