EDA实验与实践讲义
y : out std_logic); end mux8_2;
architecture rtl of mux8_2 is
signal sel:std_logic_vector(2 downto 0); begin
sel<=a&b&c; process(input,sel) begin
case sel is
when \
when \ when \ when \ when \ when \ when \ when \ when others=>y<='X';
end case; end process; end rtl;
(3)源程序之三:基于Verilog HDL的mux8_1.v
module mux8_1(a,b,c,d,e,f,g,h,s0,s1,s2,mux_out);
input a,b,c,d,e,f,g,h,s0,s1,s2; output mux_out; reg mux_out;
always @(a or b or c or d or e or f or g or h or s0 or s1 )
begin if(s2==1'b0 && s1==1'b0 && s0==1'b0) mux_out=a;
else if(s2==1'b0 && s1==1'b0 && s0==1'b1) mux_out=b; else if(s2==1'b0 && s1==1'b1 && s0==1'b0) mux_out=c; else if(s2==1'b0 && s1==1'b1 && s0==1'b1) mux_out=d; else if(s2==1'b1 && s1==1'b0 && s0==1'b0) mux_out=e; else if(s2==1'b1 && s1==1'b0 && s0==1'b1) mux_out=f; else if(s2==1'b1 && s1==1'b1 && s0==1'b0) mux_out=g; else mux_out=h; end
endmodule (4)、源程序之四:基于Verilog HDL的mux8_2.v module mux8_2(a,b,c,d,e,f,g,h,s,mux_out); input a,b,c,d,e,f,g,h; input[2:0] s; output mux_out; reg mux_out;
always @(a or b or c or d or e or f or g or h ) begin case(s)
3'b000 : mux_out=a; 3'b001 : mux_out=b; 3'b010 : mux_out=c; 3'b011 : mux_out=d; 3'b100 : mux_out=e; 3'b101 : mux_out=f;
VHDL&Verilog HDL
31
EDA实验与实践讲义
3'b110 : mux_out=g; default : mux_out=h; endcase end endmodule (5)、编译仿真, (6)、硬件验证,以ALTERA公司的FLEX_EPF10K10TC144_4为下载目标。 ①使用信号和模块: 用模块22,23,12,使用信号如下表4-1所示: 输 入 芯片 芯 片 功能 输 出 芯片 芯 片 功 能 信号名 脚名 信号类别 信号名 脚名 信号类别 K1 P41 Input0 OUT1 P116 输出Y K2 P42 Input1 K3 P43 Input2 K4 P44 Input3 K5 P46 Input4 K6 P47 Input5 K7 P48 Input6 K8 P49 Input7 K9 P51 地址 K10 P59 地址 K11 P60 地址 表4-1 ②实验内容:
模块23的第7开关置为ON, 其余为OFF,用开关K8----K1 分别代表数据选择器的数据输入input7---input0,K9,K10,K11分别代表数据选择器的地址输入A,B,C; OUT1代表其输出Y;从输出指示LED观察OUT1随输入K11----K1的改变情况,看是否满足设计要求。
2、数据分配器设计,采用VHDL语言设计。 源程序之一:demux8.vhd library ieee;
use ieee.std_logic_1164.all; entity demux8 is
port(a,b,c : in std_logic; y : in std_logic;
input : out std_logic_vector(7 downto 0)); end demux8;
architecture rtl of demux8 is
signal sel:std_logic_vector(2 downto 0); begin
sel<=a&b&c; process(y,sel) begin
case sel is
when \ when \ when \
when \ when \ when \ when \ when \
when others=>input<=\
end case; end process;
end rtl;
源程序之二:demux1_8.v
VHDL&Verilog HDL
32
EDA实验与实践讲义
module demux1_8 (A,D0,D1,D2,D3,D4,D5,D6,D7,y ); input[2:0] A; input y;
output D0,D1,D2,D3,D4,D5,D6,D7; reg D0,D1,D2,D3,D4,D5,D6,D7;
always@(A or D0 or D1 or D2 or D3 or D4 or D5 or D6 or D7 or y ) begin
case (A)
3'b000: D0=y; 3'b001: D1=y; 3'b010: D2=y; 3'b011: D3=y; 3'b100: D4=y; 3'b101: D5=y; 3'b110: D6=y; default: D7=y; endcase end endmodule
(1)编译仿真,
(2)硬件验证: 以ALTERA公司的FLEX_EPF10K10TC144_4为下载目标。
① 、使用信号和模块: 用模块22,23,12,使用信号如表4-2所示: ② 、实验内容:
模块23的第7开关置为ON, 其余为OFF,用开关K4----K1 分别代表数据分配器的地址输入A ,B ,C和数据输入Y; OUT1~OUT8分别代表其输出;从输出指示LED观察OUT1~OUT8随输入K4----K1的改变情况,看是否满足设计要求。 输 入 芯片 芯 片 功能 输 出 芯片 芯 片 功 能 信号名 脚名 信号类别 信号名 脚名 信号类别 K1 P41 OUT1 P116 y 选择输出input0 K2 P42 OUT2 P114 A 选择输出input1 K3 P43 OUT3 P113 B 选择输出input2 K4 P44 OUT4 P112 C 选择输出input3 OUT5 P111 选择输出input4 OUT6 P110 选择输出input5 OUT7 P109 选择输出input6 OUT8 P102 选择输出input7 表4-2 3、设计扩展: (1)、对mux8_2.vhd, demux8.vhd文本进行修改使其具有带控制端(EN低电位有效)。 (2)、对mux8_2.vhd文本进行修改使其完成按“少数服从多数”原则的一个表决器,文件名取为vote.vhd,试比较该表决器与八选一数据选择器占用资源情况,哪一个占用资源最少。
具体操作是输入文本后存盘编译,在编译窗口中点击“rpt”即可了解到各自的资源占用情况,如图4-1。
图4-1
VHDL&Verilog HDL
33
EDA实验与实践讲义
四、实验报告要求:
对设计扩展的(2)中的结果加以分析,说明原因。
实验五 时序逻辑电路设计之一 -----锁存器和触法器设计
二、 实验目的
1、熟悉时序逻辑器件的基本模块利用硬件描述语言进行设计的基本方法;
2、熟练掌握VHDL语言的IF语句、PROCESS语句的不同应用特点以及异步、同步置位/复位功能的引入;
3、进一步学习使用EDA集成设计软件Max+plus II进行电路的模拟、综合过程; 二、实验器材
1、AEDK_EDAII实验机及其附件 一台; 2、计算机:Pentium或相应处理器以上,有一个空余的并行口 一台; 三、验内容
1、锁存器设计
(1)、使用Graphic Editor输入图5-1和图5-2其中图5-1和图5-2等价,图5-2节省1个门(可任选其一作练习)? 编译 。
N4 qb clk
N3 d
图5-1 锁存器原理图之一
q
N4 qb
clk q
d
N3 图5-2 锁存器原理图之二
(2)、使用Wave Form Editor编辑激励波形 ? 模拟 ?分析波形。参考波形如下: clk 保持 跟随 保持 跟随 保持 跟随 保持 跟随 保持 跟随 保持 d q X X (3)、针对图5-2作如上练习,模拟结果应当相同。 (4)、锁存器的VHDL行为描述:
①、使用Text Editor输入锁存器的行为描述 ? 编译 ?
②、使用Wave Form Editor编辑激励波形 ? 模拟 ? 分析波形。 源程序之一:latch.vhd
VHDL&Verilog HDL
跟随 34
EDA实验与实践讲义
Library ieee;
Use ieee.std_logic_1164.all; entity latch is
port ( d, clk,rst : in std_logic; q, qb : out std_logic); end latch;
architecture behv of latch is begin
process(clk,d,rst) begin
if(rst=’1’) then
q<=’0’; qb<=’1’; else
if(clk=’1’) then
q<=d;
qb<=not d; end if; end if; end process; end behv;
源程序之二:基于Verilog HDL的latch_1.v module latch_1(d, enable, rst, q,qn); input d, enable, rst; output q,qn; reg q,qn;
always @(enable or rst or d ) begin if (rst) q = 0; // asynchronous reset q = 1; else
if(enable) q = d;
q = ~d;
end endmodule 5)、锁存器的VHDL结构描述,以图5-2为例。 源程序:andd2.vhd library ieee;
use ieee.std_logic_1164.all; entity andd2 is
port ( a,b : in std_logic; y : out std_logic); end andd2;
architecture behv of andd2 is begin
y<=a and b; end behv;
源程序:latch.vhd library ieee;
use ieee.std_logic_1164.all;
entity latch is
port ( d, clk : in std_logic;
VHDL&Verilog HDL
35
(