EDA 第5章 常用VHDL设计实例


14
WHEN S1=> z<='0'; IF xi ='1' THEN next_state<=S2; ELSE next_state<=S0; END IF; WHEN S2=> z<='0'; IF xi='1' THEN next_state<=S3; ELSE next_state<=S0; END IF; WHEN S3=> z<='0'; IF xi='1' THEN next_state<=S3; ELSE next_state<=S4; END IF; WHEN S4=> z<='0'; IF xi='1' THEN next_state<=S1; ELSE next_state<=S5; END IF; WHEN S5=> z<='0'; IF xi='1' THEN next_state<=S6; ELSE next_state<=S0; END IF; WHEN S6=> z<='0'; IF xi='1' THEN next_state<=S2; ELSE next_state<=S7; END IF; WHEN S7=> z<='1'; IF xi='1' THEN next_state<=S1; 2012-7-24ELSE next_state<=S0; END IF;
第5章 常用VHDL设计实例
内容提要:常用数字电路的VHDL描述
常用组合逻辑电路 时序逻辑电路 状态机 存储器 特色实用电路 教学方法:本章以自学为主,重点仅讲 授状态机的设计方法
2012-7-24 1
5.1 组合电路逻辑设计
5.1.1 门电路的设计 (门电路、缓冲器等) 5.1.2 常用组合电路的设计 (译码器、编码器、数据选择器、加 法器、补码器等)
18
IF input1='1' THEN state <=s2; ELSE state<=s1; END IF; WHEN s2=> IF input1='1'THEN state<=s3; ELSE state<=s2; END IF; WHEN s3=> state<=s0; END CASE; END IF; END PROCESS; PROCESS (state, input1) BEGIN CASE state IS WHEN s0=> IF input1='1'THEN output1<=0; ELSE output1<=4; 2012-7-24 END IF;
heat=1 tem p-low=1 tem p-low=1
heat=0 tem p-high=1

2012-7-24
图5-3 空调控制器状态转换图
9
控制器的VHDL描述
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY air_cont IS PORT( clk: IN STD_LOGIC; temp_high: IN STD_LOGIC; temp_low: IN STD_LOGIC; heat: OUT STD_LOGIC; cool: OUT STD_LOGIC); END air_cont; ARCHITECTURE arc1 OF air_cont IS TYPE state_type IS(just_right, too_cold, too_hot); --状态类型,枚举三种状态 SIGNAL stvar: state_type; --状态变量 BEGIN PROCESS BEGIN 2012-7-24
2012-7-24 4
状态机(State Machine)是一类很重要的时 序电路,是很多数字电路的核心部件,是大型电 子设计的基础。状态机相当于一个控制器,它将 一项功能的完成分解为若干步,每一步对应于二 进制的一个状态,通过预先设计的顺序在各状态 之间进行转换,状态转换的过程就是实现逻辑功 能的过程。
2012-7-24 12

