vhdl数字频率计
- 格式:doc
- 大小:1.43 MB
- 文档页数:9
VHDL数字系统设计与仿真
作业三:数字频率计
学院:
学号:
姓名:
一.实验要求截图
二.设计思路截图
三.各模块设计思路,源程序及仿真
1.测量/校验选择模块
源程序:meas_test.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY meas_test IS
PORT(
func_sel,meas,test:IN STD_LOGIC;
CP1:OUT STD_LOGIC
);
END meas_test; ARCHITECTURE lion OF meas_test IS
BEGIN
PROCESS(func_sel,meas,test)
BEGIN
IF func_sel='1'
THEN CP1<=test;
ELSE
CP1<=meas;
END IF;
END PROCESS;
END lion;
仿真截图:
2.测频控制信号发生器模块
源程序:clk2.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY clk2 IS
PORT(
clk: IN STD_LOGIC;
clk2: OUT STD_LOGIC
);
END clk2;
ARCHITECTURE lion OF clk2 IS
SIGNAL clk2_temp:STD_LOGIC;
BEGIN
PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk='1')
THEN clk2_temp <= NOT clk2_temp;
END IF;
END PROCESS;
clk2<=clk2_temp; END lion;
仿真截图:
3.四级十进制计数模块
源程序:counter.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY counter IS
PORT(
RD:IN STD_LOGIC;
CP:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
C:OUT STD_LOGIC
);
END counter;
ARCHITECTURE lion OF counter IS
SIGNAL count:STD_LOGIC_VECTOR(15 DOWNTO 0);
BEGIN
PROCESS(RD,CP)
BEGIN
IF(RD='0')THEN
count<="0000000000000000";C<='0';
ELSE IF(CP'EVENT AND CP='1')
THEN IF(count="1001100110011001")
THEN count<="0000000000000000";C<='1';
ELSE IF(count(11 DOWNTO 0)="100110011001")
THEN count(15 DOWNTO 12)<=count(15 DOWNTO 12)+1;
count(11 DOWNTO 0)<="000000000000";
ELSE IF(count(7 DOWNTO 0)="10011001")
THEN count(15 DOWNTO 8)<=count(15 DOWNTO 8)+1;
count(7 DOWNTO 0)<="00000000"; C<='0';
ELSE IF(count(3 DOWNTO 0)="1001")
THEN count(15 DOWNTO 4)<=count(15 DOWNTO 4)+1; count(3 DOWNTO 0)<="0000";C<='0';
ELSE count<=count+1;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
END PROCESS;
Q<=count;
END lion;
4.送存选择/报警模块
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY PASS_ALERT IS
PORT(
K: IN STD_LOGIC;
CLK: IN STD_LOGIC;
Q: IN STD_LOGIC_VECTOR(15 DOWNTO 0);
C: IN STD_LOGIC;
D: OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
dot: out STD_LOGIC_VECTOR(2 DOWNTO 0);
Y: out STD_LOGIC;
alert:OUT STD_LOGIC
);
END PASS_ALERT;
ARCHITECTURE lion OF PASS_ALERT IS
BEGIN
PROCESS(K,Q,C)
BEGIN IF(K='0')
THEN Y<='0';
IF(Q(15 DOWNTO 12)="0000" AND C='0')
THEN D<=Q(11 DOWNTO 0);dot<="001";alert<='0';
ELSE D<=Q(11 DOWNTO 0);dot<="001";alert<='1';
END IF;
ELSE IF(C='0')
THEN Y<='1';
D<=Q(15 DOWNTO 4);alert<='0';dot<="100";
ELSE D<=Q(15 DOWNTO 4);alert<='1';dot<="100";
END IF;
END IF;
END PROCESS;
END lion;
仿真截图:
5.锁存模块
源程序:lock_store.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY LOCK_STORE IS
PORT(
Q:IN STD_LOGIC_VECTOR(11 DOWNTO 0);
--Q2:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
--Q1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LD:IN STD_LOGIC;
D:OUT STD_LOGIC_VECTOR(11 DOWNTO 0)
--D2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
--D1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
--dot:OUT STD_LOGIC;
);
END LOCK_STORE; ARCHITECTURE lion OF LOCK_STORE IS
BEGIN
PROCESS(LD)
BEGIN
IF(LD'EVENT AND LD='1')
THEN D<=Q;
END IF;
END PROCESS;
END lion;
仿真截图:
6.扫描显示电路模块
扫描源程序SCAN.VHD
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY SCAN IS
PORT(CLK:IN STD_LOGIC;
D:IN STD_LOGIC_VECTOR(11 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
SEL:OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END SCAN;
ARCHITECTURE lion OF SCAN IS
BEGIN
PROCESS(D)
VARIABLE init:BOOLEAN:=TRUE;
VARIABLE count:INTEGER:=0;
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
IF(D="000000000000")THEN count:=0;SEL<="00";Q<=D(3 DOWNTO 0);
ELSE IF(init) THEN count:=0;SEL<="00";Q<=D(3 DOWNTO
0);init:=FALSE;