宝玛科技网
您的当前位置:首页fpga设计与应用-练习题.doc

fpga设计与应用-练习题.doc

来源:宝玛科技网
《FPGA设计与应用》上机练习题与参

《FPGA设计与应用》上机练习题与参

1.BCD七段显示译码器

要求:开始加电时各段全黑。当EN为1时,根据四路输入信号,在7段LED显示屏上依次显示0~F。输出为0时,对应段点亮。

例如:输入“0000”,则gfedcba依次为“1000000”,显示屏显示为“0”。 仿真要求:每隔50ns,输入端输入一组数,由“0000”变化到“1111”,显示屏依次显示01234567AbcdEF。

输入 gfedcba 显示 0000 1000000 0 0001 1111001 1 0010 0100100 2 0011 0110000 3 0100 0011001 4 0101 0010010 5 0110 0000011 6 0111 1111000 7 1000 0000000 8 1001 0011000 9 1010 0001000 A 1011 0000011 b 1100 0100111 c 1101 0100001 d 1110 0000110 E 1111 0001110 F

library IEEE;

use IEEE.std_logic_11.all; entity LED is port (

data_in : in std_logic_vector (3 downto 0); EN : in std_logic;

data_out : out std_logic_vector (6 downto 0) );

第 1 页 共 27 页

《FPGA设计与应用》上机练习题与参

end ;

architecture one of LED is begin

process(data_in, EN) begin

data_out <= (others => '1'); if EN='1' then

case data_in is

when \"0000\" => data_out <= \"1000000\"; -- 0 when \"0001\" => data_out <= \"1111001\"; -- 1 when \"0010\" => data_out <= \"0100100\"; -- 2 when \"0011\" => data_out <= \"0110000\"; -- 3 when \"0100\" => data_out <= \"0011001\"; -- 4 when \"0101\" => data_out <= \"0010010\"; -- 5 when \"0110\" => data_out <= \"0000011\"; -- 6 when \"0111\" => data_out <= \"1111000\"; -- 7 when \"1000\" => data_out <= \"0000000\"; -- 8 when \"1001\" => data_out <= \"0011000\"; -- 9 when \"1010\" => data_out <= \"0001000\"; -- A when \"1011\" => data_out <= \"0000011\"; -- b when \"1100\" => data_out <= \"0100111\"; -- c when \"1101\" => data_out <= \"0100001\"; -- d when \"1110\" => data_out <= \"0000110\"; -- E when \"1111\" => data_out <= \"0001110\"; -- F when others => NULL; end case; end if; end process; end ;

第 2 页 共 27 页

《FPGA设计与应用》上机练习题与参

2.四选一多路选择器

要求:根据控制信号选中四路输入信号中的一路,并输出该信号。 测试平台要求:Sel每隔50ns变化一次。见下表

测试平台要求: input(3) input(2) input(1) input(0) Sel(1) 0 0 1 1

Sel(0) 0 1 0 1 y Input(0) Input(1) Input(2) Input(3) 1 1 0 0

方法一:用条件信号代入

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY mux42 IS

PORT(input : IN STD_LOGIC_VECTOR(3 DOWNTO 0); Sel : IN STD_LOGIC_VECTOR(1 DOWNTO 0); Y : OUT STD_LOGIC); END mux42;

ARCHITECTURE app OF mux42 IS BEGIN

y<=input(0) WHEN sel=0 ELSE

第 3 页 共 27 页

《FPGA设计与应用》上机练习题与参

input(1) WHEN sel=1 ELSE input(2) WHEN sel=2 ELSE input(3); END app;

或者

entity mux4 is

port(i0, i1, i2, i3, a, b : in std_logic; q : out std_logic); end mux4;

architecture rtl of mux4 is

signal sel : std_logic_vector (1 downto 0); begin

sel<=b & a;

q<=i0 when sel = “00” else i1 when sel = “01” else i2 when sel = “10” else i3 when sel = “11”; end rtl;

方法二:选择信号代入

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

ENTITY mux45 IS

PORT(i0,i1,i2,i3,a,b :IN STD_LOGIC; q : OUT STD_LOGIC); END mux45;

ARCHITECTURE bb OF mux45 IS

SIGNAL sel: INTEGER range 0 to 3; BEGIN

WITH sel SELECT q<=i0 WHEN 0, i1 WHEN 1, i2 WHEN 2,

i3 WHEN 3;

