已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于FPGA的相位差测量模块的设计相位差测量设计思路相位差测量设计要求 基于FPGA设计一个测量两路同频率信号相位差的模块,具体要求如下: 测量信号频率范围: 20Hz20kHz ,精度:2度,测量波形: 方波。自行设计相位差可控双路输出脉冲源作为被测对象。发挥部分:(1)相位差和频率交替显示或同时显示(2)提高测量精度(3)拓宽频率范围到20Hz200kHz(4)设计出一套相位计前置整形电路方案(采用模拟电路或者模数混合,仅设计和仿真,不制作),要求能自适应峰峰值在0.2V至5伏的非方波输入信号,尽量减少两路输入信号幅度不一致引入的误差,带宽不小于20Hz20kHz,输出信号能接入本课题设计的相位差测量模块。相位差测量设计方案根据题目要求,我们组把这个模块的设计分为四个子模块,分别为:信号源的发生、频率计的设计、相位差的测量和四位LED相位差显示。信号源的发生产生两路同频、相位差可控的信号;频率计的设计是借用信号源产生的信号,然后根据内部晶振产生闸门宽度为1秒的闸门信号,在高电平时开始计数,记得的周期个数,即信号源产生信号的频率;相位差的测量是先通过测量两路信号的上升沿之间内部晶振的周期数,然后由此周期数换算出相位差,再通过VHDL语言内部函数转换成十进制数输出到显示模块。RTL图如下:模块程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY kzys IS PORT ( CLK : IN STD_LOGIC; KG : IN STD_LOGIC; ZS : IN NATURAL; KG_OUT: OUT STD_LOGIC );END entity kzys;ARCHITECTURE one OF kzys ISSIGNAL CNT: NATURAL;BEGIN PROCESS(KG,CLK) BEGIN IF KG=0 THEN CNT=0; KG_OUT=0; ELSIF CLKEVENT AND CLK=1 THEN IF CNTZS THEN CNT=CNT+1; ELSE KG_OUTf_out1=499999; y_out2f_out1=499999; y_out2f_out1=499999; y_out2f_out1=6666; y_out2f_out1=6666; y_out2f_out1=6666; y_out2f_out1=499; y_out2f_out1=499; y_out2f_out1=499; y_out2f_out1=82; y_out2f_out1=82; y_out2f_out1=82; y_out2f_out1=49; y_out2f_out1=49; y_out2f_out1=49; y_out2f_out1=0; y_out2f_out1=0; y_out2=0;end case;end process;end;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY plfsq IS PORT ( clk: IN STD_LOGIC; ZS: IN NATURAL; KG: IN STD_LOGIC; F_OUT : OUT STD_LOGIC );END ;ARCHITECTURE one OF plfsq ISSIGNAL FULL: STD_LOGIC ;BEGIN PROCESS(clk)VARIABLE CNT8 : NATURAL;BEGIN IF KG=0 THEN FULL 0 THEN CNT8:=CNT8-1; ELSE CNT8 :=ZS; FULL = NOT FULL; END IF; END IF; END PROCESS ;PROCESS(clk,FULL)BEGIN IF KG=1 THEN IF clk EVENT AND clk = 1 THEN IF FULL = 1 THEN F_OUT =1; ELSE F_OUT =0; END IF; END IF;END IF;END PROCESS;END one; LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY plfsqy IS PORT ( clk: IN STD_LOGIC; ZS: IN NATURAL; KG: IN STD_LOGIC; F_OUTY : OUT STD_LOGIC );END ;ARCHITECTURE one OF plfsqy ISSIGNAL FULL: STD_LOGIC ;BEGIN PROCESS(clk)VARIABLE CNT8 : NATURAL;BEGIN IF KG=0 THEN FULL 0 THEN CNT8:=CNT8-1; ELSE CNT8 :=ZS; FULL = NOT FULL; END IF; END IF; END PROCESS ;PROCESS(clk,FULL)BEGIN IF KG=1 THEN IF clk EVENT AND clk = 1 THEN IF FULL = 1 THEN F_OUTY =1; ELSE F_OUTY sw_1,f_out1=a,y_out2=b);u2:kzys port map(zs=b,clk=clk,kg=kg,kg_out=c);u3: plfsqy port map(clk=clk,ZS=a, KG=C,F_OUTY=F_OUTY);u4: plfsq port map(clk=clk,ZS=a,KG=KG,F_OUT=F_OUT);END ARCHITECTURE qq;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 is port(clk,en,clr:in std_logic; count10:buffer integer range 0 to 400000000);end cnt10;architecture art of cnt10 is begin process(clk,clr,en) begin if clr=1then count10=0; elsif rising_edge(clk)then if(en=1)then count10=count10+1; end if; end if; end process; end art;频率计的设计:use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity freq_measure is Port( clk0 : in std_logic; wave1 : in std_logic; q : out integer range 0 to 400000000);end freq_measure;architecture art of freq_measure iscomponent cnt10 port(clk,en,clr:in std_logic; count10:buffer integer range 0 to 400000000);end component;signal en1,clr1 : std_logic;signal date:integer range 0 to 400000000;begin process(clk0) variable cnt:integer range 0 to 6; begin if rising_edge(clk0) then if cnt = 0 then clr1 5 then cnt := 0;q=date; else cnt := cnt+1;clr1 = 0;en1 wave1,en=en1,clr=clr1,count10=date);end art;library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity measure_n isPort(clk,clk0,clk1:in std_logic; n_out:out std_logic_vector(15 downto 0);end measure_n;architecture art of measure_n issignal count0,count01,count02,count1,count2 : std_logic_vector(15 downto 0);signal x,y,a,clk10,clk11,clk20,clk21: std_logic;beginprocess(clk,clk0,clk1,x,y,count1,count2)beginif clkevent and clk=1then case a iswhen 0=clk10=clk0;clk11=clk1; if clk10=0 and clk11=0then count10); end if; if clk10=0then x=1; end if; if x=1 then if clk10=1 then if clk11=0 then y=1;end if;if y=1 then if clk11=1 then count01=count1; count1=count1;elsecount1=count1+1; end if; end if; end if;end if;if count01=0 thena=1;else a clk20=clk1; clk21=clk0; if clk20=0 and clk21=0then count20); end if; if clk20=0then x=1; end if; if x=1 then if clk20=1 then if clk21=0 then y=1; end if; if y=1 then if clk21=1 then count02=count2; count2=count2; else count2=count2+1; end if; end if; end if; end if; if count02=0 then a=0; else aa=1; end case; count0=count01 or count02;end if;n_out=count0;end process;end art;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity consider1 isport ( clk :in std_logic; n1:in std_logic_vector(15 downto 0); freq:in integer range 0 to 400000000; cout:out std_logic_vector(15 downto 0) ); end consider1; architecture arch of consider1 is signal c0,c1,e,e0,d0,d1:integer range 0 to 400000000; signal count:std_logic_vector(15 downto 0); signal m:std_logic_vector(15 downto 0); begin process(n1,clk) begin if rising_edge(clk) then m=n1; c0=conv_integer(m); d0=c0*151; d1=d0/1024; end if; end process; process(clk,freq) begin if rising_edge(clk) then c1=freq; e=c1*d1; e0=e/2048; count=conv_std_logic_vector(e0,16); end if; end process; cout=count; end arch;library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity count isport( clk:in std_logic; c_in:in std_logic_vector(15 downto 0);qa1,qb1,qc1,qd1:out INTEGER RANGE 0 TO 9);End count;architecture art of count isSignal a:integer range 0 to 400000000; signal m: std_logic_vector(15 downto 0);BeginProcess(clk,c_in)variable ai,bi,ci,di:integer range 0 to 9;beginif clkevent and clk=1 then m=c_in;a=conv_integer(m);di:=(a-ai-10*bi-100*ci) /1000;ci:= (a-ai-10*bi)/100;bi:= (a-ai) rem 100)/10;ai:=a rem 10;end if;qd1=di;qc1=ci;qb1=bi;qa1clkin,clk0=clk0in,clk1=clk1in,n_out=d);u2: freq_measure port map(clk0=clkin,wave1=clk0in,q=e);u3: consider1 port map(clk=clkin,n1=d,freq=8192,cout=f);u4: count port map(clk=clkin,c_in=f,qa1=qa1out,qb1=qb1out,qc1=qc1out,qd1=qd1out);end art;四位LED相位差显示:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY BCD7 IS PORT(BCD:IN INTEGER RANGE 0 TO 9; LED:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END;ARCHITECTURE ART OF BCD7 IS BEGIN LED= 0111111WHEN BCD= 0 ELSE 0000110WHEN BCD= 1 ELSE 1011011WHEN BCD= 2 ELSE 1001111WHEN BCD= 3 ELSE 1100110WHEN BCD=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电视制作人岗位招聘面试参考题库及参考答案
- 2025年仿真工程师岗位招聘面试参考题库及参考答案
- 2025年城市规划师人员岗位招聘面试参考题库及参考答案
- 数字化对渗透率的影响-洞察与解读
- 2025年行为心理学家岗位招聘面试参考题库及参考答案
- 2025电气工程师岗位招聘面试参考题库及参考答案
- 2025年认证顾问人员岗位招聘面试参考题库及参考答案
- 医学水平测试题目及答案
- 2025年投资分析师岗位招聘面试参考题库及参考答案
- 2025年住宅建筑设计师岗位招聘面试参考试题及参考答案
- DL∕T 1917-2018 电力用户业扩报装技术规范
- 煤矿综采工区管理制度汇编样本
- 九宫数独200题(附答案全)
- 2024版年度树立正确就业观课件
- 食材配送投标方案技术标
- 中医护理适宜技术工作计划
- 虚拟电厂负荷调控系统建设方案
- 临床医学导论期末测试习题与答案
- 商业伦理与企业责任课件
- 企业该如何正确如何选人
- 机器人输尿管重建手术治疗成人输尿管狭窄的现状
评论
0/150
提交评论