基于FPGA的脉冲信号发生器与数字频率计设计 - 图文
更新时间:2024-05-16 08:50:01 阅读量: 综合文库 文档下载
基于FPGA的脉冲信号发生器与数字频率计设计
摘要:简单介绍了基于FPGA的脉冲信号发生器的设计。通过对系统进行结构分析,采用层次化的设计方法,给出了脉冲信号发生器与数字频率计的VHDL代码,利用Quartus II对其进行了仿真,并在硬件电路上得以实现其逻辑功能。
关键词:FPGA;Quartus II;脉冲信号发生器
Design of pulse generator and cymometer based on FPGA
Gaoyuanli、Cenjianfeng、Wanghonggang(Department of electronic and information engineering,NCIAE,langfang,hebei)
Abstract:This paper introduces the design of the pulse generator and cymometer based on FPGA.By analyzing the system structuer,provides the program of signal generator with VHDL using the hierarchical design method and gives the simulation results of Quartus II. Key words: FPGA;Quartus II;pulse generator
引言:
信号发生器是一种常用的信号源,广泛应用于通信、雷达、测控、电子对抗以及现代化仪器仪表等领域,是一种为电子测量工作提供符合严格技术要求的电信号设备。它与示波器、万用表、频谱分析仪等仪器一样是最普通、最基本也是应用最广泛的电子仪器之一,几乎所有电参量的测量都要用到信号发生器。
随着EDA技术的高速发展,电子系统设计技术和工具发生了深刻的变化,大规模可编程逻辑器件FPGA的出现,给设计人员带来了诸多的方便。VHDL(即超高速集成电路硬件描述语言)是随着可编程逻辑器件(PLD)发展起来的一种硬件描述语言,主要用于描述数字系统的结构、行为、功能和接口,是电子设计自动化(EDA)的关键技术之一。它采用一种自上而下的设计方法,即从系统总体要求出发进行设计。本文介绍了以ALTERA公司的FPGA芯片EP2C5Q208C8N作为主芯片控制核心,设计一个简单的脉冲信号发生器,其脉冲频率、相位、占空比等均可调,并将频率值通过7段数码管进行输出。本课题采用VHDL语言设计脉冲信号发生器以及数字频率计。
1、 脉冲信号发生器系统组成
信号发生器系统组成如图1所示,由一分频模块与占空比调节模块共同组成。
设计原理:将输入的时钟作为计数器的计数脉冲,计数结果的第N位是2的N次幂分频。将对应的为数取出就能得到所需的频率。 二进制分频器的VHDL代码: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;
entity clk_div_vhdl is generic(N:integer:=10); port(clk:in std_logic;
architecture a of clk_div_vhdl is signal count:integer range N-1 downto 0; begin
process(clk)begin
if rising_edge(clk)then
if(count=N-1)then count<=0; else count<=count+1; end if;
clk_div:out std_logic); end;
end if;
end process; process(count)begin
图1 脉冲信号发生器系统组成
在时钟的整数分频中,时钟的二进制分频最简单。对于二进制分频,可以用一个二进制加法计数器十分方便的完成
if count<(integer(N/2))then
clk_div<='0'; else clk_div<='1';
end if; end process;
end;
占空比调节模块的设计原理:首先描述一个计数器电路,然后通过计数电路的并行输出信号来控制输出时钟信号的高低电平持续时间,即可完成这种占空比调节功能。 占空比调整模块的VHDL代码: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all;
entity duty_adjuse is
generic(m1:integer:=3;n1:integer:=10); port(clkin:in std_logic; clkout:out std_logic); end;
architecture a of duty_adjuse is signal temp:integer range n1 downto 0; begin
process(clkin,temp)begin if rising_edge(clkin)then if temp=n1-1 then temp<=0; else temp<=temp+1;
end if;
end if;
end process;
clkout<='1'when temp '0'; end; 此脉冲信号发生器系统亦可以由FPGA内置嵌入式锁相环实现,其频率、相位、占空比均可调。与上述VHDL模块相比,具有精度高、可靠性好、操作方便、易于控制等优点,具有一定的实用价值。 图2 采用ALTERA内置嵌入式锁相环设计脉冲信号发生器模块 2、 数字频率计系统组成 数字频率计系统组成如图3所示 图3 数字频率计整体结构 该数字频率计测量频率在1MHz以内,显示4位十进制输出结果。可根据信号频率的大小自动切换量程,量程分3档,最大读数分别为9.999KHz、99.99KHz、999.9KHz。档被测信号频率大于999.9KHz时,数码管提示溢出(显示读数“F”)。 数字频率计总体结构主要包括分频模块、计数模块、锁存器、动态扫描译码显示模块。 数字频率计总体模块的VHDL代码: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity counter is port(signal_in,door_in,reset:in std_logic; alarm:out std_logic; q3,q2,q1,q0:out std_logic_vector(3 downto 0); dangwei:out std_logic_vector(2 downto 0)); end; architecture a of counter is signal qout:std_logic_vector(27 downto 0); begin p1:process(signal_in,door_in) variable temp:std_logic_vector(27 downto 0); begin if reset='1'then temp:=\elsif(rising_edge(signal_in))then if(door_in='1')then if temp(3 downto 0)+\ temp:=temp+\ else temp:=temp+1; end if; if temp(7 downto 4)>\ temp:=temp+\ end if; if temp(11 downto 8)>\ temp:=temp+\ end if; if temp(15 downto 12)>\ temp:=temp+\ end if; if temp(19 downto 16)>\ temp:=temp+\ end if; if temp(23 downto 20)>\ temp:=temp+\ end if; if temp(27 downto 24)>\ temp:=temp+\ end if; else temp:=\ end if; end if; qout<=temp; end process p1; p2:process(qout,door_in) variable a3,a2,a1,a0:std_logic_vector(3 downto 0); variable adangwei:std_logic_vector(2 downto 0); begin if(qout(27 downto 24)/=\alarm<='1'; a3:=\a2:=\a1:=\a0:=\adangwei:=\ elsif(qout(23 downto 20)/=\alarm<='0'; a3:=qout(23 downto 20); a2:=qout(19 downto 16); a1:=qout(15 downto 12); a0:=qout(11 downto 8); adangwei:=\ elsif(qout(19 downto 16)/=\alarm<='0'; a3:=qout(19 downto 16); a2:=qout(15 downto 12); a1:=qout(11 downto 8); a0:=qout(7 downto 4); adangwei:=\else alarm<='0'; a3:=qout(15 downto 12); a2:=qout(11 downto 8); a1:=qout(7 downto 4); a0:=qout(3 downto 0); adangwei:=\end if; if (falling_edge(door_in))then q3<=a3; q2<=a2; q1<=a1; q0<=a0; dangwei<=adangwei; end if; end process p2; end; BCD译码模块的VHDL代码: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity decoder_bcd_led_seg is port(bcd_in:in std_logic_vector(3 downto 0); led_seg_out:out std_logic_vector(6 downto 0)); end; architecture a of decoder_bcd_led_seg is begin process(bcd_in) begin case bcd_in is--最高位接数码管g,最低位接数码管a。【低电平点亮】 when\输入bcd码0000,将其翻译成0向数码管输出。 when\输入bcd码0001,将其翻译成1向数码管输出。 when\输入bcd码0010,将其翻译成2向数码管输出。 when\输入bcd码0011,将其翻译成3向数码管输出。 when\输入bcd码0100,将其翻译成4向数码管输出。 when\输入bcd码0101,将其翻译成5向数码管输出。 when\输入bcd码0110,将其翻译成6向数码管输出。 when\输入bcd码0111,将其翻译成7向数码管输出。 when\输入bcd码1000,将其翻译成8向数码管输出。 when others=>led_seg_out<=\输入bcd码其他,将其翻译成9向数码管输出。 end case; end process; end; 动态扫描模块的VHDL代码: library ieee; use ieee.std_logic_1164.all; entity decoder3_8_led_driver_dig is port(counter_in:in std_logic_vector(2 downto 0); led_dig_out:out std_logic_vector(7 downto 0)); end; architecture a of decoder3_8_led_driver_dig is begin process(counter_in) begin case counter_in is when\初始状态从千万位开始扫描 when\数码管段码dig、位码seg都是低电平点亮 when\ when\ when\ when\ when\ when\一直扫描到个位,完成一次扫描 end case; end process; end; 小数点译码控制显示模块VHDL代码: library ieee; use ieee.std_logic_1164.all; entity decoder_radix_point_control is port(M8_counter_in:in std_logic_vector(2 downto 0); radix_point_control_in:in std_logic_vector(2 downto 0); radix_point_out:out std_logic); end; architecture a of decoder_radix_point_control is begin process(radix_point_control_in,M8_counter_in) begin case (M8_counter_in)&(radix_point_control_in) is when\【M8计数器输出 000时,扫描千万位的数码管】控制千万位小数点的亮或灭,0为亮,1为灭 when\【M8计数器输出001时,扫描百万位的数码管】控制百万位小数点的亮或灭,0为亮,1为灭 when\ when\ when\ when\ when\ when\控制个位小数点的亮或灭,0为亮,1为灭 when others=>radix_point_out<='1'; end case; end process; end; library ieee; use ieee.std_logic_1164.all; entity decoder3_8_led_driver_dig is port(counter_in:in std_logic_vector(2 downto 0); led_dig_out:out std_logic_vector(7 downto 0)); end; 3.硬件仿真结果 经过下载运行,该系统模块能够完成事先设计的逻辑功能。图示为产生两路1KHz占空比分别是30%和70%的脉冲信号。频率值在数码管上显示为1.000KHz。 4.参考文献 [1]《EDA技术实用教程——VHDL版》潘松、黄继业,科学出版社,2010. [2]《FPGA应用开发与典型实例》姚远、李辰,人民邮电出版社,2010. [3]《基于ALTERA FPGA/CPLD的电子系统设计及工程实践》李学海,人民邮电出版社,2009.
正在阅读:
基于FPGA的脉冲信号发生器与数字频率计设计 - 图文05-16
大满镇信访工作责任追究制度(2011)02-01
操作题综合练习11-26
煤矿安全员培训考试试题07-11
毕业实习制度01-29
DLT5337-2006水电水利边坡工程地质勘察技术规程05-13
人教部编版七年级历史上册第6课 动荡的春秋时期导学案(无答案)-最新教学文档12-29
《为了自由呼吸的教育》读后感11-29
《甜姐儿》影评10篇12-12
电气操作岗位练兵卡题目05-23
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 频率计
- 信号发生器
- 脉冲
- 基于
- 图文
- 数字
- 设计
- FPGA
- 从“愚昧”到“科学”-科学技术简史下篇答案
- 冬季施工安全注意事项及措施
- 22KW高性能三相电压型PWM整流器的研究
- 新目标八年级英语(下)Units - 1-10 - 复习资
- 白水煤矿生产成本管理考核办法(新) (1)
- 成都教师公招教育基础知识
- 《土质学与土力学》习题库及答案
- 课程设计-山东科技大学-110KV变电站设计
- 新版高三一轮地理复习练习:第8讲-常见的天气系统(Word版,含答
- 中国铁合金制品行业市场前景分析预测年度报告(目录) - 图文
- 2019-2020年高三下学期第1次测试理综试题 含答案
- 建筑结构优化设计在房地产开发中的重要作用
- 2017年冀教版三年级数学上册第三单元测试卷及答案
- 清华材料科学基础习题及答案
- 2018教师资格证小学教育教学知识考点:基础教育课程改革(五)
- 专利考试经验谈
- 党的基本理论和基本知识
- 《中心对称》一课两讲的评课 - 增城教研网-ZCJYSCOM
- 习惯成就人生
- 突发事件处理机制