名称:电话拨号显示器verilog代码ego1开发板vivado软件(代码在文末下载)
软件:VIVADO
语言:Verilog
代码功能:
电话拨号显示:
1、具体0~9的数字按键。
2、有开始、拨出、接通、删除按键。
3、按下“开始”按键后,可以按数字键进行拨号,每按一次数字,整体号码左移一位,输入错误时可以删除。
4、输入完号码后,按下“拨出键”拨出,此时号码会在数码管上滚动显示。
5、按下“接通”键后,开始通话计时,数码管显示时间分、秒。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在ego1开发板验证,开发板如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. 管脚分配
6. Testbench
7. 仿真图
整体仿真图
电话输入模块
控制模块
显示模块
部分代码展示:
//控制模块 module?tele_ctrl( input?clk,//50M input?reset,//复位 input?key_start,//开始 input?key_call,//拨出 input?key_connect,//接通 input?[43:0]?telephone_num,//输入号码 output?[31:0]?display_number,//显示值 output?[2:0]?current_state//当前状态 ); parameter?second_time_cnt=32'd100_000_000; //定义状态 parameter?s_idle=3'd0; parameter?s_num=3'd1; parameter?s_shift=3'd2; parameter?s_time=3'd3; reg?[2:0]?state=3'd0; assign?current_state=state; //状态机控制 always@(posedge?clk?or?negedge?reset) if(reset==0) state<=s_idle; else case(state) s_idle: if(key_start)//开始 state<=s_num; s_num: if(key_call)//拨出 state<=s_shift; s_shift://移位 if(key_connect) state<=s_time; s_time://计时 state<=s_time; default:; endcase reg?[31:0]?second_cnt; reg??second_en; always@(posedge?clk?or?negedge?reset) if(reset==0)begin second_cnt<=32'h0; second_en<=0; end else?if(state==s_time?||?state==s_shift)//计时 if(second_cnt>=second_time_cnt)begin//计时1秒 second_cnt<=32'h0; second_en<=1; end else?begin second_cnt<=second_cnt+32'h1;//计数 second_en<=0; end else?begin second_cnt<=32'h0; second_en<=0; end reg?[7:0]?second; reg?[7:0]?minute; always@(posedge?clk?or?negedge?reset) if(reset==0)begin second<=8'h0; minute<=8'h0; end else?if(state==s_time)//计时状态 if(second>=8'd59)begin//计时1秒 second<=8'h0; minute<=minute+8'h1;//分计时 end else?begin second<=second+8'h1;//秒计时 minute<=minute; end else?begin second<=8'h0; minute<=8'h0; end wire?[3:0]?second_ten; wire?[3:0]?second_one; wire?[3:0]?minute_ten; wire?[3:0]?minute_one; assign?second_ten=second/10; assign?second_one=second%10; assign?minute_ten=minute/10; assign?minute_one=minute%10; reg?[43:0]?number; always@(posedge?clk?or?negedge?reset) if(reset==0) number<=44'h0; else?if(state==s_num)//拨号 number<=telephone_num; else?if(state==s_shift?&&?second_en)//1秒移位1次 number<={number[39:0],number[43:40]}; else?if(state==s_time)//显示时间 number<={32'd0,minute_ten,minute_one,second_ten,second_one}; assign?display_number=number[31:0]?; endmodule
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=310
阅读全文