VHDL代码 请人补完全!

来源:百度知道 编辑:UC知道 时间:2024/06/27 13:43:49
4.1 VHDL 实体设计
端口部分共设计10 个输入端口, 8 个输出端口。输入端口包括1 个脉冲端口、1 个主持人控制端口和8 人抢答端口。输出端口包括1 个蜂鸣器输出端口和8 字管输出管端口。8 路抢答器实体部分的VHDL 代码:
ENTITY barenqiangda IS
PORT(s: IN STD_LOGIC_VECTOR(7 downto 0); [8 人抢答输入端口定义]
reset,clk: IN STD_LOGIC; [主持人复位和脉冲端口定义]
a: OUT STD_LOGIC_VECTOR(0 downto 6); [8 字管输出端口定义]
bell: OUT STD_LOGIC); [蜂鸣器输出端口定义]
END barenqiangda;
4.2 VHDL 构造体设计
8 路抢答器实体部分以并行处理语句———进程( PROCESS) 语句为基本语句, 该程序以复位、脉冲和8 人抢答答信号为敏感信号, 当敏感信号发生变化时, 进程被激活, 顺序执行内部语句。
构造体部分VHDL 代码:
ARCHITECTURE a OF barenqiangda IS
SIGNAL g: STD_LOGIC_VECTOR(7 downto 0); [信号定义]
SIGNAL b: STD_LOGIC;
BEGIN
PROCESS (s,reset,clk) [并行语句, 三个敏感信号]
BEGIN
IF(reset=' 1' ) THEN [判断主持人复位键是否按下, 若按下, 则清零]
h<=' 0' ;
g<="00000000";
ELSIF(clk' EVENT AND clk=' 1' ) THEN
IF(s(7)=' 1' OR g(0)=' 1' ) AND NOT(g(1)=' 1' OR g(2)=' 1' OR g(3)=' 1' OR g(4)=' 1&

呵呵,代码写的有点麻烦,理解起来。
IF(s(0)=' 1' OR g(0)=' 1' ) AND NOT(g(1)=' 1' OR g(2)=' 1' OR g(3)=' 1' OR g(4)=' 1' OR g(5)=' 1' OR g(6)='1'OR g(7)=' 1' ) [判断按键1 是否按下]
IF(s(1)=' 1' OR g(1)=' 1' ) AND NOT(g(0)=' 1' OR g(2)=' 1' OR g(3)=' 1' OR g(4)=' 1' OR g(5)=' 1' OR g(6)='1'OR g(7)=' 1' ) [判断按键2是否按下]

这段代码是这样的:
s是输入端口,8个人的抢答信号。从0~7分别是8个人的信号。
g是抢答器的现行状态,从0~7是第1到第8个人的。

此段语句的意思是:如果第一个人抢答(s(0)信号=‘1’)或者上次抢答就是第一个人(g(0)=1,上次抢答信号未清除,保留了第一个人抢答的记录),并且其余的人都未抢答(g(1)~g(7)都是‘0’,就是AND NOT后的一大段),那么认为是第一个人抢答,并保留g(0)=1的状态。

g(0)<=1 "<="符号是赋值。

数码管的问题:
数码管全亮是数字“8”,总共7根横杠。
从最上面的横杠向左逆时针数起,分别是第1、2、3、4、5、6位,"8"字中间的横杠是第7位。
那么,a<="0000110"(数码管的显示位),显示的就是数字1。
可以试着数一下:从最上面‘0’(不亮),左边的两竖(‘0’,‘0’),
下面的横‘0’,右边的两竖‘1’,‘1’(这两竖是亮的),中间的横‘0’(不亮)。那么亮的就是右边的两个竖线,即数字‘