VHDL实验源程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;