PLD表决器设计:5人表决器的VHDL设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
architecture aa of bj is begin PROCESS (a) variable x:std_logic_vector(2 downto 0); --定义了中间变量 定义了中间变量 BEGIN x:="000"; --参数初始化 参数初始化 for i in 0 to 6 loop if(a(i)='1') then x:=x+1; else x:=x+0; end if; end loop; if (x=“011”) then x:=x+1; --如果正好 人表决同意,应当是有效的! 如果正好3人表决同意 如果正好 人同意 --?如果正好是 人表决同意,应当是有效的! 人同意? y<=x(2); ?如果正好是3人同意? END PROCESS; else x:=x+0; end end if; aa; y<=x(2); --如果多于 人表决同意,x(2)应当是’1’! 如果多于3人表决同意 应当是’ ! 如果多于 人表决同意, 应当是 END PROCESS; end aa;
QALL<=SUM; IF (SUM >= 3) THEN QQ<='1'; ELSE QQ<=Fra Baidu bibliotek0'; END IF; END IF; END IF; END PROCESS; END FUNG;
方案三:设计一个五人表决器。要求:对
某一个问题有三人或三人以上表示同意时, 此程序编译没通过) 表决器发出同意的信号。 (此程序编译没通过)
(此程序编译通过) 此程序编译通过)
ARCHITECTURE behave OF vote7 IS BEGIN stop<=not pass; --行为级的描述 行为级的描述 PROCESS (men) variable temp:std_logic_vector(2 downto 0); BEGIN temp:="000";
管脚说明: 管脚说明:
FF:一维数组FF用来表示五位表决者; :一维数组 用来表示五位表决者 用来表示五位表决者; QQ:表决最终是否通过(‘1’为“通过”,‘0’为 :表决最终是否通过( 为 通过” 为 “未通过”); 未通过” QALL:表决通过的人数; :表决通过的人数; SHIJIAN:用来显示倒计时; :用来显示倒计时; FUWEI:主持人复位键,用来系统复位; :主持人复位键,用来系统复位; KAISHI:主持人控制键,用来启动表决; :主持人控制键,用来启动表决; CLK:系统时钟。 :系统时钟。
"10" when "11100", "10" when "11010", "10" when "10110", "10" when "01110", "10" when "11001", "10" when "10011", "10" when "01111", "10" when "10111", "10" when "11011", "10" when "11101", "10" when "11110", "10" when "11111", "01" when others; END concurrent;
方案六:设计一个五人表决器。要求:对某 设计一个五人表决器。要求:
一个问题有三人或三人以上表示同意时,表决 一个问题有三人或三人以上表示同意时, 三人或三人以上表示同意时 此程序编译通过) (此程序编译通过) 器发出同意的信号。 器发出同意的信号。
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity bj is port(a:in std_logic_vector(4 downto 0); y:out std_logic); end bj;
方案四:设计一个五人表决器。要求:对 设计一个五人表决器。要求:
某一个问题有三人或三人以上表示同意时, 某一个问题有三人或三人以上表示同意时, 三人或三人以上表示同意时 此程序编译通过) (此程序编译通过) 表决器发出同意的信号。 表决器发出同意的信号。
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; Entity bj is port(a:in std_logic_vector(4 downto 0); y:out std_logic); End bj;
源程序: 源程序:
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_ARITH.all; use ieee.std_logic_UNSIGNED.all;
ENTITY BIAOJUE IS PORT( FF:IN STD_LOGIC_VECTOR(1 TO 5); FUWEI,KAISHI,CLK:IN STD_LOGIC; SHIJIAN:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); QQ:OUT BIT; QALL:OUT STD_LOGIC_VECTOR(3 DOWNTO 1) ); END BIAOJUE;
architecture aa of bj is begin PROCESS (a) variable x:std_logic_vector(2 downto 0); --定义了中间变量 定义了中间变量 BEGIN x:="000"; --参数初始化 参数初始化 for i in 0 to 4 loop if(a(i)='1') then x:=x+1; else x:=x+0; end if; end loop; if (x>3) then y<=‘1’; --如果多于 人表决同意,有效! 如果多于3人表决同意 如果多于 人表决同意,有效!
else y<=’0’; end if;
END PROCESS; end aa;
方案七:设计一个 人表决器。要求: 设计一个7人表决器 要求: 人表决器。
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY vote7 IS PORT ( men : IN std_logic_vector(6 downto 0); pass,stop: buffer std_logic); END vote7;
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; Entity BJQ is port(sw:in std_logic_vector(4 downto 0); L:out std_logic); End BJQ;
设计思路: 设计思路:
五人多数表决,只要在规定时间内,赞成人数大 五人多数表决,只要在规定时间内, 于或等于三,则表决通过。 于或等于三,则表决通过。 因此,只需将每位表决人的结果相加, 因此,只需将每位表决人的结果相加,判断结果 值。设五个开关作为表决器的五个输入变量,输入变 设五个开关作为表决器的五个输入变量, 量为逻辑“ 时 表示表决者“赞成” 量为逻辑“1”时,表示表决者“赞成”;输入变量为 “0”时,表示表决者“不赞成”。输出逻辑“1”时, 时 表示表决者“不赞成” 输出逻辑“ 时 表示表决“通过” 输出逻辑“ 时 表示表决“ 表示表决“通过”;输出逻辑“0”时,表示表决“不 通过” 当表决器的五个输入变量中有 个以上 个以上( 通过”。当表决器的五个输入变量中有3个以上(含3 个)为“1”时。则表决器输出为“1”;否则为“0”。 时 则表决器输出为“ ;否则为“ 。
architecture aa of BJQ is variable x:std_logic_vector(2 downto 0);
--定义了中间变量 定义了中间变量
begin signal x:std_logic; --不能这样定义为信号? 不能这样定义为信号? 不能这样定义为信号 process(a) x:=sw(0)+sw(1)+sw(2)+sw(3)+sw(4); if x>2 then L<=’1’; else L<=’0’; end if; end process; end aa;
ARCHITECTURE FUNG OF BIAOJUE IS BEGIN PROCESS(FF,CLK,KAISHI,FUWEI) VARIABLE SUO:BOOLEAN; VARIABLE SUM:STD_LOGIC_VECTOR(1 TO 3); BEGIN IF (FUWEI='0') THEN QQ<='0'; SHIJIAN<="1010"; SUO:=FALSE; SUM:="000"; QALL<="000";
方案一:5人表决器的VHDL设计
建立名称为fivevoter.vhd的文件 器件选择EPM7128SLC84-15
延时分析
完成: 波形仿真
引脚分布 编程下载 硬件验证(在实验箱上连线验证)
Library IEEE; --利用 利用select语句 利用 语句 USE IEEE.STD_LOGIC_1164.ALL; ENTITY fivevoter IS --参照书 参照书267页的的程序 参照书 页的的程序 PORT(sw: std_logic_vector(5 downto 1); L:OUT std_logic_vector(2 downto 1)); --L2=yellow,L1=red END fivevoter; ARCHITECTURE concurrent OF fivevoter IS BEGIN with sw select L<="10" when "00111", "10" when "01011", "10" when "01101", "10" when "01110",
for i in 0 to 6 loop if(men(i)='1') then temp:=temp+1; else temp:=temp+0; end if; end loop; 个人表决该位为1 pass<=temp(2); --4个人表决该位为 !? 个人表决该位为 END PROCESS; END behave; --结束行为级的描述 结束行为级的描述
ELSIF (CLK'EVENT AND CLK='1') THEN IF (KAISHI='1') THEN IF (NOT SUO) THEN IF SHIJIAN="0000" THEN SUO:=TRUE; FOR N IN 1 TO 5 LOOP
的
SUM:=FF(N)+SUM;
END LOOP; ELSE SHIJIAN<=SHIJIAN-1; END IF; END IF; --倒计时 倒计时
方案二:设计一个五人表决器。 设计一个五人表决器。
1)五人多数表决逻辑:多数通过; )五人多数表决逻辑:多数通过;
(此程序编译通过) 此程序编译通过)
2)在主持人控制下,10秒内表决有效; )在主持人控制下, 秒内表决有效 秒内表决有效; 3)采用数码管显示表决 秒倒计时;--?不完善? )采用数码管显示表决10秒倒计时 表决 秒倒计时; ?不完善? 4)表决结束后用发光二极管及数码管显示表决结果, )表决结束后用发光二极管及数码管显示表决结果, 数码管显示结果形式:通过,不通过; 数码管显示结果形式:通过,不通过; 5)设主持人控制键,复位键: )设主持人控制键,复位键: 控制键:启动表决; 控制键:启动表决; 复位键:系统复位。 复位键:系统复位。 6)自制实验方案,完成设计任务。 )自制实验方案,完成设计任务。