资源描述:
《FPGA数码管动态显示Verilog.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、FPGA数码管动态显示(BCD)//smg_top.Vmodulesmg_top(clk,rst_n,sm_cs,sm_db,num,//用于仿真dis_data_in//用于仿真);inputclk;//50MHzinputrst_n;//复位信号,低有效input[9:0]dis_data_in;//用于仿真//reg[9:0]dis_data_in;//显示数据wire[11:0]dis_data_out;//显示数据output[2:0]sm_cs;//数码管片选信号,低有效output[3:0]num;//用于仿真output[6:0]sm_db;//7段数码管(不包括小数点)sm
2、g_displaysmg_display(.clk(clk),.rst_n(rst_n),.dis_data(dis_data_out),.sm_cs(sm_cs),.num(num),.sm_db(sm_db));bin_BCDbin_BCD(.clk(clk),.rst_n(rst_n),.bin(dis_data_in),.BCD_out(dis_data_out));endmodule7//bin_BCD.V`timescale1ns/1psmodulebin_BCD(clk,bin,rst_n,BCD_out);input[9:0]bin;inputclk,rst_n;output
3、[11:0]BCD_out;//十进制BCD码reg[3:0]count;reg[11:0]BCD_out;reg[21:0]shift_reg=22'd0;//////////////////////计数部分////////////////////////always@(posedgeclkornegedgerst_n)beginif(!rst_n)count<=4'd0;elseif(count==11)count<=4'd0;elsecount<=count+1'b1;end//////////////////////二进制转换为十进制BCD码/////////////////alwa
4、ys@(posedgeclkornegedgerst_n)beginif(!rst_n)shift_reg=22'd0;elseif(count==0)shift_reg={12'd0,bin};elseif(count<=10)//实现8次移位操作beginif(shift_reg[13:10]>=5)//判断个位是否>5,如果是则+3beginif(shift_reg[17:14]>=5)//判断十位是否>5,如果是则+3beginshift_reg[17:14]=shift_reg[17:14]+2'b11;shift_reg[13:10]=shift_reg[13:10]+2'b11
5、;shift_reg=shift_reg<<1'd1;//对个位和十位操作结束后,整体左移end7elsebeginshift_reg[17:14]=shift_reg[17:14];shift_reg[13:10]=shift_reg[13:10]+2'b11;shift_reg=shift_reg<<1'd1;endendelsebeginif(shift_reg[17:14]>=5)beginshift_reg[17:14]=shift_reg[17:14]+2'b11;shift_reg[13:10]=shift_reg[13:10];shift_reg=shift_reg<<1'd
6、1;endelsebeginshift_reg[17:14]=shift_reg[17:14];shift_reg[13:10]=shift_reg[13:10];shift_reg=shift_reg<<1'd1;endendendend/////////////////输出赋值//////////////////////////always@(posedgeclkornegedgerst_n)beginif(!rst_n)BCD_out=12'd0;elseif(count==11)//此时8次移位全部完成,将对应的值分别赋给个,十,百位BCD_out<={shift_reg[21:18
7、],shift_reg[17:14],shift_reg[13:10]};endendmodule7//smg_display.V`timescale1ns/1psmodulesmg_display(clk,rst_n,dis_data,//需要显示的数字sm_cs,sm_db,num//用于仿真,选择需要显示的数字);inputclk;//50MHzinputrst_n;//复位信号,低有效input[11