专用集成实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
等精度频率计
一、实验原理
基于传统测频原理的频率计的测量精度将随被测信号频率的下降而降低,即测量精度随被测信号的频率的变化而变化,在实用中有较大的局限性,而等精度频率计不但具有较高的测量精度,且在整个频率区域能保持恒定的测试精度。设计项目可达到的指标如下:
1、频率测试功能:测频范围0.1Hz~100MHz。测频精度:测频全域相对误差恒为百分之一。
2、脉宽测试功能:测试范围0.1us~1s,测试精度:0.01us。
3、占空比测试功能:测试(显示)精度1%~99%。
4、相位测试功能:测试范围0~360,测试精度0.2。
二、实验程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity etester is
port(bclk:in std_logic;
tclk:in std_logic;
clr:in std_logic;
cl:in std_logic;
spul:in std_logic;
start:out std_logic;
eend:out std_logic;
sel:in std_logic_vector(2 downto 0);
data:out std_logic_vector(7 downto 0);
bzq:out std_logic_vector(31 downto 0);
tsq:out std_logic_vector(31 downto 0));
end etester;
architecture behav of etester is
signal bzq1:std_logic_vector(31 downto 0);
signal tsq1:std_logic_vector(31 downto 0);
signal ena:std_logic;
signal ma,clk1,clk2,clk3:std_logic;
signal q1,q2,q3,bena,pul:std_logic;
signal ss:std_logic_vector(1 downto 0);
begin
start<=ena;
data<=bzq1(7 downto 0)when sel="000"else
bzq1(15 downto 8)when sel="001"else
bzq1(23 downto 16)when sel="010"else
bzq1(31 downto 24)when sel="011"else
tsq1(7 downto 0)when sel="100"else
tsq1(15 downto 8)when sel="101"else
tsq1(23 downto 16)when sel="110"else
tsq1(31 downto 24)when sel="111"else
tsq1(31 downto 24);
bzh:process(bclk,clr)
begin
if clr='1'then bzq1<=(others=>'0');
elsif bclk'event and bclk='1'then
if bena='1'then bzq1<=bzq1+1;
end if;
end if;
end process;
tf:process(tclk,clr,ena)
begin
if clr='1'then tsq1<=(others=>'0');
elsif tclk'event and tclk='1'then
if ena='1'then tsq1<=tsq1+1;
end if;
end if;
end process;
process(tclk,clr)
begin
if clr='1'then ena<='0';
elsif tclk'event and tclk='1'then ena<=cl;
end if;
end process;
ma<=(tclk and cl) or not(tclk or cl);
clk1<=not ma;
clk2<=ma and q1;
clk3<=not clk2;
ss<=q2 & q3;
dd1:process(clk1,clr)
begin
if clr ='1' then q1 <='0';
elsif clk1'event and clk1='1' then q1 <='1';
end if;
end process;
dd2:process(clk2,clr)
begin
if clr ='1' then q2 <='0';
elsif clk2'event and clk2='1' then q2 <='1';
end if;
end process;
dd3:process(clk3,clr)
begin
if clr ='1' then q3<='0';
elsif clk3'event and clk3='1' then q3 <='1';
end if;
end process;
pul<='1' when ss="10" else
'0';
eend<='1' when ss="11" else
'0';
bena<=ena when spul='1' else
pul when spul='0' else
pul;
tsq<=tsq1;
bzq<=bzq1;
end behav;
三、实验RTL原理图
四、实验仿真波形