VHDL实验报告
专用集成电路实验报告
1305 0Z 01
1305 0 242 37 7
刘德文
实验一
开发平台软件安装与认知实验
实验内容 1 1 、
本实验以三线八线译码器 (L S 741 38) ) 为例, ,在 在 Xilinx I S E 9 、2 2 软件平台上完成设计电路得 L VHDL 文本输入、语法检查、编译、仿真、管脚分配与编程下载等操作。下载芯片选择 Xil in n x 公司得 Coo lR unn e r II I 系列 XC2 C 25 6- - 7P P Q8 208 作为目标仿真芯片、
2、
用1中所设计得得三线八线译码器 (LS 74 4 1 38) 生成一个 LS7 48 138 元件, ,在 在 X X i linx IS E 9。2 2 软件原理图设计平台上完成 8 LS74138 元件得调用, , 用原理图得方法设计三线八线译码器 (LS74138), 实现编译, , 仿真, , 管脚分配与编程下载等操作。
源程序:
library IEEE; use IEEE。STD_LOGIC_1164.ALL; use IEEE。STD_LOGIC_ARITH。ALL; use IEEE。STD_LOGIC_UNSIGNED、ALL; -—
Unment the following lines to use the declarations that are --
provided for instantiating Xilinx primitive ponents、 --library UNISIM; --use UNISIM.Vponents。all; entity ls74138 is
Port ( g1 : in std_logic;
g2 : in std_logic;
inp : in std_logic_vector(2 downto 0);
y : out std_logic_vector(7 downto 0));
end ls74138; architecture Behavioral of ls74138 is begin process(g1,g2,inp) begin
if((g1 and g2)='1’) then
si pni esacﻩ
when ”000"=>y<="00000001";
;”01000000"=〈y〉=”100" nehwﻩ
when ”010"=>y<=”00000100”;
;"00010000”=<y>=”110” nehwﻩ
;”00001000”=〈y>="001" nehwﻩ
;”00000100”=〈y>=”101" nehwﻩ
when "110”=>y<="01000000";
;"00000001"=<y>="111" nehwﻩ
;""=<y>=srehto nehwﻩ ﻩ
end case;
else
;""=<yﻩﻩ
end if; end process; end Behavioral; 波形文件: :
生成元器件及连接电路
思考: :
有程序可以瞧出, 定义了三个输入端, 一个输出端、g1,g2 为使能输入端, 当全为一时, 开始执行宽度为三得输入in p, 并听过程序实现三八译码器得功能、通过实验, 分别用了原理图与vhdl 语言两种方式进行调试。两种方法各有优缺点。对于原理图而言, 可以清晰直观得瞧出电路各部分得构造, 但却只能在原有得基础上进行链接而无法随意修改元器件功能; vhdl语言则可以按照实际得需求进行编写程序, 从而可以实现开发者想要实现得功能。
实验二
组合逻辑电路得 L VHDL 语言实现
实验内容: 1.用 用 V V HL DL 语言实现优先编码器得设计并实现功能仿真
2. 用VH H DL L 语言实现四选一选择器得设计并实现功能仿真。
1 、优先编码器源程序 LIBRARY IEEE; USE IEEE。STD_LOGIC_1164。ALL; ENTITY priorityencoder IS
PORT (input:IN STD_LOGIC_VECTOR (7 DOWNTO 0);
y:OUT STD_LOGIC_VECTOR (2 DOWNTO 0)); END priorityencoder; ARCHITECTURE rtl OF priorityencoder IS BEGIN
PROCESS (input)
BEGIN
IF(input(0)=’0") THEN
y<="111";
ELSIF(input(1)=’0") THEN
y<="110";
ELSIF(input(2)=’0") THEN
y<=”101”;
ELSIF(input(3)=’0") THEN
y<="100”;
ELSIF(input(4)='0") THEN
y〈="011";
ELSIF(input(5)=’0’) THEN
y<=”010";
ELSIF(input(6)='0’) THEN
y〈=”001”;
ELSE
y〈="000";
END IF;
END PROCESS;
END rtl; 波形图
原理图:
2. 四选一选择器源程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164、ALL; ENTITY mux4 IS
PORT (input:IN STD_LOGIC_VECTOR (3 DOWNTO 0);
a,b:IN STD_LOGIC;
y:OUT STD_LOGIC); END mux4; ARCHITECTURE rt1 OF mux4 IS SIGNAL se1:STD_LOGIC_VECTOR (1 DOWNTO 0); BEGIN
se1〈=b&a;
PROCESS (input,se1)
BEGIN
IF(se1="00”)THEN
y<=input(0);
ELSIF(se1=”01”)THEN
y〈=input(1);
ELSIF(se1="10")THEN
y〈=input(2);
ELSE
y〈=input(3);
END IF;
END PROCESS; END rt1; 波形图
原理图
思考:
1. 优先编码器: 通过程序定义了一个八位得输入端与一个三位得输入端。首先就是通过八位得
输入端得最低 位开始判断,是 如果就是 0, 则输出为:111;是 如果就是 1, 则判断第
二位, 以此类推, 直到最后一位, 如果都不满足, 则输出:00 0。
2 、四选一选择器: 一共有三个输入, 其中一个就是宽度为四得可供选择得输入端, 将一个四位给 宽度得二进制码赋值给 input 端, 通过 a 与 与 b 得输入选择in put 得输出。如ab 为 为 00 时,则输出为:inpu t(0), 以此类推、 实验三
时序逻辑电路得 L VHDL 语言实验
实验内容:( 3选 1) (一)
、 设计一个 0 60 进制得计数器
(二)
设计一带使能得同步复位清零得递增 8 8 位二进制计数器
(三)
设计 一带使能得异步清零复位得递增 8 8 位二进制计数器
六十进制( 异步清零) 源程序:
library ieee; use ieee。std_logic_1164。all; use ieee、std_logic_unsigned.all; entity ycounter is
port(clk,clear,enable:in std_logic;
--ld:in std_logic;
—-d:in std_logic_vector(7 downto 0);
qk:out std_logic_vector(7 downto 0)); end ycounter; architecture a_ycounter of ycounter is
begin
PROCESS (clk)
VARIABLE cnt :std_logic_vector(7 downto 0);
BEGIN
IF (clk"EVENT AND clk = "1') THEN
IF(clear = "0") THEN
cnt := ”00000000";
--ELSE
—-IF(ld = ’0’) THEN
-- cnt := d;
ELSE
IF(enable = ’1’) THEN
cnt := cnt + "00000001";
if(cnt=”00111100")then
cnt := "00000000";
end if;
END IF;
-—END IF;
END IF;
END IF;
qk 〈= cnt;
END PROCESS; end a_ycounter; 波形图:
六十进制( 同步置数) 源程序: library ieee; use ieee。std_logic_1164.all; use ieee.std_logic_unsigned、all; entity ycounter is
port(clk,clear,enable:in std_logic;
ld:in std_logic;
d:in std_logic_vector(7 downto 0);
qk:out std_logic_vector(7 downto 0)); end ycounter; architecture a_ycounter of ycounter is begin
PROCESS (clk)
VARIABLE cnt :std_logic_vector(7 downto 0);
BEGIN
IF (clk’EVENT AND clk = "1’) THEN
IF(clear = '0’) THEN
cnt := ”00000000";
ELSE
IF(ld = ’0') THEN
cnt := d;
ELSE
IF(enable = "1’) THEN
cnt := cnt + ”00000001”;
if(cnt=”00111011”)then
Ld :=1;
end if;
END IF;
END IF;
END IF;
END IF;
qk <= cnt;
END PROCESS; end a_ycounter; 波形图:
思考: 六十进制计数器得实现,1) 异步清零程序得实现: 通过判断最后一个状态, 因为该计数器位六十进制, 所以最后一个状态为 5 9, 用二进制码表示为:"0 0111011” ”, 即当计数器得状态为六十,即"0 011 1100 "状态时, 计数器清零, 输出00000 000 。2) 同步置数程序得实现: 当计数器达到状 态, 当计数器达到状态”00111011" 时,ld 被赋值为0, 执行置数功能, 将d得值赋值给
y, 计数器从零开始计数、
实验四
V V HDL L 层次化设计方法实验
实验内容:
设计一个 8 8 位移位寄存器。各个 D D 触发器模块采用 V V HL DL 语言编写, , 分别用原理图、VHD L语言元件例化语句与生成语句得方法实现 8 8 位移位寄存器得设计。
D 触发器源程序: library IEEE; use IEEE、STD_LOGIC_1164。ALL; use IEEE。STD_LOGIC_ARITH、ALL; use IEEE、STD_LOGIC_UNSIGNED、ALL; —-
Unment the following lines to use the declarations that are -—
provided for instantiating Xilinx primitive components、 --library UNISIM; --use UNISIM.VComponents。all; entity Dchu is
Port ( CLK : in
STD_LOGIC;
D : in
STD_LOGIC;
Q : out
STD_LOGIC;
CLEAR : in
STD_LOGIC;
Q_N : out
STD_LOGIC); end Dchu; ARCHITECTURE BEH OF Dchu IS
;CIGOL_DTS:1Q LANGISﻩ
BEGIN
)1Q,KLC,RAELC( SSECORPﻩ
NIGEBﻩ
IF CLEAR="0’
THEN Q1〈=’0';
ELSIF CLK’EVENT AND CLK=’1' ﻩ;D=〈1Q NEHTﻩ
END IF;
;SSECORP DNEﻩ ﻩ Q〈=Q1;
;1Q ton=〈N_Qﻩﻩ
;HEB DNEﻩ波形图: D 触发器:
八位移位寄存器:
八位移位寄存器原理图:
元件例化: library IEEE; use IEEE.STD_LOGIC_1164。ALL; use IEEE.STD_LOGIC_ARITH、ALL; use IEEE、STD_LOGIC_UNSIGNED.ALL; --
Uncomment the following lines to use the declarations that are --
provided for instantiating Xilinx primitive components. -—library UNISIM; --use UNISIM.Vponents。all; entity shift_reg_8_com is
Port ( a,clk,rst : in
STD_LOGIC;
b: out
STD_LOGIC); end shift_reg_8_com; ARCHITECTURE BEH OF shift_reg_8_ IS
1ffd tnenopﻩPort ( d,clk,rst : in
STD_LOGIC;
q: out
STD_LOGIC); End ponent; Signal q:STD_LOGIC_VECTOR(8DOWNTO0); BEGIN
q(0)<=a; d0:dff1 PORT MAP(q(0),clk,rst,q(1)); d1:dff1 PORT MAP(q(1),clk,rst,q(2)); d2:dff1 PORT MAP(q(2),clk,rst,q(3)); d3:dff1 PORT MAP(q(3),clk,rst,q(4)); d4:dff1 PORT MAP(q(4),clk,rst,q(5)); d5:dff1 PORT MAP(q(5),clk,rst,q(6)); d6:dff1 PORT MAP(q(6),clk,rst,q(7)); d7:dff1 PORT MAP(q(7),clk,rst,q(8)); b<=q(4); End str; 生成语句: library IEEE; use IEEE。STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED。ALL; -—
Unment the following lines to use the declarations that are —-
provided for instantiating Xilinx primitive components、 ——library UNISIM; ——use UNISIM。VComponents、all;
entity shift_reg_8_com is
Port ( a,clk,rst : in
STD_LOGIC;
b: out
STD_LOGIC); end shift_reg_8_com; ARCHITECTURE BEH OF shift_reg_8_ IS
1ffd tnenopmoCﻩPort ( d,clk,rst : in
STD_LOGIC;
q: out
STD_LOGIC); End component; Signal q:STD_LOGIC_VECTOR(8DOWNTO0); BEGIN
;a=<)0(qﻩg1: FOR I IN 0 TO 7 GENERATE dx:dff1 PORT MAP(q(i),clk,rst,q(i+1)); End generate g1; b〈=q(4); End str; 实验结果( 仿真结果) 与分析
元件例化语句由两部分组成, 元件说明语句与元件例化语句。首先要设计被上层电路调用得电路块,即 即 D 触发器模块, 八位移位寄存器就就是通过程序调用八个 个 D 触发器, 每个D触发器都相当于一个模块、生成语句就是将已设计好得D触发器得逻辑语句进行复制, 从而生成一组结构上完全相同得设计单元得电路结构。从上面得两个程序可以瞧出, 当所需要得组件比较少时, 两种语句得大小差不多, 但当所需要得组件比较多时, 生成语句得执行效率明显得要变高, 而且程序所占内存明显减少。
上一篇:多元统计分析实验报告
下一篇:实验报告实验总结范文