2012-7-24
图5-3 序列检测器的状态图
13
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY jcq IS PORT (clk, xi: IN STD_LOGIC; z: OUT STD_LOGIC); END jcq; ARCHITECTURE archjcq OF jcq IS TYPE state_type IS (S0, S1, S2, S3, S4, S5, S6, S7); SIGNAL present_state, next_state: state_type ; BEGIN state_comb: PROCESS (present_state, xi) BEGIN CASE present_state IS WHEN S0=> z<='0'; IF xi='1' THEN next_state<=S1; ELSE next_state<=S0; END IF; 2012-7-24
2012-7-24 8
temp-high=0 temp-low=0
正 好 heat=0
temp-high=0 temp-low=0
cool =0
temp-high=0 temp-low=0
tem p-low=1 tem p-high=1
太 冷 cool=0
tem p-high=1
太 热 cool=1
米里型状态机应具有以下端口信号: 时钟输入端: clk; 输入变量: input1; 输出变量: output1; 状态复位端: reset; 下面给出的是米里型状态机的典型电路的VHDL描 述,对于更复杂的数字系统的程序设计,可查阅有 关资料,通过一定的练习逐步掌握。
2012-7-24
17
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY statmach4 IS PORT( clk, input1, reset : IN BIT; output1: OUT INTEGER RANGE 0 TO 4); END statmach4; ARCHITECTURE a OF statmach4 IS TYPE state_type IS (s0, s1, s2, s3); SIGNAL state: state_type; BEGIN PROCESS (clk) BEGIN IF reset='1'THEN state<=s0; ELSIF (clk'EVENT AND clk='1') THEN CASE state IS WHEN s0=> state<=s1; WHEN s1=> 2012-7-24
19
WHEN s1=> IF input1='1'THEN ELSE END IF; WHEN s2=> IF input1='1'THEN ELSE END IF; WHEN s3=> IF input1='1' THEN ELSE END IF; END CASE; END PROCESS; END a;
2012-7-24
2
5.2 时序电路逻辑设计
5.2.1 触发器设计 (D触发器 、RS触发器、主从JK触发器等) 5.2.2. 移位寄存器设计 (8位串行输入、串行输出移位寄存器 ; 可预加载循环移位寄存器 ; 5.2.3 计数器设计 (具有清零端的4位二进制计数器 、8位异 步复位的可预置加减计数器 ;4位移存器 型扭环计数器 ;顺序脉冲发生器
1. 空调控制器
设计要求: 两个输入temp_high和temp_low分别与温度传感 器相连,用于检测室内温度。如果温度适宜(如 18℃~25℃),则两个输入均为低;如果室内温度 超过上限(25℃),则输入temp_high为高;如果 室内温度低于下限(18℃),则输入temp_low为 高。设控制器的输出为“heat”和“cool”,当两 者之一为高时,空调器就制热或制冷。控制器状 态机的状态转换如图5-3所示。
2012-7-24 11
2. 序列检测器
用途:序列检测器在数字通信、雷达和遥控遥测等领 域中用于检测同步识别标志。 功能:检测一组或多组序列信号,本例要求检测器连 续收到一组串行码(1110010)后,输出检测标志为1;否 则,输出为0。 分析:该例要检测的序列码是7位,需要7个状态分别 记忆连续收到了1,11,111,1110,11100,111001, 1110010的7个状态,还要增加一个“未收到一个有效 位”的初始状态,共8个状态。这8个状态用S0~S7来 表示。状态转移图如图5-3所示。
5.5.1 计数器型防抖动电路设计
5.5.2 积分分频器电路设计
2012-7-24
10
控制器的VHDL描述 (接上页)
WAIT ON clk UNTIL RISING_EDGE(clk); --等待clk上升沿 IF temp_low='1' THEN stvar<=too_cold; --次态逻辑 ELSIF temp_high='1' THEN stvar<=too_hot; ELSE stvar<=just_right; END IF; CASE stvar IS --输出逻辑 WHEN just_right=>heat<='0';cool<='0';--正好,不制冷,也不制热 WHEN too_cold=>heat<='1';cool<='0'; --太冷,制热 WHEN too_hot=>heat<='0';cool<='1'; --太热,制冷 END CASE; END PROCESS; END arc1; 注意,状态变量的判断必须用CASE语句,不能用IF语句
合集下载

EDA课程设计---乐曲硬件演奏电路的VHDL设计

EDA课程设计---乐曲硬件演奏电路的VHDL设计

EDA课程设计题目:乐曲硬件演奏电路的VHDL设计一、 设计题目:乐曲硬件演奏电路的VHDL 设计二、 设计目标:1)能够播放“梁祝”乐曲。

2)能够通过LED 显示音阶。

3)具有“播放/停止”功能,并在此基础上实现“按键演奏”的电子琴功能。

三、 设计原理:1. 音乐基础知识一段简单乐谱由音调和节拍组成,音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。

音符的节拍我们可以举例来说明。

在一张乐谱中,我们经常会看到这样的表达式,如1=C 44、1=G 43……等等。

以43为例加以说明,它表示乐谱中以四分音符为节拍,每一小结有三拍。

比如:图1其中1 、2 为一拍,3、4、5为一拍,6为一拍共三拍。

1 、2的时长为四分音符的一半,即为八分音符长,3、4的时长为八分音符的一半,即为十六分音符长,5的时长为四分音符的一半,即为八分音符长,6的时长为四分音符长。

那么一拍到底该唱多长呢?一般说来,如果乐曲没有特殊说明,一拍的时长大约为400—500ms 。

我们以一拍的时长为400ms为例,则当以四分音符为节拍时,四分音符的时长就为400ms,八分音符的时长就为200ms,十六分音符的时长就为100ms。

2.原理图框图:图2.框图3.原理图说明音乐播放原理说明音符的频率由数控分频器模块Speakera产生。

