三人表决器1.任务:使用verilog语言设计一个三人表决器,其功能是:有3个输入,当有输入时,产生输出的值会显示在数码管中,例如,有1人表示同意时,数码管显示1,2人同意时,数码管显示2。2.设计流程图:3.源程序设计:modulesanrenbiaojue(key1,key2,key3,led1,led2,led3,SEG_DATE,SEG_EN);inputkey1;inputkey2;inputkey3;outputled1;outputled2;outputled3;output[3:0]SEG_EN;outputreg[6:0]SEG_DATE;//装载3个输入的值parameterSEG_NUMO=7'h3f,SEG_NUM1=7'h06,//数码管显示1SEG_NUM2=7'h5b,//数码管显示2SEG_NUM3=7'h4f;//数码管显示3always@(*)begincase({key1,key2,key3})//检测按键KEY3,KEY2,KEY1是否按下,按下为1,悬空为03'b000:SEG_DATE=SEG_NUMO;//当有0个按键按下时,数码管就显示数字03'b001:SEG_DATE=SEG_NUM1;//当有1个按键按下时,数码管就显示数字13'b010:SEG_DATE=SEG_NUM1;3'b011:SEG_DATE=SEG_NUM2;3'b100:SEG_DATE=SEG_NUM1;3'b101:SEG_DATE=SEG_NUM2;3'b110:SEG_DATE=SEG_NUM2;3'b111:SEG_DATE=SEG_NUM3;default:SEG_DATE=SEG_NUMO;endcaseendassignled1=!key1;//当按键1按下其对应的D1将会亮起assignled2=!key2;//当按键2按下其对应的D2将会亮起assignled3=!key3;//当按键3按下其对应的D3将会亮起assignSEG_EN=4'b0111;//SEG1-SEG3熄灭,SEG4点亮endmodule4.TestBench代码:`timescale1ps/1psmodulesanrenbiaojue_vlg_tstfirst();//constants//generalpurposeregistersregeachvec;//testvectorinputregistersregkey1;regkey2;regkey3;//wireswire[6:0]SEG_DATE;wire[3:0]SEG_EN;wireled1;wireled2;wireled3;//assignstatements(ifany)sanrenbiaojuei1(//portmap-connectionbetweenmasterportsandsignals/registers.SEG_DATE(SEG_DATE),.SEG_EN(SEG_EN),.key1(key1),.key2(key2),.key3(key3),.led1(led1),.led2(led2),.led3(led3));initialbeginkey1=0;key2=0;key3=0;#200;key1=0;key2=0;key3=1;#200;key1=0;key2=1;key3=0;#200;key1=1;key2=0;key3=0;#200;key1=1;key2=0;key3=1;#200;key1=0;key2=1;key3=1;#200;key1=1;key2=1;key3=0;#200;key1=1;key2=1;key3=1;#200;$stop;endendmodule5.RTL结构图:6.时序仿真图:由图可以看出,当key1,key2,key3的值为001时,对应的LED3亮,此时数码管显示的值为1,程序中,SEG_DATA为数码管显示编码0000110(换算成十进制显示为6),当输入值为011,101,110时,数码管显示的值为2,SEG_DATA为数码管显示编码,1011011(换算成十进制显示为91),据此,可以得出三人表决器程序是正确的。