当前位置:文档之家› eda大作业.

eda大作业.

班级 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 ISPORT (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 ISBEGINPROCESS(CLK) --由频率为3MHz的时钟产生频率为100Hz的时钟VARIABLE NUM:INTEGER RANGE 0 TO 15000;--定义计数器VARIABLE Q:STD_LOGIC;BEGINIF CLK'EVENT AND CLK='1' THENIF 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);BEGINIF 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' THENIF STA='1' THENIF RST='0' THENIF POS='0' THENIF 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' THENCQI1:=(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)时钟给出后,实现开始功能:(2)给时钟后,实现暂停功能:(3)给时钟后,实现复位功能:(4)给时钟后,实现停止功能:(5)综合功能地实现:第二章习题部分习题一(Ex-1)画出下例实体描述对应的原理图符号元件:ENTITY buf3s IS -- 实体1:三态缓冲器 PORT (input : IN STD_LOGIC ; -- 输入端enable : IN STD_LOGIC ; -- 使能端output : OUT STD_LOGIC ) ; -- 输出端END buf3x ;ENTITY mux21 IS --实体2: 2选1多路选择器 PORT (in0, in1, sel : IN STD_LOGIC;output : OUT STD_LOGIC);END ENTITY mux21;习题二(Ex-2)图中所示的是4选1多路选择器,试分别用IF_THEN语句和CASE语句的表达方式写出此电路的VHDL程序。

选择控制的信号s1和s0为STD_LOGIC_VECTOR类型;当s1='0',s0='0';s1='0',s0='1';s1='1',s0='0'和s1='1',s0='1'分别执行y<=a、y<=b、y<=c、y<=d。

VHDL程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mux41a isport(a,b,c,d:in std_logic; --4个数据输入端s0,s1:in std_logic; --2个信号控制输入端y:out std_logic); --数据输出端口end mux41a;architecture behavior of mux41a issignal abc : std_logic_vector(1 downto 0) ; --定义内部信号abcbeginabc <= s1 & s0 ; --abc为s1和s0的位与process (abc)begincase abc iswhen "00" => y<=a;when "01" => y<=b;when "10" => y<=c;when "11" => y<=d;when others=>y <=null ;end case;end process;end architecture behavior ;习题三(Ex-3)图中所示的是双2选1多路选择器构成的电路MUXK,对于其中MUX21A,当s='0'和'1'时,分别有y<='a'和y<='b'。

试在一个结构体中用两个进程来表达此电路,每个进程中用CASE语句描述一个2选1多路选择器MUX21A。

library ieee;use ieee.std_logic_1164.all;entity EX4 isport ( a1,a2,a3:in std_logic; --3个数据输入端口temp:buffer std_logic; --定义一个中间信号s1,s0:in std_logic; --2个数据控制端口output:out std_logic); --电路输出端end EX4;architecture behav of EX4 isbeginprocess(a2,a3,s0) --进程1(数选器1)begincase s0 iswhen '0'=> temp<=a2;when '1'=> temp<=a3;end case;end process;process(a1,temp,s1) --进程2(数选器2)begincase s1 iswhen '0'=> output<=a1;when '1'=> output<=temp;end case;end process;end behav;习题四(Ex-4)图中是一个含有上升沿触发的D触发器的时序电路,试写出此电路的VHDL设计文件。

相关主题