三人表决器的设计实现
1 三人表决器的真值表
2 三人表决器的代码
module three_votes(
a,
b,
c,
l
);
input a,b,c;
output l;
reg l;
always @(a,b,c)
begin
case({a,b,c})
3'b000:l=1'b0;
3'b001:l=1'b0;
3'b010:l=1'b0;
3'b011:l=1'b1;
3'b100:l=1'b0;
3'b101:l=1'b1;
3'b110:l=1'b1;
3'b111:l=1'b1;
default:l=1'bz;
endcase
end
endmodule
3 三人表决器的RTL级
4 用外设来实现三人表决器
我们需要使用的外设有LED灯、按键、数码管,然后要将其拼合在一起,就是一个实际应用的小工程。做项目的思路也是如此,当碰到一个大项目,我们要将这个大项目分成若干个小模块。在这里我们用按键作为输入进行人机交互实现投票功能,当按键按下其对应的LED灯将会点亮,表示该按键进行了投票。FPGA实现三人表决电路,数码管用来显示投票的总票数。下图是整个三人表决器的系统框图。
4.1 三人表决器源代码
module three_votes(
key1,
key2,
key3,
led1,
led2,
led3,
seg_en,
seg_data
);
input key1,key2,key3;
output led1,led2,led3;
output [5:0]seg_en;
output [6:0]seg_data;
parameter SEG_NUM0=7'h3f,
SEG_NUM1=7'h06,
SEG_NUM2=7'h5b,
SEG_NUM3=7'h4f;
assign seg_en=6'b11111_0;
reg [6:0]seg_data;
reg led1,led2,led3;
always @(key1,key2,key3)
begin
case({key1,key2,key3})
3'b000: begin //three led
{led1,led2,led3}=3'b000;
seg_data=SEG_NUM3;
end
3'b001: begin //two led
{led1,led2,led3}=3'b001;
seg_data=SEG_NUM2;
end
3'b010: begin //two led
{led1,led2,led3}=3'b010;
seg_data=SEG_NUM2;
end
3'b011: begin //one led
{led1,led2,led3}=3'b011;
seg_data=SEG_NUM1;
end
3'b100: begin //two led
{led1,led2,led3}=3'b100;
seg_data=SEG_NUM2;
end
3'b101: begin //one led
{led1,led2,led3}=3'b101;
seg_data=SEG_NUM1;
end
3'b110: begin //one led
{led1,led2,led3}=3'b110;
seg_data=SEG_NUM1;
end
3'b111: begin //zero led
{led1,led2,led3}=3'b111;
seg_data=SEG_NUM0;
end
default: begin //zero led
{led1,led2,led3}=3'b111;
seg_data=SEG_NUM0;
end
endcase
end
endmodule
5 总结
这个小的工程项目,只是让我们先对FPGA有个初步的了解,对系统先有个概念。下面的工程,会逐步深入。
|