sel<=0 WHEN a='0' AND b='0' ELSE 1 WHEN a='1' AND b='0' ELSE 2 WHEN a='0' AND b='1' ELSE 3 WHEN a='1' AND b='1' ; END bb;

第 4 页 共 27 页

《FPGA设计与应用》上机练习题与参

方法三:用if …then…elsif…end if library ieee;

use ieee.std_logic_11.all;

entity mux is port(

a, b, c, d: in std_logic;

s: in std_logic_vector(1 downto 0); x: out std_logic); end mux;

architecture archmux of mux is begin

mux4_1: process (a, b, c, d) begin

if s = \"00\" then x <= a; elsif s = \"01\" then x <= b; elsif s = \"10\" then x <= c; else

x <= d; end if; end process mux4_1; end archmux;

或者用下述表示

LIBRARY ieee;

USE ieee.std_logic_11.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 be_mux4 OF mux4 is

signal sel: std_logic_vector(1 downto 0); begin sel<=b&a;

process(input,sel) begin

if(sel=\"00\") then y<=input(0);

elsif (sel=\"01\") then

第 5 页 共 27 页

《FPGA设计与应用》上机练习题与参

y<=input(1); elsif (sel=\"10\") then y<=input(2); else

y<=input(3); end if;

end process; end be_mux4;

3.8位偶校验电路

要求:用for…loop循环实现,数据位8位,校验位1位。

测试平台要求8位数据位a(7:0)由0x00每隔50ns变化一次,直到0x0F

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

ENTITY pc IS

PORT(a : IN STD_LOGIC_VECTOR(7 DOWNTO 0); y : OUT STD_LOGIC); END pc;

ARCHITECTURE behave OF pc IS BEGIN

cbc: PROCESS(a)

VARIABLE tmp: STD_LOGIC; BEGIN tmp:='0';

FOR i IN 0 TO 7 LOOP tmp:=tmp XOR a(i); END LOOP; y<=tmp;

第 6 页 共 27 页

《FPGA设计与应用》上机练习题与参

END PROCESS cbc; END behave;

4.8位奇校验电路

要求:用while…loop循环实现,数据位8位,校验位1位。

测试平台要求8位数据位a(7:0)由0x00每隔50ns变化一次,直到0x0F

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

ENTITY pc IS

PORT(a : IN STD_LOGIC_VECTOR(7 DOWNTO 0); y : OUT STD_LOGIC); END pc;

ARCHITECTURE behave OF pc IS BEGIN

cbc: PROCESS(a)

VARIABLE tmp: STD_LOGIC; VARIABLE i: integer; BEGIN

tmp:='1';i:=0; while(i<8) LOOP

tmp:=tmp XOR a(i); i:=i+1; END LOOP; y<=tmp; END PROCESS cbc; END behave;

5.3-8译码器

按数据流描述方式编写3线—8线译码器 仿真要求:G1为0,150ns后变为1;

第 7 页 共 27 页

《FPGA设计与应用》上机练习题与参

G2A初值为1,50ns后变为0;

G2B初值为1,100ns后变为0;

A2A1A0初值为111,150ns后由000、001、…变化到111,每隔50ns变化一次

Y0Y1741383线-8线G1G2AG2B译码器Y2Y3Y4Y5Y6Y7A0A1A2

第 8 页 共 27 页

《FPGA设计与应用》上机练习题与参

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL; ENTITY decoder138_v2 IS

PORT(G1,G2A,G2B: IN STD_LOGIC;

A: IN STD_LOGIC_VECTOR(2 DOWNTO 0); Y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END decoder138_v2;

ARCHITECTURE dataflow OF decoder138_v2 IS BEGIN

PROCESS (G1,G2A,G2B,A)

BEGIN

IF(G1='1' AND G2A='0' AND G2B='0')THEN CASE A IS

WHEN \"000\" => Y <=\"11111110\"; WHEN \"001\" => Y <=\"11111101\"; WHEN \"010\" => Y <=\"11111011\"; WHEN \"011\" => Y <=\"11110111\"; WHEN \"100\" => Y <=\"11101111\"; WHEN \"101\" => Y <=\"11011111\"; WHEN \"110\" => Y <=\"10111111\"; WHEN OTHERS => Y <=\"01111111\"; END CASE;

ELSE Y <=\"11111111\"; END IF; END PROCESS; END dataflow;

这是另一种译码器方法: 要求:对三位输入信号进行译码,有三个控制信号g1,g2a,g2b,当g1为‟1‟,g2a和g2b同为‟0‟时进行正常译码,否则输出全‟1‟。

仿真要求:三位输入信号每隔50ns变化一次,由”000” 变化到”111”;控制信号g1初始为“0”,g2a,g2b初始为“1”,70ns以后变化为g1—“1”,g2a—“0”,g2b—“1”。

LIBRARY ieee;

USE ieee.std_logic_11.all; entity decoder38 is

port(a,b,c,g1,g2a,g2b: in std_logic;

y: out std_logic_vector(7 downto 0)); end decoder38;

architecture behave38 OF decoder38 is signal indata: std_logic_vector(2 downto 0); begin

indata<=c&b&a;

第 9 页 共 27 页

《FPGA设计与应用》上机练习题与参

process(indata,g1,g2a,g2b)

begin

if(g1='1' and g2a='0' and g2b='0') then case indata is

when \"000\"=>y<=\"11111110\"; when \"001\"=>y<=\"11111101\"; when \"010\"=>y<=\"11111011\"; when \"011\"=>y<=\"11110111\"; when \"100\"=>y<=\"11101111\"; when \"101\"=>y<=\"11011111\"; when \"110\"=>y<=\"10111111\"; when \"111\"=>y<=\"01111111\"; when others=>y<=\"XXXXXXXX\"; end case; else

y<=\"11111111\"; end if;

end process; end behave38;

6.8-3编码器

I0I1I2I3I4I5I6I78线-3线编码器A0A1A2

设计要求:对8位输入信号进行编码。

仿真要求:按照真值表输入信号,每隔50ns变化一次。

第 10 页 共 27 页

《FPGA设计与应用》上机练习题与参

方法一:依据逻辑表达式 8线—3线编码器逻辑表达式: A2=I4+I5+I6+I7 A1=I2+I3+I6+I7 A0=I1+I3+I5+I7

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

ENTITY coder83_v1 IS

PORT(I0,I1,I2,I3,I4,I5,I6,I7: IN STD_LOGIC; A0,A1,A2: OUT STD_LOGIC); END coder83_v1;

ARCHITECTURE behave OF coder83_v1 IS BEGIN

A2 <= I4 OR I5 OR I6 OR I7; A1 <= I2 OR I3 OR I6 OR I7; A0 <= I1 OR I3 OR I5 OR I7; END behave; 方法二:数据流 LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL; ENTITY coder83_v2 IS

PORT( I: IN STD_LOGIC_VECTOR(7 DOWNTO 0); A: OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END coder83_v2;

ARCHITECTURE dataflow OF coder83_v2 IS

第 11 页 共 27 页

《FPGA设计与应用》上机练习题与参

BEGIN

PROCESS (I) BEGIN

CASE I IS

WHEN \"10000000\"=> A <=\"111\"; WHEN \"01000000\"=> A <=\"110\"; WHEN \"00100000\"=> A <=\"101\"; WHEN \"00010000\"=> A <=\"100\"; WHEN \"00001000\"=> A <=\"011\"; WHEN \"00000100\"=> A <=\"010\"; WHEN \"00000010\"=> A <=\"001\"; WHEN OTHERS => A <=\"000\"; END CASE; END PROCESS; END dataflow;

7.8-3优先编码器

I0I1I2I3I4I5I6I7EI741488线-3线优先编码器A0A1A2GSEO

设计要求:对8位输入信号进行优先级编码。

仿真要求:按照真值表输入信号,每隔50ns变化一次。真值表中“X”的地方填“1”。

第 12 页 共 27 页

《FPGA设计与应用》上机练习题与参

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

ENTITY prioritycoder83_v2 IS

PORT ( I: IN STD_LOGIC_VECTOR(7 DOWNTO 0); EI:IN STD_LOGIC;

A: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); GS,EO:OUT STD_LOGIC);

END prioritycoder83_v2;

ARCHITECTURE dataflow OF prioritycoder83_v2 IS BEGIN

PROCESS(EI,I) BEGIN

IF(EI='1')THEN A <= \"111\"; GS <= '1'; EO <= '1';

ELSIF (I=\"11111111\" AND EI='0')THEN A <= \"111\"; GS <= '1'; EO <= '0'; ELSIF (I(7)='0' AND EI='0')THEN A <= \"000\"; GS <= '0';

EO <= '1';

ELSIF (I(6)='0' AND EI='0')THEN A <= \"001\"; GS <= '0';

EO <= '1';

ELSIF (I(5)='0' AND EI='0')THEN A <= \"010\";

第 13 页 共 27 页

《FPGA设计与应用》上机练习题与参

GS <= '0';

EO <= '1';

ELSIF (I(4)='0' AND EI='0')THEN A <= \"011\"; GS <= '0'; EO <= '1';

ELSIF (I(3)='0' AND EI='0')THEN A <= \"100\"; GS <= '0'; EO <= '1';

ELSIF (I(2)='0' AND EI='0')THEN A <= \"101\"; GS <= '0'; EO <= '1';

ELSIF (I(1)='0' AND EI='0')THEN A <= \"110\";

GS <= '0'; EO <= '1'; ELSIF (I(0)='0' AND EI='0')THEN A <= \"111\"; GS <= '0'; EO <= '1'; END IF; END PROCESS; END dataflow;

LIBRARY ieee;

USE ieee.std_logic_11.all; entity prior is

port( input: in std_logic_vector(7 downto 0); y: out std_logic_vector(2 downto 0)); end prior;

architecture be_prior OF prior is begin

process(input) begin

if(input(0)='0') then y<=\"111\";

elsif (input(1)='0') then y<=\"110\";

elsif (input(2)='0') then

第 14 页 共 27 页

《FPGA设计与应用》上机练习题与参

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\";

elsif (input(7)='0') then y<=\"000\"; end if; end process; end be_prior;

或者

library ieee;

use ieee.std_logic_11.all; entity coder is

port(input: in std_logic_vector(7 downto 0); output: out std_logic_vector(2 downto 0)); end coder;

architecture art of coder is begin

process(input) begin

if input(7)=„0‟ then output<=“000”; elsif input(6)=„0‟ then output<=“001”; elsif input(5)=„0‟ then output<=“010”; elsif input(4)=„0‟ then

output<=“011”;

elsif input(3)=„0‟ then output<=“100”; elsif input(2)=„0‟ then output<=“101”; elsif input(1)=„0‟ then output<=“110”; else

output<=“111”; end if;

第 15 页 共 27 页

《FPGA设计与应用》上机练习题与参

end process; end art;

8.一位全加器

设计要求:先完成一位半加器,再以元件方式调用 仿真要求:按照全加器真值表完成仿真。 分析:半加器真值表和逻辑表达式如下: a b c s 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0

a,b是输入 c是进位 s是和 c=a AND B s=a XOR b (异或)

第 16 页 共 27 页

《FPGA设计与应用》上机练习题与参

全加器真值表

一位全加器真值表 输入 Ai 0 0 0 0 1 1 1 1 Bi 0 0 1 1 0 0 1 1 Ci 0 1 0 1 0 1 0 1 Si 0 1 1 0 1 0 0 1 输出 Ci+1 0 0 0 1 0 1 1 1

根据真值表,三个输入端和两个输入端可按如下逻辑方程进行联系:

Si=Ai⊕Bi⊕Ci

Ci+1=(Ai⊕Bi) Ci+AiBi

第 17 页 共 27 页

《FPGA设计与应用》上机练习题与参

LIBRARY ieee;

USE ieee.std_logic_11.all; ENTITY half IS

PORT (a, b

s,co

: IN std_LOGIC; : OUT std_LOGIC);

END half;

ARCHITECTURE half1 OF half IS signal c,d:std_logic; BEGIN

c<=a or b; d<=a nand b; co<=not d; s<=c and d; end half1;

LIBRARY ieee;

USE ieee.std_logic_11.all; ENTITY full IS PORT (a, b,cin : IN std_LOGIC; s,co END full;

: OUT std_LOGIC);

ARCHITECTURE full1 OF full IS component half PORT (a, b : IN std_LOGIC; s,co end component;

: OUT std_LOGIC);

signal u0_co,u0_s,u1_co:std_logic; begin

u0:half port map(a,b,u0_s,u0_co); u1:half port map(u0_s,cin,s,u1_co); co<=u0_co or u1_co; end full1;

第 18 页 共 27 页

《FPGA设计与应用》上机练习题与参

9.JK触发器

S是置位端,S=‘0’时Q为1; R是复位端,R=‘0’时Q为0,

设计要求:实现真值表要求的JK触发器。 仿真要求:set初值为0,50 ns后变为1;

时钟周期为20ns;

j初值为0,150ns后变为1;

k初值为0,100ns后为1,再维持50ns后变为0,维持50ns,变为1 J 0 0 1 1 K 0 1 0 1 Qn+1 Qn 0 1 /Qn

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

第 19 页 共 27 页

《FPGA设计与应用》上机练习题与参

ENTITY JKff_v1 IS

PORT(J,K: IN STD_LOGIC; clk: IN STD_LOGIC; set: IN STD_LOGIC; reset: IN STD_LOGIC; Q,QB: OUT STD_LOGIC); END JKff_v1;

ARCHITECTURE behave OF JKff_v1 IS

SIGNAL Q_temp,QB_temp: STD_LOGIC; BEGIN

PROCESS (clk,set,reset) BEGIN

IF (set ='0' AND reset ='1')THEN Q_temp <= '1';

QB_temp <= '0';

ELSIF (set ='1' AND reset ='0')THEN Q_temp <= '0'; QB_temp <= '1';

ELSIF (clk'EVENT AND clk = '1')THEN IF(J='0' AND K='1')THEN Q_temp <= '0'; QB_temp <= '1'; ELSIF(J='1' AND K='0')THEN

Q_temp <= '1'; QB_temp <= '0';

ELSIF(J='1' AND K='1')THEN Q_temp <= NOT Q_temp ; QB_temp <= NOT QB_temp; END IF; END IF; Q <= Q_temp; QB <= QB_temp; END PROCESS; END behave;

10.移位寄存器

用D触发器构成的四位移位寄存器如下图所示,根据电路原理图,设计四位移位寄存器。 要求:先设计出D触发器(上升沿触发),再以元件形式进行调用。 仿真要求:时钟初值为“0”,周期为50ns;di输入依次为“0”、“1”、“0”、“1”,间隔50ns。

第 20 页 共 27 页

《FPGA设计与应用》上机练习题与参

dff1输入diq(0)DQq(1)Ddff2Qq(2)Ddff3Qq(3)dff4DQq(4)输出doCLKCLKCLKCLKcp

D触发器:

library IEEE;

use IEEE.STD_LOGIC_11.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity d_trigger is

port(d,clk:in std_logic; q: out std_logic);

end d_trigger;

architecture Behavioral of d_trigger is begin

process begin

wait until clk'event and clk='1'; q <= d; end process;

end Behavioral;

第 21 页 共 27 页

《FPGA设计与应用》上机练习题与参

方法一:常规方法

LIBRARY IEEE;

USE IEEE. STD_LOGIC_11.ALL; ENTITY shift_reg IS

PORT(di:IN STD_LOGIC; cp:IN STD_LOGIC; do:OUT STD_LOGIC); END shift_reg;

ARCHITECTURE structure OF shift_reg IS COMPONENT dff

PORT(d:IN STD_LOGIC; clk:IN STD_LOGIC; q:OUT STD_LOGIC); END COMPONENT;

SIGNAL q:STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN

dff1:dff PORT MAP (di,cp,q(1)); dff2:dff PORT MAP (q(1),cp,q(2)); dff3:dff PORT MAP (q(2),cp,q(3)); dff4:dff PORT MAP (q(3),cp,do); END structure;

方法二:用for …generate实现

LIBRARY IEEE;

USE IEEE. STD_LOGIC_11.ALL; ENTITY shift_reg IS

PORT(di:IN STD_LOGIC; cp:IN STD_LOGIC; do:OUT STD_LOGIC); END shift_reg;

ARCHITECTURE structure OF shift_reg IS COMPONENT dff

PORT(d:IN STD_LOGIC; clk:IN STD_LOGIC; q:OUT STD_LOGIC); END COMPONENT;

SIGNAL q:STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN

第 22 页 共 27 页

《FPGA设计与应用》上机练习题与参

q(0)<= di

label1:FOR i IN 0 TO 3 GENERATE dffx:dff PORT MAP (q(i),cp,q(i+1)); END GENERATE label1; do <= q(4) END structure;

方法三:IF- GENERATE模式生成语句 LIBRARY IEEE;

USE IEEE. STD_LOGIC_11.ALL; ENTITY shift_reg IS

PORT(di:IN STD_LOGIC; cp:IN STD_LOGIC; do:OUT STD_LOGIC); END shift_reg;

ARCHITECTURE structure OF shift_reg IS COMPONENT dff

PORT(d:IN STD_LOGIC; clk:IN STD_LOGIC; q:OUT STD_LOGIC); END COMPONENT;

SIGNAL q:STD_LOGIC_VECTOR(3 DOWNTO 1); BEGIN

label1:

FOR i IN 0 TO 3 GENERATE IF(i=0)GENERATE

dffx:dff PORT MAP (di,cp,q(i+1)); END GENERATE; IF(i=3)GENERATE

dffx:dff PORT MAP (q(i),cp,do); END GENERATE;

IF((i /=0)AND(i /=3))GENERATE dffx:dff PORT MAP (q(i),cp,q(i+1)); END GENERATE; END GENERATE label1; END structure;

第 23 页 共 27 页

《FPGA设计与应用》上机练习题与参

11.数值比较器

数值比较器是对两个位数相同的二进制数进行比较并判定其大小关系的算术运算电路。 要求设计两个4位二进制数进行比较的电路,其中A和B分别是参与比较的两个4位二进制数,YA、YB和YC是用来分别表示A>B、ALIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL; ENTITY comp4_v1 IS

PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0); B:IN STD_LOGIC_VECTOR(3 DOWNTO 0); YA,YB,YC: OUT STD_LOGIC); END comp4_v1;

ARCHITECTURE behave OF comp4_v1 IS BEGIN PROCESS (A,B) BEGIN

IF (A > B) THEN

YA <='1'; YB <='0'; YC <='0'; ELSIF(A < B) THEN YA <='0'; YB <='1'; YC <='0'; ELSE

第 24 页 共 27 页

《FPGA设计与应用》上机练习题与参

YA <='0'; YB <='0'; YC <='1'; END IF; END PROCESS; END behave;

12.与或门电路

设计要求:按上图所示,先分别构建与门、或门,然后再以元件调用方式构建与或门逻辑电路。

仿真要求:按照下表每隔50ns输入一组信号。

13.加法器

加法器是数字电路中的基本运算单元,电路要求:直接利用VHDL运算符“+”实现加法运算的8位加法器。其中A和B是两个相加的8位二进制数,Cin是低位进位位,S是A、B相加之和,Co是A、B相加之后的进位位。

第 25 页 共 27 页

《FPGA设计与应用》上机练习题与参

仿真要求:

A取值“01111111”,“11110111”,“01111111”,“11110111”, 每隔50ns变化一次 B取值“10000000”,“10101010”,“10000000”,“10101010”,每隔50ns变化一次 Cin初值为“1”,100ns后变为“0”。

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY adder8_v IS

PORT(A :IN STD_LOGIC_VECTOR(7 DOWNTO 0); B :IN STD_LOGIC_VECTOR(7 DOWNTO 0); Cin:IN STD_LOGIC; Co : OUT STD_LOGIC;

S :OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END adder8_v;

ARCHITECTURE behave OF adder8_v IS

SIGNAL Sint : STD_LOGIC_VECTOR(8 DOWNTO 0); SIGNAL AA,BB: STD_LOGIC_VECTOR(8 DOWNTO 0);

BEGIN

AA <='0'& A(7 DOWNTO 0); --将8位加数矢量扩展为9位,为进位提供空间 BB <='0'& B(7 DOWNTO 0); --将8位被加数矢量扩展为9位,为进位提供空间 Sint <= AA + BB + Cin;

S(7 DOWNTO 0) <= Sint(7 DOWNTO 0); Co <= Sint(8); END behave;

14.8比特计数器

要求完成下图所示my_cntr计数器的RTL描述,计数器位宽用generic语句设置为参数。my_cntr是一个8比特二进制计数器,可以向上向下计数,并可设置计数值,计数器用异步

第 26 页 共 27 页

《FPGA设计与应用》上机练习题与参

方式进行低电平复位。

RST为“0”时,Q_OUT复位,CLK时钟上升沿到来时,CE为“1”则计数器工作情况为: 当LOAD为“1”时Q_OUT=D_IN; 当UNPN为“1”时,计数器为递增计数器,每个CLK上升沿到来计数器加1;

当UNPN为“0”时,计数器为递减计数器,每个CLK上升沿到来计数器减1。

仿真要求:

(1)时钟频率100MHz;

(2)15ns时对计数器复位,复位保持时间25ns;

(3)CE信号的初始值为1,300ns后为0,并保持100ns;

(4)LOAD信号初始值为0,500ns后为1,并保持1个时钟周期。 (5)UPDN信号初始值为1,750ns以后为0; (6)D_IN信号值为00001111。

第 27 页 共 27 页

因篇幅问题不能全部显示,请点此查看更多更全内容