eda大作业.

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

班级 021039

学号 ********

EDA报告

题目 VHDL设计初步

学院电子工程学院

专业信息对抗技术

学生姓名

导师姓名

目录

第一章实验部分(秒表) (2)

1、程序设计: (2)

2、程序代码 (2)

3、程序调试 (4)

第二章习题部分 (8)

习题一 (8)

习题二 (8)

习题三 (10)

习题四 (11)

习题五 (12)

习题六 (14)

习题七 (17)

第一章实验部分(秒表)

1、程序设计:

秒表显示共有6位,两位显示分,两位显示秒,十分秒和百分秒各一位。设计时使用一个计数器,随着时钟上升沿的到来循环计数,每计数一次,百分秒位加一,通过百分秒位满十进位来控制十分位的计数,十分位满十进位,依次类推,实现秒表计数。

为实现秒位的计时精确,百秒位必须以0.01秒的时间间隔计数,即时钟的频率是100Hz。为此,本设计采用3MHz的时钟频率通过分频得到100Hz的时钟频率,再送给控制时钟以得到比较精确的CLK信号。其中,时钟信号CLK为3MHz 的时钟频率,分频后得到的时钟为CLK2,输出引脚CLK2和输入引脚CLK2在外部相连,实现将分频后的时钟送入。

2、程序代码

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY MIAOBIAO IS

PORT (CLK,CLK1,STA,POS,STO,RST: IN STD_LOGIC;

CQ1,CQ2,CQ3,CQ4,CQ5,CQ6 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

CLK2:OUT STD_LOGIC

);

END MIAOBIAO;

ARCHITECTURE BEHAV OF MIAOBIAO IS

BEGIN

PROCESS(CLK) --由频率为3MHz的时钟产生频率为100Hz的时钟VARIABLE NUM:INTEGER RANGE 0 TO 15000;--定义计数器

VARIABLE Q:STD_LOGIC;

BEGIN

IF CLK'EVENT AND CLK='1' THEN

IF NUM=15000 THEN NUM:=0;Q:=NOT Q;--计数器每计数15000,时钟改变电平--

ELSE NUM:=NUM+1;

END IF;

END IF;

CLK2<=Q;

END PROCESS;

PROCESS(CLK1,STA,POS,STO,RST)

VARIABLE CQI1:STD_LOGIC_VECTOR(3 DOWNTO 0);

VARIABLE CQI2:STD_LOGIC_VECTOR(3 DOWNTO 0);

VARIABLE CQI3:STD_LOGIC_VECTOR(3 DOWNTO 0);

VARIABLE CQI4:STD_LOGIC_VECTOR(3 DOWNTO 0);

VARIABLE CQI5:STD_LOGIC_VECTOR(3 DOWNTO 0);

VARIABLE CQI6:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

IF STO='1' THEN CQI1:=(OTHERS=>'0');CQI2:=(OTHERS=>'0');CQI3:=(OTHERS=>'0');

CQI4:=(OTHERS=>'0');CQI5:=(OTHERS=>'0');CQI6:=(OTHERS=>'0');

ELSIF CLK1'EVENT AND CLK1='1' THEN

IF STA='1' THEN

IF RST='0' THEN

IF POS='0' THEN

IF CQI1="1001" THEN CQI1:=(OTHERS => '0');--百分秒位满十进--位

IF CQI2="1001" THEN CQI2:=(OTHERS => '0'); --十分秒位满十进--位

IF CQI3="1001" THEN CQI3:=(OTHERS => '0'); --秒位满十进位

IF CQI4="0101" THEN CQI4:=(OTHERS => '0'); --十秒位满六进位

IF CQI5="1001" THEN CQI5:=(OTHERS => '0'); --分位满十进位

IF CQI6="0101" THEN CQI6:=(OTHERS => '0'); --十分位满六进位

ELSE CQI6:=CQI6+1;

END IF;

ELSE CQI5:=CQI5+1;

END IF;

ELSE CQI4:=CQI4+1;

END IF;

ELSE CQI3:=CQI3+1;

END IF;

ELSE CQI2:=CQI2+1;

END IF;

ELSE CQI1:=CQI1+1;

END IF;

END IF;

END IF;

END IF;

IF RST='1' THEN

CQI1:=(OTHERS => '0');CQI2:=(OTHERS => '0');

CQI3:=(OTHERS => '0');CQI4:=(OTHERS => '0');

CQI5:=(OTHERS => '0');CQI6:=(OTHERS => '0');

END IF;

CQ1<=CQI1;CQ2<=CQI2;CQ3<=CQI3;

CQ4<=CQI4;CQ5<=CQI5;CQ6<=CQI6;

END IF;

END PROCESS;

END BEHAV;

3、程序调试

(1)时钟给出后,实现开始功能:

相关文档
最新文档