VHDL实验源程序

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

实验1—— EDA工具使用与2选1多路选择器VHDL描述

ENTITY mux21a IS

PORT ( a, b, s: IN BIT;

y : OUT BIT );

END ENTITY mux21a;

ARCHITECTURE one OF mux21a IS

BEGIN

PROCESS (a,b,s)

BEGIN

IF s = '0' THEN y <= a ; ELSE y <= b ;

END IF;

END PROCESS;

END ARCHITECTURE one ;

实验2—— D触发器VHDL描述

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ;

ENTITY DFF1 IS

PORT (CLK : IN STD_LOGIC ;

D : IN STD_LOGIC ;

Q : OUT STD_LOGIC );

END ;

ARCHITECTURE bhv OF DFF1 IS

SIGNAL Q1 : STD_LOGIC ; --类似于在芯片内部定义一个数据的暂存节点

BEGIN

PROCESS (CLK,Q1)

BEGIN

IF CLK'EVENT AND CLK = '1'

THEN Q1 <= D ;

END IF;

END PROCESS ;

Q <= Q1 ; --将内部暂存数据向端口输出(双横线--是注释符号) END bhv;

实验3——半加器VHDL描述

LIBRARY IEEE; --半加器描述(1):布尔方程描述方法

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY h_adder IS

PORT (a, b : IN STD_LOGIC;

co, so : OUT STD_LOGIC);

END ENTITY h_adder;

ARCHITECTURE fh1 OF h_adder is

BEGIN

so <= NOT(a XOR (NOT b)) ; co <= a AND b ;

END ARCHITECTURE fh1;

实验4——全加器VHDL描述

LIBRARY IEEE; --1位二进制全加器顶层设计描述

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY f_adder IS

PORT (ain,bin,cin : IN STD_LOGIC;

cout,sum : OUT STD_LOGIC );

END ENTITY f_adder;

ARCHITECTURE fd1 OF f_adder IS

COMPONENT h_adder --调用半加器声明语句

PORT ( a,b : IN STD_LOGIC;

co,so : OUT STD_LOGIC);

END COMPONENT ;

COMPONENT or2a

PORT (a,b : IN STD_LOGIC;

c : OUT STD_LOGIC);

END COMPONENT;

SIGNAL d,e,f : STD_LOGIC; --定义3个信号作为内部的连接线。

BEGIN

u1 : h_adder PORT MAP(a=>ain,b=>bin,co=>d,so=>e); --例化语句 u2 : h_adder PORT MAP(a=>e, b=>cin, co=>f,so=>sum);

u3 : or2a PORT MAP(a=>d, b=>f, c=>cout);

END ARCHITECTURE fd1;

实验5——方波发生器VHDL程序(简易函数发生器设计1)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY square IS

PORT(clk,reset:IN STD_LOGIC;

q:OUT STD_LOGIC);

END square;

ARCHITECTURE bhv OF square IS

BEGIN

PROCESS(clk,reset)

V ARIABLE cnt:INTEGER RANGE 0 TO 63;

BEGIN

IF reset='0' THEN

q<='0';

ELSIF clk'EVENT AND clk='1' THEN

cnt:=cnt+1;

IF cnt<31 THEN

q<='0';

ELSE

q<='1';

END IF;

END IF;

END PROCESS;

END bhv;

实验6 —正弦波发生器VHDL程序(简易函数发生器设计2)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY sin IS

PORT(clk,reset:IN STD_LOGIC;

q:OUT INTEGER RANGE 0 TO 255);

END sin;

ARCHITECTURE bhv OF sin IS

BEGIN

PROCESS(clk,reset)

VARIABLE tmp:INTEGER RANGE 0 TO 63;

BEGIN

IF reset='0' THEN

q<=0;

ELSIF clk'EVENT AND clk='1' THEN

IF tmp=63 THEN

tmp:=0;

ELSE

tmp:=tmp+1;

END IF;

CASE tmp IS

WHEN 00=>q<=255;

WHEN 01=>q<=254;

WHEN 02=>q<=252;

相关文档
最新文档