ToneTaba模块从NoteTabs模块中输入的音符数据,将对应的分频预置数据传送给Speakera模块,并将音符数据送到LED模块显示音阶。

NoteTabs模块中包含有一个音符数据ROM,里面存有歌曲“梁祝”的全部音调,在此模块中设置了一个8位二进制计数器,作为音符数据ROM的地址发生器。

这个计数器的计数频率为4Hz,即每一个数值的停留时间为0.25秒。

例如:“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒钟时间,所对应的“3”音符分频预置数为1036,在Speakera的输入端停留了1秒。

EDA课程设计报告(交通信号控制器的VHDL的设计)

EDA课程设计报告(交通信号控制器的VHDL的设计)

交通信号控制器的VHDL的设计一、设计任务模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,设计一个交通信号灯控制器。

能达到的要求:(1)交通灯从绿变红时,有4秒黄灯亮的间隔时间;(2)交通灯红变绿是直接进行的,没有间隔时间;(3)主干道上的绿灯时间为40秒,支干道的绿灯时间为20秒;(4)在任意时间,显示每个状态到该状态结束所需的时间。

支干道主干道图1 路口交通管理示意图二、设计原理1、设计目的:学习DEA开发软件和QuartusII的使用方法,熟悉可编程逻辑器件的使用。

通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制2、设计说明(1)第一模块:clk时钟秒脉冲发生电路在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。

因此为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作。

模块说明:系统输入信号:Clk: 由外接信号发生器提供256的时钟信号;系统输出信号: full:产生每秒一个脉冲的信号;(2)第二模块:计数秒数选择电路计数电路最主要的功能就是记数负责显示倒数的计数值,对下一个模块提供状态转换信号。

模块说明:系统输入:full: 接收由clk电路的提供的1hz的时钟脉冲信号;系统输出信号:tm:产生显示电路状态转换信号tl:倒计数值秒数个位变化控制信号th:倒计数值秒数十位变化控制信号(3)第三模块:红绿灯状态转换电路本电路负责红绿灯的转换。

模块说明:系统输入信号:full: 接收由clk电路的提供的1hz的时钟脉冲信号;tm: 接收计数秒数选择电路状态转换信号;系统输出信号:b_out: 负责红绿灯的状态显示。

(4)第四模块:时间显示电路本电路负责红绿灯的计数时间的显示。

模块说明:系统输入信号:tl:倒计数值秒数个位变化控制信号;th:倒计数值秒数十位变化控制信号;系统输出信号:led7s1: 负责红绿灯的显示秒数个位。

第五章_VHDL设计进阶 3月28号

第五章_VHDL设计进阶 3月28号
进程中的信号与变量赋值语句
D1
D
Q
A
D
Q
B
D
Q
Q1
D1 CLK
D
Q
Q1
CLK
图5-1 例5-3的RTL电路
图5-2 例5-4的RTL电路
综合后可以找到与信号对应的硬件结构,如:传输导线/ 端口/触发器等。
返回
5.1.4 进程中的信号与变量赋值语句
【例5-5】 SIGNAL in1,in2,e1, ... : STD_LOGIC ; ... PROCESS(in1,in2, . . .) VARIABLE c1,. . . : STD_LOGIC_VECTOR(3 DOWNTO 0) ; BEGIN IF in1 = '1' THEN ... –- 第 1 行 e1 <= "1010" ; –- 第 2 行 ... IF in2 = '0' THEN . . . –- 第 15+n 行 ... c1 := "0011" ; –- 第 30+m 行 ... END IF; END PROCESS;
例5-6的RTL电路
例5-7的RTL电路
图5-3 例5-6的错误的工作时序
图5-4 例5-7的正确工作时序
5.2 VHDL设计实例及其语法内涵
5.2.1 带有同步并行置数功能的8位移位寄存器设计 【例5-8】
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SHFT IS -- 8位右移寄存器 PORT ( CLK,LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); QB : OUT STD_LOGIC ); END SHFT; ARCHITECTURE behav OF SHFT IS SIGNAL REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN PROCESS (CLK, LOAD) BEGIN IF CLK'EVENT AND CLK = '1' THEN IF LOAD = '1' THEN -- 装载新数据 REG8 <= DIN; ELSE REG8(6 DOWNTO 0) <= REG8(7 DOWNTO 1); END IF; END IF; END PROCESS; QB <= REG8(0); DOUT <= REG8; -- 输出最低位 END behav;

