一、实验目的
1、熟悉Quartus的使用。
2、掌握用VHDL语言和FPGA进行组合逻辑电路的设计方法。
二、实验要求
1、用VHDL设计一个四舍五入判别电路,其输入为8421BCD码,要求当输入大于或等于5时,判别电路输出为1;反之为0。
2、用VHDL设计3个开关控制一盏灯的逻辑电路,要求当开关都断开时,灯灭;任一开关闭合或断开,灯的状态变换一次。
3、用VHDL设计一个4选1数据选择器,信号A、B、D3、D2、D1、Do、Y、S。要求S=“0”时,根据A、B的状态mi选择输出端Y=Di。
4、用VHDL设计一个3线-8线译码器,信号A、B、C、Y7、Y6、Y5、Y4、Y3、Y2、Y1、Yo、S。要求S=“0”时,根据A、B、C的状态mi选择输出端Yi=“0”。
三、实验结果及代码
1、四舍五入判别电路
1.1 实验设计
本实验中要求设计四舍五入判别电路,在VHDL代码中采用if语句达到实验目的。其中以数字五为判别条件,其二进制为0101,当时钟信号clk =’1’时,若输入小于0101,则输出为0,若输入大等于0101,则输出为1。
实验中,当时钟信号clk=’1’时,输出Y发生变化,且当输入X小于”0101”时,输出Y=’0’;当输入X大于等于”0101”时,输出Y=’1’
1.2实验代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity circuit is
port(
X : IN std_logic_vector(3 DOWNTO 0);
CLK:IN std_logic;
Y : OUT std_logic);
end circuit;
architecture A of circuit is
begin
process (X,CLK)
begin
if X < "0101" and clk='1' then
Y <= '0';
elsif X >= "0101" and clk='1' then
Y <= '1';
end if;
end process;
end A;
仿真代码(init及always进程)
init : PROCESS
BEGIN
X <= "0000";
wait for 200 ns;
X <= "0001";
wait for 200 ns;
X <= "0010";
wait for 200 ns;
X <= "0011";
wait for 200 ns;
X <= "0100";
wait for 200 ns;
X <= "0101";
wait for 200 ns;
X <= "0110";
wait for 200 ns;
X <= "0111";
wait for 200 ns;
X <= "1000";
wait for 200 ns;
X <= "1001";
wait for 200 ns;
X <= "1010";
wait for 200 ns;
X <= "1011";
wait for 200 ns;
X <= "1100";
wait for 200 ns;
X <= "1101";
wait for 200 ns;
X <= "1110";
wait for 200 ns;
X <= "1111";
wait for 200 ns;
WAIT;
END PROCESS init;
always : PROCESS
BEGIN
clk <= '1';
wait for 100 ns;
clk <= '0';
wait for 100 ns;
END PROCESS always;
E