VHDL语言编写经典常用实例

VHDL语言编写经典常用实例

--------------------------------------------------------------------------------------- --LED灯花样闪烁程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity led_change isport(clk:in std_logic;led:out std_logic_vector(7 downto 0));end led_change;architecture fun of led_change issignal cnt: std_logic_vector(31 downto 0);signal flip_led: std_logic_vector(4 downto 0);beginprocess(clk)beginif(clk'event and clk='1')thencnt<=cnt+1;if(cnt=25000000)thenflip_led<=flip_led+1;cnt<=(others=>'0');end if;end if;case flip_led iswhen "00000"=>led<="11111111";when "00001"=>led<="00000000";when "00010"=>led<="11111111";when "00011"=>led<="00000000";when "00100"=>led<="10000000";when "00101"=>led<="11000000";when "00110"=>led<="11100000";when "00111"=>led<="11110000";when "01000"=>led<="11111000";when "01001"=>led<="11111100";when "01010"=>led<="11111110";when "01011"=>led<="11111111";when "01100"=>led<="00000001";when "01101"=>led<="00000011";when "01110"=>led<="00000111";when "01111"=>led<="00001111";when "10000"=>led<="00011111";when "10001"=>led<="00111111";when "10010"=>led<="01111111";when "10011"=>led<="11111111";when "10100"=>led<="00000000";when others =>led<="ZZZZZZZZ";end case;if(flip_led>"10100")thenflip_led<="00000";end if;end process;end fun;--拨码开关控制LED程序library ieee;use ieee.std_logic_1164.all;entity switch_led isport(key : in std_logic_vector(1 downto 0);led : out std_logic_vector(7 downto 0)); --八个led灯end switch_led;architecture fun of switch_led isbeginprocess(key)begincase key iswhen "00" => led <="00000000"; -- // "0"when "01" => led <="00001111"; -- // "1"when "10" => led <="11110000"; -- // "2"when "11" => led <="11111111"; -- // "3"when others => led <="ZZZZZZZZ";end case;end process;end;--按键消抖控制LED程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity stable_key isport(clk :in std_logic;key_in:in std_logic;key_out: out std_logic);end ;architecture fun of stable_key issignal cnt : integer range 0 to 1999999;signal key ,key_d : std_logic;beginprocess(clk)beginif clk'event and clk='1' thenif key /= key_in then -----键值变化开始计时10ms key_d <= key_in;cnt <= 0;elsif cnt=1999999 then ---10mskey_out <= not key_d;cnt <= 0;elsecnt <= cnt + 1 ;end if ;key<= key_in;end if ;end process;end ;--蜂鸣器电子琴程序library ieee;use ieee.std_logic_1164.all;entity digital_piano isport(key : in std_logic_vector(7 downto 0); --定义8个按键key1~key8clk : in std_logic; --时钟输入端50Mhzbeep: out std_logic); --蜂鸣器输出端end digital_piano;architecture fun of digital_piano issignal freq : integer range 0 to 50000;signal beep_reg: std_logic;beginbeep_process: process(clk,freq) --分频进程--本工程内核心进程,计数器的大小由counter决定variable cnt : integer range 0 to 50000;beginif clk'event and clk='1' thenif cnt < freq thencnt := cnt + 1;elsecnt := 0 ;beep_reg <=not beep_reg;end if;end if;end process beep_process;freq_process: process(key)begincase key iswhen "11111110" => freq <= 47774; ---------------------------------counter 计算公式:中音do的频率为523.3hz,为了在上个beep_pro进程中得到523的频率counter= 50*1000000/(523*2)when "11111101" => freq <= 42568; --中音re的频率为587.3hzwhen "11111011" => freq <= 37919; --中音mi的频率为659.3hzwhen "11110111" => freq <= 35791; --中音fa的频率为698.5hzwhen "11101111" => freq <= 31888; --中音sol的频率为784hzwhen "11011111" => freq <= 28409; --中音la的频率为880hzwhen "10111111" => freq <= 25309; --中音si的频率为987.8hzwhen "01111111" => freq <= 23912; --高音do的频率为1045.5hzwhen "01111101" => freq <= 21282; --高音re的频率为1174.7hzwhen "01111011" => freq <= 18961; --高音mi的频率为1318.5hzwhen "01110111" => freq <= 17897; --高音fa的频率为1396.9hzwhen "01101111" => freq <= 15944; --高音sol的频率为1568hzwhen "01011111" => freq <= 14205; --高音la的频率为1760hzwhen "00111111" => freq <= 12605; --高音si的频率为1975.5hzwhen others => freq <= 0;end case;end process freq_process;beep <= beep_reg;end;--数码管静态扫描library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity static_segled isport(clk : in std_logic;data:out std_logic_vector(7 downto 0);sel:out std_logic_vector(7 downto 0));end ;architecture fun of static_segled issignal num : std_logic_vector(3 downto 0);signal cnt : integer range 0 to 12499999 ;beginsel <= "00000000"; --静态显示,全部位选中process(clk)beginif clk'event and clk='1' then --每四秒改变一次数字if cnt=12499999 thencnt<=0;num<= num + 1;elsecnt<= cnt + 1 ;end if ;end if ;end process;process(num)begincase num iswhen "0000" => data<=x"c0"; -- // "0"when "0001" => data<=x"f9"; -- // "1"when "0010" => data<=x"a4"; -- // "2"when "0011" => data<=x"b0"; -- // "3"when "0100" => data<=x"99"; -- // "4"when "0101" => data<=x"92"; -- // "5"when "0110" => data<=x"82"; -- // "6"when "0111" => data<=x"f8"; -- // "7"when "1000" => data<=x"80"; -- // "8"when "1001" => data<=x"90"; -- // "9"when "1010" => data<=x"88"; -- // "a"when "1011" => data<=x"83"; -- // "b"when "1100" => data<=x"c6"; -- // "c"when "1101" => data<=x"a1"; -- // "d"when "1110" => data<=x"86"; -- // "e"when "1111" => data<=x"8e"; -- // "f"when others => data<=x"ff";end case;end process;end ;--数码管动态扫描library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity dynamic_segled isport(clk : in std_logic;data: out std_logic_vector(7 downto 0);sel:out std_logic_vector(7 downto 0) );end ;architecture fun of dynamic_segled issignal cnt: integer range 0 to 62449;signal flip_led: integer range 0 to 7;beginprocess(clk)beginif clk'event and clk='1' then ----- 动态扫描if cnt=62499 thencnt<=0;flip_led<=flip_led+1; -- 数据改变elsecnt<=cnt + 1;end if ;end if ;end process;process(flip_led)begincase flip_led is ---译码显示when 0 =>sel<="01111111";data<=x"c0";when 1 =>sel<="10111111";data<=x"f9";when 2 =>sel<="11011111";data<=x"a4";when 3 =>sel<="11101111";data<=x"b0";when 4 =>sel<="11110111";data<=x"99";when 5 =>sel<="11111011";data<=x"92";when 6 =>sel<="11111101";data<=x"82";when 7 =>sel<="11111110";data<=x"f8";when others=>sel<="11111111";data<=x"ff"; end case;end process;end ;。

VHDL FPGA 设计实例

VHDL FPGA 设计实例

2、SM图的导出
第一次掷骰子结束后, 1. 如果和为7或者11,则玩 家胜出。 2. 如果和为2,3或者12, 则玩家失败。 3. 和为其他值时,玩家在 第一次掷骰子时获得的和将 记做一个点,而且玩家必须 重新掷骰子。 第二次或者是后来的掷骰子 1.如果和等于记录的点值, 则玩家胜出。 2.如果和等于7,则玩家失 败。 3.否则,玩家必须再次掷骰 子直到胜出或者失败。
一条输入通路 一个状态
模块
链路 链路
一个SM图由多个SM模 块构成。 每个SM模块描述状态 机在一个状态时序里 的运行。
n个输出通路
DUT
数字系统VHDL设计
金明录 教授
1、状态机流程图
SM 模块的等价性
DUT
数字系统VHDL设计
金明录 教授
1、状态机流程图
条件框的排列顺序并不影响最后输出
A 010 A 010
Load
01
S1/ 0 Sh 0 K M 1 Ad
10
S2/Sh
11
S3/Done
1
K
0
A A ' BM ' K A ' BM AB ' K A ' B(M K ) AB ' K
B A ' B ' St A ' BM '(K ' K ) AB '(K ' K ) A ' B ' St A ' BM ' AB '
DUT
掷骰子
Y
和=7 或 11 N 将和存储于分 数寄存器中
N
和=2, 3 或 12
Y
掷骰子
Y

VHDL中的结构设计元件例化语句ppt课件

VHDL中的结构设计元件例化语句ppt课件
entity kor4 is port (a0,a1,a2,a3: in std_logic; y: out std_logic);end kor4; architecture dat of kor4 is begin y<= a0 or a1 or a2 or a3;end dat;
第十二页,编辑于星期五:十三点 二十一分。
第十三页,编辑于星期五:十三点 二十一分。
VHDL中的结构设计: generate 语句
也可以采用if-generate 语句的形式控制
电路的结构变化:
编号:if 关系式 generate
元件语句;
end generate; 在关系式为true时生成相关的元件;
第十四页,编辑于星期五:十三点 二十一分。
component kor4 port (a0,a1,a2,a3: in std_logic;y:
out std_logic);end component;
第九页,编辑于星期五:十三点 二十一分。
VHDL中的结构设计的实例
begin u1: kinv port map (n(3),n3_l); u2: kinv port map (n(2),n2_l); u3: kinv port map (n(1),n1_l); u4: kand2 port map (n3_l,n(0),n3l_n0);
第十九页,编辑于星期五:十三点 二十一分。
元件语句的简化使用—宏调用
元件的使用通常需要在结构体中进行说明,可能使 程序显得很长; 在很多综合工具中,允许将这种说明省略,只要进 行了包含元件的资源说明,就可以在结构体中直接 使用元件名称和相关的语句。
第二十页,编辑于星期五:十三点 二十一分。

第五章(VHDL主要描述语句)


(4) CASE语句执行中必须选中,且只能选中所列条件语
句中一条。这表明CASE语句中至少要包含一个条件语句。
CASE语句常用来描写总线行为、编码器和译码器的结构。CASE语句 与IF语句功能相似但CASE语句的可读性好,非常简洁。
CASE语句的误用:
SIGNAL value : INTEGER RANGE 0 TO 15 ; SIGNAL out_1 : BIT ; CASE value IS -- 缺少 WHEN条件语句 END CASE ; -- 分支条件不包含2到15 CASE value IS WHEN 0 => out_1 <= „1‟; WHEN 1 => out_1 <=„0‟; END CASE ; -- 在5到10上发生重叠 CASE value IS WHEN 0 TO 10 => out_1 <= „1‟; WHEN 5 TO 15 => out_1 <= „0‟; END CASE ;
IF语句不仅可用于选择器设计,还可用于比较 器,译码器等进行条件控制的逻辑设计。IF语句 中至少应有一个条件句,条件句必须由布尔表达 式构成,条件表达式中能使用关系运算操作及逻 辑运算操作的组合表达式。 IF语句颠倒条件判别次序,会引起在综合时逻辑 功能的变化,即IF语句判别条件不可颠倒。 IF语句中,先处理最起始的条件;如果不满足, 再处理下一个条件。一般把条件约束最多的作为 起始条件。
例
用IF语句描述一个二位等值比较器
ARCHITECTURE a OF compare IS LIBRARY IEEE; BEGIN PROCESS(a,b) USE IEEE.STD_LOGIC_1164.ALL; BEGIN ENTITY compare IS IF(a>b) THEN eater<='1';equal<='0';less<='0'; generic(n:natural:=2); ELSIF (a=b) THEN PORT( greater<='0';equal<='1';less<='0'; ELSE a,b:IN STD_LOGIC_VECTOR(n-1 DOWNTO 0); greater<='0';equal<='0';less<='1'; greater,equal,less:OUT STD_LOGIC); END IF; END PROCESS; END; END;

EDA技术-VHDL-四选一数据选择器程序设计与仿真实验

四选一数据选择器程序设计与仿真实验1 实验目的(1) 熟悉在QuartusⅡ软件平台上建立工作库文件和编辑设计文件的方法。

(2) 熟悉创建工程文件方法。

(3) 熟悉编译前设置和启动全程编译设置的方法。

(4) 熟悉波形编辑器的使用方法(5) 熟悉在QuartusⅡ软件平台上对设计进行仿真的操作全过程(6) 会用VHDL语言设计一个四选一数据选择器。

2 实验原理数据选择器又叫“多路开关”。

数据选择器在地址码(或叫选择控制)电位的控制下,从几个数据输入中选择一个并将其送到一个公共的输出端。

数据选择器的功能类似一个多掷开关,如图3.2.1所示,图中有四路数据a、b、c、d输入,通过选择控制信号 s1、s2(地址码)从四路数据中选中某一路数据送至输出端y。

逻辑功能如表3.2.1所示。

图3.2.1 四选1数据选择器示意图表3.2.1 四选一数据选择器逻辑功能表输入输出en S2 S1 a b c d y1 ×××××× 10 0 0 0×××0 1××× 10 0 1 ×0××0 ×1×× 10 1 0 ××0×0××1×10 1 1×××00×××11从表3.2.1中可知使能端en=1时,不论a~c输入状态如何,均无输出(y=1,因为所用器件的显示电路是共阳极),多路开关被禁止。

使能端en=0时,多路开关正常工作,根据地址码s2、s1的状态选择a~c输入信号中某一个通道的数据输送到输出端y。

3 实验内容(1) 建立一个四选一数据选择器的文件夹。

(2) 在定义好的VHDL模型中完成四选一数据选择器的描述,并创建工程。

《EDA技术及应用》朱正伟-三,四,五章部分课后题答案

第三章3-5设计一个4选1多路选择器,当选择输入信号分别取“00”、“01”、“10”和“11”时,输出信号分别与一路输入信号相连。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MAX4_1 ISPORT(A,B,C,D,S1,S2 : IN STD_LOGIC;Y : OUT STD_LOGIC);END ENTITY MAX4_1;ARCHITECTURE HF1 OF MAX4_1 ISSIGNAL SS : STD_LOGIC_VECTOR (0 TO 1);BEGINSS<=S2&S1;PROCESS(SS)BEGINCASE SS ISWHEN "00" => Y<=A;WHEN "01" => Y<=B;WHEN "10" => Y<=C;WHEN "11" => Y<=D;WHEN OTHERS => NULL;END CASE;END PROCESS;END HF1;3-6设计一个7人表决电路,参加表决者7人,同意为1,不同意为0,同意者过半则表决通过,绿指示灯亮;表决不通过则红指示灯亮。

设计思路:根据7人表决电路设计要求,7人中至少有4个通过才可以表决通过,故可以在程序中设置一个变量TEMP,使其在表决电路中遇1则加1,遇0则加0(设计中1表示通过,0表示不通过)。

当TEMP>=4时,表示表决通过,当TEMP<4时表决不通过。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY VOTE7 ISPORT (MEN:IN STD_LOGIC_VECTOR(6 DOWNTO 0);OUTPUT: OUT BIT);END VOTE7;ARCHITECTURE BEHA VE OF VOTE7 ISBEGINPROCESS(MEN)V ARIABLE TEMP: INTEGER RANGE 0 TO 7;BEGINTEMP:=0;FOR I IN 0 TO 6 LOOPIF(MEN(I)='1')THENTEMP:=TEMP+1;ELSETEMP:=TEMP;END IF;END LOOP;CASE TEMP ISWHEN 0 TO 3 =>OUTPUT<='0';WHEN 4 TO 7 =>OUTPUT<='1';END CASE ;END PROCESS;END BEHA VE;第四章4-6试写出4选1多路选择器VHDL描述。

EDA技术和VHDL设计第5章 VHDL基本语句

16
第5章 VHDL基本语句
【例5-4】
L1 -------------------------------------------------------------------------------------------------------------------------
L2 LIBRARY ieee;
L11 ARCHITECTURE bhv OF example3 IS
L12 BEGIN
L13
y1<=a1+1;
L14
y2<=a2+1;
L15
y3<=a3+1;
L16 END;
L17 -------------------------------------------------------------------------------------------------------------------------
L10 ARCHITECTURE construct OF example2 IS
L11 BEGIN
L12
z <= c OR y;
L13
y <= NOT x;
L14
x <= a AND b;
L15 END;
L16 -------------------------------------------------------------------------------------------------------------------------
8
第5章 VHDL基本语句
正如图5-2的硬件电路图所表明的,只有当信号a或者b的 值改变后才能执行赋值语句“x <= a AND b;”,即信号a或b的 值改变之前信号x的值不会发生变化。同样,信号x的值改变之 前,y的值也不会发生变化;信号c或y的值改变之前,z的值也 不会发生变化。由此可以看出,VHDL代码的执行是由事件控 制的,这就意味着并行VHDL语句可以按任意顺序书写,其设 计的功能不变。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档